Chromium Code Reviews| Index: src/objects.cc |
| diff --git a/src/objects.cc b/src/objects.cc |
| index e0a95372b48c7ebfb5755a32243d7bc9999adc7f..0ef79110ad6f0a9453381d4f3b113f55bb8e0e0a 100644 |
| --- a/src/objects.cc |
| +++ b/src/objects.cc |
| @@ -8487,23 +8487,23 @@ MaybeObject* JSObject::SetFastElementsCapacityAndLength( |
| if (!maybe->To(&new_map)) return maybe; |
| } |
| - FixedArrayBase* old_elements_raw = elements(); |
| + FixedArrayBase* old_elements = elements(); |
| ElementsKind elements_kind = GetElementsKind(); |
| ElementsAccessor* accessor = ElementsAccessor::ForKind(elements_kind); |
| ElementsKind to_kind = (elements_kind == FAST_SMI_ONLY_ELEMENTS) |
| ? FAST_SMI_ONLY_ELEMENTS |
| : FAST_ELEMENTS; |
| // int copy_size = Min(old_elements_raw->length(), new_elements->length()); |
| - accessor->CopyElements(this, new_elements, to_kind); |
| + accessor->CopyElements(this, new_elements, to_kind, SKIP_WRITE_BARRIER); |
| if (elements_kind != NON_STRICT_ARGUMENTS_ELEMENTS) { |
| set_map_and_elements(new_map, new_elements); |
| } else { |
| - FixedArray* parameter_map = FixedArray::cast(old_elements_raw); |
| + FixedArray* parameter_map = FixedArray::cast(old_elements); |
| parameter_map->set(1, new_elements); |
| } |
| if (FLAG_trace_elements_transitions) { |
| - PrintElementsTransition(stdout, elements_kind, old_elements_raw, |
| + PrintElementsTransition(stdout, elements_kind, old_elements, |
| GetElementsKind(), new_elements); |
| } |
| @@ -8536,27 +8536,15 @@ MaybeObject* JSObject::SetFastDoubleElementsCapacityAndLength( |
| } |
| FixedArrayBase* old_elements = elements(); |
| - ElementsKind elements_kind(GetElementsKind()); |
| - AssertNoAllocation no_gc; |
| - if (old_elements->length() != 0) { |
| - switch (elements_kind) { |
| - case FAST_SMI_ONLY_ELEMENTS: |
| - case FAST_ELEMENTS: { |
| - elems->Initialize(FixedArray::cast(old_elements)); |
| - break; |
| - } |
| - case FAST_DOUBLE_ELEMENTS: { |
| - elems->Initialize(FixedDoubleArray::cast(old_elements)); |
| - break; |
| - } |
| - case DICTIONARY_ELEMENTS: { |
| - elems->Initialize(SeededNumberDictionary::cast(old_elements)); |
| - break; |
| - } |
| - default: |
| - UNREACHABLE(); |
| - break; |
| - } |
| + ElementsKind elements_kind = GetElementsKind(); |
| + ElementsAccessor* accessor = ElementsAccessor::ForKind(elements_kind); |
| + accessor->CopyElements(this, elems, FAST_DOUBLE_ELEMENTS, |
| + SKIP_WRITE_BARRIER); |
| + if (elements_kind != NON_STRICT_ARGUMENTS_ELEMENTS) { |
|
Jakob Kummerow
2012/03/12 15:33:28
I don't think this if/else block makes sense. Can
danno
2012/03/12 20:35:03
I think it's theoretically possible, it least it m
|
| + set_map_and_elements(new_map, elems); |
| + } else { |
| + FixedArray* parameter_map = FixedArray::cast(old_elements); |
| + parameter_map->set(1, elems); |
| } |
| if (FLAG_trace_elements_transitions) { |