43 char IC::TransitionMarkFromState(
IC::State state) {
 
   61 void IC::TraceIC(
const char* 
type,
 
   67                                 HEAP->undefined_value(),
 
   68                                 HEAP->undefined_value());
 
   70     StackFrameIterator it;
 
   71     while (it.frame()->fp() != this->
fp()) it.Advance();
 
   73     if (raw_frame->is_internal()) {
 
   74       Isolate* 
isolate = new_target->GetIsolate();
 
   76           Builtins::kFunctionApply);
 
   77       if (raw_frame->unchecked_code() == apply_builtin) {
 
   80         raw_frame = it.frame();
 
   88            TransitionMarkFromState(old_state),
 
   89            TransitionMarkFromState(new_state),
 
   90            new_can_grow ? 
".GROW" : 
"");
 
   96 #define TRACE_GENERIC_IC(type, reason)                          \ 
   98     if (FLAG_trace_ic) {                                        \ 
   99       PrintF("[%s patching generic stub in ", type);            \ 
  100       JavaScriptFrame::PrintTop(stdout, false, true);           \ 
  101       PrintF(" (%s)]\n", reason);                               \ 
  106 #define TRACE_GENERIC_IC(type, reason) 
  109 #define TRACE_IC(type, name, old_state, new_target)             \ 
  110   ASSERT((TraceIC(type, name, old_state, new_target), true)) 
  113   ASSERT(isolate == Isolate::Current());
 
  127     pc_address = 
reinterpret_cast<Address*
>(fp + kCallerPCOffset);
 
  131   StackFrameIterator it;
 
  132   for (
int i = 0; i < depth + 1; i++) it.Advance();
 
  134   ASSERT(fp == frame->fp() && pc_address == frame->pc_address());
 
  137   pc_address_ = pc_address;
 
  141 #ifdef ENABLE_DEBUGGER_SUPPORT 
  142 Address IC::OriginalCodeAddress()
 const {
 
  147   StackFrameIterator it;
 
  148   while (it.frame()->fp() != this->
fp()) it.Advance();
 
  154   Code* code = shared->code();
 
  155   ASSERT(Debug::HasDebugInfo(shared));
 
  156   Code* original_code = Debug::GetDebugInfo(shared)->original_code();
 
  157   ASSERT(original_code->IsCode());
 
  172 static bool HasNormalObjectsInPrototypeChain(
Isolate* isolate,
 
  173                                              LookupResult* lookup,
 
  175   Object* end = lookup->IsProperty()
 
  176       ? lookup->holder() : 
Object::cast(isolate->heap()->null_value());
 
  177   for (
Object* current = receiver;
 
  180     if (current->IsJSObject() &&
 
  182         !current->IsJSGlobalProxy() &&
 
  183         !current->IsJSGlobalObject()) {
 
  192 static bool TryRemoveInvalidPrototypeDependentStub(Code* target,
 
  198   if (cache_holder == 
OWN_MAP && !receiver->IsJSObject()) {
 
  203              receiver->GetPrototype()->IsNull()) {
 
  219     map->RemoveFromCodeCache(
String::cast(name), target, index);
 
  230   if (state != 
MONOMORPHIC || !name->IsString()) 
return state;
 
  231   if (receiver->IsUndefined() || receiver->IsNull()) 
return state;
 
  249       TryRemoveInvalidPrototypeDependentStub(target, receiver, name)) {
 
  259   if (receiver->IsJSBuiltinsObject()) {
 
  271        !it.
done(); it.next()) {
 
  272     RelocInfo* info = it.rinfo();
 
  273     if (info->pc() == addr) 
return info->rmode();
 
  300   bool was_uninitialized =
 
  302   bool is_uninitialized =
 
  304   return (was_uninitialized && !is_uninitialized) ?  1 :
 
  305          (!was_uninitialized && is_uninitialized) ? -1 : 0;
 
  310   if (FLAG_type_info_threshold == 0 && !FLAG_watch_ic_patching) {
 
  314       inner_pointer_to_code_cache()->GetCacheEntry(address)->code;
 
  317   if (FLAG_type_info_threshold > 0 &&
 
  320     int delta = ComputeTypeInfoCountDelta(old_target->
ic_state(),
 
  323     if (delta != 0 && host->type_feedback_info()->IsTypeFeedbackInfo()) {
 
  330   if (FLAG_watch_ic_patching) {
 
  332     Isolate::Current()->runtime_profiler()->NotifyICChanged();
 
  346   switch (target->
kind()) {
 
  349       return KeyedLoadIC::Clear(address, target);
 
  352       return KeyedStoreIC::Clear(address, target);
 
  371       Isolate::Current()->stub_cache()->FindCallInitialize(
 
  373           contextual ? RelocInfo::CODE_TARGET_CONTEXT : RelocInfo::CODE_TARGET,
 
  379 void KeyedLoadIC::Clear(
Address address, 
Code* target) {
 
  388 void LoadIC::Clear(
Address address, Code* target) {
 
  394 void StoreIC::Clear(
Address address, Code* target) {
 
  398         ? initialize_stub_strict()
 
  399         : initialize_stub());
 
  403 void KeyedStoreIC::Clear(
Address address, Code* target) {
 
  407         ? initialize_stub_strict()
 
  408         : initialize_stub());
 
  412 void CompareIC::Clear(
Address address, Code* target) {
 
  414   if (target->major_key() != CodeStub::CompareIC) 
return;
 
  423 static bool HasInterceptorGetter(JSObject* 
object) {
 
  424   return !
object->GetNamedInterceptor()->getter()->IsUndefined();
 
  428 static void LookupForRead(Handle<Object> 
object,
 
  430                           LookupResult* lookup) {
 
  434     object->Lookup(*name, lookup);
 
  438     if (!lookup->IsFound()
 
  440         || !lookup->IsCacheable()) {
 
  444     Handle<JSObject> holder(lookup->holder());
 
  445     if (HasInterceptorGetter(*holder)) {
 
  449     holder->LocalLookupRealNamedProperty(*name, lookup);
 
  450     if (lookup->IsProperty()) {
 
  455     Handle<Object> proto(holder->GetPrototype());
 
  456     if (proto->IsNull()) {
 
  469   if (delegate->IsJSFunction() && !
object->IsJSFunctionProxy()) {
 
  473     StackFrameLocator locator;
 
  485   while (callee->IsJSFunctionProxy()) {
 
  489   if (callee->IsJSFunction()) {
 
  491     if (!function->shared()->is_classic_mode() || 
function->IsBuiltin()) {
 
  498   if (object->IsString() || 
object->IsNumber() || 
object->IsBoolean()) {
 
  501     StackFrameLocator locator;
 
  515   if (object->IsUndefined() || 
object->IsNull()) {
 
  516     return TypeError(
"non_object_property_call", 
object, name);
 
  522   if (name->AsArrayIndex(&index)) {
 
  525     if (result->IsJSFunction()) 
return *result;
 
  529     if (result->IsJSFunction()) 
return *result;
 
  535   LookupResult lookup(
isolate());
 
  536   LookupForRead(
object, name, &lookup);
 
  538   if (!lookup.IsProperty()) {
 
  543         : 
TypeError(
"undefined_method", 
object, name);
 
  548     UpdateCaches(&lookup, state, extra_ic_state, 
object, name);
 
  562         : 
TypeError(
"undefined_method", 
object, name);
 
  565   ASSERT(!result->IsTheHole());
 
  572   if (result->IsJSFunction()) {
 
  574 #ifdef ENABLE_DEBUGGER_SUPPORT 
  577     if (debug->StepInActive()) {
 
  580       debug->HandleStepIn(
function, 
object, 
fp(), 
false);
 
  588   if (result->IsJSFunction()) 
return *result;
 
  590   return TypeError(
"property_not_function", 
object, name);
 
  599   JSFunction* 
function = lookup->GetConstantFunction();
 
  600   if (!function->shared()->HasBuiltinFunctionId()) 
return false;
 
  610   switch (function->shared()->builtin_function_id()) {
 
  611     case kStringCharCodeAt:
 
  613       if (object->IsString()) {
 
  620             argc >= 1 && args[1]->IsNumber()) {
 
  622           if (index < 0 || index >= string->
length()) {
 
  645   switch (lookup->type()) {
 
  647       int index = lookup->GetFieldIndex();
 
  649           argc, 
kind_, extra_state, name, 
object, holder, index);
 
  657           argc, 
kind_, extra_state, name, 
object, holder, 
function);
 
  664       if (holder->IsGlobalObject()) {
 
  670             argc, 
kind_, extra_state, name, receiver, global, cell, 
function);
 
  678             argc, 
kind_, extra_state);
 
  683       ASSERT(HasInterceptorGetter(*holder));
 
  685           argc, 
kind_, extra_state, name, 
object, holder);
 
  698   if (!lookup->IsProperty() || !lookup->IsCacheable()) 
return;
 
  700   if (lookup->holder() != *
object &&
 
  701       HasNormalObjectsInPrototypeChain(
 
  702           isolate(), lookup, object->GetPrototype())) {
 
  710   bool had_proto_failure = 
false;
 
  717         argc, 
kind_, extra_ic_state);
 
  724                TryRemoveInvalidPrototypeDependentStub(
target(),
 
  727       had_proto_failure = 
true;
 
  732           argc, 
kind_, extra_ic_state);
 
  767   if (key->IsSymbol()) {
 
  774   if (object->IsUndefined() || 
object->IsNull()) {
 
  775     return TypeError(
"non_object_property_call", 
object, key);
 
  778   if (FLAG_use_ic && state != 
MEGAMORPHIC && object->IsHeapObject()) {
 
  782     if (object->IsJSObject() &&
 
  788     } 
else if (!object->IsAccessCheckNeeded()) {
 
  803   if (result->IsJSFunction()) 
return *result;
 
  806   if (result->IsJSFunction()) 
return *result;
 
  808   return TypeError(
"property_not_function", 
object, key);
 
  817   if (object->IsUndefined() || 
object->IsNull()) {
 
  818     return TypeError(
"non_object_property_load", 
object, name);
 
  826     if ((object->IsString() || 
object->IsStringWrapper()) &&
 
  827         name->Equals(isolate()->heap()->length_symbol())) {
 
  830         stub = pre_monomorphic_stub();
 
  832         stub = 
object->IsString()
 
  835       } 
else if (state == 
MONOMORPHIC && object->IsStringWrapper()) {
 
  838         stub = megamorphic_stub();
 
  843         if (FLAG_trace_ic) 
PrintF(
"[LoadIC : +#length /string]\n");
 
  854     if (object->IsJSArray() &&
 
  855         name->Equals(
isolate()->heap()->length_symbol())) {
 
  858         stub = pre_monomorphic_stub();
 
  862         stub = megamorphic_stub();
 
  867         if (FLAG_trace_ic) 
PrintF(
"[LoadIC : +#length /array]\n");
 
  874     if (object->IsJSFunction() &&
 
  875         name->Equals(
isolate()->heap()->prototype_symbol()) &&
 
  879         stub = pre_monomorphic_stub();
 
  883         stub = megamorphic_stub();
 
  888         if (FLAG_trace_ic) 
PrintF(
"[LoadIC : +#prototype /function]\n");
 
  898   if (name->AsArrayIndex(&index)) 
return object->GetElement(index);
 
  901   LookupResult lookup(
isolate());
 
  902   LookupForRead(
object, name, &lookup);
 
  905   if (!lookup.IsProperty()) {
 
  909     LOG(
isolate(), SuspectReadEvent(*name, *
object));
 
  914     UpdateCaches(&lookup, state, 
object, name);
 
  918   if (lookup.IsFound() &&
 
  933   return object->GetProperty(*
object, &lookup, *name, &attr);
 
  937 void LoadIC::UpdateCaches(LookupResult* lookup,
 
  942   if (!lookup->IsCacheable()) 
return;
 
  946   if (!object->IsJSObject()) 
return;
 
  949   if (HasNormalObjectsInPrototypeChain(
isolate(), lookup, *
object)) 
return;
 
  957     code = pre_monomorphic_stub();
 
  958   } 
else if (!lookup->IsProperty()) {
 
  963     Handle<JSObject> holder(lookup->holder());
 
  964     switch (lookup->type()) {
 
  967             name, receiver, holder, lookup->GetFieldIndex());
 
  970         Handle<JSFunction> constant(lookup->GetConstantFunction());
 
  972             name, receiver, holder, constant);
 
  976         if (holder->IsGlobalObject()) {
 
  978           Handle<JSGlobalPropertyCell> cell(global->GetPropertyCell(lookup));
 
  980               name, receiver, global, cell, lookup->IsDontDelete());
 
  986           if (!holder.is_identical_to(receiver)) 
return;
 
  991         Handle<Object> callback(lookup->GetCallbackObject());
 
  992         if (callback->IsAccessorInfo()) {
 
  994           if (v8::ToCData<Address>(info->getter()) == 0) 
return;
 
  995           if (!info->IsCompatibleReceiver(*receiver)) 
return;
 
  997               name, receiver, holder, info);
 
  998         } 
else if (callback->IsAccessorPair()) {
 
  999           Handle<Object> getter(Handle<AccessorPair>::cast(callback)->getter());
 
 1000           if (!getter->IsJSFunction()) 
return;
 
 1001           if (holder->IsGlobalObject()) 
return;
 
 1002           if (!receiver->HasFastProperties()) 
return;
 
 1004               name, receiver, holder, Handle<JSFunction>::cast(getter));
 
 1006           ASSERT(callback->IsForeign());
 
 1013         ASSERT(HasInterceptorGetter(*holder));
 
 1015             name, receiver, holder);
 
 1062   for (
int i = 0; i < receiver_maps->length(); ++i) {
 
 1065         receiver_map, strict_mode, growth_mode);
 
 1066     handler_ics.Add(cached_stub);
 
 1070       receiver_maps, &handler_ics);
 
 1073           CodeCreateEvent(Logger::KEYED_LOAD_MEGAMORPHIC_IC_TAG, *code, 0));
 
 1081   if (key->IsHeapNumber()) {
 
 1084       key = isolate->
factory()->nan_symbol();
 
 1086       int int_value = 
FastD2I(value);
 
 1091   } 
else if (key->IsUndefined()) {
 
 1092     key = isolate->
factory()->undefined_symbol();
 
 1101                                bool force_generic_stub) {
 
 1104   key = TryConvertKey(key, 
isolate());
 
 1106   if (key->IsSymbol()) {
 
 1111     if (object->IsUndefined() || 
object->IsNull()) {
 
 1112       return TypeError(
"non_object_property_load", 
object, name);
 
 1119       if (object->IsString() &&
 
 1120           name->Equals(
isolate()->heap()->length_symbol())) {
 
 1131       if (object->IsJSArray() &&
 
 1132           name->Equals(
isolate()->heap()->length_symbol())) {
 
 1139         return array->length();
 
 1143       if (object->IsJSFunction() &&
 
 1144           name->Equals(
isolate()->heap()->prototype_symbol()) &&
 
 1160     if (name->AsArrayIndex(&index)) {
 
 1162       if (FLAG_use_ic) 
set_target(*generic_stub());
 
 1167     LookupResult lookup(
isolate());
 
 1168     LookupForRead(
object, name, &lookup);
 
 1176       UpdateCaches(&lookup, state, 
object, name);
 
 1180     if (lookup.IsFound() && lookup.type() == 
INTERCEPTOR) {
 
 1193     return object->GetProperty(*
object, &lookup, *name, &attr);
 
 1198   bool use_ic = FLAG_use_ic && !
object->IsAccessCheckNeeded();
 
 1202     if (!force_generic_stub) {
 
 1203       if (object->IsString() && key->IsNumber()) {
 
 1207       } 
else if (object->IsJSObject()) {
 
 1209         if (receiver->elements()->map() ==
 
 1210             isolate()->
heap()->non_strict_arguments_elements_map()) {
 
 1211           stub = non_strict_arguments_stub();
 
 1212         } 
else if (receiver->HasIndexedInterceptor()) {
 
 1213           stub = indexed_interceptor_stub();
 
 1214         } 
else if (key->IsSmi() && (
target() != *non_strict_arguments_stub())) {
 
 1231 void KeyedLoadIC::UpdateCaches(LookupResult* lookup,
 
 1236   if (!lookup->IsProperty() || !lookup->IsCacheable()) 
return;
 
 1238   if (!object->IsJSObject()) 
return;
 
 1241   if (HasNormalObjectsInPrototypeChain(
isolate(), lookup, *
object)) 
return;
 
 1250     code = pre_monomorphic_stub();
 
 1254     switch (lookup->type()) {
 
 1257             name, receiver, holder, lookup->GetFieldIndex());
 
 1262             name, receiver, holder, constant);
 
 1266         Handle<Object> callback_object(lookup->GetCallbackObject());
 
 1267         if (!callback_object->IsAccessorInfo()) 
return;
 
 1268         Handle<AccessorInfo> callback =
 
 1270         if (v8::ToCData<Address>(callback->getter()) == 0) 
return;
 
 1271         if (!callback->IsCompatibleReceiver(*receiver)) 
return;
 
 1273             name, receiver, holder, callback);
 
 1277         ASSERT(HasInterceptorGetter(lookup->holder()));
 
 1279             name, receiver, holder);
 
 1284         code = generic_stub();
 
 1302 static bool StoreICableLookup(LookupResult* lookup) {
 
 1304   if (!lookup->IsFound() || lookup->type() == 
NULL_DESCRIPTOR) 
return false;
 
 1307   if (!lookup->IsCacheable()) 
return false;
 
 1310   if (lookup->IsReadOnly()) 
return false;
 
 1316 static bool LookupForWrite(Handle<JSObject> receiver,
 
 1317                            Handle<String> name,
 
 1318                            LookupResult* lookup) {
 
 1319   receiver->LocalLookup(*name, lookup);
 
 1320   if (!StoreICableLookup(lookup)) {
 
 1325       receiver->GetNamedInterceptor()->setter()->IsUndefined()) {
 
 1326     receiver->LocalLookupRealNamedProperty(*name, lookup);
 
 1327     return StoreICableLookup(lookup);
 
 1339   if (!object->IsJSObject()) {
 
 1341     if (object->IsJSProxy()) {
 
 1348     if (object->IsUndefined() || 
object->IsNull()) {
 
 1349       return TypeError(
"non_object_property_store", 
object, name);
 
 1353     if (strict_mode == 
kStrictMode && object->IsString() &&
 
 1354         name->Equals(
isolate()->heap()->length_symbol())) {
 
 1355       return TypeError(
"strict_read_only_property", 
object, name);
 
 1366   if (name->AsArrayIndex(&index)) {
 
 1376   if (receiver->IsJSArray() &&
 
 1377       name->Equals(
isolate()->heap()->length_symbol()) &&
 
 1379       receiver->HasFastProperties()) {
 
 1381     if (FLAG_trace_ic) 
PrintF(
"[StoreIC : +#length /array]\n");
 
 1387     return receiver->SetProperty(*name, *value, 
NONE, strict_mode);
 
 1391   if (FLAG_use_ic && !receiver->IsJSGlobalProxy()) {
 
 1392     LookupResult lookup(
isolate());
 
 1394     if (LookupForWrite(receiver, name, &lookup)) {
 
 1396       UpdateCaches(&lookup, state, strict_mode, receiver, name, value);
 
 1401         if (lookup.IsProperty() && lookup.IsReadOnly()) {
 
 1402           return TypeError(
"strict_read_only_property", 
object, name);
 
 1410   if (receiver->IsJSGlobalProxy()) {
 
 1415         ? global_proxy_stub_strict()
 
 1416         : global_proxy_stub();
 
 1424   return receiver->SetProperty(*name,
 
 1432 void StoreIC::UpdateCaches(LookupResult* lookup,
 
 1438   ASSERT(!receiver->IsJSGlobalProxy());
 
 1439   ASSERT(StoreICableLookup(lookup));
 
 1459                                                         lookup->GetFieldIndex(),
 
 1464       if (lookup->GetAttributes() != 
NONE) 
return;
 
 1465       Handle<Map> transition(lookup->GetTransitionMap());
 
 1466       int index = transition->PropertyIndexFor(*name);
 
 1468           name, receiver, index, transition, strict_mode);
 
 1472       if (receiver->IsGlobalObject()) {
 
 1479             name, global, cell, strict_mode);
 
 1481         if (!holder.is_identical_to(receiver)) 
return;
 
 1486       Handle<Object> callback(lookup->GetCallbackObject());
 
 1487       if (callback->IsAccessorInfo()) {
 
 1489         if (v8::ToCData<Address>(info->setter()) == 0) 
return;
 
 1490         ASSERT(info->IsCompatibleReceiver(*receiver));
 
 1492             name, receiver, info, strict_mode);
 
 1493       } 
else if (callback->IsAccessorPair()) {
 
 1494         Handle<Object> setter(Handle<AccessorPair>::cast(callback)->setter());
 
 1495         if (!setter->IsJSFunction()) 
return;
 
 1496         if (holder->IsGlobalObject()) 
return;
 
 1497         if (!receiver->HasFastProperties()) 
return;
 
 1499             name, receiver, Handle<JSFunction>::cast(setter), strict_mode);
 
 1501         ASSERT(callback->IsForeign());
 
 1508       ASSERT(!receiver->GetNamedInterceptor()->setter()->IsUndefined());
 
 1510           name, receiver, strict_mode);
 
 1528                    ? megamorphic_stub_strict()
 
 1529                    : megamorphic_stub());
 
 1540 static bool AddOneReceiverMapIfMissing(
MapHandleList* receiver_maps,
 
 1541                                        Handle<Map> new_receiver_map) {
 
 1542   ASSERT(!new_receiver_map.is_null());
 
 1543   for (
int current = 0; current < receiver_maps->length(); ++current) {
 
 1544     if (!receiver_maps->at(current).is_null() &&
 
 1545         receiver_maps->at(current).is_identical_to(new_receiver_map)) {
 
 1549   receiver_maps->Add(new_receiver_map);
 
 1554 void KeyedIC::GetReceiverMapsForStub(Handle<Code> stub,
 
 1556   ASSERT(stub->is_inline_cache_stub());
 
 1558     return result->Add(
isolate()->factory()->string_map());
 
 1559   } 
else if (stub->is_keyed_load_stub() || stub->is_keyed_store_stub()) {
 
 1561       result->Add(Handle<Map>(stub->FindFirstMap()));
 
 1564       AssertNoAllocation no_allocation;
 
 1565       int mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
 
 1566       for (RelocIterator it(*stub, mask); !it.done(); it.next()) {
 
 1567         RelocInfo* info = it.rinfo();
 
 1568         Handle<Object> object(info->target_object());
 
 1570         AddOneReceiverMapIfMissing(result, Handle<Map>::cast(
object));
 
 1591     return generic_stub;
 
 1594   bool monomorphic = 
false;
 
 1595   bool is_transition_stub = IsTransitionStubKind(stub_kind);
 
 1605     if (ic_state == 
MONOMORPHIC && is_transition_stub) {
 
 1614           target_receiver_maps.
at(0)->elements_kind(),
 
 1615           receiver->GetElementsKind());
 
 1620     if (is_transition_stub) {
 
 1621       monomorphic_map = ComputeTransitionedMap(receiver, stub_kind);
 
 1622       ASSERT(*monomorphic_map != *receiver_map);
 
 1623       stub_kind = GetNoTransitionStubKind(stub_kind);
 
 1625     return ComputeMonomorphicStub(
 
 1626         monomorphic_map, stub_kind, strict_mode, generic_stub);
 
 1633       AddOneReceiverMapIfMissing(&target_receiver_maps, receiver_map);
 
 1634   if (IsTransitionStubKind(stub_kind)) {
 
 1635     Handle<Map> new_map = ComputeTransitionedMap(receiver, stub_kind);
 
 1636     map_added |= AddOneReceiverMapIfMissing(&target_receiver_maps, new_map);
 
 1642     return generic_stub;
 
 1649     return generic_stub;
 
 1662   Handle<Object> probe = cache->Lookup(&target_receiver_maps, flags);
 
 1680     ASSERT(receiver_map->has_dictionary_elements() ||
 
 1681            receiver_map->has_fast_smi_or_object_elements() ||
 
 1682            receiver_map->has_fast_double_elements() ||
 
 1683            receiver_map->has_external_array_elements());
 
 1684     bool is_js_array = receiver_map->instance_type() == 
JS_ARRAY_TYPE;
 
 1686                                          receiver_map->elements_kind(),
 
 1696   ElementsKind elements_kind = receiver_map->elements_kind();
 
 1701         receiver_map, stub_kind, strict_mode);
 
 1703     return generic_stub;
 
 1708 Handle<Map> KeyedIC::ComputeTransitionedMap(Handle<JSObject> receiver,
 
 1709                                             StubKind stub_kind) {
 
 1710   switch (stub_kind) {
 
 1754   for (
int i = 0; i < receiver_maps->length(); ++i) {
 
 1758         receiver_map->FindTransitionedMap(receiver_maps);
 
 1759     if (!transitioned_map.
is_null()) {
 
 1761           receiver_map->elements_kind(),  
 
 1762           transitioned_map->elements_kind(),
 
 1764           strict_mode, grow_mode).GetCode();
 
 1771     handler_ics.Add(cached_stub);
 
 1772     transitioned_maps.Add(transitioned_map);
 
 1776       receiver_maps, &handler_ics, &transitioned_maps);
 
 1779           CodeCreateEvent(Logger::KEYED_STORE_MEGAMORPHIC_IC_TAG, *code, 0));
 
 1789   bool allow_growth = receiver->IsJSArray() &&
 
 1795     if (receiver->HasFastSmiElements()) {
 
 1796       if (value->IsHeapNumber()) {
 
 1797         if (receiver->HasFastHoleyElements()) {
 
 1803       if (value->IsHeapObject()) {
 
 1804         if (receiver->HasFastHoleyElements()) {
 
 1810     } 
else if (receiver->HasFastDoubleElements()) {
 
 1811       if (!value->IsSmi() && !value->IsHeapNumber()) {
 
 1812         if (receiver->HasFastHoleyElements()) {
 
 1822     if (receiver->HasFastSmiElements()) {
 
 1823       if (value->IsHeapNumber()) {
 
 1824         if (receiver->HasFastHoleyElements()) {
 
 1829       } 
else if (value->IsHeapObject()) {
 
 1830         if (receiver->HasFastHoleyElements()) {
 
 1836     } 
else if (receiver->HasFastDoubleElements()) {
 
 1837       if (!value->IsSmi() && !value->IsHeapNumber()) {
 
 1838         if (receiver->HasFastHoleyElements()) {
 
 1855                                  bool force_generic) {
 
 1858   key = TryConvertKey(key, 
isolate());
 
 1860   if (key->IsSymbol()) {
 
 1864     if (object->IsJSProxy()) {
 
 1866           *name, *value, 
NONE, strict_mode);
 
 1871     if (object->IsUndefined() || 
object->IsNull()) {
 
 1872       return TypeError(
"non_object_property_store", 
object, name);
 
 1876     if (!object->IsJSObject()) 
return *value;
 
 1881     if (name->AsArrayIndex(&index)) {
 
 1889     if (FLAG_use_ic && !receiver->IsJSGlobalProxy()) {
 
 1890       LookupResult lookup(
isolate());
 
 1891       if (LookupForWrite(receiver, name, &lookup)) {
 
 1892         UpdateCaches(&lookup, state, strict_mode, receiver, name, value);
 
 1897     return receiver->SetProperty(*name, *value, 
NONE, strict_mode);
 
 1902   bool use_ic = FLAG_use_ic && !
object->IsAccessCheckNeeded();
 
 1903   ASSERT(!(use_ic && object->IsJSGlobalProxy()));
 
 1907         ? generic_stub_strict()
 
 1909     if (object->IsJSObject()) {
 
 1911       if (receiver->elements()->map() ==
 
 1912           isolate()->
heap()->non_strict_arguments_elements_map()) {
 
 1913         stub = non_strict_arguments_stub();
 
 1914       } 
else if (!force_generic) {
 
 1915         if (key->IsSmi() && (
target() != *non_strict_arguments_stub())) {
 
 1916           StubKind stub_kind = GetStubKind(receiver, key, value);
 
 1917           stub = 
ComputeStub(receiver, stub_kind, strict_mode, stub);
 
 1923     if (!stub.
is_null()) set_target(*stub);
 
 1930       isolate(), 
object , key, value, 
NONE, strict_mode);
 
 1934 void KeyedStoreIC::UpdateCaches(LookupResult* lookup,
 
 1940   ASSERT(!receiver->IsJSGlobalProxy());
 
 1941   ASSERT(StoreICableLookup(lookup));
 
 1960           name, receiver, lookup->GetFieldIndex(),
 
 1964       if (lookup->GetAttributes() == 
NONE) {
 
 1965         Handle<Map> transition(lookup->GetTransitionMap());
 
 1966         int index = transition->PropertyIndexFor(*name);
 
 1968             name, receiver, index, transition, strict_mode);
 
 1980           ? generic_stub_strict()
 
 1998                  ? *megamorphic_stub_strict()
 
 1999                  : *megamorphic_stub());
 
 2016   ASSERT(args.length() == 2);
 
 2020   MaybeObject* maybe_result = ic.LoadFunction(state,
 
 2025   JSFunction* raw_function = 
NULL;
 
 2026   if (!maybe_result->To(&raw_function)) 
return maybe_result;
 
 2033   if (raw_function->
is_compiled()) 
return raw_function;
 
 2044   ASSERT(args.length() == 2);
 
 2047   MaybeObject* maybe_result =
 
 2048       ic.LoadFunction(state, args.at<
Object>(0), args.at<
Object>(1));
 
 2050   JSFunction* raw_function = 
NULL;
 
 2051   if (!maybe_result->To(&raw_function)) 
return maybe_result;
 
 2053   if (raw_function->
is_compiled()) 
return raw_function;
 
 2064   ASSERT(args.length() == 2);
 
 2067   return ic.Load(state, args.at<
Object>(0), args.at<
String>(1));
 
 2074   ASSERT(args.length() == 2);
 
 2077   return ic.Load(state, args.at<
Object>(0), args.at<
Object>(1), 
false);
 
 2083   ASSERT(args.length() == 2);
 
 2086   return ic.Load(state, args.at<
Object>(0), args.at<
Object>(1), 
true);
 
 2093   ASSERT(args.length() == 3);
 
 2097   return ic.Store(state,
 
 2106   NoHandleAllocation nha;
 
 2108   ASSERT(args.length() == 2);
 
 2117   LookupResult debug_lookup(isolate);
 
 2118   receiver->LocalLookup(isolate->
heap()->length_symbol(), &debug_lookup);
 
 2119   ASSERT(debug_lookup.type() == 
CALLBACKS && !debug_lookup.IsReadOnly());
 
 2123   { MaybeObject* maybe_result = receiver->SetElementsLength(len);
 
 2124     if (!maybe_result->ToObject(&result)) 
return maybe_result;
 
 2134   NoHandleAllocation na;
 
 2135   ASSERT(args.length() == 3);
 
 2143   ASSERT(object->HasFastProperties());
 
 2144   ASSERT(object->map()->unused_property_fields() == 0);
 
 2147   FixedArray* old_storage = 
object->properties();
 
 2149   int new_size = old_storage->length() + new_unused + 1;
 
 2151   { MaybeObject* maybe_result = old_storage->CopySize(new_size);
 
 2152     if (!maybe_result->ToObject(&result)) 
return maybe_result;
 
 2155   new_storage->
set(old_storage->length(), value);
 
 2158   object->set_properties(new_storage);
 
 2159   object->set_map(transition);
 
 2169   ASSERT(args.length() == 3);
 
 2173   return ic.Store(state,
 
 2183   NoHandleAllocation na;
 
 2184   ASSERT(args.length() == 3);
 
 2202   ASSERT(args.length() == 3);
 
 2206   return ic.Store(state,
 
 2221   switch (type_info) {
 
 2223     case SMI: 
return "Smi";
 
 2225     case GENERIC: 
return "Generic";
 
 2226     default: 
return "Invalid";
 
 2232   switch (type_info) {
 
 2248   if (operand_type.
IsSmi()) {
 
 2250   } 
else if (operand_type.
IsNumber()) {
 
 2261   switch (previous_type) {
 
 2263       return current_type;
 
 2286   switch (type_info) {
 
 2288     case SMI: 
return "SMI";
 
 2289     case INT32: 
return "Int32s";
 
 2291     case ODDBALL: 
return "Oddball";
 
 2293     case STRING: 
return "Strings";
 
 2294     case GENERIC: 
return "Generic";
 
 2295     default: 
return "Invalid";
 
 2301   switch (type_info) {
 
 2323   if (x == y) 
return x;
 
 2329   if (x > y) 
return x;
 
 2341   if (left_type.
IsSmi() && right_type.
IsSmi()) {
 
 2359   } 
else if (right_type.
IsString()) {
 
 2364   if (left->IsUndefined() && right->IsNumber()) 
return ODDBALL;
 
 2365   if (left->IsNumber() && right->IsUndefined()) 
return ODDBALL;
 
 2372   ASSERT(args.length() == 4);
 
 2387     if (FLAG_trace_ic) {
 
 2388       PrintF(
"[UnaryOpIC (%s->%s)#%s]\n",
 
 2402       builtin = builtins->javascript_builtin(Builtins::UNARY_MINUS);
 
 2404     case Token::BIT_NOT:
 
 2405       builtin = builtins->javascript_builtin(Builtins::BIT_NOT);
 
 2413   bool caught_exception;
 
 2416   if (caught_exception) {
 
 2423   ASSERT(args.length() == 5);
 
 2428   int key = args.smi_at(2);
 
 2463     if (FLAG_trace_ic) {
 
 2464       PrintF(
"[BinaryOpIC (%s->(%s->%s))#%s]\n",
 
 2496       builtin = builtins->javascript_builtin(Builtins::MOD);
 
 2498     case Token::BIT_AND:
 
 2499       builtin = builtins->javascript_builtin(Builtins::BIT_AND);
 
 2502       builtin = builtins->javascript_builtin(Builtins::BIT_OR);
 
 2504     case Token::BIT_XOR:
 
 2505       builtin = builtins->javascript_builtin(Builtins::BIT_XOR);
 
 2508       builtin = builtins->javascript_builtin(Builtins::SHR);
 
 2511       builtin = builtins->javascript_builtin(Builtins::SAR);
 
 2514       builtin = builtins->javascript_builtin(Builtins::SHL);
 
 2522   bool caught_exception;
 
 2529   if (caught_exception) {
 
 2536 Code* CompareIC::GetRawUninitialized(
Token::Value op) {
 
 2539   CHECK(stub.FindCodeInCache(&code));
 
 2546   return stub.GetCode();
 
 2553   ASSERT(key == CodeStub::CompareIC);
 
 2567     case SMIS: 
return "SMIS";
 
 2569     case OBJECTS: 
return "OBJECTS";
 
 2571     case SYMBOLS: 
return "SYMBOLS";
 
 2572     case STRINGS: 
return "STRINGS";
 
 2573     case GENERIC: 
return "GENERIC";
 
 2582                                         bool has_inlined_smi_code,
 
 2587       if (x->IsSmi() && y->IsSmi()) 
return SMIS;
 
 2588       if (x->IsNumber() && y->IsNumber()) 
return HEAP_NUMBERS;
 
 2592         if ((x->IsNumber() && y->IsUndefined()) ||
 
 2593             (y->IsNumber() && x->IsUndefined())) {
 
 2597       if (x->IsSymbol() && y->IsSymbol()) {
 
 2602       if (x->IsString() && y->IsString()) 
return STRINGS;
 
 2604       if (x->IsJSObject() && y->IsJSObject()) {
 
 2605         if (Handle<JSObject>::cast(x)->map() ==
 
 2615       return has_inlined_smi_code && x->IsNumber() && y->IsNumber()
 
 2635   NoHandleAllocation na;
 
 2636   ASSERT(args.length() == 3);
 
 2637   CompareIC ic(isolate, static_cast<Token::Value>(args.smi_at(2)));
 
 2638   ic.UpdateCaches(args.at<
Object>(0), args.at<
Object>(1));
 
 2644   ASSERT(args.length() == 3);
 
 2652   bool to_boolean_value = new_types.Record(
object);
 
 2653   old_types.TraceTransition(new_types);
 
 2668 static const Address IC_utilities[] = {
 
 2669 #define ADDR(name) FUNCTION_ADDR(name), 
 2677   return IC_utilities[id];
 
virtual Handle< Code > string_stub()
 
static const int kCallerFPOffset
 
int IndexInCodeCache(Object *name, Code *code)
 
static TypeInfo GetTypeInfo(Handle< Object > operand)
 
static Handle< Object > SetProperty(Handle< JSReceiver > object, Handle< String > key, Handle< Object > value, PropertyAttributes attributes, StrictModeFlag strict_mode)
 
Code * builtin(Name name)
 
static bool CompileLazy(Handle< JSFunction > function, ClearExceptionFlag flag)
 
Object * function() const 
 
static Object *& Object_at(Address addr)
 
bool IsExternalArrayElementsKind(ElementsKind kind)
 
void UpdateCaches(LookupResult *lookup, State state, Code::ExtraICState extra_ic_state, Handle< Object > object, Handle< String > name)
 
virtual Code::Kind kind() const =0
 
Handle< Code > ComputeLoadNormal()
 
Handle< Code > ComputeCallGlobal(int argc, Code::Kind, Code::ExtraICState extra_state, Handle< String > name, Handle< JSObject > receiver, Handle< GlobalObject > holder, Handle< JSGlobalPropertyCell > cell, Handle< JSFunction > function)
 
void set(int index, Object *value)
 
void PrintF(const char *format,...)
 
Handle< Code > ComputeKeyedLoadFunctionPrototype(Handle< String > name, Handle< JSFunction > receiver)
 
Handle< Code > ComputeStoreField(Handle< String > name, Handle< JSObject > receiver, int field_index, Handle< Map > transition, StrictModeFlag strict_mode)
 
static TypeFeedbackInfo * cast(Object *obj)
 
static String * cast(Object *obj)
 
virtual bool IsGeneric() const 
 
static const char * GetName(TypeInfo type_info)
 
Code * Set(String *name, Map *map, Code *code)
 
virtual Handle< Code > GetElementStubWithoutMapCheck(bool is_js_array, ElementsKind elements_kind, KeyedAccessGrowMode grow_mode)
 
double DoubleToInteger(double x)
 
int unused_property_fields()
 
static const char * Name(Value tok)
 
static Smi * FromInt(int value)
 
#define LOG(isolate, Call)
 
MUST_USE_RESULT MaybeObject * LoadFunction(State state, Handle< Object > object, Handle< Object > key)
 
value format" "after each garbage collection") DEFINE_bool(print_cumulative_gc_stat, false, "print cumulative GC statistics in name=value format on exit") DEFINE_bool(trace_gc_verbose, false, "print more details following each garbage collection") DEFINE_bool(trace_fragmentation, false, "report fragmentation for old pointer and data pages") DEFINE_bool(collect_maps, true, "garbage collect maps from which no objects can be reached") DEFINE_bool(flush_code, true, "flush code that we expect not to use again before full gc") DEFINE_bool(incremental_marking, true, "use incremental marking") DEFINE_bool(incremental_marking_steps, true, "do incremental marking steps") DEFINE_bool(trace_incremental_marking, false, "trace progress of the incremental marking") DEFINE_bool(use_idle_notification, true, "Use idle notification to reduce memory footprint.") DEFINE_bool(send_idle_notification, false, "Send idle notifcation between stress runs.") DEFINE_bool(use_ic, true, "use inline caching") DEFINE_bool(native_code_counters, false, "generate extra code for manipulating stats counters") DEFINE_bool(always_compact, false, "Perform compaction on every full GC") DEFINE_bool(lazy_sweeping, true, "Use lazy sweeping for old pointer and data spaces") DEFINE_bool(never_compact, false, "Never perform compaction on full GC-testing only") DEFINE_bool(compact_code_space, true, "Compact code space on full non-incremental collections") DEFINE_bool(cleanup_code_caches_at_gc, true, "Flush inline caches prior to mark compact collection and" "flush code caches in maps during mark compact cycle.") DEFINE_int(random_seed, 0, "Default seed for initializing random generator" "(0, the default, means to use system random).") DEFINE_bool(use_verbose_printer, true, "allows verbose printing") DEFINE_bool(allow_natives_syntax, false, "allow natives syntax") DEFINE_bool(trace_sim, false, "Trace simulator execution") DEFINE_bool(check_icache, false, "Check icache flushes in ARM and MIPS simulator") DEFINE_int(stop_sim_at, 0, "Simulator stop after x number of instructions") DEFINE_int(sim_stack_alignment, 8, "Stack alingment in bytes in simulator(4 or 8, 8 is default)") DEFINE_bool(trace_exception, false, "print stack trace when throwing exceptions") DEFINE_bool(preallocate_message_memory, false, "preallocate some memory to build stack traces.") DEFINE_bool(randomize_hashes, true, "randomize hashes to avoid predictable hash collisions" "(with snapshots this option cannot override the baked-in seed)") DEFINE_int(hash_seed, 0, "Fixed seed to use to hash property keys(0 means random)" "(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption, false, "activate a 100ms timer that switches between V8 threads") DEFINE_bool(regexp_optimization, true, "generate optimized regexp code") DEFINE_bool(testing_bool_flag, true, "testing_bool_flag") DEFINE_int(testing_int_flag, 13, "testing_int_flag") DEFINE_float(testing_float_flag, 2.5, "float-flag") DEFINE_string(testing_string_flag, "Hello, world!", "string-flag") DEFINE_int(testing_prng_seed, 42, "Seed used for threading test randomness") DEFINE_string(testing_serialization_file, "/tmp/serdes", "file in which to serialize heap") DEFINE_bool(help, false, "Print usage message, including flags, on console") DEFINE_bool(dump_counters, false, "Dump counters on exit") DEFINE_string(map_counters, "", "Map counters to a file") DEFINE_args(js_arguments, JSARGUMENTS_INIT, "Pass all remaining arguments to the script.Alias for\"--\".") DEFINE_bool(debug_compile_events, true,"Enable debugger compile events") DEFINE_bool(debug_script_collected_events, true,"Enable debugger script collected events") DEFINE_bool(gdbjit, false,"enable GDBJIT interface (disables compacting GC)") DEFINE_bool(gdbjit_full, false,"enable GDBJIT interface for all code objects") DEFINE_bool(gdbjit_dump, false,"dump elf objects with debug info to disk") DEFINE_string(gdbjit_dump_filter,"","dump only objects containing this substring") DEFINE_bool(force_marking_deque_overflows, false,"force overflows of marking deque by reducing it's size ""to 64 words") DEFINE_bool(stress_compaction, false,"stress the GC compactor to flush out bugs (implies ""--force_marking_deque_overflows)")#define FLAG DEFINE_bool(enable_slow_asserts, false,"enable asserts that are slow to execute") DEFINE_bool(trace_codegen, false,"print name of functions for which code is generated") DEFINE_bool(print_source, false,"pretty print source code") DEFINE_bool(print_builtin_source, false,"pretty print source code for builtins") DEFINE_bool(print_ast, false,"print source AST") DEFINE_bool(print_builtin_ast, false,"print source AST for builtins") DEFINE_string(stop_at,"","function name where to insert a breakpoint") DEFINE_bool(print_builtin_scopes, false,"print scopes for builtins") DEFINE_bool(print_scopes, false,"print scopes") DEFINE_bool(trace_contexts, false,"trace contexts operations") DEFINE_bool(gc_greedy, false,"perform GC prior to some allocations") DEFINE_bool(gc_verbose, false,"print stuff during garbage collection") DEFINE_bool(heap_stats, false,"report heap statistics before and after GC") DEFINE_bool(code_stats, false,"report code statistics after GC") DEFINE_bool(verify_heap, false,"verify heap pointers before and after GC") DEFINE_bool(print_handles, false,"report handles after GC") DEFINE_bool(print_global_handles, false,"report global handles after GC") DEFINE_bool(trace_ic, false,"trace inline cache state transitions") DEFINE_bool(print_interfaces, false,"print interfaces") DEFINE_bool(print_interface_details, false,"print interface inference details") DEFINE_int(print_interface_depth, 5,"depth for printing interfaces") DEFINE_bool(trace_normalization, false,"prints when objects are turned into dictionaries.") DEFINE_bool(trace_lazy, false,"trace lazy compilation") DEFINE_bool(collect_heap_spill_statistics, false,"report heap spill statistics along with heap_stats ""(requires heap_stats)") DEFINE_bool(trace_isolates, false,"trace isolate state changes") DEFINE_bool(log_state_changes, false,"Log state changes.") DEFINE_bool(regexp_possessive_quantifier, false,"enable possessive quantifier syntax for testing") DEFINE_bool(trace_regexp_bytecodes, false,"trace regexp bytecode execution") DEFINE_bool(trace_regexp_assembler, false,"trace regexp macro assembler calls.")#define FLAG DEFINE_bool(log, false,"Minimal logging (no API, code, GC, suspect, or handles samples).") DEFINE_bool(log_all, false,"Log all events to the log file.") DEFINE_bool(log_runtime, false,"Activate runtime system %Log call.") DEFINE_bool(log_api, false,"Log API events to the log file.") DEFINE_bool(log_code, false,"Log code events to the log file without profiling.") DEFINE_bool(log_gc, false,"Log heap samples on garbage collection for the hp2ps tool.") DEFINE_bool(log_handles, false,"Log global handle events.") DEFINE_bool(log_snapshot_positions, false,"log positions of (de)serialized objects in the snapshot.") DEFINE_bool(log_suspect, false,"Log suspect operations.") DEFINE_bool(prof, false,"Log statistical profiling information (implies --log-code).") DEFINE_bool(prof_auto, true,"Used with --prof, starts profiling automatically") DEFINE_bool(prof_lazy, false,"Used with --prof, only does sampling and logging"" when profiler is active (implies --noprof_auto).") DEFINE_bool(prof_browser_mode, true,"Used with --prof, turns on browser-compatible mode for profiling.") DEFINE_bool(log_regexp, false,"Log regular expression execution.") DEFINE_bool(sliding_state_window, false,"Update sliding state window counters.") DEFINE_string(logfile,"v8.log","Specify the name of the log file.") DEFINE_bool(ll_prof, false,"Enable low-level linux profiler.")#define FLAG DEFINE_bool(trace_elements_transitions, false,"trace elements transitions") DEFINE_bool(print_code_stubs, false,"print code stubs") DEFINE_bool(test_secondary_stub_cache, false,"test secondary stub cache by disabling the primary one") DEFINE_bool(test_primary_stub_cache, false,"test primary stub cache by disabling the secondary one") DEFINE_bool(print_code, false,"print generated code") DEFINE_bool(print_opt_code, false,"print optimized code") DEFINE_bool(print_unopt_code, false,"print unoptimized code before ""printing optimized code based on it") DEFINE_bool(print_code_verbose, false,"print more information for code") DEFINE_bool(print_builtin_code, false,"print generated code for builtins")#43"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flags.cc"2#define FLAG_MODE_DEFINE_DEFAULTS#1"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flag-definitions.h"1#define FLAG_FULL(ftype, ctype, nam, def, cmt)#define FLAG_READONLY(ftype, ctype, nam, def, cmt)#define DEFINE_implication(whenflag, thenflag)#define DEFINE_bool(nam, def, cmt)#define DEFINE_int(nam, def, cmt)#define DEFINE_float(nam, def, cmt)#define DEFINE_string(nam, def, cmt)#define DEFINE_args(nam, def, cmt)#define FLAG DEFINE_bool(use_strict, false,"enforce strict mode") DEFINE_bool(es5_readonly, false,"activate correct semantics for inheriting readonliness") DEFINE_bool(es52_globals, false,"activate new semantics for global var declarations") DEFINE_bool(harmony_typeof, false,"enable harmony semantics for typeof") DEFINE_bool(harmony_scoping, false,"enable harmony block scoping") DEFINE_bool(harmony_modules, false,"enable harmony modules (implies block scoping)") DEFINE_bool(harmony_proxies, false,"enable harmony proxies") DEFINE_bool(harmony_collections, false,"enable harmony collections (sets, maps, and weak maps)") DEFINE_bool(harmony, false,"enable all harmony features (except typeof)") DEFINE_implication(harmony, harmony_scoping) DEFINE_implication(harmony, harmony_modules) DEFINE_implication(harmony, harmony_proxies) DEFINE_implication(harmony, harmony_collections) DEFINE_implication(harmony_modules, harmony_scoping) DEFINE_bool(packed_arrays, false,"optimizes arrays that have no holes") DEFINE_bool(smi_only_arrays, true,"tracks arrays with only smi values") DEFINE_bool(clever_optimizations, true,"Optimize object size, Array shift, DOM strings and string +") DEFINE_bool(unbox_double_arrays, true,"automatically unbox arrays of doubles") DEFINE_bool(string_slices, true,"use string slices") DEFINE_bool(crankshaft, true,"use crankshaft") DEFINE_string(hydrogen_filter,"","optimization filter") DEFINE_bool(use_range, true,"use hydrogen range analysis") DEFINE_bool(eliminate_dead_phis, true,"eliminate dead phis") DEFINE_bool(use_gvn, true,"use hydrogen global value numbering") DEFINE_bool(use_canonicalizing, true,"use hydrogen instruction canonicalizing") DEFINE_bool(use_inlining, true,"use function inlining") DEFINE_int(max_inlined_source_size, 600,"maximum source size in bytes considered for a single inlining") DEFINE_int(max_inlined_nodes, 196,"maximum number of AST nodes considered for a single inlining") DEFINE_int(max_inlined_nodes_cumulative, 196,"maximum cumulative number of AST nodes considered for inlining") DEFINE_bool(loop_invariant_code_motion, true,"loop invariant code motion") DEFINE_bool(collect_megamorphic_maps_from_stub_cache, true,"crankshaft harvests type feedback from stub cache") DEFINE_bool(hydrogen_stats, false,"print statistics for hydrogen") DEFINE_bool(trace_hydrogen, false,"trace generated hydrogen to file") DEFINE_string(trace_phase,"Z","trace generated IR for specified phases") DEFINE_bool(trace_inlining, false,"trace inlining decisions") DEFINE_bool(trace_alloc, false,"trace register allocator") DEFINE_bool(trace_all_uses, false,"trace all use positions") DEFINE_bool(trace_range, false,"trace range analysis") DEFINE_bool(trace_gvn, false,"trace global value numbering") DEFINE_bool(trace_representation, false,"trace representation types") DEFINE_bool(stress_pointer_maps, false,"pointer map for every instruction") DEFINE_bool(stress_environments, false,"environment for every instruction") DEFINE_int(deopt_every_n_times, 0,"deoptimize every n times a deopt point is passed") DEFINE_bool(trap_on_deopt, false,"put a break point before deoptimizing") DEFINE_bool(deoptimize_uncommon_cases, true,"deoptimize uncommon cases") DEFINE_bool(polymorphic_inlining, true,"polymorphic inlining") DEFINE_bool(use_osr, true,"use on-stack replacement") DEFINE_bool(array_bounds_checks_elimination, false,"perform array bounds checks elimination") DEFINE_bool(array_index_dehoisting, false,"perform array index dehoisting") DEFINE_bool(trace_osr, false,"trace on-stack replacement") DEFINE_int(stress_runs, 0,"number of stress runs") DEFINE_bool(optimize_closures, true,"optimize closures") DEFINE_bool(inline_construct, true,"inline constructor calls") DEFINE_bool(inline_arguments, true,"inline functions with arguments object") DEFINE_int(loop_weight, 1,"loop weight for representation inference") DEFINE_bool(optimize_for_in, true,"optimize functions containing for-in loops") DEFINE_bool(experimental_profiler, true,"enable all profiler experiments") DEFINE_bool(watch_ic_patching, false,"profiler considers IC stability") DEFINE_int(frame_count, 1,"number of stack frames inspected by the profiler") DEFINE_bool(self_optimization, false,"primitive functions trigger their own optimization") DEFINE_bool(direct_self_opt, false,"call recompile stub directly when self-optimizing") DEFINE_bool(retry_self_opt, false,"re-try self-optimization if it failed") DEFINE_bool(count_based_interrupts, false,"trigger profiler ticks based on counting instead of timing") DEFINE_bool(interrupt_at_exit, false,"insert an interrupt check at function exit") DEFINE_bool(weighted_back_edges, false,"weight back edges by jump distance for interrupt triggering") DEFINE_int(interrupt_budget, 5900,"execution budget before interrupt is triggered") DEFINE_int(type_info_threshold, 15,"percentage of ICs that must have type info to allow optimization") DEFINE_int(self_opt_count, 130,"call count before self-optimization") DEFINE_implication(experimental_profiler, watch_ic_patching) DEFINE_implication(experimental_profiler, self_optimization) DEFINE_implication(experimental_profiler, retry_self_opt) DEFINE_implication(experimental_profiler, count_based_interrupts) DEFINE_implication(experimental_profiler, interrupt_at_exit) DEFINE_implication(experimental_profiler, weighted_back_edges) DEFINE_bool(trace_opt_verbose, false,"extra verbose compilation tracing") DEFINE_implication(trace_opt_verbose, trace_opt) DEFINE_bool(debug_code, false,"generate extra code (assertions) for debugging") DEFINE_bool(code_comments, false,"emit comments in code disassembly") DEFINE_bool(enable_sse2, true,"enable use of SSE2 instructions if available") DEFINE_bool(enable_sse3, true,"enable use of SSE3 instructions if available") DEFINE_bool(enable_sse4_1, true,"enable use of SSE4.1 instructions if available") DEFINE_bool(enable_cmov, true,"enable use of CMOV instruction if available") DEFINE_bool(enable_rdtsc, true,"enable use of RDTSC instruction if available") DEFINE_bool(enable_sahf, true,"enable use of SAHF instruction if available (X64 only)") DEFINE_bool(enable_vfp3, true,"enable use of VFP3 instructions if available - this implies ""enabling ARMv7 instructions (ARM only)") DEFINE_bool(enable_armv7, true,"enable use of ARMv7 instructions if available (ARM only)") DEFINE_bool(enable_fpu, true,"enable use of MIPS FPU instructions if available (MIPS only)") DEFINE_string(expose_natives_as, NULL,"expose natives in global object") DEFINE_string(expose_debug_as, NULL,"expose debug in global object") DEFINE_bool(expose_gc, false,"expose gc extension") DEFINE_bool(expose_externalize_string, false,"expose externalize string extension") DEFINE_int(stack_trace_limit, 10,"number of stack frames to capture") DEFINE_bool(builtins_in_stack_traces, false,"show built-in functions in stack traces") DEFINE_bool(disable_native_files, false,"disable builtin natives files") DEFINE_bool(inline_new, true,"use fast inline allocation") DEFINE_bool(stack_trace_on_abort, true,"print a stack trace if an assertion failure occurs") DEFINE_bool(trace, false,"trace function calls") DEFINE_bool(mask_constants_with_cookie, true,"use random jit cookie to mask large constants") DEFINE_bool(lazy, true,"use lazy compilation") DEFINE_bool(trace_opt, false,"trace lazy optimization") DEFINE_bool(trace_opt_stats, false,"trace lazy optimization statistics") DEFINE_bool(opt, true,"use adaptive optimizations") DEFINE_bool(always_opt, false,"always try to optimize functions") DEFINE_bool(prepare_always_opt, false,"prepare for turning on always opt") DEFINE_bool(trace_deopt, false,"trace deoptimization") DEFINE_int(min_preparse_length, 1024,"minimum length for automatic enable preparsing") DEFINE_bool(always_full_compiler, false,"try to use the dedicated run-once backend for all code") DEFINE_bool(trace_bailout, false,"print reasons for falling back to using the classic V8 backend") DEFINE_bool(compilation_cache, true,"enable compilation cache") DEFINE_bool(cache_prototype_transitions, true,"cache prototype transitions") DEFINE_bool(trace_debug_json, false,"trace debugging JSON request/response") DEFINE_bool(debugger_auto_break, true,"automatically set the debug break flag when debugger commands are ""in the queue") DEFINE_bool(enable_liveedit, true,"enable liveedit experimental feature") DEFINE_bool(break_on_abort, true,"always cause a debug break before aborting") DEFINE_int(stack_size, kPointerSize *123,"default size of stack region v8 is allowed to use (in kBytes)") DEFINE_int(max_stack_trace_source_length, 300,"maximum length of function source code printed in a stack trace.") DEFINE_bool(always_inline_smi_code, false,"always inline smi code in non-opt code") DEFINE_int(max_new_space_size, 0,"max size of the new generation (in kBytes)") DEFINE_int(max_old_space_size, 0,"max size of the old generation (in Mbytes)") DEFINE_int(max_executable_size, 0,"max size of executable memory (in Mbytes)") DEFINE_bool(gc_global, false,"always perform global GCs") DEFINE_int(gc_interval,-1,"garbage collect after <n> allocations") DEFINE_bool(trace_gc, false,"print one trace line following each garbage collection") DEFINE_bool(trace_gc_nvp, false,"print one detailed trace line in name=value format ""after each garbage collection") DEFINE_bool(print_cumulative_gc_stat, false,"print cumulative GC statistics in name=value format on exit") DEFINE_bool(trace_gc_verbose, false,"print more details following each garbage collection") DEFINE_bool(trace_fragmentation, false,"report fragmentation for old pointer and data pages") DEFINE_bool(collect_maps, true,"garbage collect maps from which no objects can be reached") DEFINE_bool(flush_code, true,"flush code that we expect not to use again before full gc") DEFINE_bool(incremental_marking, true,"use incremental marking") DEFINE_bool(incremental_marking_steps, true,"do incremental marking steps") DEFINE_bool(trace_incremental_marking, false,"trace progress of the incremental marking") DEFINE_bool(use_idle_notification, true,"Use idle notification to reduce memory footprint.") DEFINE_bool(send_idle_notification, false,"Send idle notifcation between stress runs.") DEFINE_bool(use_ic, true,"use inline caching") DEFINE_bool(native_code_counters, false,"generate extra code for manipulating stats counters") DEFINE_bool(always_compact, false,"Perform compaction on every full GC") DEFINE_bool(lazy_sweeping, true,"Use lazy sweeping for old pointer and data spaces") DEFINE_bool(never_compact, false,"Never perform compaction on full GC - testing only") DEFINE_bool(compact_code_space, true,"Compact code space on full non-incremental collections") DEFINE_bool(cleanup_code_caches_at_gc, true,"Flush inline caches prior to mark compact collection and ""flush code caches in maps during mark compact cycle.") DEFINE_int(random_seed, 0,"Default seed for initializing random generator ""(0, the default, means to use system random).") DEFINE_bool(use_verbose_printer, true,"allows verbose printing") DEFINE_bool(allow_natives_syntax, false,"allow natives syntax") DEFINE_bool(trace_sim, false,"Trace simulator execution") DEFINE_bool(check_icache, false,"Check icache flushes in ARM and MIPS simulator") DEFINE_int(stop_sim_at, 0,"Simulator stop after x number of instructions") DEFINE_int(sim_stack_alignment, 8,"Stack alingment in bytes in simulator (4 or 8, 8 is default)") DEFINE_bool(trace_exception, false,"print stack trace when throwing exceptions") DEFINE_bool(preallocate_message_memory, false,"preallocate some memory to build stack traces.") DEFINE_bool(randomize_hashes, true,"randomize hashes to avoid predictable hash collisions ""(with snapshots this option cannot override the baked-in seed)") DEFINE_int(hash_seed, 0,"Fixed seed to use to hash property keys (0 means random)""(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption, false,"activate a 100ms timer that switches between V8 threads") DEFINE_bool(regexp_optimization, true,"generate optimized regexp code") DEFINE_bool(testing_bool_flag, true,"testing_bool_flag") DEFINE_int(testing_int_flag, 13,"testing_int_flag") DEFINE_float(testing_float_flag, 2.5,"float-flag") DEFINE_string(testing_string_flag,"Hello, world!","string-flag") DEFINE_int(testing_prng_seed, 42,"Seed used for threading test randomness") DEFINE_string(testing_serialization_file,"/tmp/serdes","file in which to serialize heap") DEFINE_bool(help, false,"Print usage message, including flags, on console") DEFINE_bool(dump_counters, false,"Dump counters on exit") DEFINE_string(map_counters,"","Map counters to a file") DEFINE_args(js_arguments, JSARGUMENTS_INIT,"Pass all remaining arguments to the script. Alias for \"--\".") DEFINE_bool(debug_compile_events, true,"Enable debugger compile events") DEFINE_bool(debug_script_collected_events, true,"Enable debugger script collected events") DEFINE_bool(gdbjit, false,"enable GDBJIT interface (disables compacting GC)") DEFINE_bool(gdbjit_full, false,"enable GDBJIT interface for all code objects") DEFINE_bool(gdbjit_dump, false,"dump elf objects with debug info to disk") DEFINE_string(gdbjit_dump_filter,"","dump only objects containing this substring") DEFINE_bool(force_marking_deque_overflows, false,"force overflows of marking deque by reducing it's size ""to 64 words") DEFINE_bool(stress_compaction, false,"stress the GC compactor to flush out bugs (implies ""--force_marking_deque_overflows)")#define FLAG DEFINE_bool(enable_slow_asserts, false,"enable asserts that are slow to execute") DEFINE_bool(trace_codegen, false,"print name of functions for which code is generated") DEFINE_bool(print_source, false,"pretty print source code") DEFINE_bool(print_builtin_source, false,"pretty print source code for builtins") DEFINE_bool(print_ast, false,"print source AST") DEFINE_bool(print_builtin_ast, false,"print source AST for builtins") DEFINE_string(stop_at,"","function name where to insert a breakpoint") DEFINE_bool(print_builtin_scopes, false,"print scopes for builtins") DEFINE_bool(print_scopes, false,"print scopes") DEFINE_bool(trace_contexts, false,"trace contexts operations") DEFINE_bool(gc_greedy, false,"perform GC prior to some allocations") DEFINE_bool(gc_verbose, false,"print stuff during garbage collection") DEFINE_bool(heap_stats, false,"report heap statistics before and after GC") DEFINE_bool(code_stats, false,"report code statistics after GC") DEFINE_bool(verify_heap, false,"verify heap pointers before and after GC") DEFINE_bool(print_handles, false,"report handles after GC") DEFINE_bool(print_global_handles, false,"report global handles after GC") DEFINE_bool(trace_ic, false,"trace inline cache state transitions") DEFINE_bool(print_interfaces, false,"print interfaces") DEFINE_bool(print_interface_details, false,"print interface inference details") DEFINE_int(print_interface_depth, 5,"depth for printing interfaces") DEFINE_bool(trace_normalization, false,"prints when objects are turned into dictionaries.") DEFINE_bool(trace_lazy, false,"trace lazy compilation") DEFINE_bool(collect_heap_spill_statistics, false,"report heap spill statistics along with heap_stats ""(requires heap_stats)") DEFINE_bool(trace_isolates, false,"trace isolate state changes") DEFINE_bool(log_state_changes, false,"Log state changes.") DEFINE_bool(regexp_possessive_quantifier, false,"enable possessive quantifier syntax for testing") DEFINE_bool(trace_regexp_bytecodes, false,"trace regexp bytecode execution") DEFINE_bool(trace_regexp_assembler, false,"trace regexp macro assembler calls.")#define FLAG DEFINE_bool(log, false,"Minimal logging (no API, code, GC, suspect, or handles samples).") DEFINE_bool(log_all, false,"Log all events to the log file.") DEFINE_bool(log_runtime, false,"Activate runtime system %Log call.") DEFINE_bool(log_api, false,"Log API events to the log file.") DEFINE_bool(log_code, false,"Log code events to the log file without profiling.") DEFINE_bool(log_gc, false,"Log heap samples on garbage collection for the hp2ps tool.") DEFINE_bool(log_handles, false,"Log global handle events.") DEFINE_bool(log_snapshot_positions, false,"log positions of (de)serialized objects in the snapshot.") DEFINE_bool(log_suspect, false,"Log suspect operations.") DEFINE_bool(prof, false,"Log statistical profiling information (implies --log-code).") DEFINE_bool(prof_auto, true,"Used with --prof, starts profiling automatically") DEFINE_bool(prof_lazy, false,"Used with --prof, only does sampling and logging"" when profiler is active (implies --noprof_auto).") DEFINE_bool(prof_browser_mode, true,"Used with --prof, turns on browser-compatible mode for profiling.") DEFINE_bool(log_regexp, false,"Log regular expression execution.") DEFINE_bool(sliding_state_window, false,"Update sliding state window counters.") DEFINE_string(logfile,"v8.log","Specify the name of the log file.") DEFINE_bool(ll_prof, false,"Enable low-level linux profiler.")#define FLAG DEFINE_bool(trace_elements_transitions, false,"trace elements transitions") DEFINE_bool(print_code_stubs, false,"print code stubs") DEFINE_bool(test_secondary_stub_cache, false,"test secondary stub cache by disabling the primary one") DEFINE_bool(test_primary_stub_cache, false,"test primary stub cache by disabling the secondary one") DEFINE_bool(print_code, false,"print generated code") DEFINE_bool(print_opt_code, false,"print optimized code") DEFINE_bool(print_unopt_code, false,"print unoptimized code before ""printing optimized code based on it") DEFINE_bool(print_code_verbose, false,"print more information for code") DEFINE_bool(print_builtin_code, false,"print generated code for builtins")#47"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flags.cc"2 namespace{struct Flag{enum FlagType{TYPE_BOOL, TYPE_INT, TYPE_FLOAT, TYPE_STRING, TYPE_ARGS} name
 
MUST_USE_RESULT MaybeObject * Load(State state, Handle< Object > object, Handle< String > name)
 
static Handle< T > cast(Handle< S > that)
 
static Map * cast(Object *obj)
 
static KeyedAccessGrowMode GetKeyedAccessGrowMode(ExtraICState extra_ic_state)
 
static Failure * Exception()
 
#define TRACE_IC(type, name, old_state, new_target)
 
static MUST_USE_RESULT MaybeObject * SetObjectProperty(Isolate *isolate, Handle< Object > object, Handle< Object > key, Handle< Object > value, PropertyAttributes attr, StrictModeFlag strict_mode)
 
void set_ic_with_type_info_count(int count)
 
Handle< Code > ComputeLoadCallback(Handle< String > name, Handle< JSObject > receiver, Handle< JSObject > holder, Handle< AccessorInfo > callback)
 
Handle< Code > ComputeKeyedLoadOrStoreElement(Handle< Map > receiver_map, KeyedIC::StubKind stub_kind, StrictModeFlag strict_mode)
 
static const int kCallerSPOffset
 
List< Handle< Map > > MapHandleList
 
Failure * TypeError(const char *type, Handle< Object > object, Handle< Object > key)
 
#define ASSERT(condition)
 
Handle< Code > ComputeCallMegamorphic(int argc, Code::Kind kind, Code::ExtraICState state)
 
void set_profiler_ticks(int ticks)
 
int ComputeExpressionsCount() const 
 
#define PROFILE(isolate, Call)
 
static State StateFrom(Code *target, Object *receiver, Object *name)
 
Handle< Code > ComputeKeyedLoadInterceptor(Handle< String > name, Handle< JSObject > receiver, Handle< JSObject > holder)
 
static TypeInfo GetTypeInfo(Handle< Object > left, Handle< Object > right)
 
static const char * GetName(TypeInfo type_info)
 
Isolate * isolate() const 
 
static const ExtraICState kNoExtraICState
 
Handle< Code > ComputeKeyedLoadCallback(Handle< String > name, Handle< JSObject > receiver, Handle< JSObject > holder, Handle< AccessorInfo > callback)
 
Handle< Object > GetProperty(Handle< JSReceiver > obj, const char *name)
 
#define RETURN_IF_EMPTY_HANDLE(isolate, call)
 
bool IsFastElementsKind(ElementsKind kind)
 
static uint32_t update(uint32_t previous, StringStubFeedbackvalue)
 
static TypeInfo TypeFromValue(Handle< Object > value)
 
MUST_USE_RESULT MaybeObject * Store(State state, StrictModeFlag strict_mode, Handle< Object > object, Handle< String > name, Handle< Object > value)
 
static Code * cast(Object *obj)
 
static State ToState(TypeInfo type_info)
 
void ReceiverToObjectIfRequired(Handle< Object > callee, Handle< Object > object)
 
void PatchInlinedSmiCode(Address address, InlinedSmiCheck check)
 
static Smi * cast(Object *object)
 
Handle< Code > ComputeKeyedLoadArrayLength(Handle< String > name, Handle< JSArray > receiver)
 
Handle< Code > ComputeCallInterceptor(int argc, Code::Kind, Code::ExtraICState extra_state, Handle< String > name, Handle< Object > object, Handle< JSObject > holder)
 
Handle< Code > ComputeCallArguments(int argc, Code::Kind kind)
 
Handle< Code > ComputeLoadField(Handle< String > name, Handle< JSObject > receiver, Handle< JSObject > holder, int field_index)
 
static JSFunctionProxy * cast(Object *obj)
 
const uint32_t kNotStringTag
 
HANDLE HANDLE LPSTACKFRAME64 StackFrame
 
static const int kCallerPCOffset
 
Handle< Code > ComputeStoreNormal(StrictModeFlag strict_mode)
 
static void Update(Handle< PolymorphicCodeCache > cache, MapHandleList *maps, Code::Flags flags, Handle< Code > code)
 
static void PrintTop(FILE *file, bool print_args, bool print_line_number)
 
static void PostPatching(Address address, Code *target, Code *old_target)
 
Handle< Code > ComputeCallField(int argc, Code::Kind, Code::ExtraICState extra_state, Handle< String > name, Handle< Object > object, Handle< JSObject > holder, int index)
 
static Address c_entry_fp(ThreadLocalTop *thread)
 
static InlineCacheHolderFlag ExtractCacheHolderFromFlags(Flags flags)
 
IC(FrameDepth depth, Isolate *isolate)
 
static const int kCallerFPOffset
 
V8EXPORT Local< Value > GetPrototype()
 
static bool IsValid(intptr_t value)
 
byte * instruction_start()
 
static Handle< Map > GetElementsTransitionMap(Handle< JSObject > object, ElementsKind to_kind)
 
static StrictModeFlag GetStrictMode(ExtraICState extra_ic_state)
 
void SetExpression(int index, Object *value)
 
Handle< Object > SetProperty(Handle< Object > object, Handle< Object > key, Handle< Object > value, PropertyAttributes attributes, StrictModeFlag strict_mode)
 
int Compare(const T &a, const T &b)
 
static Code * GetTargetAtAddress(Address address)
 
static Address & Address_at(Address addr)
 
Handle< Code > ComputeKeyedLoadStringLength(Handle< String > name, Handle< String > receiver)
 
bool IsMoreGeneralElementsKindTransition(ElementsKind from_kind, ElementsKind to_kind)
 
MUST_USE_RESULT MaybeObject * LoadFunction(State state, Code::ExtraICState extra_ic_state, Handle< Object > object, Handle< String > name)
 
static ExtraICState ComputeExtraICState(KeyedAccessGrowMode grow_mode, StrictModeFlag strict_mode)
 
static bool decode(uint32_t value)
 
static Register from_code(int code)
 
static void Clear(Address address, Code *target)
 
static State ToState(TypeInfo type_info)
 
static MUST_USE_RESULT Handle< Object > SetElement(Handle< JSObject > object, uint32_t index, Handle< Object > value, PropertyAttributes attr, StrictModeFlag strict_mode, SetPropertyMode set_mode=SET_PROPERTY)
 
bool is_inline_cache_stub()
 
Handle< Code > ComputeStoreGlobal(Handle< String > name, Handle< GlobalObject > receiver, Handle< JSGlobalPropertyCell > cell, StrictModeFlag strict_mode)
 
static JavaScriptFrame * cast(StackFrame *frame)
 
virtual Handle< Code > GetElementStubWithoutMapCheck(bool is_js_array, ElementsKind elements_kind, KeyedAccessGrowMode grow_mode)
 
Failure * Throw(Object *exception, MessageLocation *location=NULL)
 
InlineCacheState ic_state()
 
static bool IsEqualityOp(Value op)
 
static const int kCallTargetAddressOffset
 
Handle< Code > ComputeStoreInterceptor(Handle< String > name, Handle< JSObject > receiver, StrictModeFlag strict_mode)
 
static Handle< Object > Call(Handle< Object > callable, Handle< Object > receiver, int argc, Handle< Object > argv[], bool *pending_exception, bool convert_receiver=false)
 
static JSArray * cast(Object *obj)
 
virtual Handle< Code > ComputePolymorphicStub(MapHandleList *receiver_maps, StrictModeFlag strict_mode, KeyedAccessGrowMode grow_mode)
 
Handle< Code > ComputeLoadViaGetter(Handle< String > name, Handle< JSObject > receiver, Handle< JSObject > holder, Handle< JSFunction > getter)
 
static TypeInfo ComputeNewType(TypeInfo type, TypeInfo previous)
 
Handle< Object > TryCallAsFunction(Handle< Object > object)
 
Handle< Code > ComputeKeyedLoadField(Handle< String > name, Handle< JSObject > receiver, Handle< JSObject > holder, int field_index)
 
MUST_USE_RESULT MaybeObject * Load(State state, Handle< Object > object, Handle< Object > key, bool force_generic_stub)
 
Handle< Code > ComputeCallNormal(int argc, Code::Kind kind, Code::ExtraICState state)
 
#define IC_UTIL_LIST(ICU)
 
Handle< Object > NewReferenceError(const char *type, Vector< Handle< Object > > args)
 
Handle< Code > ComputeKeyedStoreField(Handle< String > name, Handle< JSObject > receiver, int field_index, Handle< Map > transition, StrictModeFlag strict_mode)
 
ExtraICState extra_ic_state()
 
static Object * cast(Object *value)
 
static MUST_USE_RESULT MaybeObject * FunctionGetPrototype(Object *object, void *)
 
static Flags ComputeFlags(Kind kind, InlineCacheState ic_state=UNINITIALIZED, ExtraICState extra_ic_state=kNoExtraICState, PropertyType type=NORMAL, int argc=-1, InlineCacheHolderFlag holder=OWN_MAP)
 
Handle< Object > NewTypeError(const char *type, Vector< Handle< Object > > args)
 
static Token::Value ComputeOperation(Code *target)
 
static Handle< Object > GetFunctionDelegate(Handle< Object > object)
 
static JSValue * cast(Object *obj)
 
static Handle< T > null()
 
static const int kCallerPCOffset
 
virtual Handle< Code > ComputePolymorphicStub(MapHandleList *receiver_maps, StrictModeFlag strict_mode, KeyedAccessGrowMode grow_mode)
 
static JSObject * GetCodeCacheHolder(Object *object, InlineCacheHolderFlag holder)
 
static void SetTargetAtAddress(Address address, Code *target)
 
MUST_USE_RESULT MaybeObject * GetProperty(String *key)
 
static MUST_USE_RESULT MaybeObject * GetObjectProperty(Isolate *isolate, Handle< Object > object, Handle< Object > key)
 
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination trace on stack replacement optimize closures functions with arguments object optimize functions containing for in loops profiler considers IC stability primitive functions trigger their own optimization re try self optimization if it failed insert an interrupt check at function exit execution budget before interrupt is triggered call count before self optimization self_optimization count_based_interrupts weighted_back_edges trace_opt emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 enable use of ARMv7 instructions if enable use of MIPS FPU instructions if NULL
 
int ic_with_type_info_count()
 
virtual Handle< Code > ComputePolymorphicStub(MapHandleList *receiver_maps, StrictModeFlag strict_mode, KeyedAccessGrowMode grow_mode)=0
 
static JSProxy * cast(Object *obj)
 
static State ComputeState(Code *target)
 
virtual Handle< Code > string_stub()
 
Handle< Code > ComputeMonomorphicStub(LookupResult *lookup, State state, Code::ExtraICState extra_state, Handle< Object > object, Handle< String > name)
 
Handle< Code > ComputeStub(Handle< JSObject > receiver, StubKind stub_kind, StrictModeFlag strict_mode, Handle< Code > default_stub)
 
static FixedArray * cast(Object *obj)
 
#define TRACE_GENERIC_IC(type, reason)
 
static Handle< Object > GetElement(Handle< Object > object, uint32_t index)
 
bool TryUpdateExtraICState(LookupResult *lookup, Handle< Object > object, Code::ExtraICState *extra_ic_state)
 
void set_target(Code *code)
 
Handle< Code > ComputeCallPreMonomorphic(int argc, Code::Kind kind, Code::ExtraICState extra_state)
 
virtual Handle< Code > GetElementStubWithoutMapCheck(bool is_js_array, ElementsKind elements_kind, KeyedAccessGrowMode grow_mode)=0
 
Handle< Code > ComputeLoadNonexistent(Handle< String > name, Handle< JSObject > receiver)
 
static TypeInfo JoinTypes(TypeInfo x, TypeInfo y)
 
Handle< Code > ComputeLoadConstant(Handle< String > name, Handle< JSObject > receiver, Handle< JSObject > holder, Handle< JSFunction > value)
 
Vector< Handle< Object > > HandleVector(v8::internal::Handle< T > *elms, int length)
 
const int kMaxKeyedPolymorphism
 
Handle< Code > ComputeLoadInterceptor(Handle< String > name, Handle< JSObject > receiver, Handle< JSObject > holder)
 
Handle< Code > CompileLoadPolymorphic(MapHandleList *receiver_maps, CodeHandleList *handler_ics)
 
Handle< Code > ComputeCallConstant(int argc, Code::Kind, Code::ExtraICState extra_state, Handle< String > name, Handle< Object > object, Handle< JSObject > holder, Handle< JSFunction > function)
 
Handle< Code > CompileStorePolymorphic(MapHandleList *receiver_maps, CodeHandleList *handler_stubs, MapHandleList *transitioned_maps)
 
static const char * GetStateName(State state)
 
MUST_USE_RESULT MaybeObject * Store(State state, StrictModeFlag strict_mode, Handle< Object > object, Handle< Object > name, Handle< Object > value, bool force_generic)
 
ThreadLocalTop * thread_local_top()
 
RelocInfo::Mode ComputeMode()
 
static Address AddressFromUtilityId(UtilityId id)
 
static Handle< Code > GetUninitialized(Token::Value op)
 
Handle< Code > ComputeKeyedLoadConstant(Handle< String > name, Handle< JSObject > receiver, Handle< JSObject > holder, Handle< JSFunction > value)
 
bool IsContextual(Handle< Object > receiver)
 
Failure * ReferenceError(const char *type, Handle< String > name)
 
Handle< Code > ComputeLoadGlobal(Handle< String > name, Handle< JSObject > receiver, Handle< GlobalObject > holder, Handle< JSGlobalPropertyCell > cell, bool is_dont_delete)
 
static JSObject * cast(Object *obj)
 
static MUST_USE_RESULT MaybeObject * GetElementOrCharAt(Isolate *isolate, Handle< Object > object, uint32_t index)
 
Handle< Code > ComputeMonomorphicStubWithoutMapCheck(Handle< Map > receiver_map, StrictModeFlag strict_mode, KeyedAccessGrowMode grow_mode)
 
static void Clear(Address address)
 
bool IsDictionaryElementsKind(ElementsKind kind)
 
Handle< Code > ComputeStoreCallback(Handle< String > name, Handle< JSObject > receiver, Handle< AccessorInfo > callback, StrictModeFlag strict_mode)
 
static bool IsOrderedRelationalCompareOp(Value op)
 
Handle< Code > ComputeStoreViaSetter(Handle< String > name, Handle< JSObject > receiver, Handle< JSFunction > setter, StrictModeFlag strict_mode)
 
static JSFunction * cast(Object *obj)