| Index: src/elements.cc
|
| diff --git a/src/elements.cc b/src/elements.cc
|
| index 527df6e3d753cf9386839413d78dc5f9a610447b..5a6f91b4816f9bf5dbcac569b42114d577dac700 100644
|
| --- a/src/elements.cc
|
| +++ b/src/elements.cc
|
| @@ -784,6 +784,16 @@ 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,
|
| @@ -978,28 +988,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 MaybeObject* SetLengthWithoutNormalize(FixedArrayBase* backing_store,
|
| - JSArray* array,
|
| - Object* length_object,
|
| - uint32_t length) {
|
| + static Handle<Object> SetLengthWithoutNormalize(
|
| + Handle<FixedArrayBase> backing_store,
|
| + Handle<JSArray> array,
|
| + Handle<Object> length_object,
|
| + uint32_t length) {
|
| + Isolate* isolate = array->GetIsolate();
|
| uint32_t old_capacity = backing_store->length();
|
| - Object* old_length = array->length();
|
| + Handle<Object> old_length(array->length(), isolate);
|
| bool same_or_smaller_size = old_length->IsSmi() &&
|
| - static_cast<uint32_t>(Smi::cast(old_length)->value()) >= length;
|
| + static_cast<uint32_t>(Handle<Smi>::cast(old_length)->value()) >= length;
|
| ElementsKind kind = array->GetElementsKind();
|
|
|
| if (!same_or_smaller_size && IsFastElementsKind(kind) &&
|
| !IsFastHoleyElementsKind(kind)) {
|
| kind = GetHoleyElementsKind(kind);
|
| - MaybeObject* maybe_obj = array->TransitionElementsKind(kind);
|
| - if (maybe_obj->IsFailure()) return maybe_obj;
|
| + JSObject::TransitionElementsKind(array, kind);
|
| }
|
|
|
| // Check whether the backing store should be shrunk.
|
| if (length <= old_capacity) {
|
| if (array->HasFastSmiOrObjectElements()) {
|
| - MaybeObject* maybe_obj = array->EnsureWritableFastElements();
|
| - if (!maybe_obj->To(&backing_store)) return maybe_obj;
|
| + backing_store = JSObject::EnsureWritableFastElements(array);
|
| }
|
| if (2 * length <= old_capacity) {
|
| // If more than half the elements won't be used, trim the array.
|
| @@ -1016,7 +1026,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++) {
|
| - BackingStore::cast(backing_store)->set_the_hole(i);
|
| + Handle<BackingStore>::cast(backing_store)->set_the_hole(i);
|
| }
|
| }
|
| return length_object;
|
| @@ -1026,27 +1036,14 @@ class FastElementsAccessor
|
| uint32_t min = JSObject::NewElementsCapacity(old_capacity);
|
| uint32_t new_capacity = length > min ? length : min;
|
| if (!array->ShouldConvertToSlowElements(new_capacity)) {
|
| - MaybeObject* result = FastElementsAccessorSubclass::
|
| + FastElementsAccessorSubclass::
|
| SetFastElementsCapacityAndLength(array, new_capacity, length);
|
| - if (result->IsFailure()) return result;
|
| array->ValidateElements();
|
| return length_object;
|
| }
|
|
|
| // Request conversion to slow elements.
|
| - 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);
|
| + return isolate->factory()->undefined_value();
|
| }
|
|
|
| static Handle<Object> DeleteCommon(Handle<JSObject> obj,
|
| @@ -1244,6 +1241,16 @@ 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);
|
| + }
|
| };
|
|
|
|
|
| @@ -1314,6 +1321,16 @@ 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,
|
|
|