| 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();
|
|
|