| Index: src/elements.cc
|
| diff --git a/src/elements.cc b/src/elements.cc
|
| index a7d48b4cf432411f90a709b350bf1b805a62ceac..bbcf50f54585b257442e76a68cd7def33f1fd61f 100644
|
| --- a/src/elements.cc
|
| +++ b/src/elements.cc
|
| @@ -635,8 +635,7 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| receiver, holder, key, backing_store);
|
| }
|
|
|
| - // TODO(ishell): Temporary wrapper until handlified.
|
| - MUST_USE_RESULT virtual Handle<Object> Get(
|
| + MUST_USE_RESULT virtual MaybeHandle<Object> Get(
|
| Handle<Object> receiver,
|
| Handle<JSObject> holder,
|
| uint32_t key,
|
| @@ -655,10 +654,11 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| receiver, holder, key, backing_store);
|
| }
|
|
|
| - static Handle<Object> GetImpl(Handle<Object> receiver,
|
| - Handle<JSObject> obj,
|
| - uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) {
|
| + MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
|
| + Handle<Object> receiver,
|
| + Handle<JSObject> obj,
|
| + uint32_t key,
|
| + Handle<FixedArrayBase> backing_store) {
|
| if (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) {
|
| return BackingStore::get(Handle<BackingStore>::cast(backing_store), key);
|
| } else {
|
| @@ -804,7 +804,7 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| from, from_start, to, from_kind, to_start, packed_size, copy_size);
|
| }
|
|
|
| - virtual Handle<FixedArray> AddElementsToFixedArray(
|
| + virtual MaybeHandle<FixedArray> AddElementsToFixedArray(
|
| Handle<Object> receiver,
|
| Handle<JSObject> holder,
|
| Handle<FixedArray> to,
|
| @@ -823,14 +823,19 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| uint32_t len1 = ElementsAccessorSubclass::GetCapacityImpl(from);
|
| if (len1 == 0) return to;
|
|
|
| + Isolate* isolate = from->GetIsolate();
|
| +
|
| // Compute how many elements are not in other.
|
| uint32_t extra = 0;
|
| for (uint32_t y = 0; y < len1; y++) {
|
| uint32_t key = ElementsAccessorSubclass::GetKeyForIndexImpl(from, y);
|
| if (ElementsAccessorSubclass::HasElementImpl(
|
| receiver, holder, key, from)) {
|
| - Handle<Object> value =
|
| - ElementsAccessorSubclass::GetImpl(receiver, holder, key, from);
|
| + Handle<Object> value;
|
| + ASSIGN_RETURN_ON_EXCEPTION(
|
| + isolate, value,
|
| + ElementsAccessorSubclass::GetImpl(receiver, holder, key, from),
|
| + FixedArray);
|
|
|
| ASSERT(!value->IsTheHole());
|
| if (!HasKey(to, value)) {
|
| @@ -842,7 +847,6 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| if (extra == 0) return to;
|
|
|
| // Allocate the result
|
| - Isolate* isolate = from->GetIsolate();
|
| Handle<FixedArray> result = isolate->factory()->NewFixedArray(len0 + extra);
|
|
|
| // Fill in the content
|
| @@ -862,8 +866,11 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| ElementsAccessorSubclass::GetKeyForIndexImpl(from, y);
|
| if (ElementsAccessorSubclass::HasElementImpl(
|
| receiver, holder, key, from)) {
|
| - Handle<Object> value =
|
| - ElementsAccessorSubclass::GetImpl(receiver, holder, key, from);
|
| + Handle<Object> value;
|
| + ASSIGN_RETURN_ON_EXCEPTION(
|
| + isolate, value,
|
| + ElementsAccessorSubclass::GetImpl(receiver, holder, key, from),
|
| + FixedArray);
|
| if (!value->IsTheHole() && !HasKey(to, value)) {
|
| result->set(len0 + index, *value);
|
| index++;
|
| @@ -1333,10 +1340,11 @@ class TypedElementsAccessor
|
| friend class ElementsAccessorBase<AccessorClass,
|
| ElementsKindTraits<Kind> >;
|
|
|
| - static Handle<Object> GetImpl(Handle<Object> receiver,
|
| - Handle<JSObject> obj,
|
| - uint32_t key,
|
| - Handle<FixedArrayBase> backing_store) {
|
| + MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
|
| + Handle<Object> receiver,
|
| + Handle<JSObject> obj,
|
| + uint32_t key,
|
| + Handle<FixedArrayBase> backing_store) {
|
| if (key < AccessorClass::GetCapacityImpl(backing_store)) {
|
| return BackingStore::get(Handle<BackingStore>::cast(backing_store), key);
|
| } else {
|
| @@ -1540,7 +1548,7 @@ class DictionaryElementsAccessor
|
| return DeleteCommon(obj, key, mode);
|
| }
|
|
|
| - static Handle<Object> GetImpl(
|
| + MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
|
| Handle<Object> receiver,
|
| Handle<JSObject> obj,
|
| uint32_t key,
|
| @@ -1639,7 +1647,7 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
|
| SloppyArgumentsElementsAccessor,
|
| ElementsKindTraits<SLOPPY_ARGUMENTS_ELEMENTS> >;
|
|
|
| - MUST_USE_RESULT static Handle<Object> GetImpl(
|
| + MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
|
| Handle<Object> receiver,
|
| Handle<JSObject> obj,
|
| uint32_t key,
|
| @@ -1657,8 +1665,12 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
|
| // Object is not mapped, defer to the arguments.
|
| Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1)),
|
| isolate);
|
| - Handle<Object> result = ElementsAccessor::ForArray(arguments)->Get(
|
| - receiver, obj, key, arguments);
|
| + Handle<Object> result;
|
| + 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;
|
| @@ -1792,10 +1804,16 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
|
| if (!probe->IsTheHole()) {
|
| return true;
|
| } else {
|
| + Isolate* isolate = holder->GetIsolate();
|
| Handle<FixedArrayBase> arguments(FixedArrayBase::cast(
|
| - Handle<FixedArray>::cast(parameter_map)->get(1)));
|
| + Handle<FixedArray>::cast(parameter_map)->get(1)), isolate);
|
| ElementsAccessor* accessor = ElementsAccessor::ForArray(arguments);
|
| - return !accessor->Get(receiver, holder, key, arguments)->IsTheHole();
|
| + Handle<Object> value;
|
| + ASSIGN_RETURN_ON_EXCEPTION_VALUE(
|
| + isolate, value,
|
| + accessor->Get(receiver, holder, key, arguments),
|
| + false);
|
| + return !value->IsTheHole();
|
| }
|
| }
|
|
|
|
|