@@ -248,6 +248,7 @@ class DeserializationCluster : public ZoneAllocated {
248248
249249 const char * name () const { return name_; }
250250 bool is_canonical () const { return is_canonical_; }
251+ bool is_immutable () const { return is_immutable_; }
251252
252253 protected:
253254 void ReadAllocFixedSize (Deserializer* deserializer, intptr_t instance_size);
@@ -4555,8 +4556,9 @@ class AbstractInstanceDeserializationCluster : public DeserializationCluster {
45554556 protected:
45564557 explicit AbstractInstanceDeserializationCluster (const char * name,
45574558 bool is_canonical,
4559+ bool is_immutable,
45584560 bool is_root_unit)
4559- : DeserializationCluster(name, is_canonical),
4561+ : DeserializationCluster(name, is_canonical, is_immutable ),
45604562 is_root_unit_(is_root_unit) {}
45614563
45624564 const bool is_root_unit_;
@@ -4587,9 +4589,9 @@ class InstanceDeserializationCluster
45874589 bool is_root_unit)
45884590 : AbstractInstanceDeserializationCluster(" Instance" ,
45894591 is_canonical,
4592+ is_immutable,
45904593 is_root_unit),
4591- cid_(cid),
4592- is_immutable_(is_immutable) {}
4594+ cid_(cid) {}
45934595 ~InstanceDeserializationCluster () {}
45944596
45954597 void ReadAlloc (Deserializer* d) override {
@@ -4647,7 +4649,6 @@ class InstanceDeserializationCluster
46474649
46484650 private:
46494651 const intptr_t cid_;
4650- const bool is_immutable_;
46514652 intptr_t next_field_offset_in_words_;
46524653 intptr_t instance_size_in_words_;
46534654};
@@ -5247,9 +5248,12 @@ class ClosureSerializationCluster : public SerializationCluster {
52475248class ClosureDeserializationCluster
52485249 : public AbstractInstanceDeserializationCluster {
52495250 public:
5250- explicit ClosureDeserializationCluster (bool is_canonical, bool is_root_unit)
5251+ explicit ClosureDeserializationCluster (bool is_canonical,
5252+ bool is_immutable,
5253+ bool is_root_unit)
52515254 : AbstractInstanceDeserializationCluster(" Closure" ,
52525255 is_canonical,
5256+ is_immutable,
52535257 is_root_unit) {}
52545258 ~ClosureDeserializationCluster () {}
52555259
@@ -5342,9 +5346,12 @@ class MintSerializationCluster : public SerializationCluster {
53425346class MintDeserializationCluster
53435347 : public AbstractInstanceDeserializationCluster {
53445348 public:
5345- explicit MintDeserializationCluster (bool is_canonical, bool is_root_unit)
5349+ explicit MintDeserializationCluster (bool is_canonical,
5350+ bool is_immutable,
5351+ bool is_root_unit)
53465352 : AbstractInstanceDeserializationCluster(" int" ,
53475353 is_canonical,
5354+ is_immutable,
53485355 is_root_unit) {}
53495356 ~MintDeserializationCluster () {}
53505357
@@ -5411,10 +5418,15 @@ class DoubleSerializationCluster : public SerializationCluster {
54115418class DoubleDeserializationCluster
54125419 : public AbstractInstanceDeserializationCluster {
54135420 public:
5414- explicit DoubleDeserializationCluster (bool is_canonical, bool is_root_unit)
5421+ explicit DoubleDeserializationCluster (bool is_canonical,
5422+ bool is_immutable,
5423+ bool is_root_unit)
54155424 : AbstractInstanceDeserializationCluster(" double" ,
54165425 is_canonical,
5417- is_root_unit) {}
5426+ is_immutable,
5427+ is_root_unit) {
5428+ ASSERT (Object::ShouldHaveImmutabilityBitSet (kDoubleCid ));
5429+ }
54185430 ~DoubleDeserializationCluster () {}
54195431
54205432 void ReadAlloc (Deserializer* d) override {
@@ -5481,9 +5493,11 @@ class Simd128DeserializationCluster
54815493 public:
54825494 explicit Simd128DeserializationCluster (intptr_t cid,
54835495 bool is_canonical,
5496+ bool is_immutable,
54845497 bool is_root_unit)
54855498 : AbstractInstanceDeserializationCluster(" Simd128" ,
54865499 is_canonical,
5500+ is_immutable,
54875501 is_root_unit),
54885502 cid_(cid) {}
54895503 ~Simd128DeserializationCluster () {}
@@ -5626,9 +5640,12 @@ class RecordSerializationCluster : public SerializationCluster {
56265640class RecordDeserializationCluster
56275641 : public AbstractInstanceDeserializationCluster {
56285642 public:
5629- explicit RecordDeserializationCluster (bool is_canonical, bool is_root_unit)
5643+ explicit RecordDeserializationCluster (bool is_canonical,
5644+ bool is_immutable,
5645+ bool is_root_unit)
56305646 : AbstractInstanceDeserializationCluster(" Record" ,
56315647 is_canonical,
5648+ is_immutable,
56325649 is_root_unit) {}
56335650 ~RecordDeserializationCluster () {}
56345651
@@ -6261,9 +6278,11 @@ class MapDeserializationCluster
62616278 public:
62626279 explicit MapDeserializationCluster (intptr_t cid,
62636280 bool is_canonical,
6281+ bool is_immutable,
62646282 bool is_root_unit)
62656283 : AbstractInstanceDeserializationCluster(" Map" ,
62666284 is_canonical,
6285+ is_immutable,
62676286 is_root_unit),
62686287 cid_(cid) {}
62696288 ~MapDeserializationCluster () {}
@@ -6336,9 +6355,11 @@ class SetDeserializationCluster
63366355 public:
63376356 explicit SetDeserializationCluster (intptr_t cid,
63386357 bool is_canonical,
6358+ bool is_immutable,
63396359 bool is_root_unit)
63406360 : AbstractInstanceDeserializationCluster(" Set" ,
63416361 is_canonical,
6362+ is_immutable,
63426363 is_root_unit),
63436364 cid_(cid) {}
63446365 ~SetDeserializationCluster () {}
@@ -6476,9 +6497,11 @@ class ArrayDeserializationCluster
64766497 public:
64776498 explicit ArrayDeserializationCluster (intptr_t cid,
64786499 bool is_canonical,
6500+ bool is_immutable,
64796501 bool is_root_unit)
64806502 : AbstractInstanceDeserializationCluster(" Array" ,
64816503 is_canonical,
6504+ is_immutable,
64826505 is_root_unit),
64836506 cid_(cid) {}
64846507 ~ArrayDeserializationCluster () {}
@@ -9120,25 +9143,25 @@ DeserializationCluster* Deserializer::ReadCluster() {
91209143 return new (Z)
91219144 TypeParameterDeserializationCluster (is_canonical, !is_non_root_unit_);
91229145 case kClosureCid :
9123- return new (Z)
9124- ClosureDeserializationCluster (is_canonical, !is_non_root_unit_);
9146+ return new (Z) ClosureDeserializationCluster (is_canonical, is_immutable,
9147+ !is_non_root_unit_);
91259148 case kMintCid :
9126- return new (Z)
9127- MintDeserializationCluster (is_canonical, !is_non_root_unit_);
9149+ return new (Z) MintDeserializationCluster (is_canonical, is_immutable,
9150+ !is_non_root_unit_);
91289151 case kDoubleCid :
9129- return new (Z)
9130- DoubleDeserializationCluster (is_canonical, !is_non_root_unit_);
9152+ return new (Z) DoubleDeserializationCluster (is_canonical, is_immutable,
9153+ !is_non_root_unit_);
91319154 case kInt32x4Cid :
91329155 case kFloat32x4Cid :
91339156 case kFloat64x2Cid :
9134- return new (Z)
9135- Simd128DeserializationCluster ( cid, is_canonical, !is_non_root_unit_);
9157+ return new (Z) Simd128DeserializationCluster (
9158+ cid, is_canonical, is_immutable , !is_non_root_unit_);
91369159 case kGrowableObjectArrayCid :
91379160 ASSERT (!is_canonical);
91389161 return new (Z) GrowableObjectArrayDeserializationCluster ();
91399162 case kRecordCid :
9140- return new (Z)
9141- RecordDeserializationCluster (is_canonical, !is_non_root_unit_);
9163+ return new (Z) RecordDeserializationCluster (is_canonical, is_immutable,
9164+ !is_non_root_unit_);
91429165 case kStackTraceCid :
91439166 ASSERT (!is_canonical);
91449167 return new (Z) StackTraceDeserializationCluster ();
@@ -9152,20 +9175,20 @@ DeserializationCluster* Deserializer::ReadCluster() {
91529175 // We do not have mutable hash maps in snapshots.
91539176 UNREACHABLE ();
91549177 case kConstMapCid :
9155- return new (Z) MapDeserializationCluster (kConstMapCid , is_canonical,
9156- !is_non_root_unit_);
9178+ return new (Z) MapDeserializationCluster (
9179+ kConstMapCid , is_canonical, is_immutable, !is_non_root_unit_);
91579180 case kSetCid :
91589181 // We do not have mutable hash sets in snapshots.
91599182 UNREACHABLE ();
91609183 case kConstSetCid :
9161- return new (Z) SetDeserializationCluster (kConstSetCid , is_canonical,
9162- !is_non_root_unit_);
9184+ return new (Z) SetDeserializationCluster (
9185+ kConstSetCid , is_canonical, is_immutable, !is_non_root_unit_);
91639186 case kArrayCid :
9164- return new (Z) ArrayDeserializationCluster (kArrayCid , is_canonical,
9165- !is_non_root_unit_);
9187+ return new (Z) ArrayDeserializationCluster (
9188+ kArrayCid , is_canonical, is_immutable, !is_non_root_unit_);
91669189 case kImmutableArrayCid :
91679190 return new (Z) ArrayDeserializationCluster (
9168- kImmutableArrayCid , is_canonical, !is_non_root_unit_);
9191+ kImmutableArrayCid , is_canonical, is_immutable, !is_non_root_unit_);
91699192 case kWeakArrayCid :
91709193 return new (Z) WeakArrayDeserializationCluster ();
91719194 case kStringCid :
0 commit comments