| Index: src/elements.cc
|
| diff --git a/src/elements.cc b/src/elements.cc
|
| index ae1313f381b000919f25bbce4cd164cd2bb21c46..c2d31caeeaa07305bceb963bd1808866c2d8ac47 100644
|
| --- a/src/elements.cc
|
| +++ b/src/elements.cc
|
| @@ -302,10 +302,11 @@ static void CopyDoubleToObjectElements(Handle<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;
|
| + Isolate* isolate = from_base->GetIsolate();
|
| 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());
|
| + HandleScope scope(isolate);
|
| if (IsFastSmiElementsKind(to_kind)) {
|
| UNIMPLEMENTED();
|
| } else {
|
| @@ -639,9 +640,17 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| uint32_t key,
|
| Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE {
|
| CALL_HEAP_FUNCTION(holder->GetIsolate(),
|
| - Get(*receiver, *holder, key,
|
| - backing_store.is_null()
|
| - ? NULL : *backing_store),
|
| + Get(*receiver, *holder, key, *backing_store),
|
| + Object);
|
| + }
|
| +
|
| + // TODO(ishell): Temporary wrapper until handlified.
|
| + MUST_USE_RESULT virtual Handle<Object> Get(
|
| + Handle<Object> receiver,
|
| + Handle<JSObject> holder,
|
| + uint32_t key) V8_FINAL V8_OVERRIDE {
|
| + CALL_HEAP_FUNCTION(holder->GetIsolate(),
|
| + Get(*receiver, *holder, key, NULL),
|
| Object);
|
| }
|
|
|
| @@ -787,29 +796,36 @@ class ElementsAccessorBase : public ElementsAccessor {
|
| }
|
|
|
| virtual void CopyElements(
|
| - Handle<JSObject> from_holder,
|
| + Handle<FixedArrayBase> from,
|
| uint32_t from_start,
|
| ElementsKind from_kind,
|
| Handle<FixedArrayBase> to,
|
| uint32_t to_start,
|
| - int copy_size,
|
| - Handle<FixedArrayBase> from) V8_FINAL V8_OVERRIDE {
|
| + int copy_size) V8_FINAL V8_OVERRIDE {
|
| + ASSERT(!from.is_null());
|
| + ElementsAccessorSubclass::CopyElementsImpl(
|
| + from, from_start, to, from_kind, to_start, kPackedSizeNotKnown,
|
| + copy_size);
|
| + }
|
| +
|
| + virtual void CopyElements(
|
| + JSObject* from_holder,
|
| + uint32_t from_start,
|
| + ElementsKind from_kind,
|
| + Handle<FixedArrayBase> to,
|
| + uint32_t to_start,
|
| + int copy_size) V8_FINAL V8_OVERRIDE {
|
| int packed_size = kPackedSizeNotKnown;
|
| - if (from.is_null()) {
|
| - from = handle(from_holder->elements());
|
| - }
|
| -
|
| - if (!from_holder.is_null()) {
|
| - bool is_packed = IsFastPackedElementsKind(from_kind) &&
|
| - from_holder->IsJSArray();
|
| - if (is_packed) {
|
| - packed_size =
|
| - Smi::cast(Handle<JSArray>::cast(from_holder)->length())->value();
|
| - if (copy_size >= 0 && packed_size > copy_size) {
|
| - packed_size = copy_size;
|
| - }
|
| + bool is_packed = IsFastPackedElementsKind(from_kind) &&
|
| + from_holder->IsJSArray();
|
| + if (is_packed) {
|
| + packed_size =
|
| + Smi::cast(JSArray::cast(from_holder)->length())->value();
|
| + if (copy_size >= 0 && packed_size > copy_size) {
|
| + packed_size = copy_size;
|
| }
|
| }
|
| + Handle<FixedArrayBase> from(from_holder->elements());
|
| ElementsAccessorSubclass::CopyElementsImpl(
|
| from, from_start, to, from_kind, to_start, packed_size, copy_size);
|
| }
|
|
|