Index: src/ic.cc |
diff --git a/src/ic.cc b/src/ic.cc |
index 194b188585ad370703835a0239fa245acf017214..9a277d6c0c2afff1f95196f74ba3a7a9029a50cb 100644 |
--- a/src/ic.cc |
+++ b/src/ic.cc |
@@ -1204,27 +1204,23 @@ MaybeObject* KeyedLoadIC::Load(State state, |
if (use_ic) { |
Code* stub = generic_stub(); |
- 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 = |
+ 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 = |
+ stub = |
probe->IsFailure() ? NULL : Code::cast(probe->ToObjectUnchecked()); |
- } else if (receiver->HasPixelElements()) { |
- stub = pixel_array_stub(); |
- } else if (receiver->HasIndexedInterceptor()) { |
- stub = indexed_interceptor_stub(); |
- } else if (key->IsSmi() && |
- receiver->map()->has_fast_elements()) { |
- MaybeObject* probe = |
- StubCache::ComputeKeyedLoadSpecialized(*receiver); |
- stub = |
+ } 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 (stub != NULL) set_target(stub); |