Index: src/heap.cc |
diff --git a/src/heap.cc b/src/heap.cc |
index 7a5188fd153161294f992667ae9078d1e2ff46ca..2a65a68f238275c2eaf88d77f2f4859dda3ae09c 100644 |
--- a/src/heap.cc |
+++ b/src/heap.cc |
@@ -1670,8 +1670,8 @@ bool Heap::CreateInitialObjects() { |
if (InitializeNumberStringCache()->IsFailure()) return false; |
- // Allocate cache for single character strings. |
- obj = AllocateFixedArray(String::kMaxAsciiCharCode+1, TENURED); |
+ // Allocate cache for single character ASCII strings. |
+ obj = AllocateFixedArray(String::kMaxAsciiCharCode + 1, TENURED); |
if (obj->IsFailure()) return false; |
set_single_character_string_cache(FixedArray::cast(obj)); |
@@ -3013,13 +3013,10 @@ Object* Heap::AllocateFixedArray(int length) { |
} |
-Object* Heap::AllocateFixedArray(int length, PretenureFlag pretenure) { |
- ASSERT(length >= 0); |
- ASSERT(empty_fixed_array()->IsFixedArray()); |
+Object* Heap::AllocateRawFixedArray(int length, PretenureFlag pretenure) { |
if (length < 0 || length > FixedArray::kMaxLength) { |
return Failure::OutOfMemoryException(); |
} |
- if (length == 0) return empty_fixed_array(); |
AllocationSpace space = |
(pretenure == TENURED) ? OLD_POINTER_SPACE : NEW_SPACE; |
@@ -3053,18 +3050,39 @@ Object* Heap::AllocateFixedArray(int length, PretenureFlag pretenure) { |
ASSERT(space == LO_SPACE); |
result = lo_space_->AllocateRawFixedArray(size); |
} |
+ return result; |
+} |
+ |
+ |
+static Object* AllocateFixedArrayWithFiller(int length, |
+ PretenureFlag pretenure, |
+ Object* filler) { |
+ ASSERT(length >= 0); |
+ ASSERT(Heap::empty_fixed_array()->IsFixedArray()); |
+ if (length == 0) return Heap::empty_fixed_array(); |
+ |
+ ASSERT(!Heap::InNewSpace(filler)); |
+ Object* result = Heap::AllocateRawFixedArray(length, pretenure); |
if (result->IsFailure()) return result; |
- // Initialize the object. |
- reinterpret_cast<Array*>(result)->set_map(fixed_array_map()); |
+ HeapObject::cast(result)->set_map(Heap::fixed_array_map()); |
FixedArray* array = FixedArray::cast(result); |
array->set_length(length); |
- ASSERT(!Heap::InNewSpace(undefined_value())); |
- MemsetPointer(array->data_start(), undefined_value(), length); |
+ MemsetPointer(array->data_start(), filler, length); |
return array; |
} |
+Object* Heap::AllocateFixedArray(int length, PretenureFlag pretenure) { |
+ return AllocateFixedArrayWithFiller(length, pretenure, undefined_value()); |
+} |
+ |
+ |
+Object* Heap::AllocateFixedArrayWithHoles(int length, PretenureFlag pretenure) { |
+ return AllocateFixedArrayWithFiller(length, pretenure, the_hole_value()); |
+} |
+ |
+ |
Object* Heap::AllocateUninitializedFixedArray(int length) { |
if (length == 0) return empty_fixed_array(); |
@@ -3077,22 +3095,6 @@ Object* Heap::AllocateUninitializedFixedArray(int length) { |
} |
-Object* Heap::AllocateFixedArrayWithHoles(int length) { |
- if (length == 0) return empty_fixed_array(); |
- Object* result = AllocateRawFixedArray(length); |
- if (!result->IsFailure()) { |
- // Initialize header. |
- reinterpret_cast<Array*>(result)->set_map(fixed_array_map()); |
- FixedArray* array = FixedArray::cast(result); |
- array->set_length(length); |
- // Initialize body. |
- ASSERT(!Heap::InNewSpace(the_hole_value())); |
- MemsetPointer(array->data_start(), the_hole_value(), length); |
- } |
- return result; |
-} |
- |
- |
Object* Heap::AllocateHashTable(int length, PretenureFlag pretenure) { |
Object* result = Heap::AllocateFixedArray(length, pretenure); |
if (result->IsFailure()) return result; |