| Index: runtime/vm/snapshot.cc
|
| ===================================================================
|
| --- runtime/vm/snapshot.cc (revision 29540)
|
| +++ runtime/vm/snapshot.cc (working copy)
|
| @@ -150,6 +150,8 @@
|
| isolate_(isolate),
|
| cls_(Class::Handle()),
|
| obj_(Object::Handle()),
|
| + array_(Array::Handle()),
|
| + field_(Field::Handle()),
|
| str_(String::Handle()),
|
| library_(Library::Handle()),
|
| type_(AbstractType::Handle()),
|
| @@ -789,9 +791,21 @@
|
| instance_size = cls_.instance_size();
|
| }
|
| intptr_t offset = Object::InstanceSize();
|
| + intptr_t result_cid = result->GetClassId();
|
| while (offset < instance_size) {
|
| obj_ = ReadObjectRef();
|
| result->SetFieldAtOffset(offset, obj_);
|
| + if (kind_ == Snapshot::kMessage) {
|
| + cls_ = isolate()->class_table()->At(result_cid);
|
| + array_ = cls_.OffsetToField();
|
| + field_ ^= array_.At(offset / kWordSize);
|
| + // Entries can be null because offset can be outside of instance fields
|
| + // due to rounded allocation size.
|
| + if (!field_.IsNull()) {
|
| + ASSERT(field_.Offset() == offset);
|
| + field_.UpdateGuardedCidAndLength(obj_);
|
| + }
|
| + }
|
| offset += kWordSize;
|
| }
|
| if (kind_ == Snapshot::kFull) {
|
|
|