| Index: src/ic.cc
|
| ===================================================================
|
| --- src/ic.cc (revision 6406)
|
| +++ src/ic.cc (working copy)
|
| @@ -367,55 +367,6 @@
|
| }
|
|
|
|
|
| -Code* KeyedLoadIC::external_array_stub(JSObject::ElementsKind elements_kind) {
|
| - switch (elements_kind) {
|
| - case JSObject::EXTERNAL_BYTE_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedLoadIC_ExternalByteArray);
|
| - case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedLoadIC_ExternalUnsignedByteArray);
|
| - case JSObject::EXTERNAL_SHORT_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedLoadIC_ExternalShortArray);
|
| - case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
|
| - return Builtins::builtin(
|
| - Builtins::KeyedLoadIC_ExternalUnsignedShortArray);
|
| - case JSObject::EXTERNAL_INT_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedLoadIC_ExternalIntArray);
|
| - case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedLoadIC_ExternalUnsignedIntArray);
|
| - case JSObject::EXTERNAL_FLOAT_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedLoadIC_ExternalFloatArray);
|
| - default:
|
| - UNREACHABLE();
|
| - return NULL;
|
| - }
|
| -}
|
| -
|
| -
|
| -Code* KeyedStoreIC::external_array_stub(JSObject::ElementsKind elements_kind) {
|
| - switch (elements_kind) {
|
| - case JSObject::EXTERNAL_BYTE_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedStoreIC_ExternalByteArray);
|
| - case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
|
| - return Builtins::builtin(
|
| - Builtins::KeyedStoreIC_ExternalUnsignedByteArray);
|
| - case JSObject::EXTERNAL_SHORT_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedStoreIC_ExternalShortArray);
|
| - case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
|
| - return Builtins::builtin(
|
| - Builtins::KeyedStoreIC_ExternalUnsignedShortArray);
|
| - case JSObject::EXTERNAL_INT_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedStoreIC_ExternalIntArray);
|
| - case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedStoreIC_ExternalUnsignedIntArray);
|
| - case JSObject::EXTERNAL_FLOAT_ELEMENTS:
|
| - return Builtins::builtin(Builtins::KeyedStoreIC_ExternalFloatArray);
|
| - default:
|
| - UNREACHABLE();
|
| - return NULL;
|
| - }
|
| -}
|
| -
|
| -
|
| static bool HasInterceptorGetter(JSObject* object) {
|
| return !object->GetNamedInterceptor()->getter()->IsUndefined();
|
| }
|
| @@ -1243,7 +1194,10 @@
|
| } else if (object->IsJSObject()) {
|
| Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
| if (receiver->HasExternalArrayElements()) {
|
| - stub = external_array_stub(receiver->GetElementsKind());
|
| + 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 &&
|
| @@ -1636,7 +1590,10 @@
|
| if (object->IsJSObject()) {
|
| Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
| if (receiver->HasExternalArrayElements()) {
|
| - stub = external_array_stub(receiver->GetElementsKind());
|
| + 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()) {
|
|
|