Chromium Code Reviews| Index: src/heap.cc |
| diff --git a/src/heap.cc b/src/heap.cc |
| index eae7241cf1782dc59d175d36c0b35830725771b6..4bade10841c0c3d65bd0c072c0db6914b78a53c5 100644 |
| --- a/src/heap.cc |
| +++ b/src/heap.cc |
| @@ -2840,6 +2840,8 @@ bool Heap::CreateInitialMaps() { |
| ALLOCATE_VARSIZE_MAP(FIXED_ARRAY_TYPE, scope_info) |
| ALLOCATE_MAP(HEAP_NUMBER_TYPE, HeapNumber::kSize, heap_number) |
| + ALLOCATE_MAP( |
| + MUTABLE_HEAP_NUMBER_TYPE, HeapNumber::kSize, mutable_heap_number) |
| ALLOCATE_MAP(SYMBOL_TYPE, Symbol::kSize, symbol) |
| ALLOCATE_MAP(FOREIGN_TYPE, Foreign::kSize, foreign) |
| @@ -2959,6 +2961,25 @@ MaybeObject* Heap::AllocateHeapNumber(double value, PretenureFlag pretenure) { |
| } |
| +MaybeObject* Heap::AllocateMutableHeapNumber(double value, |
|
Igor Sheludko
2014/03/27 11:30:16
This code is the same as AllocateHeapNumber() exce
|
| + PretenureFlag pretenure) { |
| + // Statically ensure that it is safe to allocate heap numbers in paged |
| + // spaces. |
| + int size = HeapNumber::kSize; |
| + STATIC_ASSERT(HeapNumber::kSize <= Page::kMaxRegularHeapObjectSize); |
| + |
| + AllocationSpace space = SelectSpace(size, OLD_DATA_SPACE, pretenure); |
| + |
| + Object* result; |
| + MaybeObject* maybe_result = AllocateRaw(size, space, OLD_DATA_SPACE); |
| + if (!maybe_result->ToObject(&result)) return maybe_result; |
| + |
| + HeapObject::cast(result)->set_map_no_write_barrier(mutable_heap_number_map()); |
| + HeapNumber::cast(result)->set_value(value); |
| + return result; |
| +} |
| + |
| + |
| MaybeObject* Heap::AllocateCell(Object* value) { |
| int size = Cell::kSize; |
| STATIC_ASSERT(Cell::kSize <= Page::kMaxRegularHeapObjectSize); |