Chromium Code Reviews| 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); |