| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index 9a277d6c0c2afff1f95196f74ba3a7a9029a50cb..0eb24c50d7f37e00e10ce4d94f5fdda2ad11468e 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -1204,23 +1204,31 @@ MaybeObject* KeyedLoadIC::Load(State state,
|
|
|
| if (use_ic) {
|
| Code* stub = generic_stub();
|
| - if (object->IsString() && key->IsNumber()) {
|
| - stub = string_stub();
|
| - } else if (object->IsJSObject()) {
|
| - Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
| - if (receiver->HasExternalArrayElements()) {
|
| - MaybeObject* probe =
|
| - StubCache::ComputeKeyedLoadOrStoreExternalArray(*receiver, false);
|
| - stub =
|
| - probe->IsFailure() ? NULL : Code::cast(probe->ToObjectUnchecked());
|
| - } else if (receiver->HasIndexedInterceptor()) {
|
| - stub = indexed_interceptor_stub();
|
| - } else if (state == UNINITIALIZED &&
|
| - key->IsSmi() &&
|
| - receiver->map()->has_fast_elements()) {
|
| - MaybeObject* probe = StubCache::ComputeKeyedLoadSpecialized(*receiver);
|
| - stub =
|
| - probe->IsFailure() ? NULL : Code::cast(probe->ToObjectUnchecked());
|
| + if (state == UNINITIALIZED) {
|
| + if (object->IsString() && key->IsNumber()) {
|
| + stub = string_stub();
|
| + } else if (object->IsJSObject()) {
|
| + Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
| + if (receiver->HasExternalArrayElements()) {
|
| + MaybeObject* probe =
|
| + StubCache::ComputeKeyedLoadOrStoreExternalArray(*receiver,
|
| + false);
|
| + stub = probe->IsFailure() ?
|
| + NULL : Code::cast(probe->ToObjectUnchecked());
|
| + } else if (receiver->HasIndexedInterceptor()) {
|
| + stub = indexed_interceptor_stub();
|
| + } else if (receiver->HasPixelElements()) {
|
| + MaybeObject* probe =
|
| + StubCache::ComputeKeyedLoadPixelArray(*receiver);
|
| + stub = probe->IsFailure() ?
|
| + NULL : Code::cast(probe->ToObjectUnchecked());
|
| + } else if (key->IsSmi() &&
|
| + receiver->map()->has_fast_elements()) {
|
| + MaybeObject* probe =
|
| + StubCache::ComputeKeyedLoadSpecialized(*receiver);
|
| + stub = probe->IsFailure() ?
|
| + NULL : Code::cast(probe->ToObjectUnchecked());
|
| + }
|
| }
|
| }
|
| if (stub != NULL) set_target(stub);
|
|
|