Index: src/ic.cc |
diff --git a/src/ic.cc b/src/ic.cc |
index 7f4d1cd27046644f266fa33f61a45d0c378eabee..f1e3c5539d64fbd9f74cc0de671edc62a2cb3db6 100644 |
--- a/src/ic.cc |
+++ b/src/ic.cc |
@@ -1599,7 +1599,10 @@ KeyedAccessStoreMode KeyedStoreIC::GetStoreMode(Handle<JSObject> receiver, |
key->ToSmi()->To(&smi_key); |
int index = smi_key->value(); |
bool oob_access = IsOutOfBoundsAccess(receiver, index); |
- bool allow_growth = receiver->IsJSArray() && oob_access; |
+ // Don't consider this a growing store if the store would send the receiver to |
+ // dictionary mode. |
+ bool allow_growth = receiver->IsJSArray() && oob_access && |
+ !receiver->WouldConvertToSlowElements(key); |
if (allow_growth) { |
// Handle growing array in stub if necessary. |
if (receiver->HasFastSmiElements()) { |
@@ -1724,12 +1727,7 @@ MaybeObject* KeyedStoreIC::Store(Handle<Object> object, |
if (!(receiver->map()->DictionaryElementsInPrototypeChainOnly())) { |
KeyedAccessStoreMode store_mode = |
GetStoreMode(receiver, key, value); |
- // Use the generic stub if the store would send the receiver to |
- // dictionary mode. |
- if (!IsGrowStoreMode(store_mode) || |
- !receiver->WouldConvertToSlowElements(key)) { |
- stub = StoreElementStub(receiver, store_mode); |
- } |
+ stub = StoreElementStub(receiver, store_mode); |
} |
} |
} |