Index: src/ic.cc |
diff --git a/src/ic.cc b/src/ic.cc |
index 66f057440424c8e68f67a6496e94847ba8ab5641..096af266655dd83c9dd4f3f67df1c05192e8dcb3 100644 |
--- a/src/ic.cc |
+++ b/src/ic.cc |
@@ -482,8 +482,8 @@ void LoadIC::Clear(Isolate* isolate, |
Code* target, |
ConstantPoolArray* constant_pool) { |
if (IsCleared(target)) return; |
- Code* code = target->GetIsolate()->stub_cache()->FindPreMonomorphicIC( |
- Code::LOAD_IC, target->extra_ic_state()); |
+ Code* code = PropertyICCompiler::FindPreMonomorphicIC( |
+ isolate, Code::LOAD_IC, target->extra_ic_state()); |
SetTargetAtAddress(address, code, constant_pool); |
} |
@@ -493,8 +493,8 @@ void StoreIC::Clear(Isolate* isolate, |
Code* target, |
ConstantPoolArray* constant_pool) { |
if (IsCleared(target)) return; |
- Code* code = target->GetIsolate()->stub_cache()->FindPreMonomorphicIC( |
- Code::STORE_IC, target->extra_ic_state()); |
+ Code* code = PropertyICCompiler::FindPreMonomorphicIC( |
+ isolate, Code::STORE_IC, target->extra_ic_state()); |
SetTargetAtAddress(address, code, constant_pool); |
} |
@@ -660,8 +660,8 @@ bool IC::UpdatePolymorphicIC(Handle<String> name, Handle<Code> code) { |
if (number_of_valid_types > 1 && target()->is_keyed_stub()) return false; |
Handle<Code> ic; |
if (number_of_valid_types == 1) { |
- ic = isolate()->stub_cache()->ComputeMonomorphicIC(kind(), name, type, code, |
- extra_ic_state()); |
+ ic = PropertyICCompiler::ComputeMonomorphicIC(kind(), name, type, code, |
+ extra_ic_state()); |
} else { |
if (handler_to_overwrite >= 0) { |
handlers.Set(handler_to_overwrite, code); |
@@ -672,9 +672,9 @@ bool IC::UpdatePolymorphicIC(Handle<String> name, Handle<Code> code) { |
types.Add(type); |
handlers.Add(code); |
} |
- ic = isolate()->stub_cache()->ComputePolymorphicIC( |
- kind(), &types, &handlers, number_of_valid_types, name, |
- extra_ic_state()); |
+ ic = PropertyICCompiler::ComputePolymorphicIC(kind(), &types, &handlers, |
+ number_of_valid_types, name, |
+ extra_ic_state()); |
} |
set_target(*ic); |
return true; |
@@ -725,7 +725,7 @@ Handle<HeapType> IC::MapToType<HeapType>(Handle<Map> map, Isolate* region); |
void IC::UpdateMonomorphicIC(Handle<Code> handler, Handle<String> name) { |
if (!handler->is_handler()) return set_target(*handler); |
- Handle<Code> ic = isolate()->stub_cache()->ComputeMonomorphicIC( |
+ Handle<Code> ic = PropertyICCompiler::ComputeMonomorphicIC( |
kind(), name, receiver_type(), handler, extra_ic_state()); |
set_target(*ic); |
} |
@@ -786,13 +786,14 @@ void IC::PatchCache(Handle<String> name, Handle<Code> code) { |
Handle<Code> LoadIC::initialize_stub(Isolate* isolate, |
ExtraICState extra_state) { |
- return isolate->stub_cache()->ComputeLoad(UNINITIALIZED, extra_state); |
+ return PropertyICCompiler::ComputeLoad(isolate, UNINITIALIZED, extra_state); |
} |
Handle<Code> LoadIC::megamorphic_stub() { |
if (kind() == Code::LOAD_IC) { |
- return isolate()->stub_cache()->ComputeLoad(MEGAMORPHIC, extra_ic_state()); |
+ return PropertyICCompiler::ComputeLoad(isolate(), MEGAMORPHIC, |
+ extra_ic_state()); |
} else { |
ASSERT_EQ(Code::KEYED_LOAD_IC, kind()); |
return KeyedLoadIC::generic_stub(isolate()); |
@@ -802,7 +803,7 @@ Handle<Code> LoadIC::megamorphic_stub() { |
Handle<Code> LoadIC::pre_monomorphic_stub(Isolate* isolate, |
ExtraICState extra_state) { |
- return isolate->stub_cache()->ComputeLoad(PREMONOMORPHIC, extra_state); |
+ return PropertyICCompiler::ComputeLoad(isolate, PREMONOMORPHIC, extra_state); |
} |
@@ -845,8 +846,8 @@ void LoadIC::UpdateCaches(LookupResult* lookup, |
code = slow_stub(); |
} else if (!lookup->IsProperty()) { |
if (kind() == Code::LOAD_IC) { |
- code = isolate()->stub_cache()->ComputeLoadNonexistent(name, |
- receiver_type()); |
+ code = NamedLoadHandlerCompiler::ComputeLoadNonexistent(name, |
+ receiver_type()); |
// TODO(jkummerow/verwaest): Introduce a builtin that handles this case. |
if (code.is_null()) code = slow_stub(); |
} else { |
@@ -1072,7 +1073,7 @@ Handle<Code> KeyedLoadIC::LoadElementStub(Handle<JSObject> receiver) { |
TargetMaps(&target_receiver_maps); |
} |
if (target_receiver_maps.length() == 0) { |
- return isolate()->stub_cache()->ComputeKeyedLoadElement(receiver_map); |
+ return PropertyICCompiler::ComputeKeyedLoadElement(receiver_map); |
} |
// The first time a receiver is seen that is a transitioned version of the |
@@ -1086,7 +1087,7 @@ Handle<Code> KeyedLoadIC::LoadElementStub(Handle<JSObject> receiver) { |
IsMoreGeneralElementsKindTransition( |
target_receiver_maps.at(0)->elements_kind(), |
receiver->GetElementsKind())) { |
- return isolate()->stub_cache()->ComputeKeyedLoadElement(receiver_map); |
+ return PropertyICCompiler::ComputeKeyedLoadElement(receiver_map); |
} |
ASSERT(state() != GENERIC); |
@@ -1107,7 +1108,7 @@ Handle<Code> KeyedLoadIC::LoadElementStub(Handle<JSObject> receiver) { |
return generic_stub(); |
} |
- return isolate()->stub_cache()->ComputeLoadElementPolymorphic( |
+ return PropertyICCompiler::ComputeLoadElementPolymorphic( |
&target_receiver_maps); |
} |
@@ -1341,26 +1342,27 @@ Handle<Code> CallIC::initialize_stub(Isolate* isolate, |
Handle<Code> StoreIC::initialize_stub(Isolate* isolate, |
StrictMode strict_mode) { |
ExtraICState extra_state = ComputeExtraICState(strict_mode); |
- Handle<Code> ic = isolate->stub_cache()->ComputeStore( |
- UNINITIALIZED, extra_state); |
+ Handle<Code> ic = |
+ PropertyICCompiler::ComputeStore(isolate, UNINITIALIZED, extra_state); |
return ic; |
} |
Handle<Code> StoreIC::megamorphic_stub() { |
- return isolate()->stub_cache()->ComputeStore(MEGAMORPHIC, extra_ic_state()); |
+ return PropertyICCompiler::ComputeStore(isolate(), MEGAMORPHIC, |
+ extra_ic_state()); |
} |
Handle<Code> StoreIC::generic_stub() const { |
- return isolate()->stub_cache()->ComputeStore(GENERIC, extra_ic_state()); |
+ return PropertyICCompiler::ComputeStore(isolate(), GENERIC, extra_ic_state()); |
} |
Handle<Code> StoreIC::pre_monomorphic_stub(Isolate* isolate, |
StrictMode strict_mode) { |
ExtraICState state = ComputeExtraICState(strict_mode); |
- return isolate->stub_cache()->ComputeStore(PREMONOMORPHIC, state); |
+ return PropertyICCompiler::ComputeStore(isolate, PREMONOMORPHIC, state); |
} |
@@ -1492,7 +1494,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver, |
Handle<Map> monomorphic_map = |
ComputeTransitionedMap(receiver_map, store_mode); |
store_mode = GetNonTransitioningStoreMode(store_mode); |
- return isolate()->stub_cache()->ComputeKeyedStoreElement( |
+ return PropertyICCompiler::ComputeKeyedStoreElement( |
monomorphic_map, strict_mode(), store_mode); |
} |
@@ -1517,7 +1519,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver, |
// if they at least come from the same origin for a transitioning store, |
// stay MONOMORPHIC and use the map for the most generic ElementsKind. |
store_mode = GetNonTransitioningStoreMode(store_mode); |
- return isolate()->stub_cache()->ComputeKeyedStoreElement( |
+ return PropertyICCompiler::ComputeKeyedStoreElement( |
transitioned_receiver_map, strict_mode(), store_mode); |
} else if (*previous_receiver_map == receiver->map() && |
old_store_mode == STANDARD_STORE && |
@@ -1527,7 +1529,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver, |
// A "normal" IC that handles stores can switch to a version that can |
// grow at the end of the array, handle OOB accesses or copy COW arrays |
// and still stay MONOMORPHIC. |
- return isolate()->stub_cache()->ComputeKeyedStoreElement( |
+ return PropertyICCompiler::ComputeKeyedStoreElement( |
receiver_map, strict_mode(), store_mode); |
} |
} |
@@ -1589,7 +1591,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver, |
} |
} |
- return isolate()->stub_cache()->ComputeStoreElementPolymorphic( |
+ return PropertyICCompiler::ComputeStoreElementPolymorphic( |
&target_receiver_maps, store_mode, strict_mode()); |
} |
@@ -2942,7 +2944,7 @@ Handle<Object> CompareNilIC::CompareNil(Handle<Object> object) { |
Handle<Map> monomorphic_map(already_monomorphic && FirstTargetMap() != NULL |
? FirstTargetMap() |
: HeapObject::cast(*object)->map()); |
- code = isolate()->stub_cache()->ComputeCompareNil(monomorphic_map, &stub); |
+ code = PropertyICCompiler::ComputeCompareNil(monomorphic_map, &stub); |
} else { |
code = stub.GetCode(); |
} |