| Index: src/elements.cc
|
| diff --git a/src/elements.cc b/src/elements.cc
|
| index cd7ba984af092c426fe539a4260681912208e251..e58deb6105cc34a3f8e4afa66bcc27fdb630167b 100644
|
| --- a/src/elements.cc
|
| +++ b/src/elements.cc
|
| @@ -587,14 +587,14 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| ElementsAccessorSubclass::ValidateImpl(holder);
|
| }
|
|
|
| - static bool HasElementImpl(Handle<JSObject> holder, uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) {
|
| + static bool HasElementImpl(JSObject* holder, uint32_t key,
|
| + FixedArrayBase* backing_store) {
|
| return ElementsAccessorSubclass::GetAttributesImpl(holder, key,
|
| backing_store) != ABSENT;
|
| }
|
|
|
| - virtual bool HasElement(Handle<JSObject> holder, uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) FINAL {
|
| + virtual bool HasElement(JSObject* holder, uint32_t key,
|
| + FixedArrayBase* backing_store) FINAL {
|
| return ElementsAccessorSubclass::HasElementImpl(holder, key, backing_store);
|
| }
|
|
|
| @@ -620,7 +620,7 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| Handle<JSObject> obj,
|
| uint32_t key,
|
| Handle<FixedArrayBase> backing_store) {
|
| - if (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) {
|
| + if (key < ElementsAccessorSubclass::GetCapacityImpl(*backing_store)) {
|
| return BackingStore::get(Handle<BackingStore>::cast(backing_store), key);
|
| } else {
|
| return backing_store->GetIsolate()->factory()->the_hole_value();
|
| @@ -628,22 +628,17 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| }
|
|
|
| MUST_USE_RESULT virtual PropertyAttributes GetAttributes(
|
| - Handle<JSObject> holder, uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) FINAL {
|
| + JSObject* holder, uint32_t key, FixedArrayBase* backing_store) FINAL {
|
| return ElementsAccessorSubclass::GetAttributesImpl(holder, key,
|
| backing_store);
|
| }
|
|
|
| MUST_USE_RESULT static PropertyAttributes GetAttributesImpl(
|
| - Handle<JSObject> obj,
|
| - uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) {
|
| + JSObject* obj, uint32_t key, FixedArrayBase* backing_store) {
|
| if (key >= ElementsAccessorSubclass::GetCapacityImpl(backing_store)) {
|
| return ABSENT;
|
| }
|
| - return
|
| - Handle<BackingStore>::cast(backing_store)->is_the_hole(key)
|
| - ? ABSENT : NONE;
|
| + return BackingStore::cast(backing_store)->is_the_hole(key) ? ABSENT : NONE;
|
| }
|
|
|
| MUST_USE_RESULT virtual MaybeHandle<AccessorPair> GetAccessorPair(
|
| @@ -751,7 +746,7 @@ class ElementsAccessorBase : public ElementsAccessor {
|
|
|
| // Optimize if 'other' is empty.
|
| // We cannot optimize if 'this' is empty, as other may have holes.
|
| - uint32_t len1 = ElementsAccessorSubclass::GetCapacityImpl(from);
|
| + uint32_t len1 = ElementsAccessorSubclass::GetCapacityImpl(*from);
|
| if (len1 == 0) return to;
|
|
|
| Isolate* isolate = from->GetIsolate();
|
| @@ -760,7 +755,7 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| uint32_t extra = 0;
|
| for (uint32_t y = 0; y < len1; y++) {
|
| uint32_t key = ElementsAccessorSubclass::GetKeyForIndexImpl(from, y);
|
| - if (ElementsAccessorSubclass::HasElementImpl(holder, key, from)) {
|
| + if (ElementsAccessorSubclass::HasElementImpl(*holder, key, *from)) {
|
| Handle<Object> value;
|
| ASSIGN_RETURN_ON_EXCEPTION(
|
| isolate, value,
|
| @@ -797,7 +792,7 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| for (uint32_t y = 0; y < len1; y++) {
|
| uint32_t key =
|
| ElementsAccessorSubclass::GetKeyForIndexImpl(from, y);
|
| - if (ElementsAccessorSubclass::HasElementImpl(holder, key, from)) {
|
| + if (ElementsAccessorSubclass::HasElementImpl(*holder, key, *from)) {
|
| Handle<Object> value;
|
| ASSIGN_RETURN_ON_EXCEPTION(
|
| isolate, value,
|
| @@ -817,11 +812,11 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| }
|
|
|
| protected:
|
| - static uint32_t GetCapacityImpl(Handle<FixedArrayBase> backing_store) {
|
| + static uint32_t GetCapacityImpl(FixedArrayBase* backing_store) {
|
| return backing_store->length();
|
| }
|
|
|
| - uint32_t GetCapacity(Handle<FixedArrayBase> backing_store) FINAL {
|
| + uint32_t GetCapacity(FixedArrayBase* backing_store) FINAL {
|
| return ElementsAccessorSubclass::GetCapacityImpl(backing_store);
|
| }
|
|
|
| @@ -969,14 +964,12 @@ class FastElementsAccessor
|
| return DeleteCommon(obj, key, language_mode);
|
| }
|
|
|
| - static bool HasElementImpl(
|
| - Handle<JSObject> holder,
|
| - uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) {
|
| + static bool HasElementImpl(JSObject* holder, uint32_t key,
|
| + FixedArrayBase* backing_store) {
|
| if (key >= static_cast<uint32_t>(backing_store->length())) {
|
| return false;
|
| }
|
| - return !Handle<BackingStore>::cast(backing_store)->is_the_hole(key);
|
| + return !BackingStore::cast(backing_store)->is_the_hole(key);
|
| }
|
|
|
| static void ValidateContents(Handle<JSObject> holder, int length) {
|
| @@ -1260,7 +1253,7 @@ class TypedElementsAccessor
|
| Handle<JSObject> obj,
|
| uint32_t key,
|
| Handle<FixedArrayBase> backing_store) {
|
| - if (key < AccessorClass::GetCapacityImpl(backing_store)) {
|
| + if (key < AccessorClass::GetCapacityImpl(*backing_store)) {
|
| return BackingStore::get(Handle<BackingStore>::cast(backing_store), key);
|
| } else {
|
| return backing_store->GetIsolate()->factory()->undefined_value();
|
| @@ -1268,9 +1261,7 @@ class TypedElementsAccessor
|
| }
|
|
|
| MUST_USE_RESULT static PropertyAttributes GetAttributesImpl(
|
| - Handle<JSObject> obj,
|
| - uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) {
|
| + JSObject* obj, uint32_t key, FixedArrayBase* backing_store) {
|
| return
|
| key < AccessorClass::GetCapacityImpl(backing_store)
|
| ? NONE : ABSENT;
|
| @@ -1291,8 +1282,8 @@ class TypedElementsAccessor
|
| return obj->GetIsolate()->factory()->true_value();
|
| }
|
|
|
| - static bool HasElementImpl(Handle<JSObject> holder, uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) {
|
| + static bool HasElementImpl(JSObject* holder, uint32_t key,
|
| + FixedArrayBase* backing_store) {
|
| uint32_t capacity =
|
| AccessorClass::GetCapacityImpl(backing_store);
|
| return key < capacity;
|
| @@ -1461,11 +1452,9 @@ class DictionaryElementsAccessor
|
| }
|
|
|
| MUST_USE_RESULT static PropertyAttributes GetAttributesImpl(
|
| - Handle<JSObject> obj,
|
| - uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) {
|
| - Handle<SeededNumberDictionary> dictionary =
|
| - Handle<SeededNumberDictionary>::cast(backing_store);
|
| + JSObject* obj, uint32_t key, FixedArrayBase* backing_store) {
|
| + SeededNumberDictionary* dictionary =
|
| + SeededNumberDictionary::cast(backing_store);
|
| int entry = dictionary->FindEntry(key);
|
| if (entry != SeededNumberDictionary::kNotFound) {
|
| return dictionary->DetailsAt(entry).attributes();
|
| @@ -1488,10 +1477,9 @@ class DictionaryElementsAccessor
|
| return MaybeHandle<AccessorPair>();
|
| }
|
|
|
| - static bool HasElementImpl(Handle<JSObject> holder, uint32_t key,
|
| - Handle<FixedArrayBase> store) {
|
| - Handle<SeededNumberDictionary> backing_store =
|
| - Handle<SeededNumberDictionary>::cast(store);
|
| + static bool HasElementImpl(JSObject* holder, uint32_t key,
|
| + FixedArrayBase* store) {
|
| + SeededNumberDictionary* backing_store = SeededNumberDictionary::cast(store);
|
| return backing_store->FindEntry(key) != SeededNumberDictionary::kNotFound;
|
| }
|
|
|
| @@ -1526,11 +1514,11 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
|
| Handle<FixedArrayBase> parameters) {
|
| Isolate* isolate = obj->GetIsolate();
|
| Handle<FixedArray> parameter_map = Handle<FixedArray>::cast(parameters);
|
| - Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key);
|
| + Object* probe = GetParameterMapArg(*obj, *parameter_map, key);
|
| if (!probe->IsTheHole()) {
|
| DisallowHeapAllocation no_gc;
|
| Context* context = Context::cast(parameter_map->get(0));
|
| - int context_index = Handle<Smi>::cast(probe)->value();
|
| + int context_index = Smi::cast(probe)->value();
|
| DCHECK(!context->get(context_index)->IsTheHole());
|
| return handle(context->get(context_index), isolate);
|
| } else {
|
| @@ -1538,11 +1526,10 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
|
| Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1)),
|
| isolate);
|
| Handle<Object> result;
|
| - ASSIGN_RETURN_ON_EXCEPTION(
|
| - isolate, result,
|
| - ElementsAccessor::ForArray(arguments)->Get(
|
| - receiver, obj, key, arguments),
|
| - Object);
|
| + ASSIGN_RETURN_ON_EXCEPTION(isolate, result,
|
| + ElementsAccessor::ForArray(*arguments)
|
| + ->Get(receiver, obj, key, arguments),
|
| + Object);
|
| // Elements of the arguments object in slow mode might be slow aliases.
|
| if (result->IsAliasedArgumentsEntry()) {
|
| DisallowHeapAllocation no_gc;
|
| @@ -1558,16 +1545,14 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
|
| }
|
|
|
| MUST_USE_RESULT static PropertyAttributes GetAttributesImpl(
|
| - Handle<JSObject> obj,
|
| - uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) {
|
| - Handle<FixedArray> parameter_map = Handle<FixedArray>::cast(backing_store);
|
| - Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key);
|
| + JSObject* obj, uint32_t key, FixedArrayBase* backing_store) {
|
| + FixedArray* parameter_map = FixedArray::cast(backing_store);
|
| + Object* probe = GetParameterMapArg(obj, parameter_map, key);
|
| if (!probe->IsTheHole()) {
|
| return NONE;
|
| } else {
|
| // If not aliased, check the arguments.
|
| - Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1)));
|
| + FixedArray* arguments = FixedArray::cast(parameter_map->get(1));
|
| return ElementsAccessor::ForArray(arguments)
|
| ->GetAttributes(obj, key, arguments);
|
| }
|
| @@ -1578,13 +1563,13 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
|
| uint32_t key,
|
| Handle<FixedArrayBase> parameters) {
|
| Handle<FixedArray> parameter_map = Handle<FixedArray>::cast(parameters);
|
| - Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key);
|
| + Object* probe = GetParameterMapArg(*obj, *parameter_map, key);
|
| if (!probe->IsTheHole()) {
|
| return MaybeHandle<AccessorPair>();
|
| } else {
|
| // If not aliased, check the arguments.
|
| Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1)));
|
| - return ElementsAccessor::ForArray(arguments)
|
| + return ElementsAccessor::ForArray(*arguments)
|
| ->GetAccessorPair(obj, key, arguments);
|
| }
|
| }
|
| @@ -1603,7 +1588,8 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
|
| Handle<JSObject> obj, uint32_t key, LanguageMode language_mode) FINAL {
|
| Isolate* isolate = obj->GetIsolate();
|
| Handle<FixedArray> parameter_map(FixedArray::cast(obj->elements()));
|
| - Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key);
|
| + Handle<Object> probe(GetParameterMapArg(*obj, *parameter_map, key),
|
| + isolate);
|
| if (!probe->IsTheHole()) {
|
| // TODO(kmillikin): We could check if this was the last aliased
|
| // parameter, and revert to normal elements in that case. That
|
| @@ -1632,10 +1618,9 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
|
| UNREACHABLE();
|
| }
|
|
|
| - static uint32_t GetCapacityImpl(Handle<FixedArrayBase> backing_store) {
|
| - Handle<FixedArray> parameter_map = Handle<FixedArray>::cast(backing_store);
|
| - Handle<FixedArrayBase> arguments(
|
| - FixedArrayBase::cast(parameter_map->get(1)));
|
| + static uint32_t GetCapacityImpl(FixedArrayBase* backing_store) {
|
| + FixedArray* parameter_map = FixedArray::cast(backing_store);
|
| + FixedArrayBase* arguments = FixedArrayBase::cast(parameter_map->get(1));
|
| return Max(static_cast<uint32_t>(parameter_map->length() - 2),
|
| ForArray(arguments)->GetCapacity(arguments));
|
| }
|
| @@ -1646,22 +1631,20 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
|
| }
|
|
|
| private:
|
| - static Handle<Object> GetParameterMapArg(Handle<JSObject> holder,
|
| - Handle<FixedArray> parameter_map,
|
| - uint32_t key) {
|
| + static Object* GetParameterMapArg(JSObject* holder, FixedArray* parameter_map,
|
| + uint32_t key) {
|
| Isolate* isolate = holder->GetIsolate();
|
| uint32_t length = holder->IsJSArray()
|
| - ? Smi::cast(Handle<JSArray>::cast(holder)->length())->value()
|
| - : parameter_map->length();
|
| - return key < (length - 2)
|
| - ? handle(parameter_map->get(key + 2), isolate)
|
| - : Handle<Object>::cast(isolate->factory()->the_hole_value());
|
| + ? Smi::cast(JSArray::cast(holder)->length())->value()
|
| + : parameter_map->length();
|
| + return key < (length - 2) ? parameter_map->get(key + 2)
|
| + : isolate->heap()->the_hole_value();
|
| }
|
| };
|
|
|
|
|
| -ElementsAccessor* ElementsAccessor::ForArray(Handle<FixedArrayBase> array) {
|
| - return elements_accessors_[ElementsKindForArray(*array)];
|
| +ElementsAccessor* ElementsAccessor::ForArray(FixedArrayBase* array) {
|
| + return elements_accessors_[ElementsKindForArray(array)];
|
| }
|
|
|
|
|
|
|