Index: src/elements.cc |
diff --git a/src/elements.cc b/src/elements.cc |
index e4ecfe8dd63df799b4bd083f59b849808c6e5973..5da7a597087eb208456073a81c971067d2656d83 100644 |
--- a/src/elements.cc |
+++ b/src/elements.cc |
@@ -191,11 +191,8 @@ class ElementsAccessorBase : public ElementsAccessor { |
Object* receiver) { |
uint32_t key = |
ElementsAccessorSubclass::GetKeyForIndex(backing_store, index); |
- MaybeObject* element = ElementsAccessorSubclass::Get(backing_store, |
- key, |
- holder, |
- receiver); |
- return !element->IsTheHole(); |
+ return ElementsAccessorSubclass::HasElementAtKey( |
+ backing_store, key, holder, receiver); |
} |
virtual bool HasElementAtIndex(FixedArrayBase* backing_store, |
@@ -206,13 +203,30 @@ class ElementsAccessorBase : public ElementsAccessor { |
BackingStoreClass::cast(backing_store), index, holder, receiver); |
} |
+ static bool HasElementAtKey(BackingStoreClass* backing_store, |
+ uint32_t key, |
+ JSObject* holder, |
+ Object* receiver) { |
+ MaybeObject* element = ElementsAccessorSubclass::Get( |
+ backing_store, key, holder, receiver); |
+ return !element->IsTheHole(); |
+ } |
+ |
+ virtual bool HasElementAtKey(FixedArrayBase* backing_store, |
+ uint32_t key, |
+ JSObject* holder, |
+ Object* receiver) { |
+ return ElementsAccessorSubclass::HasElementAtKey( |
+ BackingStoreClass::cast(backing_store), key, holder, receiver); |
+ } |
+ |
static uint32_t GetKeyForIndex(BackingStoreClass* backing_store, |
uint32_t index) { |
return index; |
} |
virtual uint32_t GetKeyForIndex(FixedArrayBase* backing_store, |
- uint32_t index) { |
+ uint32_t index) { |
return ElementsAccessorSubclass::GetKeyForIndex( |
BackingStoreClass::cast(backing_store), index); |
} |
@@ -333,6 +347,13 @@ class ExternalElementsAccessor |
// External arrays always ignore deletes. |
return obj->GetHeap()->true_value(); |
} |
+ |
+ static bool HasElementAtKey(ExternalArray* backing_store, |
+ uint32_t key, |
+ JSObject* holder, |
+ Object* receiver) { |
+ return key < ExternalElementsAccessorSubclass::GetCapacity(backing_store); |
+ } |
}; |