| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index 55d7ba936fb3068d105d2af10673aa31b4d1896c..283b72c83413d3741f80171b4b15497ab206d79b 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -1971,15 +1971,17 @@ MaybeObject* KeyedStoreIC::Store(Handle<Object> object,
|
| if (miss_mode != MISS_FORCE_GENERIC) {
|
| if (object->IsJSObject()) {
|
| Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
| - bool key_is_smi_like = key->IsSmi() || !key->ToSmi()->IsFailure();
|
| - if (receiver->elements()->map() ==
|
| - isolate()->heap()->non_strict_arguments_elements_map()) {
|
| - stub = non_strict_arguments_stub();
|
| - } else if (key_is_smi_like &&
|
| - (!target().is_identical_to(non_strict_arguments_stub()))) {
|
| - KeyedAccessStoreMode store_mode =
|
| - GetStoreMode(receiver, key, value);
|
| - stub = StoreElementStub(receiver, store_mode);
|
| + if (!receiver->map()->DictionaryElementsInPrototypeChain()) {
|
| + bool key_is_smi_like = key->IsSmi() || !key->ToSmi()->IsFailure();
|
| + if (receiver->elements()->map() ==
|
| + isolate()->heap()->non_strict_arguments_elements_map()) {
|
| + stub = non_strict_arguments_stub();
|
| + } else if (key_is_smi_like &&
|
| + !target().is_identical_to(non_strict_arguments_stub())) {
|
| + KeyedAccessStoreMode store_mode =
|
| + GetStoreMode(receiver, key, value);
|
| + stub = StoreElementStub(receiver, store_mode);
|
| + }
|
| }
|
| }
|
| }
|
| @@ -2270,9 +2272,14 @@ RUNTIME_FUNCTION(MaybeObject*, ElementsTransitionAndStoreIC_Miss) {
|
| ASSERT(args.length() == 4);
|
| KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate);
|
| Handle<Object> value = args.at<Object>(0);
|
| + Handle<Map> map = args.at<Map>(1);
|
| Handle<Object> key = args.at<Object>(2);
|
| Handle<Object> object = args.at<Object>(3);
|
| StrictModeFlag strict_mode = ic.strict_mode();
|
| + if (object->IsJSObject()) {
|
| + JSObject::TransitionElementsKind(Handle<JSObject>::cast(object),
|
| + map->elements_kind());
|
| + }
|
| return Runtime::SetObjectProperty(isolate,
|
| object,
|
| key,
|
|
|