| Index: src/elements.cc
|
| diff --git a/src/elements.cc b/src/elements.cc
|
| index 5a6f91b4816f9bf5dbcac569b42114d577dac700..527df6e3d753cf9386839413d78dc5f9a610447b 100644
|
| --- a/src/elements.cc
|
| +++ b/src/elements.cc
|
| @@ -784,16 +784,6 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| return obj;
|
| }
|
|
|
| - // TODO(ishell): Temporary wrapper until handlified.
|
| - MUST_USE_RESULT static Handle<FixedArray> SetFastElementsCapacityAndLength(
|
| - Handle<JSObject> obj,
|
| - int capacity,
|
| - int length) {
|
| - CALL_HEAP_FUNCTION(obj->GetIsolate(),
|
| - SetFastElementsCapacityAndLength(*obj, capacity, length),
|
| - FixedArray);
|
| - }
|
| -
|
| MUST_USE_RESULT virtual Handle<Object> Delete(
|
| Handle<JSObject> obj,
|
| uint32_t key,
|
| @@ -988,28 +978,28 @@ class FastElementsAccessor
|
|
|
| // Adjusts the length of the fast backing store or returns the new length or
|
| // undefined in case conversion to a slow backing store should be performed.
|
| - static Handle<Object> SetLengthWithoutNormalize(
|
| - Handle<FixedArrayBase> backing_store,
|
| - Handle<JSArray> array,
|
| - Handle<Object> length_object,
|
| - uint32_t length) {
|
| - Isolate* isolate = array->GetIsolate();
|
| + static MaybeObject* SetLengthWithoutNormalize(FixedArrayBase* backing_store,
|
| + JSArray* array,
|
| + Object* length_object,
|
| + uint32_t length) {
|
| uint32_t old_capacity = backing_store->length();
|
| - Handle<Object> old_length(array->length(), isolate);
|
| + Object* old_length = array->length();
|
| bool same_or_smaller_size = old_length->IsSmi() &&
|
| - static_cast<uint32_t>(Handle<Smi>::cast(old_length)->value()) >= length;
|
| + static_cast<uint32_t>(Smi::cast(old_length)->value()) >= length;
|
| ElementsKind kind = array->GetElementsKind();
|
|
|
| if (!same_or_smaller_size && IsFastElementsKind(kind) &&
|
| !IsFastHoleyElementsKind(kind)) {
|
| kind = GetHoleyElementsKind(kind);
|
| - JSObject::TransitionElementsKind(array, kind);
|
| + MaybeObject* maybe_obj = array->TransitionElementsKind(kind);
|
| + if (maybe_obj->IsFailure()) return maybe_obj;
|
| }
|
|
|
| // Check whether the backing store should be shrunk.
|
| if (length <= old_capacity) {
|
| if (array->HasFastSmiOrObjectElements()) {
|
| - backing_store = JSObject::EnsureWritableFastElements(array);
|
| + MaybeObject* maybe_obj = array->EnsureWritableFastElements();
|
| + if (!maybe_obj->To(&backing_store)) return maybe_obj;
|
| }
|
| if (2 * length <= old_capacity) {
|
| // If more than half the elements won't be used, trim the array.
|
| @@ -1026,7 +1016,7 @@ class FastElementsAccessor
|
| // Otherwise, fill the unused tail with holes.
|
| int old_length = FastD2IChecked(array->length()->Number());
|
| for (int i = length; i < old_length; i++) {
|
| - Handle<BackingStore>::cast(backing_store)->set_the_hole(i);
|
| + BackingStore::cast(backing_store)->set_the_hole(i);
|
| }
|
| }
|
| return length_object;
|
| @@ -1036,14 +1026,27 @@ class FastElementsAccessor
|
| uint32_t min = JSObject::NewElementsCapacity(old_capacity);
|
| uint32_t new_capacity = length > min ? length : min;
|
| if (!array->ShouldConvertToSlowElements(new_capacity)) {
|
| - FastElementsAccessorSubclass::
|
| + MaybeObject* result = FastElementsAccessorSubclass::
|
| SetFastElementsCapacityAndLength(array, new_capacity, length);
|
| + if (result->IsFailure()) return result;
|
| array->ValidateElements();
|
| return length_object;
|
| }
|
|
|
| // Request conversion to slow elements.
|
| - return isolate->factory()->undefined_value();
|
| + return array->GetHeap()->undefined_value();
|
| + }
|
| +
|
| + // TODO(ishell): Temporary wrapper until handlified.
|
| + static Handle<Object> SetLengthWithoutNormalize(
|
| + Handle<FixedArrayBase> backing_store,
|
| + Handle<JSArray> array,
|
| + Handle<Object> length_object,
|
| + uint32_t length) {
|
| + CALL_HEAP_FUNCTION(array->GetIsolate(),
|
| + SetLengthWithoutNormalize(
|
| + *backing_store, *array, *length_object, length),
|
| + Object);
|
| }
|
|
|
| static Handle<Object> DeleteCommon(Handle<JSObject> obj,
|
| @@ -1241,16 +1244,6 @@ class FastSmiOrObjectElementsAccessor
|
| length,
|
| set_capacity_mode);
|
| }
|
| -
|
| - // TODO(ishell): Temporary wrapper until handlified.
|
| - static Handle<FixedArray> SetFastElementsCapacityAndLength(
|
| - Handle<JSObject> obj,
|
| - int capacity,
|
| - int length) {
|
| - CALL_HEAP_FUNCTION(obj->GetIsolate(),
|
| - SetFastElementsCapacityAndLength(*obj, capacity, length),
|
| - FixedArray);
|
| - }
|
| };
|
|
|
|
|
| @@ -1321,16 +1314,6 @@ class FastDoubleElementsAccessor
|
| length);
|
| }
|
|
|
| - // TODO(ishell): Temporary wrapper until handlified.
|
| - static Handle<FixedArray> SetFastElementsCapacityAndLength(
|
| - Handle<JSObject> obj,
|
| - int capacity,
|
| - int length) {
|
| - CALL_HEAP_FUNCTION(obj->GetIsolate(),
|
| - SetFastElementsCapacityAndLength(*obj, capacity, length),
|
| - FixedArray);
|
| - }
|
| -
|
| protected:
|
| static MaybeObject* CopyElementsImpl(FixedArrayBase* from,
|
| uint32_t from_start,
|
|
|