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) { |