@@ -2926,6 +2926,73 @@ class SubtypeTestCacheDeserializationCluster : public DeserializationCluster {
29262926 }
29272927};
29282928
2929+ #if !defined(DART_PRECOMPILED_RUNTIME)
2930+ class LoadingUnitSerializationCluster : public SerializationCluster {
2931+ public:
2932+ LoadingUnitSerializationCluster () : SerializationCluster(" LoadingUnit" ) {}
2933+ ~LoadingUnitSerializationCluster () {}
2934+
2935+ void Trace (Serializer* s, ObjectPtr object) {
2936+ LoadingUnitPtr unit = LoadingUnit::RawCast (object);
2937+ objects_.Add (unit);
2938+ s->Push (unit->ptr ()->parent_ );
2939+ }
2940+
2941+ void WriteAlloc (Serializer* s) {
2942+ s->WriteCid (kLoadingUnitCid );
2943+ const intptr_t count = objects_.length ();
2944+ s->WriteUnsigned (count);
2945+ for (intptr_t i = 0 ; i < count; i++) {
2946+ LoadingUnitPtr unit = objects_[i];
2947+ s->AssignRef (unit);
2948+ }
2949+ }
2950+
2951+ void WriteFill (Serializer* s) {
2952+ const intptr_t count = objects_.length ();
2953+ for (intptr_t i = 0 ; i < count; i++) {
2954+ LoadingUnitPtr unit = objects_[i];
2955+ AutoTraceObject (unit);
2956+ WriteField (unit, parent_);
2957+ s->Write <int32_t >(unit->ptr ()->id_ );
2958+ }
2959+ }
2960+
2961+ private:
2962+ GrowableArray<LoadingUnitPtr> objects_;
2963+ };
2964+ #endif // !DART_PRECOMPILED_RUNTIME
2965+
2966+ class LoadingUnitDeserializationCluster : public DeserializationCluster {
2967+ public:
2968+ LoadingUnitDeserializationCluster () {}
2969+ ~LoadingUnitDeserializationCluster () {}
2970+
2971+ void ReadAlloc (Deserializer* d) {
2972+ start_index_ = d->next_index ();
2973+ PageSpace* old_space = d->heap ()->old_space ();
2974+ const intptr_t count = d->ReadUnsigned ();
2975+ for (intptr_t i = 0 ; i < count; i++) {
2976+ d->AssignRef (
2977+ AllocateUninitialized (old_space, LoadingUnit::InstanceSize ()));
2978+ }
2979+ stop_index_ = d->next_index ();
2980+ }
2981+
2982+ void ReadFill (Deserializer* d) {
2983+ for (intptr_t id = start_index_; id < stop_index_; id++) {
2984+ LoadingUnitPtr unit = static_cast <LoadingUnitPtr>(d->Ref (id));
2985+ Deserializer::InitializeHeader (unit, kLoadingUnitCid ,
2986+ LoadingUnit::InstanceSize ());
2987+ unit->ptr ()->parent_ = static_cast <LoadingUnitPtr>(d->ReadRef ());
2988+ unit->ptr ()->base_objects_ = Array::null ();
2989+ unit->ptr ()->id_ = d->Read <int32_t >();
2990+ unit->ptr ()->loaded_ = false ;
2991+ unit->ptr ()->load_issued_ = false ;
2992+ }
2993+ }
2994+ };
2995+
29292996#if !defined(DART_PRECOMPILED_RUNTIME)
29302997class LanguageErrorSerializationCluster : public SerializationCluster {
29312998 public:
@@ -5058,6 +5125,8 @@ SerializationCluster* Serializer::NewClusterForClass(intptr_t cid) {
50585125 return new (Z) MegamorphicCacheSerializationCluster ();
50595126 case kSubtypeTestCacheCid :
50605127 return new (Z) SubtypeTestCacheSerializationCluster ();
5128+ case kLoadingUnitCid :
5129+ return new (Z) LoadingUnitSerializationCluster ();
50615130 case kLanguageErrorCid :
50625131 return new (Z) LanguageErrorSerializationCluster ();
50635132 case kUnhandledExceptionCid :
@@ -5934,6 +6003,8 @@ DeserializationCluster* Deserializer::ReadCluster() {
59346003 return new (Z) MegamorphicCacheDeserializationCluster ();
59356004 case kSubtypeTestCacheCid :
59366005 return new (Z) SubtypeTestCacheDeserializationCluster ();
6006+ case kLoadingUnitCid :
6007+ return new (Z) LoadingUnitDeserializationCluster ();
59376008 case kLanguageErrorCid :
59386009 return new (Z) LanguageErrorDeserializationCluster ();
59396010 case kUnhandledExceptionCid :
0 commit comments