Index: src/elements.cc |
diff --git a/src/elements.cc b/src/elements.cc |
index 3949747c62ebed39506e88b5699400534e35d7e7..0624a03621126e014bbf9210bb5db5c91dfe3352 100644 |
--- a/src/elements.cc |
+++ b/src/elements.cc |
@@ -168,10 +168,10 @@ static Handle<Object> ThrowArrayLengthRangeError(Isolate* isolate) { |
} |
-static void CopyObjectToObjectElements(FixedArrayBase* from_base, |
+static void CopyObjectToObjectElements(Handle<FixedArrayBase> from_base, |
ElementsKind from_kind, |
uint32_t from_start, |
- FixedArrayBase* to_base, |
+ Handle<FixedArrayBase> to_base, |
ElementsKind to_kind, |
uint32_t to_start, |
int raw_copy_size) { |
@@ -189,7 +189,7 @@ static void CopyObjectToObjectElements(FixedArrayBase* from_base, |
int length = to_base->length() - start; |
if (length > 0) { |
Heap* heap = from_base->GetHeap(); |
- MemsetPointer(FixedArray::cast(to_base)->data_start() + start, |
+ MemsetPointer(Handle<FixedArray>::cast(to_base)->data_start() + start, |
heap->the_hole_value(), length); |
} |
} |
@@ -197,8 +197,8 @@ static void CopyObjectToObjectElements(FixedArrayBase* from_base, |
ASSERT((copy_size + static_cast<int>(to_start)) <= to_base->length() && |
(copy_size + static_cast<int>(from_start)) <= from_base->length()); |
if (copy_size == 0) return; |
- FixedArray* from = FixedArray::cast(from_base); |
- FixedArray* to = FixedArray::cast(to_base); |
+ Handle<FixedArray> from = Handle<FixedArray>::cast(from_base); |
+ Handle<FixedArray> to = Handle<FixedArray>::cast(to_base); |
ASSERT(IsFastSmiOrObjectElementsKind(from_kind)); |
ASSERT(IsFastSmiOrObjectElementsKind(to_kind)); |
Address to_address = to->address() + FixedArray::kHeaderSize; |
@@ -209,23 +209,24 @@ static void CopyObjectToObjectElements(FixedArrayBase* from_base, |
if (IsFastObjectElementsKind(from_kind) && |
IsFastObjectElementsKind(to_kind)) { |
Heap* heap = from->GetHeap(); |
- if (!heap->InNewSpace(to)) { |
+ if (!heap->InNewSpace(*to)) { |
heap->RecordWrites(to->address(), |
to->OffsetOfElementAt(to_start), |
copy_size); |
} |
- heap->incremental_marking()->RecordWrites(to); |
+ heap->incremental_marking()->RecordWrites(*to); |
} |
} |
-static void CopyDictionaryToObjectElements(FixedArrayBase* from_base, |
+static void CopyDictionaryToObjectElements(Handle<FixedArrayBase> from_base, |
uint32_t from_start, |
- FixedArrayBase* to_base, |
+ Handle<FixedArrayBase> to_base, |
ElementsKind to_kind, |
uint32_t to_start, |
int raw_copy_size) { |
- SeededNumberDictionary* from = SeededNumberDictionary::cast(from_base); |
+ Handle<SeededNumberDictionary> from = |
+ Handle<SeededNumberDictionary>::cast(from_base); |
DisallowHeapAllocation no_allocation; |
int copy_size = raw_copy_size; |
Heap* heap = from->GetHeap(); |
@@ -238,15 +239,15 @@ static void CopyDictionaryToObjectElements(FixedArrayBase* from_base, |
int length = to_base->length() - start; |
if (length > 0) { |
Heap* heap = from->GetHeap(); |
- MemsetPointer(FixedArray::cast(to_base)->data_start() + start, |
+ MemsetPointer(Handle<FixedArray>::cast(to_base)->data_start() + start, |
heap->the_hole_value(), length); |
} |
} |
} |
- ASSERT(to_base != from_base); |
+ ASSERT(*to_base != *from_base); |
ASSERT(IsFastSmiOrObjectElementsKind(to_kind)); |
if (copy_size == 0) return; |
- FixedArray* to = FixedArray::cast(to_base); |
+ Handle<FixedArray> to = Handle<FixedArray>::cast(to_base); |
uint32_t to_length = to->length(); |
if (to_start + copy_size > to_length) { |
copy_size = to_length - to_start; |
@@ -262,23 +263,22 @@ static void CopyDictionaryToObjectElements(FixedArrayBase* from_base, |
} |
} |
if (IsFastObjectElementsKind(to_kind)) { |
- if (!heap->InNewSpace(to)) { |
+ if (!heap->InNewSpace(*to)) { |
heap->RecordWrites(to->address(), |
to->OffsetOfElementAt(to_start), |
copy_size); |
} |
- heap->incremental_marking()->RecordWrites(to); |
+ heap->incremental_marking()->RecordWrites(*to); |
} |
} |
-MUST_USE_RESULT static MaybeObject* CopyDoubleToObjectElements( |
- FixedArrayBase* from_base, |
- uint32_t from_start, |
- FixedArrayBase* to_base, |
- ElementsKind to_kind, |
- uint32_t to_start, |
- int raw_copy_size) { |
+static void CopyDoubleToObjectElements(Handle<FixedArrayBase> from_base, |
+ uint32_t from_start, |
+ Handle<FixedArrayBase> to_base, |
+ ElementsKind to_kind, |
+ uint32_t to_start, |
+ int raw_copy_size) { |
ASSERT(IsFastSmiOrObjectElementsKind(to_kind)); |
int copy_size = raw_copy_size; |
if (raw_copy_size < 0) { |
@@ -294,49 +294,35 @@ MUST_USE_RESULT static MaybeObject* CopyDoubleToObjectElements( |
int length = to_base->length() - start; |
if (length > 0) { |
Heap* heap = from_base->GetHeap(); |
- MemsetPointer(FixedArray::cast(to_base)->data_start() + start, |
+ MemsetPointer(Handle<FixedArray>::cast(to_base)->data_start() + start, |
heap->the_hole_value(), length); |
} |
} |
} |
ASSERT((copy_size + static_cast<int>(to_start)) <= to_base->length() && |
(copy_size + static_cast<int>(from_start)) <= from_base->length()); |
- if (copy_size == 0) return from_base; |
- FixedDoubleArray* from = FixedDoubleArray::cast(from_base); |
- FixedArray* to = FixedArray::cast(to_base); |
+ if (copy_size == 0) return; |
+ Handle<FixedDoubleArray> from = Handle<FixedDoubleArray>::cast(from_base); |
+ Handle<FixedArray> to = Handle<FixedArray>::cast(to_base); |
for (int i = 0; i < copy_size; ++i) { |
+ HandleScope scope(from_base->GetIsolate()); |
if (IsFastSmiElementsKind(to_kind)) { |
UNIMPLEMENTED(); |
- return Failure::Exception(); |
} else { |
- MaybeObject* maybe_value = from->get(i + from_start); |
- Object* value; |
ASSERT(IsFastObjectElementsKind(to_kind)); |
- // Because Double -> Object elements transitions allocate HeapObjects |
- // iteratively, the allocate must succeed within a single GC cycle, |
- // otherwise the retry after the GC will also fail. In order to ensure |
- // that no GC is triggered, allocate HeapNumbers from old space if they |
- // can't be taken from new space. |
- if (!maybe_value->ToObject(&value)) { |
- ASSERT(maybe_value->IsRetryAfterGC()); |
- Heap* heap = from->GetHeap(); |
- MaybeObject* maybe_value_object = |
- heap->AllocateHeapNumber(from->get_scalar(i + from_start), |
- TENURED); |
- if (!maybe_value_object->ToObject(&value)) return maybe_value_object; |
- } |
- to->set(i + to_start, value, UPDATE_WRITE_BARRIER); |
+ Handle<Object> value = from->get_as_handle(i + from_start); |
+ to->set(i + to_start, *value, UPDATE_WRITE_BARRIER); |
} |
} |
- return to; |
} |
-static void CopyDoubleToDoubleElements(FixedArrayBase* from_base, |
+static void CopyDoubleToDoubleElements(Handle<FixedArrayBase> from_base, |
uint32_t from_start, |
- FixedArrayBase* to_base, |
+ Handle<FixedArrayBase> to_base, |
uint32_t to_start, |
int raw_copy_size) { |
+ DisallowHeapAllocation no_allocation; |
int copy_size = raw_copy_size; |
if (raw_copy_size < 0) { |
ASSERT(raw_copy_size == ElementsAccessor::kCopyToEnd || |
@@ -345,15 +331,15 @@ static void CopyDoubleToDoubleElements(FixedArrayBase* from_base, |
to_base->length() - to_start); |
if (raw_copy_size == ElementsAccessor::kCopyToEndAndInitializeToHole) { |
for (int i = to_start + copy_size; i < to_base->length(); ++i) { |
- FixedDoubleArray::cast(to_base)->set_the_hole(i); |
+ Handle<FixedDoubleArray>::cast(to_base)->set_the_hole(i); |
} |
} |
} |
ASSERT((copy_size + static_cast<int>(to_start)) <= to_base->length() && |
(copy_size + static_cast<int>(from_start)) <= from_base->length()); |
if (copy_size == 0) return; |
- FixedDoubleArray* from = FixedDoubleArray::cast(from_base); |
- FixedDoubleArray* to = FixedDoubleArray::cast(to_base); |
+ Handle<FixedDoubleArray> from = Handle<FixedDoubleArray>::cast(from_base); |
+ Handle<FixedDoubleArray> to = Handle<FixedDoubleArray>::cast(to_base); |
Address to_address = to->address() + FixedDoubleArray::kHeaderSize; |
Address from_address = from->address() + FixedDoubleArray::kHeaderSize; |
to_address += kDoubleSize * to_start; |
@@ -365,11 +351,12 @@ static void CopyDoubleToDoubleElements(FixedArrayBase* from_base, |
} |
-static void CopySmiToDoubleElements(FixedArrayBase* from_base, |
+static void CopySmiToDoubleElements(Handle<FixedArrayBase> from_base, |
uint32_t from_start, |
- FixedArrayBase* to_base, |
+ Handle<FixedArrayBase> to_base, |
uint32_t to_start, |
int raw_copy_size) { |
+ DisallowHeapAllocation no_allocation; |
int copy_size = raw_copy_size; |
if (raw_copy_size < 0) { |
ASSERT(raw_copy_size == ElementsAccessor::kCopyToEnd || |
@@ -377,20 +364,20 @@ static void CopySmiToDoubleElements(FixedArrayBase* from_base, |
copy_size = from_base->length() - from_start; |
if (raw_copy_size == ElementsAccessor::kCopyToEndAndInitializeToHole) { |
for (int i = to_start + copy_size; i < to_base->length(); ++i) { |
- FixedDoubleArray::cast(to_base)->set_the_hole(i); |
+ Handle<FixedDoubleArray>::cast(to_base)->set_the_hole(i); |
} |
} |
} |
ASSERT((copy_size + static_cast<int>(to_start)) <= to_base->length() && |
(copy_size + static_cast<int>(from_start)) <= from_base->length()); |
if (copy_size == 0) return; |
- FixedArray* from = FixedArray::cast(from_base); |
- FixedDoubleArray* to = FixedDoubleArray::cast(to_base); |
- Object* the_hole = from->GetHeap()->the_hole_value(); |
+ Handle<FixedArray> from = Handle<FixedArray>::cast(from_base); |
+ Handle<FixedDoubleArray> to = Handle<FixedDoubleArray>::cast(to_base); |
+ Handle<Object> the_hole = from->GetIsolate()->factory()->the_hole_value(); |
for (uint32_t from_end = from_start + static_cast<uint32_t>(copy_size); |
from_start < from_end; from_start++, to_start++) { |
Object* hole_or_smi = from->get(from_start); |
- if (hole_or_smi == the_hole) { |
+ if (hole_or_smi == *the_hole) { |
to->set_the_hole(to_start); |
} else { |
to->set(to_start, Smi::cast(hole_or_smi)->value()); |
@@ -399,12 +386,13 @@ static void CopySmiToDoubleElements(FixedArrayBase* from_base, |
} |
-static void CopyPackedSmiToDoubleElements(FixedArrayBase* from_base, |
+static void CopyPackedSmiToDoubleElements(Handle<FixedArrayBase> from_base, |
uint32_t from_start, |
- FixedArrayBase* to_base, |
+ Handle<FixedArrayBase> to_base, |
uint32_t to_start, |
int packed_size, |
int raw_copy_size) { |
+ DisallowHeapAllocation no_allocation; |
int copy_size = raw_copy_size; |
uint32_t to_end; |
if (raw_copy_size < 0) { |
@@ -414,7 +402,7 @@ static void CopyPackedSmiToDoubleElements(FixedArrayBase* from_base, |
if (raw_copy_size == ElementsAccessor::kCopyToEndAndInitializeToHole) { |
to_end = to_base->length(); |
for (uint32_t i = to_start + copy_size; i < to_end; ++i) { |
- FixedDoubleArray::cast(to_base)->set_the_hole(i); |
+ Handle<FixedDoubleArray>::cast(to_base)->set_the_hole(i); |
} |
} else { |
to_end = to_start + static_cast<uint32_t>(copy_size); |
@@ -427,8 +415,8 @@ static void CopyPackedSmiToDoubleElements(FixedArrayBase* from_base, |
ASSERT((copy_size + static_cast<int>(to_start)) <= to_base->length() && |
(copy_size + static_cast<int>(from_start)) <= from_base->length()); |
if (copy_size == 0) return; |
- FixedArray* from = FixedArray::cast(from_base); |
- FixedDoubleArray* to = FixedDoubleArray::cast(to_base); |
+ Handle<FixedArray> from = Handle<FixedArray>::cast(from_base); |
+ Handle<FixedDoubleArray> to = Handle<FixedDoubleArray>::cast(to_base); |
for (uint32_t from_end = from_start + static_cast<uint32_t>(packed_size); |
from_start < from_end; from_start++, to_start++) { |
Object* smi = from->get(from_start); |
@@ -438,11 +426,12 @@ static void CopyPackedSmiToDoubleElements(FixedArrayBase* from_base, |
} |
-static void CopyObjectToDoubleElements(FixedArrayBase* from_base, |
+static void CopyObjectToDoubleElements(Handle<FixedArrayBase> from_base, |
uint32_t from_start, |
- FixedArrayBase* to_base, |
+ Handle<FixedArrayBase> to_base, |
uint32_t to_start, |
int raw_copy_size) { |
+ DisallowHeapAllocation no_allocation; |
int copy_size = raw_copy_size; |
if (raw_copy_size < 0) { |
ASSERT(raw_copy_size == ElementsAccessor::kCopyToEnd || |
@@ -450,20 +439,20 @@ static void CopyObjectToDoubleElements(FixedArrayBase* from_base, |
copy_size = from_base->length() - from_start; |
if (raw_copy_size == ElementsAccessor::kCopyToEndAndInitializeToHole) { |
for (int i = to_start + copy_size; i < to_base->length(); ++i) { |
- FixedDoubleArray::cast(to_base)->set_the_hole(i); |
+ Handle<FixedDoubleArray>::cast(to_base)->set_the_hole(i); |
} |
} |
} |
ASSERT((copy_size + static_cast<int>(to_start)) <= to_base->length() && |
(copy_size + static_cast<int>(from_start)) <= from_base->length()); |
if (copy_size == 0) return; |
- FixedArray* from = FixedArray::cast(from_base); |
- FixedDoubleArray* to = FixedDoubleArray::cast(to_base); |
- Object* the_hole = from->GetHeap()->the_hole_value(); |
+ Handle<FixedArray> from = Handle<FixedArray>::cast(from_base); |
+ Handle<FixedDoubleArray> to = Handle<FixedDoubleArray>::cast(to_base); |
+ Handle<Object> the_hole = from->GetIsolate()->factory()->the_hole_value(); |
for (uint32_t from_end = from_start + copy_size; |
from_start < from_end; from_start++, to_start++) { |
Object* hole_or_object = from->get(from_start); |
- if (hole_or_object == the_hole) { |
+ if (hole_or_object == *the_hole) { |
to->set_the_hole(to_start); |
} else { |
to->set(to_start, hole_or_object->Number()); |
@@ -472,12 +461,14 @@ static void CopyObjectToDoubleElements(FixedArrayBase* from_base, |
} |
-static void CopyDictionaryToDoubleElements(FixedArrayBase* from_base, |
+static void CopyDictionaryToDoubleElements(Handle<FixedArrayBase> from_base, |
uint32_t from_start, |
- FixedArrayBase* to_base, |
+ Handle<FixedArrayBase> to_base, |
uint32_t to_start, |
int raw_copy_size) { |
- SeededNumberDictionary* from = SeededNumberDictionary::cast(from_base); |
+ Handle<SeededNumberDictionary> from = |
+ Handle<SeededNumberDictionary>::cast(from_base); |
+ DisallowHeapAllocation no_allocation; |
int copy_size = raw_copy_size; |
if (copy_size < 0) { |
ASSERT(copy_size == ElementsAccessor::kCopyToEnd || |
@@ -485,12 +476,12 @@ static void CopyDictionaryToDoubleElements(FixedArrayBase* from_base, |
copy_size = from->max_number_key() + 1 - from_start; |
if (raw_copy_size == ElementsAccessor::kCopyToEndAndInitializeToHole) { |
for (int i = to_start + copy_size; i < to_base->length(); ++i) { |
- FixedDoubleArray::cast(to_base)->set_the_hole(i); |
+ Handle<FixedDoubleArray>::cast(to_base)->set_the_hole(i); |
} |
} |
} |
if (copy_size == 0) return; |
- FixedDoubleArray* to = FixedDoubleArray::cast(to_base); |
+ Handle<FixedDoubleArray> to = Handle<FixedDoubleArray>::cast(to_base); |
uint32_t to_length = to->length(); |
if (to_start + copy_size > to_length) { |
copy_size = to_length - to_start; |
@@ -756,9 +747,8 @@ class ElementsAccessorBase : public ElementsAccessor { |
MUST_USE_RESULT virtual Handle<Object> SetLength( |
Handle<JSArray> array, |
Handle<Object> length) V8_FINAL V8_OVERRIDE { |
- Isolate* isolate = array->GetIsolate(); |
return ElementsAccessorSubclass::SetLengthImpl( |
- array, length, handle(array->elements(), isolate)); |
+ array, length, handle(array->elements())); |
} |
MUST_USE_RESULT static Handle<Object> SetLengthImpl( |
@@ -786,32 +776,14 @@ class ElementsAccessorBase : public ElementsAccessor { |
uint32_t key, |
JSReceiver::DeleteMode mode) V8_OVERRIDE = 0; |
- MUST_USE_RESULT static MaybeObject* CopyElementsImpl(FixedArrayBase* from, |
- uint32_t from_start, |
- FixedArrayBase* to, |
- ElementsKind from_kind, |
- uint32_t to_start, |
- int packed_size, |
- int copy_size) { |
+ static void CopyElementsImpl(Handle<FixedArrayBase> from, |
+ uint32_t from_start, |
+ Handle<FixedArrayBase> to, |
+ ElementsKind from_kind, |
+ uint32_t to_start, |
+ int packed_size, |
+ int copy_size) { |
UNREACHABLE(); |
- return NULL; |
- } |
- |
- // TODO(ishell): Temporary wrapper, remove when CopyElements handlified. |
- Handle<Object> CopyElementsHelper( |
- Handle<JSObject> from_holder, |
- uint32_t from_start, |
- ElementsKind from_kind, |
- Handle<FixedArrayBase> to, |
- uint32_t to_start, |
- int copy_size, |
- Handle<FixedArrayBase> from) { |
- CALL_HEAP_FUNCTION(to->GetIsolate(), |
- CopyElements( |
- from_holder.is_null() ? NULL : *from_holder, |
- from_start, from_kind, *to, to_start, copy_size, |
- from.is_null() ? NULL : *from), |
- Object); |
} |
virtual void CopyElements( |
@@ -822,36 +794,23 @@ class ElementsAccessorBase : public ElementsAccessor { |
uint32_t to_start, |
int copy_size, |
Handle<FixedArrayBase> from) V8_FINAL V8_OVERRIDE { |
- Handle<Object> result = CopyElementsHelper( |
- from_holder, from_start, from_kind, to, to_start, copy_size, from); |
- ASSERT(!result.is_null()); |
- USE(result); |
- } |
- |
- MUST_USE_RESULT virtual MaybeObject* CopyElements( |
- JSObject* from_holder, |
- uint32_t from_start, |
- ElementsKind from_kind, |
- FixedArrayBase* to, |
- uint32_t to_start, |
- int copy_size, |
- FixedArrayBase* from) V8_FINAL V8_OVERRIDE { |
int packed_size = kPackedSizeNotKnown; |
- if (from == NULL) { |
- from = from_holder->elements(); |
+ if (from.is_null()) { |
+ from = handle(from_holder->elements()); |
} |
- if (from_holder) { |
+ if (!from_holder.is_null()) { |
bool is_packed = IsFastPackedElementsKind(from_kind) && |
from_holder->IsJSArray(); |
if (is_packed) { |
- packed_size = Smi::cast(JSArray::cast(from_holder)->length())->value(); |
+ packed_size = |
+ Smi::cast(Handle<JSArray>::cast(from_holder)->length())->value(); |
if (copy_size >= 0 && packed_size > copy_size) { |
packed_size = copy_size; |
} |
} |
} |
- return ElementsAccessorSubclass::CopyElementsImpl( |
+ ElementsAccessorSubclass::CopyElementsImpl( |
from, from_start, to, from_kind, to_start, packed_size, copy_size); |
} |
@@ -1041,7 +1000,7 @@ class FastElementsAccessor |
obj->HasFastArgumentsElements()); |
Isolate* isolate = obj->GetIsolate(); |
Heap* heap = obj->GetHeap(); |
- Handle<Object> elements = handle(obj->elements(), isolate); |
+ Handle<FixedArrayBase> elements(obj->elements()); |
if (*elements == heap->empty_fixed_array()) { |
return isolate->factory()->true_value(); |
} |
@@ -1049,8 +1008,8 @@ class FastElementsAccessor |
bool is_sloppy_arguments_elements_map = |
backing_store->map() == heap->sloppy_arguments_elements_map(); |
if (is_sloppy_arguments_elements_map) { |
- backing_store = Handle<BackingStore>::cast( |
- handle(Handle<FixedArray>::cast(backing_store)->get(1), isolate)); |
+ backing_store = handle( |
+ BackingStore::cast(Handle<FixedArray>::cast(backing_store)->get(1))); |
} |
uint32_t length = static_cast<uint32_t>( |
obj->IsJSArray() |
@@ -1121,8 +1080,7 @@ class FastElementsAccessor |
((map == heap->fixed_array_map() && length == 0) || |
map == heap->fixed_double_array_map()))); |
for (int i = 0; i < length; i++) { |
- typename KindTraits::BackingStore* backing_store = |
- KindTraits::BackingStore::cast(elements); |
+ BackingStore* backing_store = BackingStore::cast(elements); |
ASSERT((!IsFastSmiElementsKind(KindTraits::Kind) || |
static_cast<Object*>(backing_store->get(i))->IsSmi()) || |
(IsFastHoleyElementsKind(KindTraits::Kind) == |
@@ -1172,13 +1130,13 @@ class FastSmiOrObjectElementsAccessor |
KindTraits, |
kPointerSize>(name) {} |
- static MaybeObject* CopyElementsImpl(FixedArrayBase* from, |
- uint32_t from_start, |
- FixedArrayBase* to, |
- ElementsKind from_kind, |
- uint32_t to_start, |
- int packed_size, |
- int copy_size) { |
+ static void CopyElementsImpl(Handle<FixedArrayBase> from, |
+ uint32_t from_start, |
+ Handle<FixedArrayBase> to, |
+ ElementsKind from_kind, |
+ uint32_t to_start, |
+ int packed_size, |
+ int copy_size) { |
ElementsKind to_kind = KindTraits::Kind; |
switch (from_kind) { |
case FAST_SMI_ELEMENTS: |
@@ -1187,24 +1145,27 @@ class FastSmiOrObjectElementsAccessor |
case FAST_HOLEY_ELEMENTS: |
CopyObjectToObjectElements( |
from, from_kind, from_start, to, to_kind, to_start, copy_size); |
- return to->GetHeap()->undefined_value(); |
+ break; |
case FAST_DOUBLE_ELEMENTS: |
case FAST_HOLEY_DOUBLE_ELEMENTS: |
- return CopyDoubleToObjectElements( |
+ CopyDoubleToObjectElements( |
from, from_start, to, to_kind, to_start, copy_size); |
+ break; |
case DICTIONARY_ELEMENTS: |
CopyDictionaryToObjectElements( |
from, from_start, to, to_kind, to_start, copy_size); |
- return to->GetHeap()->undefined_value(); |
+ break; |
case SLOPPY_ARGUMENTS_ELEMENTS: { |
// TODO(verwaest): This is a temporary hack to support extending |
// SLOPPY_ARGUMENTS_ELEMENTS in SetFastElementsCapacityAndLength. |
// This case should be UNREACHABLE(). |
- FixedArray* parameter_map = FixedArray::cast(from); |
- FixedArrayBase* arguments = FixedArrayBase::cast(parameter_map->get(1)); |
- ElementsKind from_kind = ElementsKindForArray(arguments); |
- return CopyElementsImpl(arguments, from_start, to, from_kind, |
- to_start, packed_size, copy_size); |
+ Handle<FixedArray> parameter_map = Handle<FixedArray>::cast(from); |
+ Handle<FixedArrayBase> arguments( |
+ FixedArrayBase::cast(parameter_map->get(1))); |
+ ElementsKind from_kind = ElementsKindForArray(*arguments); |
+ CopyElementsImpl(arguments, from_start, to, from_kind, |
+ to_start, packed_size, copy_size); |
+ break; |
} |
#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ |
case EXTERNAL_##TYPE##_ELEMENTS: \ |
@@ -1213,7 +1174,6 @@ class FastSmiOrObjectElementsAccessor |
TYPED_ARRAYS(TYPED_ARRAY_CASE) |
#undef TYPED_ARRAY_CASE |
} |
- return NULL; |
} |
@@ -1298,13 +1258,13 @@ class FastDoubleElementsAccessor |
} |
protected: |
- static MaybeObject* CopyElementsImpl(FixedArrayBase* from, |
- uint32_t from_start, |
- FixedArrayBase* to, |
- ElementsKind from_kind, |
- uint32_t to_start, |
- int packed_size, |
- int copy_size) { |
+ static void CopyElementsImpl(Handle<FixedArrayBase> from, |
+ uint32_t from_start, |
+ Handle<FixedArrayBase> to, |
+ ElementsKind from_kind, |
+ uint32_t to_start, |
+ int packed_size, |
+ int copy_size) { |
switch (from_kind) { |
case FAST_SMI_ELEMENTS: |
CopyPackedSmiToDoubleElements( |
@@ -1335,7 +1295,6 @@ class FastDoubleElementsAccessor |
TYPED_ARRAYS(TYPED_ARRAY_CASE) |
#undef TYPED_ARRAY_CASE |
} |
- return to->GetHeap()->undefined_value(); |
} |
}; |
@@ -1595,15 +1554,14 @@ class DictionaryElementsAccessor |
Object); |
} |
- MUST_USE_RESULT static MaybeObject* CopyElementsImpl(FixedArrayBase* from, |
- uint32_t from_start, |
- FixedArrayBase* to, |
- ElementsKind from_kind, |
- uint32_t to_start, |
- int packed_size, |
- int copy_size) { |
+ static void CopyElementsImpl(Handle<FixedArrayBase> from, |
+ uint32_t from_start, |
+ Handle<FixedArrayBase> to, |
+ ElementsKind from_kind, |
+ uint32_t to_start, |
+ int packed_size, |
+ int copy_size) { |
UNREACHABLE(); |
- return NULL; |
} |
@@ -1809,8 +1767,7 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase< |
uint32_t key, |
JSReceiver::DeleteMode mode) V8_FINAL V8_OVERRIDE { |
Isolate* isolate = obj->GetIsolate(); |
- Handle<FixedArray> parameter_map = |
- handle(FixedArray::cast(obj->elements()), isolate); |
+ Handle<FixedArray> parameter_map(FixedArray::cast(obj->elements())); |
Handle<Object> probe = GetParameterMapArg(obj, parameter_map, key); |
if (!probe->IsTheHole()) { |
// TODO(kmillikin): We could check if this was the last aliased |
@@ -1818,8 +1775,7 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase< |
// would enable GC of the context. |
parameter_map->set_the_hole(key + 2); |
} else { |
- Handle<FixedArray> arguments = |
- handle(FixedArray::cast(parameter_map->get(1)), isolate); |
+ Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1))); |
if (arguments->IsDictionary()) { |
return DictionaryElementsAccessor::DeleteCommon(obj, key, mode); |
} else { |
@@ -1832,15 +1788,14 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase< |
return isolate->factory()->true_value(); |
} |
- MUST_USE_RESULT static MaybeObject* CopyElementsImpl(FixedArrayBase* from, |
- uint32_t from_start, |
- FixedArrayBase* to, |
- ElementsKind from_kind, |
- uint32_t to_start, |
- int packed_size, |
- int copy_size) { |
+ static void CopyElementsImpl(Handle<FixedArrayBase> from, |
+ uint32_t from_start, |
+ Handle<FixedArrayBase> to, |
+ ElementsKind from_kind, |
+ uint32_t to_start, |
+ int packed_size, |
+ int copy_size) { |
UNREACHABLE(); |
- return NULL; |
} |
static uint32_t GetCapacityImpl(FixedArrayBase* backing_store) { |