Chromium Code Reviews| Index: src/builtins.cc |
| diff --git a/src/builtins.cc b/src/builtins.cc |
| index 5c8e32b4269d554d9d4452e05e55d439c9951602..8ae8d0f02459f451137e4eae61e81ca911db4de0 100644 |
| --- a/src/builtins.cc |
| +++ b/src/builtins.cc |
| @@ -574,14 +574,13 @@ BUILTIN(ArrayPush) { |
| MaybeObject* maybe_obj = heap->AllocateUninitializedFixedArray(capacity); |
| if (!maybe_obj->To(&new_elms)) return maybe_obj; |
| - if (len > 0) { |
| - ElementsAccessor* accessor = array->GetElementsAccessor(); |
| - MaybeObject* maybe_failure = |
| - accessor->CopyElements(NULL, 0, new_elms, kind, 0, len, elms_obj); |
| - ASSERT(!maybe_failure->IsFailure()); |
| - USE(maybe_failure); |
| - } |
| - FillWithHoles(heap, new_elms, new_length, capacity); |
| + ElementsAccessor* accessor = array->GetElementsAccessor(); |
| + MaybeObject* maybe_failure = |
| + accessor->CopyElements( |
|
Michael Starzinger
2012/11/27 11:53:56
Move the accessor->CopyElements into the first lin
Toon Verwaest
2012/11/27 11:59:30
Done.
|
| + NULL, 0, new_elms, kind, 0, |
| + ElementsAccessor::kCopyToEndAndInitializeToHole, elms_obj); |
| + ASSERT(!maybe_failure->IsFailure()); |
| + USE(maybe_failure); |
| elms = new_elms; |
| } |
| @@ -623,15 +622,13 @@ BUILTIN(ArrayPush) { |
| heap->AllocateUninitializedFixedDoubleArray(capacity); |
| if (!maybe_obj->To(&new_elms)) return maybe_obj; |
| - if (len > 0) { |
| - ElementsAccessor* accessor = array->GetElementsAccessor(); |
| - MaybeObject* maybe_failure = |
| - accessor->CopyElements(NULL, 0, new_elms, kind, 0, len, elms_obj); |
| - ASSERT(!maybe_failure->IsFailure()); |
| - USE(maybe_failure); |
| - } |
| - |
| - FillWithHoles(new_elms, len + to_add, new_elms->length()); |
| + ElementsAccessor* accessor = array->GetElementsAccessor(); |
| + MaybeObject* maybe_failure = |
| + accessor->CopyElements( |
|
Michael Starzinger
2012/11/27 11:53:56
Likewise.
Toon Verwaest
2012/11/27 11:59:30
Done.
|
| + NULL, 0, new_elms, kind, 0, |
| + ElementsAccessor::kCopyToEndAndInitializeToHole, elms_obj); |
| + ASSERT(!maybe_failure->IsFailure()); |
| + USE(maybe_failure); |
| } else { |
| // to_add is > 0 and new_length <= elms_len, so elms_obj cannot be the |
| // empty_fixed_array. |
| @@ -787,16 +784,15 @@ BUILTIN(ArrayUnshift) { |
| MaybeObject* maybe_elms = heap->AllocateUninitializedFixedArray(capacity); |
| if (!maybe_elms->To(&new_elms)) return maybe_elms; |
| - if (len > 0) { |
| - ElementsKind kind = array->GetElementsKind(); |
| - ElementsAccessor* accessor = array->GetElementsAccessor(); |
| - MaybeObject* maybe_failure = |
| - accessor->CopyElements(NULL, 0, new_elms, kind, to_add, len, elms); |
| - ASSERT(!maybe_failure->IsFailure()); |
| - USE(maybe_failure); |
| - } |
| + ElementsKind kind = array->GetElementsKind(); |
| + ElementsAccessor* accessor = array->GetElementsAccessor(); |
| + MaybeObject* maybe_failure = |
| + accessor->CopyElements( |
|
Michael Starzinger
2012/11/27 11:53:56
Likewise.
Toon Verwaest
2012/11/27 11:59:30
Done.
|
| + NULL, 0, new_elms, kind, to_add, |
| + ElementsAccessor::kCopyToEndAndInitializeToHole, elms); |
| + ASSERT(!maybe_failure->IsFailure()); |
| + USE(maybe_failure); |
| - FillWithHoles(heap, new_elms, new_length, capacity); |
| elms = new_elms; |
| array->set_elements(elms); |
| } else { |
| @@ -1116,16 +1112,12 @@ BUILTIN(ArraySplice) { |
| ASSERT(!maybe_failure->IsFailure()); |
| USE(maybe_failure); |
| } |
| - const int to_copy = len - actual_delete_count - actual_start; |
| - if (to_copy > 0) { |
| - MaybeObject* maybe_failure = accessor->CopyElements( |
| - NULL, actual_start + actual_delete_count, new_elms, kind, |
| - actual_start + item_count, to_copy, elms); |
| - ASSERT(!maybe_failure->IsFailure()); |
| - USE(maybe_failure); |
| - } |
| - |
| - FillWithHoles(heap, new_elms, new_length, capacity); |
| + MaybeObject* maybe_failure = accessor->CopyElements( |
| + NULL, actual_start + actual_delete_count, new_elms, kind, |
| + actual_start + item_count, |
| + ElementsAccessor::kCopyToEndAndInitializeToHole, elms); |
| + ASSERT(!maybe_failure->IsFailure()); |
| + USE(maybe_failure); |
| elms_obj = new_elms; |
| elms_changed = true; |