| 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.
|
|
|