| 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;
|
|
|