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