| 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()) {
 | 
| 
 |