Index: runtime/vm/raw_object_snapshot.cc |
=================================================================== |
--- runtime/vm/raw_object_snapshot.cc (revision 11394) |
+++ runtime/vm/raw_object_snapshot.cc (working copy) |
@@ -17,7 +17,11 @@ |
#define NEW_OBJECT_WITH_LEN(type, len) \ |
((kind == Snapshot::kFull) ? reader->New##type(len) : type::New(len)) |
+#define NEW_OBJECT_WITH_LEN_SPACE(type, len, kind) \ |
+ ((kind == Snapshot::kFull) ? \ |
+ reader->New##type(len) : type::New(len, HEAP_SPACE(kind))) |
+ |
static uword BigintAllocator(intptr_t size) { |
Zone* zone = Isolate::Current()->current_zone(); |
return zone->AllocUnsafe(size); |
@@ -317,7 +321,7 @@ |
intptr_t len = reader->ReadSmiValue(); |
TypeArguments& type_arguments = TypeArguments::ZoneHandle( |
- reader->isolate(), NEW_OBJECT_WITH_LEN(TypeArguments, len)); |
+ reader->isolate(), NEW_OBJECT_WITH_LEN_SPACE(TypeArguments, len, kind)); |
reader->AddBackRef(object_id, &type_arguments, kIsDeserialized); |
// Now set all the object fields. |
@@ -1012,7 +1016,7 @@ |
if (kind == Snapshot::kFull) { |
context = reader->NewContext(num_vars); |
} else { |
- context = Context::New(num_vars); |
+ context = Context::New(num_vars, HEAP_SPACE(kind)); |
} |
reader->AddBackRef(object_id, &context, kIsDeserialized); |
@@ -1309,7 +1313,7 @@ |
if (RawObject::IsCanonical(tags)) { |
mint = Mint::NewCanonical(value); |
} else { |
- mint = Mint::New(value, Heap::kNew); |
+ mint = Mint::New(value, HEAP_SPACE(kind)); |
} |
} |
reader->AddBackRef(object_id, &mint, kIsDeserialized); |
@@ -1353,8 +1357,8 @@ |
// Create a Bigint object from HexCString. |
Bigint& obj = Bigint::ZoneHandle( |
reader->isolate(), |
- (kind == Snapshot::kFull) ? reader->NewBigint(str) : |
- BigintOperations::FromHexCString(str)); |
+ ((kind == Snapshot::kFull) ? reader->NewBigint(str) : |
+ BigintOperations::FromHexCString(str, HEAP_SPACE(kind)))); |
// If it is a canonical constant make it one. |
if ((kind != Snapshot::kFull) && RawObject::IsCanonical(tags)) { |
@@ -1427,7 +1431,7 @@ |
if (RawObject::IsCanonical(tags)) { |
dbl = Double::NewCanonical(value); |
} else { |
- dbl = Double::New(value, Heap::kNew); |
+ dbl = Double::New(value, HEAP_SPACE(kind)); |
} |
} |
reader->AddBackRef(object_id, &dbl, kIsDeserialized); |
@@ -1476,7 +1480,8 @@ |
void String::ReadFromImpl(SnapshotReader* reader, |
HandleType* str_obj, |
intptr_t len, |
- intptr_t tags) { |
+ intptr_t tags, |
+ Snapshot::Kind kind) { |
ASSERT(reader != NULL); |
if (RawObject::IsCanonical(tags)) { |
// Set up canonical string object. |
@@ -1489,7 +1494,7 @@ |
*str_obj ^= Symbols::New(ptr, len); |
} else { |
// Set up the string object. |
- *str_obj = HandleType::New(len, Heap::kNew); |
+ *str_obj = HandleType::New(len, HEAP_SPACE(kind)); |
str_obj->set_tags(tags); |
str_obj->SetHash(0); // Will get computed when needed. |
for (intptr_t i = 0; i < len; i++) { |
@@ -1522,7 +1527,7 @@ |
} |
ASSERT((hash == 0) || (String::Hash(str_obj, 0, str_obj.Length()) == hash)); |
} else { |
- ReadFromImpl<OneByteString, uint8_t>(reader, &str_obj, len, tags); |
+ ReadFromImpl<OneByteString, uint8_t>(reader, &str_obj, len, tags, kind); |
} |
reader->AddBackRef(object_id, &str_obj, kIsDeserialized); |
return str_obj.raw(); |
@@ -1553,7 +1558,7 @@ |
} |
ASSERT(String::Hash(str_obj, 0, str_obj.Length()) == hash); |
} else { |
- ReadFromImpl<TwoByteString, uint16_t>(reader, &str_obj, len, tags); |
+ ReadFromImpl<TwoByteString, uint16_t>(reader, &str_obj, len, tags, kind); |
} |
reader->AddBackRef(object_id, &str_obj, kIsDeserialized); |
return str_obj.raw(); |
@@ -1584,7 +1589,7 @@ |
} |
ASSERT(String::Hash(str_obj, 0, str_obj.Length()) == hash); |
} else { |
- ReadFromImpl<FourByteString, uint32_t>(reader, &str_obj, len, tags); |
+ ReadFromImpl<FourByteString, uint32_t>(reader, &str_obj, len, tags, kind); |
} |
reader->AddBackRef(object_id, &str_obj, kIsDeserialized); |
return str_obj.raw(); |
@@ -1774,7 +1779,7 @@ |
reader->GetBackRef(object_id)); |
if (array == NULL) { |
array = &(Array::ZoneHandle(reader->isolate(), |
- NEW_OBJECT_WITH_LEN(Array, len))); |
+ NEW_OBJECT_WITH_LEN_SPACE(Array, len, kind))); |
reader->AddBackRef(object_id, array, kIsDeserialized); |
} |
reader->ArrayReadFrom(*array, len, tags); |
@@ -1794,7 +1799,8 @@ |
reader->GetBackRef(object_id)); |
if (array == NULL) { |
array = &(ImmutableArray::ZoneHandle( |
- reader->isolate(), NEW_OBJECT_WITH_LEN(ImmutableArray, len))); |
+ reader->isolate(), |
+ NEW_OBJECT_WITH_LEN_SPACE(ImmutableArray, len, kind))); |
reader->AddBackRef(object_id, array, kIsDeserialized); |
} |
reader->ArrayReadFrom(*array, len, tags); |
@@ -1838,7 +1844,7 @@ |
if (kind == Snapshot::kFull) { |
array = reader->NewGrowableObjectArray(); |
} else { |
- array = GrowableObjectArray::New(0); |
+ array = GrowableObjectArray::New(0, HEAP_SPACE(kind)); |
} |
reader->AddBackRef(object_id, &array, kIsDeserialized); |
intptr_t length = reader->ReadSmiValue(); |
@@ -1890,9 +1896,8 @@ |
ASSERT(reader != NULL); |
intptr_t len = reader->ReadSmiValue(); |
- Heap::Space space = (kind == Snapshot::kFull) ? Heap::kOld : Heap::kNew; |
- HandleT& result = |
- HandleT::ZoneHandle(reader->isolate(), HandleT::New(len, space)); |
+ HandleT& result = HandleT::ZoneHandle( |
+ reader->isolate(), HandleT::New(len, HEAP_SPACE(kind))); |
reader->AddBackRef(object_id, &result, kIsDeserialized); |
// Set the object tags. |
@@ -1950,7 +1955,7 @@ |
const Class& cls = Class::Handle( \ |
reader->isolate()->object_store()->external_##lname##_array_class()); \ |
return NewExternalImpl<External##name##Array, RawExternal##name##Array>( \ |
- cls, data, length, peer, callback, Heap::kNew); \ |
+ cls, data, length, peer, callback, HEAP_SPACE(kind)); \ |
} \ |
@@ -2089,8 +2094,7 @@ |
// Allocate JSRegExp object. |
JSRegExp& regex = JSRegExp::ZoneHandle( |
- reader->isolate(), |
- JSRegExp::New(len, (kind == Snapshot::kFull) ? Heap::kOld : Heap::kNew)); |
+ reader->isolate(), JSRegExp::New(len, HEAP_SPACE(kind))); |
reader->AddBackRef(object_id, ®ex, kIsDeserialized); |
// Set the object tags. |
@@ -2143,8 +2147,7 @@ |
// Allocate the weak property object. |
WeakProperty& weak_property = WeakProperty::ZoneHandle( |
- reader->isolate(), |
- WeakProperty::New((kind == Snapshot::kFull) ? Heap::kOld : Heap::kNew)); |
+ reader->isolate(), WeakProperty::New(HEAP_SPACE(kind))); |
reader->AddBackRef(object_id, &weak_property, kIsDeserialized); |
// Set the object tags. |