Index: runtime/vm/raw_object_snapshot.cc |
=================================================================== |
--- runtime/vm/raw_object_snapshot.cc (revision 11197) |
+++ runtime/vm/raw_object_snapshot.cc (working copy) |
@@ -186,32 +186,30 @@ |
Snapshot::Kind kind) { |
ASSERT(reader != NULL); |
- // Allocate parameterized type object. |
- Type& parameterized_type = Type::ZoneHandle( |
- reader->isolate(), NEW_OBJECT(Type)); |
- reader->AddBackRef(object_id, ¶meterized_type, kIsDeserialized); |
+ // Allocate type object. |
+ Type& type = Type::ZoneHandle(reader->isolate(), NEW_OBJECT(Type)); |
+ reader->AddBackRef(object_id, &type, kIsDeserialized); |
// Set the object tags. |
- parameterized_type.set_tags(tags); |
+ type.set_tags(tags); |
// Set all non object fields. |
- parameterized_type.set_token_pos(reader->ReadIntptrValue()); |
- parameterized_type.set_type_state(reader->Read<int8_t>()); |
+ type.set_token_pos(reader->ReadIntptrValue()); |
+ type.set_type_state(reader->Read<int8_t>()); |
// Set all the object fields. |
// TODO(5411462): Need to assert No GC can happen here, even though |
// allocations may happen. |
- intptr_t num_flds = (parameterized_type.raw()->to() - |
- parameterized_type.raw()->from()); |
+ intptr_t num_flds = (type.raw()->to() - type.raw()->from()); |
for (intptr_t i = 0; i <= num_flds; i++) { |
- *(parameterized_type.raw()->from() + i) = reader->ReadObjectImpl(); |
+ *(type.raw()->from() + i) = reader->ReadObjectRef(); |
} |
// If object needs to be a canonical object, Canonicalize it. |
- if ((kind != Snapshot::kFull) && parameterized_type.IsCanonical()) { |
- parameterized_type ^= parameterized_type.Canonicalize(); |
+ if ((kind != Snapshot::kFull) && type.IsCanonical()) { |
+ type ^= type.Canonicalize(); |
} |
- return parameterized_type.raw(); |
+ return type.raw(); |
} |
@@ -232,7 +230,7 @@ |
writer->Write<int8_t>(ptr()->type_state_); |
// Write out all the object pointer fields. |
- SnapshotWriterVisitor visitor(writer, false); |
+ SnapshotWriterVisitor visitor(writer); |
visitor.VisitPointers(from(), to()); |
} |
@@ -262,7 +260,7 @@ |
intptr_t num_flds = (type_parameter.raw()->to() - |
type_parameter.raw()->from()); |
for (intptr_t i = 0; i <= num_flds; i++) { |
- *(type_parameter.raw()->from() + i) = reader->ReadObjectImpl(); |
+ *(type_parameter.raw()->from() + i) = reader->ReadObjectRef(); |
} |
return type_parameter.raw(); |
@@ -287,7 +285,7 @@ |
writer->Write<int8_t>(ptr()->type_state_); |
// Write out all the object pointer fields. |
- SnapshotWriterVisitor visitor(writer, false); |
+ SnapshotWriterVisitor visitor(writer); |
visitor.VisitPointers(from(), to()); |
} |
@@ -387,7 +385,7 @@ |
intptr_t num_flds = (instantiated_type_arguments.raw()->to() - |
instantiated_type_arguments.raw()->from()); |
for (intptr_t i = 0; i <= num_flds; i++) { |
- *(instantiated_type_arguments.raw()->from() + i) = reader->ReadObjectImpl(); |
+ *(instantiated_type_arguments.raw()->from() + i) = reader->ReadObjectRef(); |
} |
return instantiated_type_arguments.raw(); |
} |
@@ -407,7 +405,7 @@ |
writer->WriteIntptrValue(writer->GetObjectTags(this)); |
// Write out all the object pointer fields. |
- SnapshotWriterVisitor visitor(writer, false); |
+ SnapshotWriterVisitor visitor(writer); |
visitor.VisitPointers(from(), to()); |
} |
@@ -417,7 +415,8 @@ |
intptr_t tags, |
Snapshot::Kind kind) { |
ASSERT(reader != NULL); |
- ASSERT(kind != Snapshot::kMessage && !RawObject::IsCreatedFromSnapshot(tags)); |
+ ASSERT((kind != Snapshot::kMessage) && |
+ !RawObject::IsCreatedFromSnapshot(tags)); |
// Allocate function object. |
PatchClass& cls = PatchClass::ZoneHandle(reader->isolate(), |
@@ -443,7 +442,7 @@ |
intptr_t object_id, |
Snapshot::Kind kind) { |
ASSERT(writer != NULL); |
- ASSERT(kind != Snapshot::kMessage && |
+ ASSERT((kind != Snapshot::kMessage) && |
!RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); |
// Write out the serialization header value for this object. |
@@ -463,7 +462,8 @@ |
intptr_t tags, |
Snapshot::Kind kind) { |
ASSERT(reader != NULL); |
- ASSERT(kind != Snapshot::kMessage && !RawObject::IsCreatedFromSnapshot(tags)); |
+ ASSERT((kind != Snapshot::kMessage) && |
+ !RawObject::IsCreatedFromSnapshot(tags)); |
// Allocate function object. |
Function& func = Function::ZoneHandle( |
@@ -498,7 +498,7 @@ |
intptr_t object_id, |
Snapshot::Kind kind) { |
ASSERT(writer != NULL); |
- ASSERT(kind != Snapshot::kMessage && |
+ ASSERT((kind != Snapshot::kMessage) && |
!RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); |
// Write out the serialization header value for this object. |
@@ -528,7 +528,8 @@ |
intptr_t tags, |
Snapshot::Kind kind) { |
ASSERT(reader != NULL); |
- ASSERT(kind != Snapshot::kMessage && !RawObject::IsCreatedFromSnapshot(tags)); |
+ ASSERT((kind != Snapshot::kMessage) && |
+ !RawObject::IsCreatedFromSnapshot(tags)); |
// Allocate field object. |
Field& field = Field::ZoneHandle(reader->isolate(), NEW_OBJECT(Field)); |
@@ -557,7 +558,7 @@ |
intptr_t object_id, |
Snapshot::Kind kind) { |
ASSERT(writer != NULL); |
- ASSERT(kind != Snapshot::kMessage && |
+ ASSERT((kind != Snapshot::kMessage) && |
!RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); |
// Write out the serialization header value for this object. |
@@ -631,7 +632,8 @@ |
intptr_t tags, |
Snapshot::Kind kind) { |
ASSERT(reader != NULL); |
- ASSERT(kind != Snapshot::kMessage && !RawObject::IsCreatedFromSnapshot(tags)); |
+ ASSERT((kind != Snapshot::kMessage) |
+ && !RawObject::IsCreatedFromSnapshot(tags)); |
// Read the length so that we can determine number of tokens to read. |
intptr_t len = reader->ReadSmiValue(); |
@@ -666,7 +668,7 @@ |
intptr_t object_id, |
Snapshot::Kind kind) { |
ASSERT(writer != NULL); |
- ASSERT(kind != Snapshot::kMessage && |
+ ASSERT((kind != Snapshot::kMessage) && |
!RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); |
// Write out the serialization header value for this object. |
@@ -693,7 +695,8 @@ |
intptr_t tags, |
Snapshot::Kind kind) { |
ASSERT(reader != NULL); |
- ASSERT(kind != Snapshot::kMessage && !RawObject::IsCreatedFromSnapshot(tags)); |
+ ASSERT((kind != Snapshot::kMessage) && |
+ !RawObject::IsCreatedFromSnapshot(tags)); |
// Allocate script object. |
Script& script = Script::ZoneHandle(reader->isolate(), NEW_OBJECT(Script)); |
@@ -722,7 +725,7 @@ |
Snapshot::Kind kind) { |
ASSERT(writer != NULL); |
ASSERT(tokens_ != TokenStream::null()); |
- ASSERT(kind != Snapshot::kMessage && |
+ ASSERT((kind != Snapshot::kMessage) && |
!RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); |
// Write out the serialization header value for this object. |
@@ -834,7 +837,8 @@ |
intptr_t tags, |
Snapshot::Kind kind) { |
ASSERT(reader != NULL); |
- ASSERT(kind != Snapshot::kMessage && !RawObject::IsCreatedFromSnapshot(tags)); |
+ ASSERT((kind != Snapshot::kMessage) && |
+ !RawObject::IsCreatedFromSnapshot(tags)); |
// Allocate library prefix object. |
LibraryPrefix& prefix = LibraryPrefix::ZoneHandle( |
@@ -863,7 +867,7 @@ |
intptr_t object_id, |
Snapshot::Kind kind) { |
ASSERT(writer != NULL); |
- ASSERT(kind != Snapshot::kMessage && |
+ ASSERT((kind != Snapshot::kMessage) && |
!RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); |
// Write out the serialization header value for this object. |
@@ -1140,14 +1144,14 @@ |
intptr_t tags, |
Snapshot::Kind kind) { |
UNREACHABLE(); |
- return Error::null(); |
+ return Error::null(); // Error is an abstract class. |
} |
void RawError::WriteTo(SnapshotWriter* writer, |
intptr_t object_id, |
Snapshot::Kind kind) { |
- UNREACHABLE(); |
+ UNREACHABLE(); // Error is an abstract class. |
} |
@@ -1155,15 +1159,43 @@ |
intptr_t object_id, |
intptr_t tags, |
Snapshot::Kind kind) { |
- UNREACHABLE(); |
- return ApiError::null(); |
+ ASSERT(reader != NULL); |
+ |
+ // Allocate ApiError object. |
+ ApiError& api_error = |
+ ApiError::ZoneHandle(reader->isolate(), NEW_OBJECT(ApiError)); |
+ reader->AddBackRef(object_id, &api_error, kIsDeserialized); |
+ |
+ // Set the object tags. |
+ api_error.set_tags(tags); |
+ |
+ // Set all the object fields. |
+ // TODO(5411462): Need to assert No GC can happen here, even though |
+ // allocations may happen. |
+ intptr_t num_flds = (api_error.raw()->to() - api_error.raw()->from()); |
+ for (intptr_t i = 0; i <= num_flds; i++) { |
+ *(api_error.raw()->from() + i) = reader->ReadObjectRef(); |
+ } |
+ |
+ return api_error.raw(); |
} |
void RawApiError::WriteTo(SnapshotWriter* writer, |
intptr_t object_id, |
Snapshot::Kind kind) { |
- UNREACHABLE(); |
+ ASSERT(writer != NULL); |
+ |
+ // Write out the serialization header value for this object. |
+ writer->WriteInlinedObjectHeader(object_id); |
+ |
+ // Write out the class and tags information. |
+ writer->WriteVMIsolateObject(kApiErrorCid); |
+ writer->WriteIntptrValue(writer->GetObjectTags(this)); |
+ |
+ // Write out all the object pointer fields. |
+ SnapshotWriterVisitor visitor(writer); |
+ visitor.VisitPointers(from(), to()); |
} |
@@ -1171,15 +1203,44 @@ |
intptr_t object_id, |
intptr_t tags, |
Snapshot::Kind kind) { |
- UNREACHABLE(); |
- return LanguageError::null(); |
+ ASSERT(reader != NULL); |
+ |
+ // Allocate LanguageError object. |
+ LanguageError& language_error = |
+ LanguageError::ZoneHandle(reader->isolate(), NEW_OBJECT(LanguageError)); |
+ reader->AddBackRef(object_id, &language_error, kIsDeserialized); |
+ |
+ // Set the object tags. |
+ language_error.set_tags(tags); |
+ |
+ // Set all the object fields. |
+ // TODO(5411462): Need to assert No GC can happen here, even though |
+ // allocations may happen. |
+ intptr_t num_flds = |
+ (language_error.raw()->to() - language_error.raw()->from()); |
+ for (intptr_t i = 0; i <= num_flds; i++) { |
+ *(language_error.raw()->from() + i) = reader->ReadObjectRef(); |
+ } |
+ |
+ return language_error.raw(); |
} |
void RawLanguageError::WriteTo(SnapshotWriter* writer, |
intptr_t object_id, |
Snapshot::Kind kind) { |
- UNREACHABLE(); |
+ ASSERT(writer != NULL); |
+ |
+ // Write out the serialization header value for this object. |
+ writer->WriteInlinedObjectHeader(object_id); |
+ |
+ // Write out the class and tags information. |
+ writer->WriteVMIsolateObject(kLanguageErrorCid); |
+ writer->WriteIntptrValue(writer->GetObjectTags(this)); |
+ |
+ // Write out all the object pointer fields. |
+ SnapshotWriterVisitor visitor(writer); |
+ visitor.VisitPointers(from(), to()); |
} |