| Index: src/elements.cc
|
| diff --git a/src/elements.cc b/src/elements.cc
|
| index 04546446174b251599d1c30f9638589481dbb9ec..f97aeda446d4cbc7b46349a752e8881ab7bc5ec5 100644
|
| --- a/src/elements.cc
|
| +++ b/src/elements.cc
|
| @@ -77,18 +77,17 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| uint32_t key,
|
| JSObject* obj,
|
| Object* receiver) {
|
| - return ElementsAccessorSubclass::Get(
|
| + return ElementsAccessorSubclass::GetImpl(
|
| BackingStoreClass::cast(backing_store), key, obj, receiver);
|
| }
|
|
|
| - static MaybeObject* Get(BackingStoreClass* backing_store,
|
| - uint32_t key,
|
| - JSObject* obj,
|
| - Object* receiver) {
|
| - if (key < ElementsAccessorSubclass::GetCapacity(backing_store)) {
|
| - return backing_store->get(key);
|
| - }
|
| - return backing_store->GetHeap()->the_hole_value();
|
| + static MaybeObject* GetImpl(BackingStoreClass* backing_store,
|
| + uint32_t key,
|
| + JSObject* obj,
|
| + Object* receiver) {
|
| + return (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store))
|
| + ? backing_store->get(key)
|
| + : backing_store->GetHeap()->the_hole_value();
|
| }
|
|
|
| virtual MaybeObject* Delete(JSObject* obj,
|
| @@ -108,7 +107,7 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| }
|
| #endif
|
| BackingStoreClass* backing_store = BackingStoreClass::cast(from);
|
| - uint32_t len1 = ElementsAccessorSubclass::GetCapacity(backing_store);
|
| + uint32_t len1 = ElementsAccessorSubclass::GetCapacityImpl(backing_store);
|
|
|
| // Optimize if 'other' is empty.
|
| // We cannot optimize if 'this' is empty, as other may have holes.
|
| @@ -117,14 +116,13 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| // Compute how many elements are not in other.
|
| int extra = 0;
|
| for (uint32_t y = 0; y < len1; y++) {
|
| - if (ElementsAccessorSubclass::HasElementAtIndex(backing_store,
|
| - y,
|
| - holder,
|
| - receiver)) {
|
| + if (ElementsAccessorSubclass::HasElementAtIndexImpl(
|
| + backing_store, y, holder, receiver)) {
|
| uint32_t key =
|
| - ElementsAccessorSubclass::GetKeyForIndex(backing_store, y);
|
| + ElementsAccessorSubclass::GetKeyForIndexImpl(backing_store, y);
|
| MaybeObject* maybe_value =
|
| - ElementsAccessorSubclass::Get(backing_store, key, holder, receiver);
|
| + ElementsAccessorSubclass::GetImpl(backing_store, key,
|
| + holder, receiver);
|
| Object* value;
|
| if (!maybe_value->ToObject(&value)) return maybe_value;
|
| ASSERT(!value->IsTheHole());
|
| @@ -155,14 +153,13 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| // Fill in the extra values.
|
| int index = 0;
|
| for (uint32_t y = 0; y < len1; y++) {
|
| - if (ElementsAccessorSubclass::HasElementAtIndex(backing_store,
|
| - y,
|
| - holder,
|
| - receiver)) {
|
| + if (ElementsAccessorSubclass::HasElementAtIndexImpl(
|
| + backing_store, y, holder, receiver)) {
|
| uint32_t key =
|
| - ElementsAccessorSubclass::GetKeyForIndex(backing_store, y);
|
| + ElementsAccessorSubclass::GetKeyForIndexImpl(backing_store, y);
|
| MaybeObject* maybe_value =
|
| - ElementsAccessorSubclass::Get(backing_store, key, holder, receiver);
|
| + ElementsAccessorSubclass::GetImpl(backing_store, key,
|
| + holder, receiver);
|
| Object* value;
|
| if (!maybe_value->ToObject(&value)) return maybe_value;
|
| if (!value->IsTheHole() && !HasKey(to, value)) {
|
| @@ -176,25 +173,23 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| }
|
|
|
| protected:
|
| - static uint32_t GetCapacity(BackingStoreClass* backing_store) {
|
| + static uint32_t GetCapacityImpl(BackingStoreClass* backing_store) {
|
| return backing_store->length();
|
| }
|
|
|
| virtual uint32_t GetCapacity(FixedArrayBase* backing_store) {
|
| - return ElementsAccessorSubclass::GetCapacity(
|
| + return ElementsAccessorSubclass::GetCapacityImpl(
|
| BackingStoreClass::cast(backing_store));
|
| }
|
|
|
| - static bool HasElementAtIndex(BackingStoreClass* backing_store,
|
| - uint32_t index,
|
| - JSObject* holder,
|
| - Object* receiver) {
|
| + static bool HasElementAtIndexImpl(BackingStoreClass* backing_store,
|
| + uint32_t index,
|
| + JSObject* holder,
|
| + Object* receiver) {
|
| uint32_t key =
|
| - ElementsAccessorSubclass::GetKeyForIndex(backing_store, index);
|
| - MaybeObject* element = ElementsAccessorSubclass::Get(backing_store,
|
| - key,
|
| - holder,
|
| - receiver);
|
| + ElementsAccessorSubclass::GetKeyForIndexImpl(backing_store, index);
|
| + MaybeObject* element =
|
| + ElementsAccessorSubclass::GetImpl(backing_store, key, holder, receiver);
|
| return !element->IsTheHole();
|
| }
|
|
|
| @@ -202,18 +197,18 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| uint32_t index,
|
| JSObject* holder,
|
| Object* receiver) {
|
| - return ElementsAccessorSubclass::HasElementAtIndex(
|
| + return ElementsAccessorSubclass::HasElementAtIndexImpl(
|
| BackingStoreClass::cast(backing_store), index, holder, receiver);
|
| }
|
|
|
| - static uint32_t GetKeyForIndex(BackingStoreClass* backing_store,
|
| - uint32_t index) {
|
| + static uint32_t GetKeyForIndexImpl(BackingStoreClass* backing_store,
|
| + uint32_t index) {
|
| return index;
|
| }
|
|
|
| virtual uint32_t GetKeyForIndex(FixedArrayBase* backing_store,
|
| uint32_t index) {
|
| - return ElementsAccessorSubclass::GetKeyForIndex(
|
| + return ElementsAccessorSubclass::GetKeyForIndexImpl(
|
| BackingStoreClass::cast(backing_store), index);
|
| }
|
|
|
| @@ -297,10 +292,10 @@ class FastDoubleElementsAccessor
|
| return obj->GetHeap()->true_value();
|
| }
|
|
|
| - static bool HasElementAtIndex(FixedDoubleArray* backing_store,
|
| - uint32_t index,
|
| - JSObject* holder,
|
| - Object* receiver) {
|
| + static bool HasElementAtIndexImpl(FixedDoubleArray* backing_store,
|
| + uint32_t index,
|
| + JSObject* holder,
|
| + Object* receiver) {
|
| return !backing_store->is_the_hole(index);
|
| }
|
| };
|
| @@ -316,15 +311,14 @@ class ExternalElementsAccessor
|
| friend class ElementsAccessorBase<ExternalElementsAccessorSubclass,
|
| ExternalArray>;
|
|
|
| - static MaybeObject* Get(ExternalArray* backing_store,
|
| - uint32_t key,
|
| - JSObject* obj,
|
| - Object* receiver) {
|
| - if (key < ExternalElementsAccessorSubclass::GetCapacity(backing_store)) {
|
| - return backing_store->get(key);
|
| - } else {
|
| - return backing_store->GetHeap()->undefined_value();
|
| - }
|
| + static MaybeObject* GetImpl(ExternalArray* backing_store,
|
| + uint32_t key,
|
| + JSObject* obj,
|
| + Object* receiver) {
|
| + return
|
| + key < ExternalElementsAccessorSubclass::GetCapacityImpl(backing_store)
|
| + ? backing_store->get(key)
|
| + : backing_store->GetHeap()->undefined_value();
|
| }
|
|
|
| virtual MaybeObject* Delete(JSObject* obj,
|
| @@ -449,10 +443,10 @@ class DictionaryElementsAccessor
|
| return DeleteCommon(obj, key, mode);
|
| }
|
|
|
| - static MaybeObject* Get(SeededNumberDictionary* backing_store,
|
| - uint32_t key,
|
| - JSObject* obj,
|
| - Object* receiver) {
|
| + static MaybeObject* GetImpl(SeededNumberDictionary* backing_store,
|
| + uint32_t key,
|
| + JSObject* obj,
|
| + Object* receiver) {
|
| int entry = backing_store->FindEntry(key);
|
| if (entry != SeededNumberDictionary::kNotFound) {
|
| Object* element = backing_store->ValueAt(entry);
|
| @@ -469,8 +463,8 @@ class DictionaryElementsAccessor
|
| return obj->GetHeap()->the_hole_value();
|
| }
|
|
|
| - static uint32_t GetKeyForIndex(SeededNumberDictionary* dict,
|
| - uint32_t index) {
|
| + static uint32_t GetKeyForIndexImpl(SeededNumberDictionary* dict,
|
| + uint32_t index) {
|
| Object* key = dict->KeyAt(index);
|
| return Smi::cast(key)->value();
|
| }
|
| @@ -484,10 +478,10 @@ class NonStrictArgumentsElementsAccessor
|
| friend class ElementsAccessorBase<NonStrictArgumentsElementsAccessor,
|
| FixedArray>;
|
|
|
| - static MaybeObject* Get(FixedArray* parameter_map,
|
| - uint32_t key,
|
| - JSObject* obj,
|
| - Object* receiver) {
|
| + static MaybeObject* GetImpl(FixedArray* parameter_map,
|
| + uint32_t key,
|
| + JSObject* obj,
|
| + Object* receiver) {
|
| Object* probe = GetParameterMapArg(parameter_map, key);
|
| if (!probe->IsTheHole()) {
|
| Context* context = Context::cast(parameter_map->get(0));
|
| @@ -526,21 +520,21 @@ class NonStrictArgumentsElementsAccessor
|
| return obj->GetHeap()->true_value();
|
| }
|
|
|
| - static uint32_t GetCapacity(FixedArray* parameter_map) {
|
| + static uint32_t GetCapacityImpl(FixedArray* parameter_map) {
|
| FixedArrayBase* arguments = FixedArrayBase::cast(parameter_map->get(1));
|
| return Max(static_cast<uint32_t>(parameter_map->length() - 2),
|
| ForArray(arguments)->GetCapacity(arguments));
|
| }
|
|
|
| - static uint32_t GetKeyForIndex(FixedArray* dict,
|
| - uint32_t index) {
|
| + static uint32_t GetKeyForIndexImpl(FixedArray* dict,
|
| + uint32_t index) {
|
| return index;
|
| }
|
|
|
| - static bool HasElementAtIndex(FixedArray* parameter_map,
|
| - uint32_t index,
|
| - JSObject* holder,
|
| - Object* receiver) {
|
| + static bool HasElementAtIndexImpl(FixedArray* parameter_map,
|
| + uint32_t index,
|
| + JSObject* holder,
|
| + Object* receiver) {
|
| Object* probe = GetParameterMapArg(parameter_map, index);
|
| if (!probe->IsTheHole()) {
|
| return true;
|
|
|