Index: runtime/vm/snapshot.cc |
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc |
index b08e704d7b220ad08c1691e7c49f3b2a7c169cbb..907e80577cda45b0eb934896f60799a8b8a7852d 100644 |
--- a/runtime/vm/snapshot.cc |
+++ b/runtime/vm/snapshot.cc |
@@ -325,6 +325,11 @@ RawObject* SnapshotReader::VmIsolateSnapshotObject(intptr_t index) const { |
} |
+bool SnapshotReader::is_vm_isolate() const { |
+ return isolate_ == Dart::vm_isolate(); |
+} |
+ |
+ |
RawObject* SnapshotReader::ReadObjectImpl(bool as_reference, |
intptr_t patch_object_id, |
intptr_t patch_offset) { |
@@ -463,9 +468,6 @@ RawObject* SnapshotReader::ReadObjectRef(intptr_t object_id, |
#undef SNAPSHOT_READ |
default: UNREACHABLE(); break; |
} |
- if (kind_ == Snapshot::kFull) { |
- pobj_.SetCreatedFromSnapshot(); |
- } |
return pobj_.raw(); |
} |
@@ -536,10 +538,14 @@ RawObject* SnapshotReader::ReadInlinedObject(intptr_t object_id, |
result->SetFieldAtOffset(offset, Object::null_object()); |
offset += kWordSize; |
} |
- result->SetCreatedFromSnapshot(); |
- } else if (RawObject::IsCanonical(tags)) { |
- *result = result->CheckAndCanonicalize(NULL); |
- ASSERT(!result->IsNull()); |
+ } |
+ if (RawObject::IsCanonical(tags)) { |
+ if (kind_ == Snapshot::kFull) { |
+ result->SetCanonical(); |
+ } else { |
+ *result = result->CheckAndCanonicalize(NULL); |
+ ASSERT(!result->IsNull()); |
+ } |
} |
return result->raw(); |
} else if (header_id == kStaticImplicitClosureObjectId) { |
@@ -578,9 +584,6 @@ RawObject* SnapshotReader::ReadInlinedObject(intptr_t object_id, |
#undef SNAPSHOT_READ |
default: UNREACHABLE(); break; |
} |
- if (kind_ == Snapshot::kFull) { |
- pobj_.SetCreatedFromSnapshot(); |
- } |
AddPatchRecord(object_id, patch_object_id, patch_offset); |
return pobj_.raw(); |
} |
@@ -1071,6 +1074,7 @@ RawObject* SnapshotReader::AllocateUninitialized(intptr_t class_id, |
ASSERT(class_id != kIllegalCid); |
tags = RawObject::ClassIdTag::update(class_id, tags); |
tags = RawObject::SizeTag::update(size, tags); |
+ tags = RawObject::VMHeapObjectTag::update(is_vm_isolate(), tags); |
raw_obj->ptr()->tags_ = tags; |
return raw_obj; |
} |
@@ -1209,9 +1213,6 @@ void SnapshotReader::ArrayReadFrom(intptr_t object_id, |
const Array& result, |
intptr_t len, |
intptr_t tags) { |
- // Set the object tags. |
- result.set_tags(tags); |
- |
// Setup the object fields. |
const intptr_t typeargs_offset = |
GrowableObjectArray::type_arguments_offset() / kWordSize; |
@@ -2053,11 +2054,6 @@ void SnapshotWriter::WriteClassId(RawClass* cls) { |
ASSERT(kind_ != Snapshot::kFull); |
int class_id = cls->ptr()->id_; |
ASSERT(!IsSingletonClassId(class_id) && !IsObjectStoreClassId(class_id)); |
- // TODO(5411462): Should restrict this to only core-lib classes in this |
- // case. |
- // Write out the class and tags information. |
- WriteVMIsolateObject(kClassCid); |
- WriteTags(GetObjectTags(cls)); |
// Write out the library url and class name. |
RawLibrary* library = cls->ptr()->library_; |