Index: src/spaces.cc |
=================================================================== |
--- src/spaces.cc (revision 3115) |
+++ src/spaces.cc (working copy) |
@@ -1527,7 +1527,9 @@ |
// correct size. |
if (size_in_bytes > ByteArray::kAlignedSize) { |
set_map(Heap::raw_unchecked_byte_array_map()); |
- ByteArray::cast(this)->set_length(ByteArray::LengthFor(size_in_bytes)); |
+ // Can't use ByteArray::cast because it fails during deserialization. |
+ ByteArray* this_as_byte_array = reinterpret_cast<ByteArray*>(this); |
+ this_as_byte_array->set_length(ByteArray::LengthFor(size_in_bytes)); |
} else if (size_in_bytes == kPointerSize) { |
set_map(Heap::raw_unchecked_one_pointer_filler_map()); |
} else if (size_in_bytes == 2 * kPointerSize) { |
@@ -1535,7 +1537,8 @@ |
} else { |
UNREACHABLE(); |
} |
- ASSERT(Size() == size_in_bytes); |
+ // We would like to ASSERT(Size() == size_in_bytes) but this would fail during |
+ // deserialization because the byte array map is not done yet. |
} |
@@ -1829,12 +1832,14 @@ |
} |
// There is no next page in this space. Try free list allocation. |
Mads Ager (chromium)
2009/10/26 11:14:05
Update comment.
|
- int wasted_bytes; |
- Object* result = free_list_.Allocate(size_in_bytes, &wasted_bytes); |
- accounting_stats_.WasteBytes(wasted_bytes); |
- if (!result->IsFailure()) { |
- accounting_stats_.AllocateBytes(size_in_bytes); |
- return HeapObject::cast(result); |
+ if (!Heap::linear_allocation()) { |
+ int wasted_bytes; |
+ Object* result = free_list_.Allocate(size_in_bytes, &wasted_bytes); |
+ accounting_stats_.WasteBytes(wasted_bytes); |
+ if (!result->IsFailure()) { |
+ accounting_stats_.AllocateBytes(size_in_bytes); |
+ return HeapObject::cast(result); |
+ } |
} |
// Free list allocation failed and there is no next page. Fail if we have |
@@ -2233,7 +2238,7 @@ |
// There is no next page in this space. Try free list allocation. |
Mads Ager (chromium)
2009/10/26 11:14:05
Update comment.
|
// The fixed space free list implicitly assumes that all free blocks |
// are of the fixed size. |
- if (size_in_bytes == object_size_in_bytes_) { |
+ if (!Heap::linear_allocation()) { |
Object* result = free_list_.Allocate(); |
if (!result->IsFailure()) { |
accounting_stats_.AllocateBytes(size_in_bytes); |