| Index: runtime/vm/raw_object_snapshot.cc
|
| diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
|
| index c2448a3274a2b1662aba1ff95b3cbeebeed8ccbc..a01cc01a195e4bfada80437d439363ed1d480655 100644
|
| --- a/runtime/vm/raw_object_snapshot.cc
|
| +++ b/runtime/vm/raw_object_snapshot.cc
|
| @@ -14,16 +14,6 @@ namespace dart {
|
|
|
| DECLARE_FLAG(bool, remove_script_timestamps_for_test);
|
|
|
| -#define NEW_OBJECT(type) \
|
| - ((Snapshot::IsFull(kind)) ? reader->New##type() : type::New())
|
| -
|
| -#define NEW_OBJECT_WITH_LEN(type, len) \
|
| - ((Snapshot::IsFull(kind)) ? reader->New##type(len) : type::New(len))
|
| -
|
| -#define NEW_OBJECT_WITH_LEN_SPACE(type, len, kind) \
|
| - ((Snapshot::IsFull(kind)) ? \
|
| - reader->New##type(len) : type::New(len, HEAP_SPACE(kind)))
|
| -
|
| #define OFFSET_OF_FROM(obj) \
|
| obj.raw()->from() - reinterpret_cast<RawObject**>(obj.raw()->ptr())
|
|
|
| @@ -48,21 +38,16 @@ RawClass* Class::ReadFrom(SnapshotReader* reader,
|
|
|
| Class& cls = Class::ZoneHandle(reader->zone(), Class::null());
|
| bool is_in_fullsnapshot = reader->Read<bool>();
|
| - if (Snapshot::IsFull(kind) ||
|
| - (kind == Snapshot::kScript && !is_in_fullsnapshot)) {
|
| + if ((kind == Snapshot::kScript) && !is_in_fullsnapshot) {
|
| // Read in the base information.
|
| classid_t class_id = reader->ReadClassIDValue();
|
|
|
| // Allocate class object of specified kind.
|
| - if (Snapshot::IsFull(kind)) {
|
| - cls = reader->NewClass(class_id);
|
| + if (class_id < kNumPredefinedCids) {
|
| + ASSERT((class_id >= kInstanceCid) && (class_id <= kMirrorReferenceCid));
|
| + cls = reader->isolate()->class_table()->At(class_id);
|
| } else {
|
| - if (class_id < kNumPredefinedCids) {
|
| - ASSERT((class_id >= kInstanceCid) && (class_id <= kMirrorReferenceCid));
|
| - cls = reader->isolate()->class_table()->At(class_id);
|
| - } else {
|
| - cls = Class::NewInstanceClass();
|
| - }
|
| + cls = Class::NewInstanceClass();
|
| }
|
| reader->AddBackRef(object_id, &cls, kIsDeserialized);
|
|
|
| @@ -85,7 +70,7 @@ RawClass* Class::ReadFrom(SnapshotReader* reader,
|
| cls.raw()->to_snapshot(kind),
|
| kAsReference);
|
| cls.StorePointer(&cls.raw_ptr()->dependent_code_, Array::null());
|
| - ASSERT(!cls.IsInFullSnapshot() || (Snapshot::IsFull(kind)));
|
| + ASSERT(!cls.IsInFullSnapshot());
|
| } else {
|
| cls ^= reader->ReadClassId(object_id);
|
| ASSERT((kind == Snapshot::kMessage) || cls.IsInFullSnapshot());
|
| @@ -113,8 +98,7 @@ void RawClass::WriteTo(SnapshotWriter* writer,
|
| // to be interpreted.
|
| writer->Write<bool>(is_in_fullsnapshot);
|
|
|
| - if (Snapshot::IsFull(kind) ||
|
| - (kind == Snapshot::kScript && !is_in_fullsnapshot)) {
|
| + if ((kind == Snapshot::kScript) && !is_in_fullsnapshot) {
|
| // Write out all the non object pointer fields.
|
| // NOTE: cpp_vtable_ is not written.
|
| classid_t class_id = ptr()->id_;
|
| @@ -160,7 +144,7 @@ RawUnresolvedClass* UnresolvedClass::ReadFrom(SnapshotReader* reader,
|
|
|
| // Allocate unresolved class object.
|
| UnresolvedClass& unresolved_class = UnresolvedClass::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(UnresolvedClass));
|
| + reader->zone(), UnresolvedClass::New());
|
| reader->AddBackRef(object_id, &unresolved_class, kIsDeserialized);
|
|
|
| // Set all non object fields.
|
| @@ -228,7 +212,7 @@ RawType* Type::ReadFrom(SnapshotReader* reader,
|
| bool typeclass_is_in_fullsnapshot = reader->Read<bool>();
|
|
|
| // Allocate type object.
|
| - Type& type = Type::ZoneHandle(reader->zone(), NEW_OBJECT(Type));
|
| + Type& type = Type::ZoneHandle(reader->zone(), Type::New());
|
| bool is_canonical = RawObject::IsCanonical(tags);
|
| bool defer_canonicalization = is_canonical &&
|
| (!Snapshot::IsFull(kind) && typeclass_is_in_fullsnapshot);
|
| @@ -309,7 +293,7 @@ RawTypeRef* TypeRef::ReadFrom(SnapshotReader* reader,
|
|
|
| // Allocate type ref object.
|
| TypeRef& type_ref = TypeRef::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(TypeRef));
|
| + reader->zone(), TypeRef::New());
|
| reader->AddBackRef(object_id, &type_ref, kIsDeserialized);
|
|
|
| // Set all the object fields.
|
| @@ -349,7 +333,7 @@ RawTypeParameter* TypeParameter::ReadFrom(SnapshotReader* reader,
|
|
|
| // Allocate type parameter object.
|
| TypeParameter& type_parameter = TypeParameter::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(TypeParameter));
|
| + reader->zone(), TypeParameter::New());
|
| reader->AddBackRef(object_id, &type_parameter, kIsDeserialized);
|
|
|
| // Set all non object fields.
|
| @@ -413,7 +397,7 @@ RawBoundedType* BoundedType::ReadFrom(SnapshotReader* reader,
|
|
|
| // Allocate bounded type object.
|
| BoundedType& bounded_type = BoundedType::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(BoundedType));
|
| + reader->zone(), BoundedType::New());
|
| reader->AddBackRef(object_id, &bounded_type, kIsDeserialized);
|
|
|
| // Set all the object fields.
|
| @@ -473,7 +457,7 @@ RawTypeArguments* TypeArguments::ReadFrom(SnapshotReader* reader,
|
| intptr_t len = reader->ReadSmiValue();
|
|
|
| TypeArguments& type_arguments = TypeArguments::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT_WITH_LEN_SPACE(TypeArguments, len, kind));
|
| + reader->zone(), TypeArguments::New(len, HEAP_SPACE(kind)));
|
| bool is_canonical = RawObject::IsCanonical(tags);
|
| bool defer_canonicalization = is_canonical && (!Snapshot::IsFull(kind));
|
| reader->AddBackRef(object_id,
|
| @@ -482,12 +466,7 @@ RawTypeArguments* TypeArguments::ReadFrom(SnapshotReader* reader,
|
| defer_canonicalization);
|
|
|
| // Set the instantiations field, which is only read from a full snapshot.
|
| - if (Snapshot::IsFull(kind)) {
|
| - *(reader->ArrayHandle()) ^= reader->ReadObjectImpl(kAsInlinedObject);
|
| - type_arguments.set_instantiations(*(reader->ArrayHandle()));
|
| - } else {
|
| - type_arguments.set_instantiations(Object::zero_array());
|
| - }
|
| + type_arguments.set_instantiations(Object::zero_array());
|
|
|
| // Now set all the type fields.
|
| intptr_t offset = type_arguments.TypeAddr(0) -
|
| @@ -523,11 +502,6 @@ void RawTypeArguments::WriteTo(SnapshotWriter* writer,
|
| // Write out the length field.
|
| writer->Write<RawObject*>(ptr()->length_);
|
|
|
| - // Write out the instantiations field, but only in a full snapshot.
|
| - if (Snapshot::IsFull(kind)) {
|
| - writer->WriteObjectImpl(ptr()->instantiations_, kAsInlinedObject);
|
| - }
|
| -
|
| // Write out the individual types.
|
| intptr_t len = Smi::Value(ptr()->length_);
|
| for (intptr_t i = 0; i < len; i++) {
|
| @@ -542,16 +516,16 @@ RawPatchClass* PatchClass::ReadFrom(SnapshotReader* reader,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(reader != NULL);
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Allocate function object.
|
| PatchClass& cls = PatchClass::ZoneHandle(reader->zone(),
|
| - NEW_OBJECT(PatchClass));
|
| + PatchClass::New());
|
| reader->AddBackRef(object_id, &cls, kIsDeserialized);
|
|
|
| // Set all the object fields.
|
| READ_OBJECT_FIELDS(cls, cls.raw()->from(), cls.raw()->to(), kAsReference);
|
|
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| return cls.raw();
|
| }
|
|
|
| @@ -561,7 +535,7 @@ void RawPatchClass::WriteTo(SnapshotWriter* writer,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(writer != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Write out the serialization header value for this object.
|
| writer->WriteInlinedObjectHeader(object_id);
|
| @@ -580,24 +554,8 @@ RawClosure* Closure::ReadFrom(SnapshotReader* reader,
|
| intptr_t tags,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| - ASSERT(reader != NULL);
|
| - ASSERT(Snapshot::IsFull(kind));
|
| -
|
| - // Allocate closure object.
|
| - Closure& closure = Closure::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(Closure));
|
| - reader->AddBackRef(object_id, &closure, kIsDeserialized);
|
| -
|
| - // Set all the object fields.
|
| - READ_OBJECT_FIELDS(closure,
|
| - closure.raw()->from(), closure.raw()->to(),
|
| - kAsReference);
|
| -
|
| - // Set the canonical bit.
|
| - if (RawObject::IsCanonical(tags)) {
|
| - closure.SetCanonical();
|
| - }
|
| - return closure.raw();
|
| + UNREACHABLE();
|
| + return Closure::null();
|
| }
|
|
|
|
|
| @@ -606,27 +564,18 @@ void RawClosure::WriteTo(SnapshotWriter* writer,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(writer != NULL);
|
| - if ((kind == Snapshot::kMessage) || (kind == Snapshot::kScript)) {
|
| - // Check if closure is serializable, throw an exception otherwise.
|
| - RawFunction* func = writer->IsSerializableClosure(this);
|
| - if (func != Function::null()) {
|
| - writer->WriteStaticImplicitClosure(object_id,
|
| - func,
|
| - writer->GetObjectTags(this));
|
| - return;
|
| - }
|
| + ASSERT((kind == Snapshot::kMessage) || (kind == Snapshot::kScript));
|
| +
|
| + // Check if closure is serializable, throw an exception otherwise.
|
| + RawFunction* func = writer->IsSerializableClosure(this);
|
| + if (func != Function::null()) {
|
| + writer->WriteStaticImplicitClosure(object_id,
|
| + func,
|
| + writer->GetObjectTags(this));
|
| + return;
|
| }
|
|
|
| - // Write out the serialization header value for this object.
|
| - writer->WriteInlinedObjectHeader(object_id);
|
| -
|
| - // Write out the class and tags information.
|
| - writer->WriteIndexedObject(kClosureCid);
|
| - writer->WriteTags(writer->GetObjectTags(this));
|
| -
|
| - // Write out all the object pointer fields.
|
| - SnapshotWriterVisitor visitor(writer, kAsReference);
|
| - visitor.VisitPointers(from(), to());
|
| + UNREACHABLE();
|
| }
|
|
|
|
|
| @@ -636,11 +585,11 @@ RawClosureData* ClosureData::ReadFrom(SnapshotReader* reader,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(reader != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Allocate closure data object.
|
| - ClosureData& data = ClosureData::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(ClosureData));
|
| + ClosureData& data = ClosureData::ZoneHandle(reader->zone(),
|
| + ClosureData::New());
|
| reader->AddBackRef(object_id, &data, kIsDeserialized);
|
|
|
| // Set all the object fields.
|
| @@ -657,7 +606,7 @@ void RawClosureData::WriteTo(SnapshotWriter* writer,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(writer != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Write out the serialization header value for this object.
|
| writer->WriteInlinedObjectHeader(object_id);
|
| @@ -669,8 +618,7 @@ void RawClosureData::WriteTo(SnapshotWriter* writer,
|
| // Context scope.
|
| if (ptr()->context_scope_ == Object::empty_context_scope().raw()) {
|
| writer->WriteVMIsolateObject(kEmptyContextScopeObject);
|
| - } else if (ptr()->context_scope_->ptr()->is_implicit_ ||
|
| - (kind == Snapshot::kAppWithJIT)) {
|
| + } else if (ptr()->context_scope_->ptr()->is_implicit_) {
|
| writer->WriteObjectImpl(ptr()->context_scope_, kAsInlinedObject);
|
| } else {
|
| // We don't write non implicit context scopes in the snapshot.
|
| @@ -694,11 +642,11 @@ RawRedirectionData* RedirectionData::ReadFrom(SnapshotReader* reader,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(reader != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Allocate redirection data object.
|
| - RedirectionData& data = RedirectionData::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(RedirectionData));
|
| + RedirectionData& data = RedirectionData::ZoneHandle(reader->zone(),
|
| + RedirectionData::New());
|
| reader->AddBackRef(object_id, &data, kIsDeserialized);
|
|
|
| // Set all the object fields.
|
| @@ -715,7 +663,7 @@ void RawRedirectionData::WriteTo(SnapshotWriter* writer,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(writer != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Write out the serialization header value for this object.
|
| writer->WriteInlinedObjectHeader(object_id);
|
| @@ -736,13 +684,13 @@ RawFunction* Function::ReadFrom(SnapshotReader* reader,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(reader != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| bool is_in_fullsnapshot = reader->Read<bool>();
|
| - if ((Snapshot::IsFull(kind)) || !is_in_fullsnapshot) {
|
| + if (!is_in_fullsnapshot) {
|
| // Allocate function object.
|
| - Function& func = Function::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(Function));
|
| + Function& func = Function::ZoneHandle(reader->zone(),
|
| + Function::New());
|
| reader->AddBackRef(object_id, &func, kIsDeserialized);
|
|
|
| // Set all the non object fields. Read the token positions now but
|
| @@ -754,17 +702,10 @@ RawFunction* Function::ReadFrom(SnapshotReader* reader,
|
| func.set_kind_tag(reader->Read<uint32_t>());
|
| func.set_token_pos(TokenPosition::SnapshotDecode(token_pos));
|
| func.set_end_token_pos(TokenPosition::SnapshotDecode(end_token_pos));
|
| - if (kind == Snapshot::kAppNoJIT) {
|
| - func.set_usage_counter(0);
|
| - func.set_deoptimization_counter(0);
|
| - func.set_optimized_instruction_count(0);
|
| - func.set_optimized_call_site_count(0);
|
| - } else {
|
| - func.set_usage_counter(reader->Read<int32_t>());
|
| - func.set_deoptimization_counter(reader->Read<int8_t>());
|
| - func.set_optimized_instruction_count(reader->Read<uint16_t>());
|
| - func.set_optimized_call_site_count(reader->Read<uint16_t>());
|
| - }
|
| + func.set_usage_counter(reader->Read<int32_t>());
|
| + func.set_deoptimization_counter(reader->Read<int8_t>());
|
| + func.set_optimized_instruction_count(reader->Read<uint16_t>());
|
| + func.set_optimized_call_site_count(reader->Read<uint16_t>());
|
| func.set_was_compiled(false);
|
|
|
| // Set all the object fields.
|
| @@ -772,34 +713,15 @@ RawFunction* Function::ReadFrom(SnapshotReader* reader,
|
| func.raw()->from(), func.raw()->to_snapshot(),
|
| kAsReference);
|
| // Initialize all fields that are not part of the snapshot.
|
| - if (kind == Snapshot::kAppNoJIT) {
|
| - // Read the code object and fixup entry point.
|
| - func.ClearICDataArray();
|
| - func.ClearCode();
|
| - (*reader->CodeHandle()) ^= reader->ReadObjectImpl(kAsInlinedObject);
|
| - func.SetInstructions(*reader->CodeHandle());
|
| - } else if (kind == Snapshot::kAppWithJIT) {
|
| + bool is_optimized = func.usage_counter() != 0;
|
| + if (is_optimized) {
|
| + // Read the ic data array as the function is an optimized one.
|
| (*reader->ArrayHandle()) ^= reader->ReadObjectImpl(kAsReference);
|
| func.set_ic_data_array(*reader->ArrayHandle());
|
| - (*reader->CodeHandle()) ^= reader->ReadObjectImpl(kAsInlinedObject);
|
| - func.set_unoptimized_code(*reader->CodeHandle());
|
| - if (!reader->CodeHandle()->IsNull()) {
|
| - func.SetInstructions(*reader->CodeHandle());
|
| - func.set_was_compiled(true);
|
| - } else {
|
| - func.ClearCode();
|
| - }
|
| } else {
|
| - bool is_optimized = func.usage_counter() != 0;
|
| - if (is_optimized) {
|
| - // Read the ic data array as the function is an optimized one.
|
| - (*reader->ArrayHandle()) ^= reader->ReadObjectImpl(kAsReference);
|
| - func.set_ic_data_array(*reader->ArrayHandle());
|
| - } else {
|
| - func.ClearICDataArray();
|
| - }
|
| - func.ClearCode();
|
| + func.ClearICDataArray();
|
| }
|
| + func.ClearCode();
|
| return func.raw();
|
| } else {
|
| return reader->ReadFunctionId(object_id);
|
| @@ -812,7 +734,7 @@ void RawFunction::WriteTo(SnapshotWriter* writer,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(writer != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
| bool is_in_fullsnapshot = false;
|
| bool owner_is_class = false;
|
| if ((kind == Snapshot::kScript) && !Function::IsSignatureFunction(this)) {
|
| @@ -837,7 +759,7 @@ void RawFunction::WriteTo(SnapshotWriter* writer,
|
| // to be interpreted.
|
| writer->Write<bool>(is_in_fullsnapshot);
|
|
|
| - if (Snapshot::IsFull(kind) || !is_in_fullsnapshot) {
|
| + if (!is_in_fullsnapshot) {
|
| bool is_optimized = Code::IsOptimized(ptr()->code_);
|
|
|
| // Write out all the non object fields.
|
| @@ -846,31 +768,19 @@ void RawFunction::WriteTo(SnapshotWriter* writer,
|
| writer->Write<int16_t>(ptr()->num_fixed_parameters_);
|
| writer->Write<int16_t>(ptr()->num_optional_parameters_);
|
| writer->Write<uint32_t>(ptr()->kind_tag_);
|
| - if (kind == Snapshot::kAppNoJIT) {
|
| - // Omit fields used to support de/reoptimization.
|
| + if (is_optimized) {
|
| + writer->Write<int32_t>(FLAG_optimization_counter_threshold);
|
| } else {
|
| - if (is_optimized) {
|
| - writer->Write<int32_t>(FLAG_optimization_counter_threshold);
|
| - } else {
|
| - writer->Write<int32_t>(0);
|
| - }
|
| - writer->Write<int8_t>(ptr()->deoptimization_counter_);
|
| - writer->Write<uint16_t>(ptr()->optimized_instruction_count_);
|
| - writer->Write<uint16_t>(ptr()->optimized_call_site_count_);
|
| + writer->Write<int32_t>(0);
|
| }
|
| + writer->Write<int8_t>(ptr()->deoptimization_counter_);
|
| + writer->Write<uint16_t>(ptr()->optimized_instruction_count_);
|
| + writer->Write<uint16_t>(ptr()->optimized_call_site_count_);
|
|
|
| // Write out all the object pointer fields.
|
| SnapshotWriterVisitor visitor(writer, kAsReference);
|
| visitor.VisitPointers(from(), to_snapshot());
|
| - if (kind == Snapshot::kAppNoJIT) {
|
| - ASSERT(ptr()->ic_data_array_ == Array::null());
|
| - ASSERT((ptr()->code_ == ptr()->unoptimized_code_) ||
|
| - (ptr()->unoptimized_code_ == Code::null()));
|
| - writer->WriteObjectImpl(ptr()->code_, kAsInlinedObject);
|
| - } else if (kind == Snapshot::kAppWithJIT) {
|
| - writer->WriteObjectImpl(ptr()->ic_data_array_, kAsReference);
|
| - writer->WriteObjectImpl(ptr()->unoptimized_code_, kAsInlinedObject);
|
| - } else if (is_optimized) {
|
| + if (is_optimized) {
|
| // Write out the ic data array as the function is optimized.
|
| writer->WriteObjectImpl(ptr()->ic_data_array_, kAsReference);
|
| }
|
| @@ -886,22 +796,17 @@ RawField* Field::ReadFrom(SnapshotReader* reader,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(reader != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Allocate field object.
|
| - Field& field = Field::ZoneHandle(reader->zone(), NEW_OBJECT(Field));
|
| + Field& field = Field::ZoneHandle(reader->zone(), Field::New());
|
| reader->AddBackRef(object_id, &field, kIsDeserialized);
|
|
|
| // Set all non object fields.
|
| - if (kind == Snapshot::kAppNoJIT) {
|
| - field.set_token_pos(TokenPosition::kNoSource);
|
| - ASSERT(!FLAG_use_field_guards);
|
| - } else {
|
| - field.set_token_pos(
|
| - TokenPosition::SnapshotDecode(reader->Read<int32_t>()));
|
| - field.set_guarded_cid(reader->Read<int32_t>());
|
| - field.set_is_nullable(reader->Read<int32_t>());
|
| - }
|
| + field.set_token_pos(
|
| + TokenPosition::SnapshotDecode(reader->Read<int32_t>()));
|
| + field.set_guarded_cid(reader->Read<int32_t>());
|
| + field.set_is_nullable(reader->Read<int32_t>());
|
| field.set_kind_bits(reader->Read<uint8_t>());
|
|
|
| // Set all the object fields.
|
| @@ -929,7 +834,7 @@ void RawField::WriteTo(SnapshotWriter* writer,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(writer != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Write out the serialization header value for this object.
|
| writer->WriteInlinedObjectHeader(object_id);
|
| @@ -939,11 +844,9 @@ void RawField::WriteTo(SnapshotWriter* writer,
|
| writer->WriteTags(writer->GetObjectTags(this));
|
|
|
| // Write out all the non object fields.
|
| - if (kind != Snapshot::kAppNoJIT) {
|
| - writer->Write<int32_t>(ptr()->token_pos_.SnapshotEncode());
|
| - writer->Write<int32_t>(ptr()->guarded_cid_);
|
| - writer->Write<int32_t>(ptr()->is_nullable_);
|
| - }
|
| + writer->Write<int32_t>(ptr()->token_pos_.SnapshotEncode());
|
| + writer->Write<int32_t>(ptr()->guarded_cid_);
|
| + writer->Write<int32_t>(ptr()->is_nullable_);
|
| writer->Write<uint8_t>(ptr()->kind_bits_);
|
|
|
| // Write out the name.
|
| @@ -954,11 +857,7 @@ void RawField::WriteTo(SnapshotWriter* writer,
|
| writer->WriteObjectImpl(ptr()->type_, kAsReference);
|
| // Write out the initial static value or field offset.
|
| if (Field::StaticBit::decode(ptr()->kind_bits_)) {
|
| - if (kind == Snapshot::kAppNoJIT) {
|
| - // For precompiled static fields, the value was already reset and
|
| - // initializer_ now contains a Function.
|
| - writer->WriteObjectImpl(ptr()->value_.static_value_, kAsReference);
|
| - } else if (Field::ConstBit::decode(ptr()->kind_bits_)) {
|
| + if (Field::ConstBit::decode(ptr()->kind_bits_)) {
|
| // Do not reset const fields.
|
| writer->WriteObjectImpl(ptr()->value_.static_value_, kAsReference);
|
| } else {
|
| @@ -969,15 +868,9 @@ void RawField::WriteTo(SnapshotWriter* writer,
|
| writer->WriteObjectImpl(ptr()->value_.offset_, kAsReference);
|
| }
|
| // Write out the initializer function or saved initial value.
|
| - if (kind == Snapshot::kAppNoJIT) {
|
| - writer->WriteObjectImpl(ptr()->initializer_.precompiled_, kAsReference);
|
| - } else {
|
| - writer->WriteObjectImpl(ptr()->initializer_.saved_value_, kAsReference);
|
| - }
|
| - if (kind != Snapshot::kAppNoJIT) {
|
| - // Write out the guarded list length.
|
| - writer->WriteObjectImpl(ptr()->guarded_list_length_, kAsReference);
|
| - }
|
| + writer->WriteObjectImpl(ptr()->initializer_.saved_value_, kAsReference);
|
| + // Write out the guarded list length.
|
| + writer->WriteObjectImpl(ptr()->guarded_list_length_, kAsReference);
|
| }
|
|
|
|
|
| @@ -990,8 +883,8 @@ RawLiteralToken* LiteralToken::ReadFrom(SnapshotReader* reader,
|
| ASSERT(kind != Snapshot::kMessage);
|
|
|
| // Create the literal token object.
|
| - LiteralToken& literal_token = LiteralToken::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(LiteralToken));
|
| + LiteralToken& literal_token = LiteralToken::ZoneHandle(reader->zone(),
|
| + LiteralToken::New());
|
| reader->AddBackRef(object_id, &literal_token, kIsDeserialized);
|
|
|
| // Read the token attributes.
|
| @@ -1036,14 +929,14 @@ RawTokenStream* TokenStream::ReadFrom(SnapshotReader* reader,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(reader != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Read the length so that we can determine number of tokens to read.
|
| intptr_t len = reader->ReadSmiValue();
|
|
|
| // Create the token stream object.
|
| - TokenStream& token_stream = TokenStream::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT_WITH_LEN(TokenStream, len));
|
| + TokenStream& token_stream = TokenStream::ZoneHandle(reader->zone(),
|
| + TokenStream::New(len));
|
| reader->AddBackRef(object_id, &token_stream, kIsDeserialized);
|
|
|
| // Read the stream of tokens into the TokenStream object for script
|
| @@ -1070,7 +963,7 @@ void RawTokenStream::WriteTo(SnapshotWriter* writer,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(writer != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Write out the serialization header value for this object.
|
| writer->WriteInlinedObjectHeader(object_id);
|
| @@ -1098,10 +991,10 @@ RawScript* Script::ReadFrom(SnapshotReader* reader,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(reader != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Allocate script object.
|
| - Script& script = Script::ZoneHandle(reader->zone(), NEW_OBJECT(Script));
|
| + Script& script = Script::ZoneHandle(reader->zone(), Script::New());
|
| reader->AddBackRef(object_id, &script, kIsDeserialized);
|
|
|
| script.StoreNonPointer(&script.raw_ptr()->line_offset_,
|
| @@ -1139,7 +1032,7 @@ void RawScript::WriteTo(SnapshotWriter* writer,
|
| bool as_reference) {
|
| ASSERT(writer != NULL);
|
| ASSERT(tokens_ != TokenStream::null());
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Write out the serialization header value for this object.
|
| writer->WriteInlinedObjectHeader(object_id);
|
| @@ -1178,7 +1071,7 @@ RawLibrary* Library::ReadFrom(SnapshotReader* reader,
|
| ASSERT(library.is_in_fullsnapshot());
|
| } else {
|
| // Allocate library object.
|
| - library = NEW_OBJECT(Library);
|
| + library = Library::New();
|
|
|
| // Set all non object fields.
|
| library.StoreNonPointer(&library.raw_ptr()->index_,
|
| @@ -1193,9 +1086,6 @@ RawLibrary* Library::ReadFrom(SnapshotReader* reader,
|
| reader->Read<bool>());
|
| library.StoreNonPointer(&library.raw_ptr()->debuggable_,
|
| reader->Read<bool>());
|
| - if (Snapshot::IsFull(kind)) {
|
| - is_in_fullsnapshot = true;
|
| - }
|
| library.StoreNonPointer(&library.raw_ptr()->is_in_fullsnapshot_,
|
| is_in_fullsnapshot);
|
| // The native resolver and symbolizer are not serialized.
|
| @@ -1213,13 +1103,9 @@ RawLibrary* Library::ReadFrom(SnapshotReader* reader,
|
| }
|
| // Initialize cache of resolved names.
|
| const intptr_t kInitialNameCacheSize = 64;
|
| - if (!Snapshot::IsFull(kind)) {
|
| - // The cache of resolved names in library scope is not serialized.
|
| - library.InitResolvedNamesCache(kInitialNameCacheSize);
|
| - library.Register(reader->thread());
|
| - } else {
|
| - library.InitResolvedNamesCache(kInitialNameCacheSize, reader);
|
| - }
|
| + // The cache of resolved names in library scope is not serialized.
|
| + library.InitResolvedNamesCache(kInitialNameCacheSize);
|
| + library.Register(reader->thread());
|
| library.StorePointer(&library.raw_ptr()->exported_names_, Array::null());
|
| // Initialize cache of loaded scripts.
|
| library.StorePointer(&library.raw_ptr()->loaded_scripts_, Array::null());
|
| @@ -1251,7 +1137,7 @@ void RawLibrary::WriteTo(SnapshotWriter* writer,
|
| // Write out library URL so that it can be looked up when reading.
|
| writer->WriteObjectImpl(ptr()->url_, kAsInlinedObject);
|
| } else {
|
| - ASSERT((Snapshot::IsFull(kind)) || !ptr()->is_in_fullsnapshot_);
|
| + ASSERT(!ptr()->is_in_fullsnapshot_);
|
| // Write out all non object fields.
|
| ASSERT(ptr()->index_ != static_cast<classid_t>(-1));
|
| writer->WriteClassIDValue(ptr()->index_);
|
| @@ -1279,11 +1165,11 @@ RawLibraryPrefix* LibraryPrefix::ReadFrom(SnapshotReader* reader,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(reader != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Allocate library prefix object.
|
| - LibraryPrefix& prefix = LibraryPrefix::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(LibraryPrefix));
|
| + LibraryPrefix& prefix = LibraryPrefix::ZoneHandle(reader->zone(),
|
| + LibraryPrefix::New());
|
| reader->AddBackRef(object_id, &prefix, kIsDeserialized);
|
|
|
| // Set all non object fields.
|
| @@ -1298,10 +1184,6 @@ RawLibraryPrefix* LibraryPrefix::ReadFrom(SnapshotReader* reader,
|
| prefix.raw()->from(),
|
| prefix.raw()->to_snapshot(kind),
|
| kAsReference);
|
| - if (kind == Snapshot::kAppNoJIT) {
|
| - prefix.StorePointer(&prefix.raw_ptr()->imports_,
|
| - Object::empty_array().raw());
|
| - }
|
| prefix.StorePointer(&prefix.raw_ptr()->dependent_code_,
|
| Array::null());
|
|
|
| @@ -1314,7 +1196,7 @@ void RawLibraryPrefix::WriteTo(SnapshotWriter* writer,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(writer != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Write out the serialization header value for this object.
|
| writer->WriteInlinedObjectHeader(object_id);
|
| @@ -1340,11 +1222,10 @@ RawNamespace* Namespace::ReadFrom(SnapshotReader* reader,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(reader != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Allocate Namespace object.
|
| - Namespace& ns = Namespace::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(Namespace));
|
| + Namespace& ns = Namespace::ZoneHandle(reader->zone(), Namespace::New());
|
| reader->AddBackRef(object_id, &ns, kIsDeserialized);
|
|
|
| // Set all the object fields.
|
| @@ -1359,7 +1240,7 @@ void RawNamespace::WriteTo(SnapshotWriter* writer,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| ASSERT(writer != NULL);
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Write out the serialization header value for this object.
|
| writer->WriteInlinedObjectHeader(object_id);
|
| @@ -1532,7 +1413,7 @@ RawContext* Context::ReadFrom(SnapshotReader* reader,
|
| if (num_vars == 0) {
|
| context ^= reader->object_store()->empty_context();
|
| } else {
|
| - context ^= NEW_OBJECT_WITH_LEN(Context, num_vars);
|
| + context ^= Context::New(num_vars);
|
|
|
| // Set all the object fields.
|
| // TODO(5411462): Need to assert No GC can happen here, even though
|
| @@ -1583,12 +1464,7 @@ RawContextScope* ContextScope::ReadFrom(SnapshotReader* reader,
|
| bool is_implicit = reader->Read<bool>();
|
| if (is_implicit) {
|
| ContextScope& context_scope = ContextScope::ZoneHandle(reader->zone());
|
| - if (Snapshot::IsFull(kind)) {
|
| - context_scope = reader->NewContextScope(1);
|
| - context_scope.set_is_implicit(true);
|
| - } else {
|
| - context_scope = ContextScope::New(1, true);
|
| - }
|
| + context_scope = ContextScope::New(1, true);
|
| reader->AddBackRef(object_id, &context_scope, kIsDeserialized);
|
|
|
| *reader->TypeHandle() ^= reader->ReadObjectImpl(kAsInlinedObject);
|
| @@ -1602,19 +1478,6 @@ RawContextScope* ContextScope::ReadFrom(SnapshotReader* reader,
|
| context_scope.SetContextIndexAt(0, 0);
|
| context_scope.SetContextLevelAt(0, 0);
|
| return context_scope.raw();
|
| - } else if (kind == Snapshot::kAppWithJIT) {
|
| - int32_t num_vars = reader->Read<int32_t>();
|
| -
|
| - ContextScope& context_scope = ContextScope::ZoneHandle(reader->zone());
|
| - context_scope = reader->NewContextScope(num_vars);
|
| - context_scope.set_is_implicit(false);
|
| - reader->AddBackRef(object_id, &context_scope, kIsDeserialized);
|
| -
|
| - READ_OBJECT_FIELDS(context_scope,
|
| - context_scope.raw()->from(),
|
| - context_scope.raw()->to(num_vars),
|
| - kAsInlinedObject);
|
| - return context_scope.raw();
|
| }
|
| UNREACHABLE();
|
| return NULL;
|
| @@ -1645,23 +1508,6 @@ void RawContextScope::WriteTo(SnapshotWriter* writer,
|
| writer->WriteObjectImpl(var->type, kAsInlinedObject);
|
|
|
| return;
|
| - } else if (kind == Snapshot::kAppWithJIT) {
|
| - // Write out the serialization header value for this object.
|
| - writer->WriteInlinedObjectHeader(object_id);
|
| -
|
| - // Write out the class and tags information.
|
| - writer->WriteVMIsolateObject(kContextScopeCid);
|
| - writer->WriteTags(writer->GetObjectTags(this));
|
| -
|
| - // Write out is_implicit flag for the context scope.
|
| - writer->Write<bool>(false);
|
| - int32_t num_vars = ptr()->num_variables_;
|
| - writer->Write<int32_t>(num_vars);
|
| -
|
| - SnapshotWriterVisitor visitor(writer, kAsInlinedObject);
|
| - visitor.VisitPointers(from(), to(num_vars));
|
| -
|
| - return;
|
| }
|
| UNREACHABLE();
|
| }
|
| @@ -1672,9 +1518,9 @@ RawICData* ICData::ReadFrom(SnapshotReader* reader,
|
| intptr_t tags,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| - ICData& result = ICData::ZoneHandle(reader->zone(), NEW_OBJECT(ICData));
|
| + ICData& result = ICData::ZoneHandle(reader->zone(), ICData::New());
|
| reader->AddBackRef(object_id, &result, kIsDeserialized);
|
|
|
| result.set_deopt_id(reader->Read<int32_t>());
|
| @@ -1688,9 +1534,6 @@ RawICData* ICData::ReadFrom(SnapshotReader* reader,
|
| result.raw()->from(),
|
| result.raw()->to_snapshot(kind),
|
| kAsReference);
|
| - if (kind == Snapshot::kAppNoJIT) {
|
| - result.set_owner(Function::Handle(reader->zone()));
|
| - }
|
|
|
| return result.raw();
|
| }
|
| @@ -1700,7 +1543,7 @@ void RawICData::WriteTo(SnapshotWriter* writer,
|
| intptr_t object_id,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| - ASSERT((kind == Snapshot::kScript) || (Snapshot::IsFull(kind)));
|
| + ASSERT(kind == Snapshot::kScript);
|
|
|
| // Write out the serialization header value for this object.
|
| writer->WriteInlinedObjectHeader(object_id);
|
| @@ -1787,7 +1630,7 @@ RawApiError* ApiError::ReadFrom(SnapshotReader* reader,
|
|
|
| // Allocate ApiError object.
|
| ApiError& api_error =
|
| - ApiError::ZoneHandle(reader->zone(), NEW_OBJECT(ApiError));
|
| + ApiError::ZoneHandle(reader->zone(), ApiError::New());
|
| reader->AddBackRef(object_id, &api_error, kIsDeserialized);
|
|
|
| // Set all the object fields.
|
| @@ -1827,7 +1670,7 @@ RawLanguageError* LanguageError::ReadFrom(SnapshotReader* reader,
|
|
|
| // Allocate LanguageError object.
|
| LanguageError& language_error =
|
| - LanguageError::ZoneHandle(reader->zone(), NEW_OBJECT(LanguageError));
|
| + LanguageError::ZoneHandle(reader->zone(), LanguageError::New());
|
| reader->AddBackRef(object_id, &language_error, kIsDeserialized);
|
|
|
| // Set all non object fields.
|
| @@ -1875,7 +1718,7 @@ RawUnhandledException* UnhandledException::ReadFrom(SnapshotReader* reader,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| UnhandledException& result = UnhandledException::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(UnhandledException));
|
| + reader->zone(), UnhandledException::New());
|
| reader->AddBackRef(object_id, &result, kIsDeserialized);
|
|
|
| // Set all the object fields.
|
| @@ -1931,19 +1774,11 @@ RawInstance* Instance::ReadFrom(SnapshotReader* reader,
|
| // Create an Instance object or get canonical one if it is a canonical
|
| // constant.
|
| Instance& obj = Instance::ZoneHandle(reader->zone(), Instance::null());
|
| - if (Snapshot::IsFull(kind)) {
|
| - obj = reader->NewInstance();
|
| - // Set the canonical bit.
|
| - if (RawObject::IsCanonical(tags)) {
|
| - obj.SetCanonical();
|
| - }
|
| - } else {
|
| - obj ^= Object::Allocate(kInstanceCid,
|
| - Instance::InstanceSize(),
|
| - HEAP_SPACE(kind));
|
| - if (RawObject::IsCanonical(tags)) {
|
| - obj = obj.CheckAndCanonicalize(reader->thread(), NULL);
|
| - }
|
| + obj ^= Object::Allocate(kInstanceCid,
|
| + Instance::InstanceSize(),
|
| + HEAP_SPACE(kind));
|
| + if (RawObject::IsCanonical(tags)) {
|
| + obj = obj.CheckAndCanonicalize(reader->thread(), NULL);
|
| }
|
| reader->AddBackRef(object_id, &obj, kIsDeserialized);
|
|
|
| @@ -1987,24 +1822,16 @@ RawInteger* Mint::ReadFrom(SnapshotReader* reader,
|
|
|
| // Create a Mint object or get canonical one if it is a canonical constant.
|
| Mint& mint = Mint::ZoneHandle(reader->zone(), Mint::null());
|
| - if (Snapshot::IsFull(kind)) {
|
| - mint = reader->NewMint(value);
|
| - // Set the canonical bit.
|
| - if (RawObject::IsCanonical(tags)) {
|
| - mint.SetCanonical();
|
| - }
|
| + // When reading a script snapshot we need to canonicalize only those object
|
| + // references that are objects from the core library (loaded from a
|
| + // full snapshot). Objects that are only in the script need not be
|
| + // canonicalized as they are already canonical.
|
| + // When reading a message snapshot we always have to canonicalize.
|
| + if (RawObject::IsCanonical(tags)) {
|
| + mint = Mint::NewCanonical(value);
|
| + ASSERT(mint.IsCanonical());
|
| } else {
|
| - // When reading a script snapshot we need to canonicalize only those object
|
| - // references that are objects from the core library (loaded from a
|
| - // full snapshot). Objects that are only in the script need not be
|
| - // canonicalized as they are already canonical.
|
| - // When reading a message snapshot we always have to canonicalize.
|
| - if (RawObject::IsCanonical(tags)) {
|
| - mint = Mint::NewCanonical(value);
|
| - ASSERT(mint.IsCanonical());
|
| - } else {
|
| - mint = Mint::New(value, HEAP_SPACE(kind));
|
| - }
|
| + mint = Mint::New(value, HEAP_SPACE(kind));
|
| }
|
| reader->AddBackRef(object_id, &mint, kIsDeserialized);
|
| return mint.raw();
|
| @@ -2037,7 +1864,7 @@ RawBigint* Bigint::ReadFrom(SnapshotReader* reader,
|
| ASSERT(reader != NULL);
|
|
|
| // Allocate bigint object.
|
| - Bigint& obj = Bigint::ZoneHandle(reader->zone(), NEW_OBJECT(Bigint));
|
| + Bigint& obj = Bigint::ZoneHandle(reader->zone(), Bigint::New());
|
| reader->AddBackRef(object_id, &obj, kIsDeserialized);
|
|
|
| // Set all the object fields.
|
| @@ -2049,14 +1876,9 @@ RawBigint* Bigint::ReadFrom(SnapshotReader* reader,
|
| // When reading a script snapshot or a message snapshot we always have
|
| // to canonicalize the object.
|
| if (RawObject::IsCanonical(tags)) {
|
| - if (Snapshot::IsFull(kind)) {
|
| - // Set the canonical bit.
|
| - obj.SetCanonical();
|
| - } else {
|
| - obj ^= obj.CheckAndCanonicalize(reader->thread(), NULL);
|
| - ASSERT(!obj.IsNull());
|
| - ASSERT(obj.IsCanonical());
|
| - }
|
| + obj ^= obj.CheckAndCanonicalize(reader->thread(), NULL);
|
| + ASSERT(!obj.IsNull());
|
| + ASSERT(obj.IsCanonical());
|
| }
|
| return obj.raw();
|
| }
|
| @@ -2093,23 +1915,15 @@ RawDouble* Double::ReadFrom(SnapshotReader* reader,
|
|
|
| // Create a Double object or get canonical one if it is a canonical constant.
|
| Double& dbl = Double::ZoneHandle(reader->zone(), Double::null());
|
| - if (Snapshot::IsFull(kind)) {
|
| - dbl = reader->NewDouble(value);
|
| - // Set the canonical bit.
|
| - if (RawObject::IsCanonical(tags)) {
|
| - dbl.SetCanonical();
|
| - }
|
| + // When reading a script snapshot we need to canonicalize only those object
|
| + // references that are objects from the core library (loaded from a
|
| + // full snapshot). Objects that are only in the script need not be
|
| + // canonicalized as they are already canonical.
|
| + if (RawObject::IsCanonical(tags)) {
|
| + dbl = Double::NewCanonical(value);
|
| + ASSERT(dbl.IsCanonical());
|
| } else {
|
| - // When reading a script snapshot we need to canonicalize only those object
|
| - // references that are objects from the core library (loaded from a
|
| - // full snapshot). Objects that are only in the script need not be
|
| - // canonicalized as they are already canonical.
|
| - if (RawObject::IsCanonical(tags)) {
|
| - dbl = Double::NewCanonical(value);
|
| - ASSERT(dbl.IsCanonical());
|
| - } else {
|
| - dbl = Double::New(value, HEAP_SPACE(kind));
|
| - }
|
| + dbl = Double::New(value, HEAP_SPACE(kind));
|
| }
|
| reader->AddBackRef(object_id, &dbl, kIsDeserialized);
|
| return dbl.raw();
|
| @@ -2193,28 +2007,10 @@ RawOneByteString* OneByteString::ReadFrom(SnapshotReader* reader,
|
| // Read the length so that we can determine instance size to allocate.
|
| ASSERT(reader != NULL);
|
| intptr_t len = reader->ReadSmiValue();
|
| - intptr_t hash = reader->ReadSmiValue();
|
| String& str_obj = String::ZoneHandle(reader->zone(), String::null());
|
|
|
| - if (Snapshot::IsFull(kind)) {
|
| - // We currently only expect the Dart mutator to read snapshots.
|
| - reader->isolate()->AssertCurrentThreadIsMutator();
|
| - ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0);
|
| - RawOneByteString* obj = reader->NewOneByteString(len);
|
| - str_obj = obj;
|
| - if (RawObject::IsCanonical(tags)) {
|
| - str_obj.SetCanonical();
|
| - }
|
| - str_obj.SetHash(hash);
|
| - if (len > 0) {
|
| - uint8_t* raw_ptr = CharAddr(str_obj, 0);
|
| - reader->ReadBytes(raw_ptr, len);
|
| - }
|
| - ASSERT((hash == 0) || (String::Hash(str_obj, 0, str_obj.Length()) == hash));
|
| - } else {
|
| - String::ReadFromImpl<OneByteString, uint8_t>(
|
| - reader, &str_obj, len, tags, Symbols::FromLatin1, kind);
|
| - }
|
| + String::ReadFromImpl<OneByteString, uint8_t>(
|
| + reader, &str_obj, len, tags, Symbols::FromLatin1, kind);
|
| reader->AddBackRef(object_id, &str_obj, kIsDeserialized);
|
| return raw(str_obj);
|
| }
|
| @@ -2228,28 +2024,10 @@ RawTwoByteString* TwoByteString::ReadFrom(SnapshotReader* reader,
|
| // Read the length so that we can determine instance size to allocate.
|
| ASSERT(reader != NULL);
|
| intptr_t len = reader->ReadSmiValue();
|
| - intptr_t hash = reader->ReadSmiValue();
|
| String& str_obj = String::ZoneHandle(reader->zone(), String::null());
|
|
|
| - if (Snapshot::IsFull(kind)) {
|
| - RawTwoByteString* obj = reader->NewTwoByteString(len);
|
| - str_obj = obj;
|
| - if (RawObject::IsCanonical(tags)) {
|
| - str_obj.SetCanonical();
|
| - }
|
| - str_obj.SetHash(hash);
|
| - NoSafepointScope no_safepoint;
|
| - uint16_t* raw_ptr = (len > 0)? CharAddr(str_obj, 0) : NULL;
|
| - for (intptr_t i = 0; i < len; i++) {
|
| - ASSERT(CharAddr(str_obj, i) == raw_ptr); // Will trigger assertions.
|
| - *raw_ptr = reader->Read<uint16_t>();
|
| - raw_ptr += 1;
|
| - }
|
| - ASSERT(String::Hash(str_obj, 0, str_obj.Length()) == hash);
|
| - } else {
|
| - String::ReadFromImpl<TwoByteString, uint16_t>(
|
| - reader, &str_obj, len, tags, Symbols::FromUTF16, kind);
|
| - }
|
| + String::ReadFromImpl<TwoByteString, uint16_t>(
|
| + reader, &str_obj, len, tags, Symbols::FromUTF16, kind);
|
| reader->AddBackRef(object_id, &str_obj, kIsDeserialized);
|
| return raw(str_obj);
|
| }
|
| @@ -2262,7 +2040,6 @@ static void StringWriteTo(SnapshotWriter* writer,
|
| intptr_t class_id,
|
| intptr_t tags,
|
| RawSmi* length,
|
| - RawSmi* hash,
|
| T* data) {
|
| ASSERT(writer != NULL);
|
| intptr_t len = Smi::Value(length);
|
| @@ -2277,9 +2054,6 @@ static void StringWriteTo(SnapshotWriter* writer,
|
| // Write out the length field.
|
| writer->Write<RawObject*>(length);
|
|
|
| - // Write out the hash field.
|
| - writer->Write<RawObject*>(hash);
|
| -
|
| // Write out the string.
|
| if (len > 0) {
|
| if (class_id == kOneByteStringCid) {
|
| @@ -2303,7 +2077,6 @@ void RawOneByteString::WriteTo(SnapshotWriter* writer,
|
| kOneByteStringCid,
|
| writer->GetObjectTags(this),
|
| ptr()->length_,
|
| - ptr()->hash_,
|
| ptr()->data());
|
| }
|
|
|
| @@ -2318,7 +2091,6 @@ void RawTwoByteString::WriteTo(SnapshotWriter* writer,
|
| kTwoByteStringCid,
|
| writer->GetObjectTags(this),
|
| ptr()->length_,
|
| - ptr()->hash_,
|
| ptr()->data());
|
| }
|
|
|
| @@ -2356,7 +2128,6 @@ void RawExternalOneByteString::WriteTo(SnapshotWriter* writer,
|
| kOneByteStringCid,
|
| writer->GetObjectTags(this),
|
| ptr()->length_,
|
| - ptr()->hash_,
|
| ptr()->external_data_->data());
|
| }
|
|
|
| @@ -2372,7 +2143,6 @@ void RawExternalTwoByteString::WriteTo(SnapshotWriter* writer,
|
| kTwoByteStringCid,
|
| writer->GetObjectTags(this),
|
| ptr()->length_,
|
| - ptr()->hash_,
|
| ptr()->external_data_->data());
|
| }
|
|
|
| @@ -2414,7 +2184,7 @@ RawArray* Array::ReadFrom(SnapshotReader* reader,
|
| }
|
| if (array == NULL) {
|
| array = &(Array::ZoneHandle(reader->zone(),
|
| - NEW_OBJECT_WITH_LEN_SPACE(Array, len, kind)));
|
| + Array::New(len, HEAP_SPACE(kind))));
|
| reader->AddBackRef(object_id, array, state);
|
| }
|
| if (!as_reference) {
|
| @@ -2446,18 +2216,14 @@ RawImmutableArray* ImmutableArray::ReadFrom(SnapshotReader* reader,
|
| if (array == NULL) {
|
| array = &(Array::ZoneHandle(
|
| reader->zone(),
|
| - NEW_OBJECT_WITH_LEN_SPACE(ImmutableArray, len, kind)));
|
| + ImmutableArray::New(len, HEAP_SPACE(kind))));
|
| reader->AddBackRef(object_id, array, state);
|
| }
|
| if (!as_reference) {
|
| // Read all the individual elements for inlined objects.
|
| reader->ArrayReadFrom(object_id, *array, len, tags);
|
| if (RawObject::IsCanonical(tags)) {
|
| - if (Snapshot::IsFull(kind)) {
|
| - array->SetCanonical();
|
| - } else {
|
| - *array ^= array->CheckAndCanonicalize(reader->thread(), NULL);
|
| - }
|
| + *array ^= array->CheckAndCanonicalize(reader->thread(), NULL);
|
| }
|
| }
|
| return raw(*array);
|
| @@ -2503,11 +2269,7 @@ RawGrowableObjectArray* GrowableObjectArray::ReadFrom(SnapshotReader* reader,
|
| // Read the length so that we can determine instance size to allocate.
|
| GrowableObjectArray& array = GrowableObjectArray::ZoneHandle(
|
| reader->zone(), GrowableObjectArray::null());
|
| - if (Snapshot::IsFull(kind)) {
|
| - array = reader->NewGrowableObjectArray();
|
| - } else {
|
| - array = GrowableObjectArray::New(0, HEAP_SPACE(kind));
|
| - }
|
| + array = GrowableObjectArray::New(0, HEAP_SPACE(kind));
|
| reader->AddBackRef(object_id, &array, kIsDeserialized);
|
|
|
| // Read type arguments of growable array object.
|
| @@ -2562,17 +2324,13 @@ RawLinkedHashMap* LinkedHashMap::ReadFrom(SnapshotReader* reader,
|
|
|
| LinkedHashMap& map = LinkedHashMap::ZoneHandle(
|
| reader->zone(), LinkedHashMap::null());
|
| - if (Snapshot::IsFull(kind) || kind == Snapshot::kScript) {
|
| + if (kind == Snapshot::kScript) {
|
| // The immutable maps that seed map literals are not yet VM-internal, so
|
| // we don't reach this.
|
| UNREACHABLE();
|
| } else {
|
| // Since the map might contain itself as a key or value, allocate first.
|
| - if (Snapshot::IsFull(kind)) {
|
| - map = reader->NewLinkedHashMap();
|
| - } else {
|
| - map = LinkedHashMap::NewUninitialized(HEAP_SPACE(kind));
|
| - }
|
| + map = LinkedHashMap::NewUninitialized(HEAP_SPACE(kind));
|
| }
|
| reader->AddBackRef(object_id, &map, kIsDeserialized);
|
|
|
| @@ -2593,9 +2351,7 @@ RawLinkedHashMap* LinkedHashMap::ReadFrom(SnapshotReader* reader,
|
| Utils::RoundUpToPowerOfTwo(used_data),
|
| static_cast<uintptr_t>(LinkedHashMap::kInitialIndexSize));
|
| Array& data = Array::ZoneHandle(reader->zone(),
|
| - NEW_OBJECT_WITH_LEN_SPACE(Array,
|
| - data_size,
|
| - kind));
|
| + Array::New(data_size, HEAP_SPACE(kind)));
|
| map.SetData(data);
|
| map.SetDeletedKeys(0);
|
|
|
| @@ -2620,7 +2376,7 @@ void RawLinkedHashMap::WriteTo(SnapshotWriter* writer,
|
| intptr_t object_id,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| - if (Snapshot::IsFull(kind) || kind == Snapshot::kScript) {
|
| + if (kind == Snapshot::kScript) {
|
| // The immutable maps that seed map literals are not yet VM-internal, so
|
| // we don't reach this.
|
| }
|
| @@ -2682,11 +2438,7 @@ RawFloat32x4* Float32x4::ReadFrom(SnapshotReader* reader,
|
| // Create a Float32x4 object.
|
| Float32x4& simd = Float32x4::ZoneHandle(reader->zone(),
|
| Float32x4::null());
|
| - if (Snapshot::IsFull(kind)) {
|
| - simd = reader->NewFloat32x4(value0, value1, value2, value3);
|
| - } else {
|
| - simd = Float32x4::New(value0, value1, value2, value3, HEAP_SPACE(kind));
|
| - }
|
| + simd = Float32x4::New(value0, value1, value2, value3, HEAP_SPACE(kind));
|
| reader->AddBackRef(object_id, &simd, kIsDeserialized);
|
| return simd.raw();
|
| }
|
| @@ -2727,12 +2479,7 @@ RawInt32x4* Int32x4::ReadFrom(SnapshotReader* reader,
|
|
|
| // Create a Float32x4 object.
|
| Int32x4& simd = Int32x4::ZoneHandle(reader->zone(), Int32x4::null());
|
| -
|
| - if (Snapshot::IsFull(kind)) {
|
| - simd = reader->NewInt32x4(value0, value1, value2, value3);
|
| - } else {
|
| - simd = Int32x4::New(value0, value1, value2, value3, HEAP_SPACE(kind));
|
| - }
|
| + simd = Int32x4::New(value0, value1, value2, value3, HEAP_SPACE(kind));
|
| reader->AddBackRef(object_id, &simd, kIsDeserialized);
|
| return simd.raw();
|
| }
|
| @@ -2772,11 +2519,7 @@ RawFloat64x2* Float64x2::ReadFrom(SnapshotReader* reader,
|
| // Create a Float64x2 object.
|
| Float64x2& simd = Float64x2::ZoneHandle(reader->zone(),
|
| Float64x2::null());
|
| - if (Snapshot::IsFull(kind)) {
|
| - simd = reader->NewFloat64x2(value0, value1);
|
| - } else {
|
| - simd = Float64x2::New(value0, value1, HEAP_SPACE(kind));
|
| - }
|
| + simd = Float64x2::New(value0, value1, HEAP_SPACE(kind));
|
| reader->AddBackRef(object_id, &simd, kIsDeserialized);
|
| return simd.raw();
|
| }
|
| @@ -2816,9 +2559,8 @@ RawTypedData* TypedData::ReadFrom(SnapshotReader* reader,
|
|
|
| intptr_t cid = RawObject::ClassIdTag::decode(tags);
|
| intptr_t len = reader->ReadSmiValue();
|
| - TypedData& result = TypedData::ZoneHandle(reader->zone(),
|
| - (Snapshot::IsFull(kind)) ? reader->NewTypedData(cid, len)
|
| - : TypedData::New(cid, len, HEAP_SPACE(kind)));
|
| + TypedData& result = TypedData::ZoneHandle(
|
| + reader->zone(), TypedData::New(cid, len, HEAP_SPACE(kind)));
|
| reader->AddBackRef(object_id, &result, kIsDeserialized);
|
|
|
| // Setup the array elements.
|
| @@ -2866,14 +2608,9 @@ RawTypedData* TypedData::ReadFrom(SnapshotReader* reader,
|
| // When reading a script snapshot or a message snapshot we always have
|
| // to canonicalize the object.
|
| if (RawObject::IsCanonical(tags)) {
|
| - if (Snapshot::IsFull(kind)) {
|
| - // Set the canonical bit.
|
| - result.SetCanonical();
|
| - } else {
|
| - result ^= result.CheckAndCanonicalize(reader->thread(), NULL);
|
| - ASSERT(!result.IsNull());
|
| - ASSERT(result.IsCanonical());
|
| - }
|
| + result ^= result.CheckAndCanonicalize(reader->thread(), NULL);
|
| + ASSERT(!result.IsNull());
|
| + ASSERT(result.IsCanonical());
|
| }
|
| return result.raw();
|
| }
|
| @@ -3129,21 +2866,6 @@ RawStacktrace* Stacktrace::ReadFrom(SnapshotReader* reader,
|
| intptr_t tags,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| - if (Snapshot::IsFull(kind)) {
|
| - Stacktrace& result = Stacktrace::ZoneHandle(reader->zone(),
|
| - reader->NewStacktrace());
|
| - reader->AddBackRef(object_id, &result, kIsDeserialized);
|
| -
|
| - bool expand_inlined = reader->Read<bool>();
|
| - result.set_expand_inlined(expand_inlined);
|
| -
|
| - // Set all the object fields.
|
| - READ_OBJECT_FIELDS(result,
|
| - result.raw()->from(), result.raw()->to(),
|
| - kAsReference);
|
| -
|
| - return result.raw();
|
| - }
|
| UNREACHABLE(); // Stacktraces are not sent in a snapshot.
|
| return Stacktrace::null();
|
| }
|
| @@ -3153,29 +2875,10 @@ void RawStacktrace::WriteTo(SnapshotWriter* writer,
|
| intptr_t object_id,
|
| Snapshot::Kind kind,
|
| bool as_reference) {
|
| - if (Snapshot::IsFull(kind)) {
|
| - ASSERT(writer != NULL);
|
| - ASSERT(this == Isolate::Current()->object_store()->
|
| - preallocated_stack_trace());
|
| -
|
| - // Write out the serialization header value for this object.
|
| - writer->WriteInlinedObjectHeader(object_id);
|
| -
|
| - // Write out the class and tags information.
|
| - writer->WriteIndexedObject(kStacktraceCid);
|
| - writer->WriteTags(writer->GetObjectTags(this));
|
| -
|
| - writer->Write(ptr()->expand_inlined_);
|
| -
|
| - // Write out all the object pointer fields.
|
| - SnapshotWriterVisitor visitor(writer, kAsReference);
|
| - visitor.VisitPointers(from(), to());
|
| - } else {
|
| - // Stacktraces are not allowed in other snapshot forms.
|
| - writer->SetWriteException(Exceptions::kArgument,
|
| - "Illegal argument in isolate message"
|
| - " : (object is a stacktrace)");
|
| - }
|
| + ASSERT(kind == Snapshot::kMessage);
|
| + writer->SetWriteException(Exceptions::kArgument,
|
| + "Illegal argument in isolate message"
|
| + " : (object is a stacktrace)");
|
| }
|
|
|
|
|
| @@ -3187,7 +2890,7 @@ RawRegExp* RegExp::ReadFrom(SnapshotReader* reader,
|
| ASSERT(reader != NULL);
|
|
|
| // Allocate RegExp object.
|
| - RegExp& regex = RegExp::ZoneHandle(reader->zone(), NEW_OBJECT(RegExp));
|
| + RegExp& regex = RegExp::ZoneHandle(reader->zone(), RegExp::New());
|
| reader->AddBackRef(object_id, ®ex, kIsDeserialized);
|
|
|
| // Read and Set all the other fields.
|
| @@ -3244,8 +2947,8 @@ RawWeakProperty* WeakProperty::ReadFrom(SnapshotReader* reader,
|
| ASSERT(reader != NULL);
|
|
|
| // Allocate the weak property object.
|
| - WeakProperty& weak_property = WeakProperty::ZoneHandle(
|
| - reader->zone(), NEW_OBJECT(WeakProperty));
|
| + WeakProperty& weak_property = WeakProperty::ZoneHandle(reader->zone(),
|
| + WeakProperty::New());
|
| reader->AddBackRef(object_id, &weak_property, kIsDeserialized);
|
|
|
| // Set all the object fields.
|
|
|