| Index: src/elements.cc
|
| diff --git a/src/elements.cc b/src/elements.cc
|
| index e54ec626912aea968abf4c9682cdf28a1027225a..b62e144e3be5daa8048037d57921f8e77414b5a4 100644
|
| --- a/src/elements.cc
|
| +++ b/src/elements.cc
|
| @@ -109,30 +109,29 @@ 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* SetLength(JSObject* obj,
|
| Object* length) {
|
| ASSERT(obj->IsJSArray());
|
| - return ElementsAccessorSubclass::SetLength(
|
| + return ElementsAccessorSubclass::SetLengthImpl(
|
| BackingStoreClass::cast(obj->elements()), obj, length);
|
| }
|
|
|
| - static MaybeObject* SetLength(BackingStoreClass* backing_store,
|
| - JSObject* obj,
|
| - Object* length);
|
| + static MaybeObject* SetLengthImpl(BackingStoreClass* backing_store,
|
| + JSObject* obj,
|
| + Object* length);
|
|
|
| virtual MaybeObject* SetCapacityAndLength(JSArray* array,
|
| int capacity,
|
| @@ -167,7 +166,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.
|
| @@ -176,14 +175,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());
|
| @@ -214,14 +212,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)) {
|
| @@ -235,25 +232,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();
|
| }
|
|
|
| @@ -261,18 +256,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);
|
| }
|
|
|
| @@ -446,10 +441,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);
|
| }
|
| };
|
| @@ -465,20 +460,19 @@ 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();
|
| }
|
|
|
| - static MaybeObject* SetLength(ExternalArray* backing_store,
|
| - JSObject* obj,
|
| - Object* length) {
|
| + static MaybeObject* SetLengthImpl(ExternalArray* backing_store,
|
| + JSObject* obj,
|
| + Object* length) {
|
| // External arrays do not support changing their length.
|
| UNREACHABLE();
|
| return obj;
|
| @@ -663,10 +657,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);
|
| @@ -683,8 +677,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();
|
| }
|
| @@ -698,10 +692,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));
|
| @@ -718,9 +712,9 @@ class NonStrictArgumentsElementsAccessor
|
| }
|
| }
|
|
|
| - static MaybeObject* SetLength(FixedArray* parameter_map,
|
| - JSObject* obj,
|
| - Object* length) {
|
| + static MaybeObject* SetLengthImpl(FixedArray* parameter_map,
|
| + JSObject* obj,
|
| + Object* length) {
|
| // TODO(mstarzinger): This was never implemented but will be used once we
|
| // correctly implement [[DefineOwnProperty]] on arrays.
|
| UNIMPLEMENTED();
|
| @@ -748,21 +742,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;
|
| @@ -866,9 +860,9 @@ void ElementsAccessor::InitializeOncePerProcess() {
|
|
|
| template <typename ElementsAccessorSubclass, typename BackingStoreClass>
|
| MaybeObject* ElementsAccessorBase<ElementsAccessorSubclass, BackingStoreClass>::
|
| - SetLength(BackingStoreClass* backing_store,
|
| - JSObject* obj,
|
| - Object* length) {
|
| + SetLengthImpl(BackingStoreClass* backing_store,
|
| + JSObject* obj,
|
| + Object* length) {
|
| JSArray* array = JSArray::cast(obj);
|
|
|
| // Fast case: The new length fits into a Smi.
|
|
|