Index: src/ic.cc |
diff --git a/src/ic.cc b/src/ic.cc |
index fd8c27045d4b6a50efc6c801cfaba92c341d0442..669dc54a0e3c906aabcc0b185f6a2b0e74719321 100644 |
--- a/src/ic.cc |
+++ b/src/ic.cc |
@@ -1097,16 +1097,6 @@ void LoadIC::UpdateCaches(LookupResult* lookup, |
} |
-String* KeyedLoadIC::GetStubNameForCache(IC::State ic_state) { |
- if (ic_state == MONOMORPHIC) { |
- return isolate()->heap()->KeyedLoadElementMonomorphic_symbol(); |
- } else { |
- ASSERT(ic_state == MEGAMORPHIC); |
- return isolate()->heap()->KeyedLoadElementPolymorphic_symbol(); |
- } |
-} |
- |
- |
MaybeObject* KeyedLoadIC::GetFastElementStubWithoutMapCheck( |
bool is_js_array) { |
return KeyedLoadFastElementStub().TryGetCode(); |
@@ -1634,18 +1624,14 @@ MaybeObject* KeyedIC::ComputeStub(JSObject* receiver, |
StrictModeFlag strict_mode, |
Code* generic_stub) { |
State ic_state = target()->ic_state(); |
- Code* monomorphic_stub; |
- // Always compute the MONOMORPHIC stub, even if the MEGAMORPHIC stub ends up |
- // being used. This is necessary because the megamorphic stub needs to have |
- // access to more information than what is stored in the receiver map in some |
- // cases (external arrays need the array type from the MONOMORPHIC stub). |
- MaybeObject* maybe_stub = ComputeMonomorphicStub(receiver, |
- is_store, |
- strict_mode, |
- generic_stub); |
- if (!maybe_stub->To(&monomorphic_stub)) return maybe_stub; |
- |
if (ic_state == UNINITIALIZED || ic_state == PREMONOMORPHIC) { |
+ Code* monomorphic_stub; |
+ MaybeObject* maybe_stub = ComputeMonomorphicStub(receiver, |
+ is_store, |
+ strict_mode, |
+ generic_stub); |
+ if (!maybe_stub->To(&monomorphic_stub)) return maybe_stub; |
+ |
return monomorphic_stub; |
} |
ASSERT(target() != generic_stub); |
@@ -1696,9 +1682,9 @@ MaybeObject* KeyedIC::ComputeStub(JSObject* receiver, |
} |
// Build the MEGAMORPHIC stub. |
Code* stub; |
- maybe_stub = ConstructMegamorphicStub(&target_receiver_maps, |
- &handler_ics, |
- strict_mode); |
+ MaybeObject* maybe_stub = ConstructMegamorphicStub(&target_receiver_maps, |
+ &handler_ics, |
+ strict_mode); |
if (!maybe_stub->To(&stub)) return maybe_stub; |
MaybeObject* maybe_update = cache->Update(&target_receiver_maps, flags, stub); |
if (maybe_update->IsFailure()) return maybe_update; |
@@ -1714,22 +1700,7 @@ MaybeObject* KeyedIC::ComputeMonomorphicStubWithoutMapCheck( |
ASSERT(string_stub() != NULL); |
return string_stub(); |
} else if (receiver_map->has_external_array_elements()) { |
- // Determine the array type from the default MONOMORPHIC already generated |
- // stub. There is no other way to determine the type of the external array |
- // directly from the receiver type. |
- Code::Kind kind = this->kind(); |
- Code::Flags flags = Code::ComputeMonomorphicFlags(kind, |
- NORMAL, |
- strict_mode); |
- String* monomorphic_name = GetStubNameForCache(MONOMORPHIC); |
- Object* maybe_default_stub = receiver_map->FindInCodeCache(monomorphic_name, |
- flags); |
- if (maybe_default_stub->IsUndefined()) { |
- return generic_stub; |
- } |
- Code* default_stub = Code::cast(maybe_default_stub); |
- Map* first_map = default_stub->FindFirstMap(); |
- return GetExternalArrayStubWithoutMapCheck(first_map->elements_kind()); |
+ return GetExternalArrayStubWithoutMapCheck(receiver_map->elements_kind()); |
} else if (receiver_map->has_fast_elements()) { |
bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; |
return GetFastElementStubWithoutMapCheck(is_js_array); |
@@ -1758,16 +1729,6 @@ MaybeObject* KeyedIC::ComputeMonomorphicStub(JSObject* receiver, |
} |
-String* KeyedStoreIC::GetStubNameForCache(IC::State ic_state) { |
- if (ic_state == MONOMORPHIC) { |
- return isolate()->heap()->KeyedStoreElementMonomorphic_symbol(); |
- } else { |
- ASSERT(ic_state == MEGAMORPHIC); |
- return isolate()->heap()->KeyedStoreElementPolymorphic_symbol(); |
- } |
-} |
- |
- |
MaybeObject* KeyedStoreIC::GetFastElementStubWithoutMapCheck( |
bool is_js_array) { |
return KeyedStoreFastElementStub(is_js_array).TryGetCode(); |