| Index: src/ic.cc
|
| ===================================================================
|
| --- src/ic.cc (revision 6378)
|
| +++ src/ic.cc (working copy)
|
| @@ -367,6 +367,55 @@
|
| }
|
|
|
|
|
| +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();
|
| }
|
| @@ -1194,10 +1243,7 @@
|
| } 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());
|
| + stub = external_array_stub(receiver->GetElementsKind());
|
| } else if (receiver->HasIndexedInterceptor()) {
|
| stub = indexed_interceptor_stub();
|
| } else if (state == UNINITIALIZED &&
|
| @@ -1590,10 +1636,7 @@
|
| 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());
|
| + stub = external_array_stub(receiver->GetElementsKind());
|
| } else if (state == UNINITIALIZED &&
|
| key->IsSmi() &&
|
| receiver->map()->has_fast_elements()) {
|
|
|