| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index 62ab0f213e9302a7d182ffd406bcfb9ea0482b3e..968b45d0b61f4ac27c102cdc8dae927cc8c51ff2 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -1632,19 +1632,25 @@ MaybeObject* KeyedStoreIC::Store(State state,
|
|
|
| if (use_ic) {
|
| Code* stub = generic_stub();
|
| - if (object->IsJSObject()) {
|
| - Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
| - if (receiver->HasExternalArrayElements()) {
|
| - MaybeObject* probe =
|
| - StubCache::ComputeKeyedLoadOrStoreExternalArray(*receiver, true);
|
| - stub =
|
| - probe->IsFailure() ? NULL : Code::cast(probe->ToObjectUnchecked());
|
| - } else if (state == UNINITIALIZED &&
|
| - key->IsSmi() &&
|
| - receiver->map()->has_fast_elements()) {
|
| - MaybeObject* probe = StubCache::ComputeKeyedStoreSpecialized(*receiver);
|
| - stub =
|
| - probe->IsFailure() ? NULL : Code::cast(probe->ToObjectUnchecked());
|
| + if (state == UNINITIALIZED) {
|
| + if (object->IsJSObject()) {
|
| + Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
| + if (receiver->HasExternalArrayElements()) {
|
| + MaybeObject* probe =
|
| + StubCache::ComputeKeyedLoadOrStoreExternalArray(*receiver, true);
|
| + stub = probe->IsFailure() ?
|
| + NULL : Code::cast(probe->ToObjectUnchecked());
|
| + } else if (receiver->HasPixelElements()) {
|
| + MaybeObject* probe =
|
| + StubCache::ComputeKeyedStorePixelArray(*receiver);
|
| + stub = probe->IsFailure() ?
|
| + NULL : Code::cast(probe->ToObjectUnchecked());
|
| + } else if (key->IsSmi() && receiver->map()->has_fast_elements()) {
|
| + MaybeObject* probe =
|
| + StubCache::ComputeKeyedStoreSpecialized(*receiver);
|
| + stub = probe->IsFailure() ?
|
| + NULL : Code::cast(probe->ToObjectUnchecked());
|
| + }
|
| }
|
| }
|
| if (stub != NULL) set_target(stub);
|
|
|