[vm] Remove _HashFieldBase

This class is structurally equivalent to _HashVMBase and the only reason
for it to exist for inability of normal Dart classes to extend
_HashVMBase - but this can worked around by properly configuring
_HashVMBase class in bootstrapping.

TEST=ci

Change-Id: I5ca401e274920d2b4739424c6b6595306a6a6964
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/494140
Commit-Queue: Slava Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
Slava Egorov
2026-04-13 10:10:42 -07:00
committed by dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent 25bb8ce922
commit fff4f2324d
14 changed files with 142 additions and 108 deletions
@@ -132,7 +132,7 @@ class ObjectLayout {
}; };
late final Map<String, int> _dartCompactHashInstanceSize = { late final Map<String, int> _dartCompactHashInstanceSize = {
'_HashVMBase': vmOffsets.LinkedHashBase_InstanceSize, '_LinkedHashBase': vmOffsets.LinkedHashBase_InstanceSize,
}; };
late final ast.Library _typedDataLibrary = GlobalContext late final ast.Library _typedDataLibrary = GlobalContext
@@ -144,6 +144,7 @@ base class VMOffsets {
int get LinkedHashBase_index_offset => throw 'Unknown'; int get LinkedHashBase_index_offset => throw 'Unknown';
int get LinkedHashBase_type_arguments_offset => throw 'Unknown'; int get LinkedHashBase_type_arguments_offset => throw 'Unknown';
int get LinkedHashBase_used_data_offset => throw 'Unknown'; int get LinkedHashBase_used_data_offset => throw 'Unknown';
int get LinkedHashBase_NextFieldOffset => throw 'Unknown';
int get LocalHandle_ptr_offset => throw 'Unknown'; int get LocalHandle_ptr_offset => throw 'Unknown';
int get MarkingStackBlock_pointers_offset => throw 'Unknown'; int get MarkingStackBlock_pointers_offset => throw 'Unknown';
int get MarkingStackBlock_top_offset => throw 'Unknown'; int get MarkingStackBlock_top_offset => throw 'Unknown';
@@ -856,6 +857,8 @@ final class Arm64VMOffsets extends VMOffsets {
@override @override
int get LinkedHashBase_used_data_offset => 0x20; int get LinkedHashBase_used_data_offset => 0x20;
@override @override
int get LinkedHashBase_NextFieldOffset => 0x38;
@override
int get LocalHandle_ptr_offset => 0x0; int get LocalHandle_ptr_offset => 0x0;
@override @override
int get MarkingStackBlock_pointers_offset => 0x10; int get MarkingStackBlock_pointers_offset => 0x10;
@@ -1813,6 +1816,8 @@ final class Arm64ProductVMOffsets extends VMOffsets {
@override @override
int get LinkedHashBase_used_data_offset => 0x20; int get LinkedHashBase_used_data_offset => 0x20;
@override @override
int get LinkedHashBase_NextFieldOffset => 0x38;
@override
int get LocalHandle_ptr_offset => 0x0; int get LocalHandle_ptr_offset => 0x0;
@override @override
int get MarkingStackBlock_pointers_offset => 0x10; int get MarkingStackBlock_pointers_offset => 0x10;
@@ -2868,6 +2873,7 @@ enum ClassId {
StringCid, StringCid,
OneByteStringCid, OneByteStringCid,
TwoByteStringCid, TwoByteStringCid,
LinkedHashBaseCid,
FfiNativeFunctionCid, FfiNativeFunctionCid,
FfiInt8Cid, FfiInt8Cid,
FfiInt16Cid, FfiInt16Cid,
@@ -21,7 +21,7 @@ class InheritedElement extends self::Element {
[@vm.inferred-return-type.metadata=dart.core::Null? (value: null)] [@vm.inferred-return-type.metadata=dart.core::Null? (value: null)]
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]
method setDependencies([@vm.inferred-arg-type.metadata=!] self::Element dependent, [@vm.inferred-arg-type.metadata=dart.core::_Smi?] core::Object? value) → void { method setDependencies([@vm.inferred-arg-type.metadata=!] self::Element dependent, [@vm.inferred-arg-type.metadata=dart.core::_Smi?] core::Object? value) → void {
[@vm.call-site-attributes.metadata=receiverType:dart.core::Map<#lib::Element, dart.core::Object?>] [@vm.direct-call.metadata=dart._compact_hash::__Map&_HashVMBase&MapMixin&_HashBase&_OperatorEqualsAndHashCode&_LinkedHashMapMixin.[]=] [@vm.inferred-type.metadata=? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement._dependents] [@vm.inferred-type.metadata=dart._compact_hash::_Map<#lib::Element, dart.core::Object?>] this.{self::InheritedElement::_dependents}{core::Map<self::Element, core::Object?>}.{core::Map::[]=}(dependent, value){(self::Element, core::Object?) → void}; [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<#lib::Element, dart.core::Object?>] [@vm.direct-call.metadata=dart._compact_hash::__Map&_LinkedHashBase&MapMixin&_HashBase&_OperatorEqualsAndHashCode&_LinkedHashMapMixin.[]=] [@vm.inferred-type.metadata=? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement._dependents] [@vm.inferred-type.metadata=dart._compact_hash::_Map<#lib::Element, dart.core::Object?>] this.{self::InheritedElement::_dependents}{core::Map<self::Element, core::Object?>}.{core::Map::[]=}(dependent, value){(self::Element, core::Object?) → void};
} }
} }
@@ -16,7 +16,7 @@ class _Attribute extends core::Object {
[@vm.inferred-return-type.metadata=#lib::_Attribute] [@vm.inferred-return-type.metadata=#lib::_Attribute]
static method fromReader() → self::_Attribute { static method fromReader() → self::_Attribute {
final self::_AttributeName name = [@vm.direct-call.metadata=dart._compact_hash::__ConstMap&_HashVMImmutableBase&MapMixin&_HashBase&_OperatorEqualsAndCanonicalHashCode&_LinkedHashMapMixin&_UnmodifiableMapMixin&_ImmutableLinkedHashMapMixin.[]] [@vm.inferred-type.metadata=#lib::_AttributeName? (skip check)] #C8.{core::Map::[]}(#C1){(core::Object?) → self::_AttributeName?}!; final self::_AttributeName name = [@vm.direct-call.metadata=dart._compact_hash::__ConstMap&_LinkedHashImmutableBase&MapMixin&_HashBase&_OperatorEqualsAndCanonicalHashCode&_LinkedHashMapMixin&_UnmodifiableMapMixin&_ImmutableLinkedHashMapMixin.[]] [@vm.inferred-type.metadata=#lib::_AttributeName? (skip check)] #C8.{core::Map::[]}(#C1){(core::Object?) → self::_AttributeName?}!;
return new self::_Attribute::_(); return new self::_Attribute::_();
} }
} }
@@ -16,7 +16,7 @@ class _Attribute extends core::Object {
[@vm.inferred-return-type.metadata=#lib::_Attribute] [@vm.inferred-return-type.metadata=#lib::_Attribute]
static method fromReader() → self::_Attribute { static method fromReader() → self::_Attribute {
final core::bool name = [@vm.direct-call.metadata=dart._compact_hash::__ConstSet&_HashVMImmutableBase&SetMixin&_HashBase&_OperatorEqualsAndCanonicalHashCode&_LinkedHashSetMixin&_UnmodifiableSetMixin&_ImmutableLinkedHashSetMixin.contains] [@vm.inferred-type.metadata=? (skip check)] #C3.{core::Set::contains}(#C2){(core::Object?) → core::bool}; final core::bool name = [@vm.direct-call.metadata=dart._compact_hash::__ConstSet&_LinkedHashImmutableBase&SetMixin&_HashBase&_OperatorEqualsAndCanonicalHashCode&_LinkedHashSetMixin&_UnmodifiableSetMixin&_ImmutableLinkedHashSetMixin.contains] [@vm.inferred-type.metadata=? (skip check)] #C3.{core::Set::contains}(#C2){(core::Object?) → core::bool};
return let final self::_AttributeName #t1 = #C8.{core::List::[]}(#C2){(core::int) → self::_AttributeName} in new self::_Attribute::_(); return let final self::_AttributeName #t1 = #C8.{core::List::[]}(#C2){(core::int) → self::_AttributeName} in new self::_Attribute::_();
} }
} }
+1
View File
@@ -312,6 +312,7 @@ static constexpr intptr_t kClassIdTagMax = (1 << 20) - 1;
CID(FreeListElement) \ CID(FreeListElement) \
CID(ForwardingCorpse) \ CID(ForwardingCorpse) \
CLASS_LIST(DEFINE_CLASS_ID) \ CLASS_LIST(DEFINE_CLASS_ID) \
CID(LinkedHashBaseCid) \
CLASS_LIST_FFI(DEFINE_FFI_CLASS_ID) \ CLASS_LIST_FFI(DEFINE_FFI_CLASS_ID) \
CLASS_LIST_TYPED_DATA(DEFINE_TYPED_DATA_CLASS_ID) \ CLASS_LIST_TYPED_DATA(DEFINE_TYPED_DATA_CLASS_ID) \
CID(ByteDataViewCid) \ CID(ByteDataViewCid) \
+13 -13
View File
@@ -78,31 +78,31 @@ namespace dart {
V(CoreLibrary, _Smi, get:hashCode, Smi_hashCode, 0x75c3b512) \ V(CoreLibrary, _Smi, get:hashCode, Smi_hashCode, 0x75c3b512) \
V(CoreLibrary, _Mint, get:hashCode, Mint_hashCode, 0x75c3b512) \ V(CoreLibrary, _Mint, get:hashCode, Mint_hashCode, 0x75c3b512) \
V(CoreLibrary, _Double, get:hashCode, Double_hashCode, 0x75c3b8d3) \ V(CoreLibrary, _Double, get:hashCode, Double_hashCode, 0x75c3b8d3) \
V(CompactHashLibrary, _HashVMBase, get:_index, LinkedHashBase_getIndex, \ V(CompactHashLibrary, _LinkedHashBase, get:_index, LinkedHashBase_getIndex, \
0xb49e7210) \ 0xb49e7210) \
V(CompactHashLibrary, _HashVMBase, set:_index, LinkedHashBase_setIndex, \ V(CompactHashLibrary, _LinkedHashBase, set:_index, LinkedHashBase_setIndex, \
0xcf36944c) \ 0xcf36944c) \
V(CompactHashLibrary, _HashVMBase, get:_data, LinkedHashBase_getData, \ V(CompactHashLibrary, _LinkedHashBase, get:_data, LinkedHashBase_getData, \
0x82aeadd7) \ 0x82aeadd7) \
V(CompactHashLibrary, _HashVMBase, set:_data, LinkedHashBase_setData, \ V(CompactHashLibrary, _LinkedHashBase, set:_data, LinkedHashBase_setData, \
0xc1465c93) \ 0xc1465c93) \
V(CompactHashLibrary, _HashVMBase, get:_usedData, \ V(CompactHashLibrary, _LinkedHashBase, get:_usedData, \
LinkedHashBase_getUsedData, 0x74808f38) \ LinkedHashBase_getUsedData, 0x74808f38) \
V(CompactHashLibrary, _HashVMBase, set:_usedData, \ V(CompactHashLibrary, _LinkedHashBase, set:_usedData, \
LinkedHashBase_setUsedData, 0xe14082f4) \ LinkedHashBase_setUsedData, 0xe14082f4) \
V(CompactHashLibrary, _HashVMBase, get:_hashMask, \ V(CompactHashLibrary, _LinkedHashBase, get:_hashMask, \
LinkedHashBase_getHashMask, 0x53cd6dce) \ LinkedHashBase_getHashMask, 0x53cd6dce) \
V(CompactHashLibrary, _HashVMBase, set:_hashMask, \ V(CompactHashLibrary, _LinkedHashBase, set:_hashMask, \
LinkedHashBase_setHashMask, 0xc08d618a) \ LinkedHashBase_setHashMask, 0xc08d618a) \
V(CompactHashLibrary, _HashVMBase, get:_deletedKeys, \ V(CompactHashLibrary, _LinkedHashBase, get:_deletedKeys, \
LinkedHashBase_getDeletedKeys, 0x75eeb895) \ LinkedHashBase_getDeletedKeys, 0x75eeb895) \
V(CompactHashLibrary, _HashVMBase, set:_deletedKeys, \ V(CompactHashLibrary, _LinkedHashBase, set:_deletedKeys, \
LinkedHashBase_setDeletedKeys, 0xe2aeac51) \ LinkedHashBase_setDeletedKeys, 0xe2aeac51) \
V(CompactHashLibrary, _HashVMImmutableBase, get:_data, \ V(CompactHashLibrary, _LinkedHashImmutableBase, get:_data, \
ImmutableLinkedHashBase_getData, 0x82aeadd7) \ ImmutableLinkedHashBase_getData, 0x82aeadd7) \
V(CompactHashLibrary, _HashVMImmutableBase, get:_indexNullable, \ V(CompactHashLibrary, _LinkedHashImmutableBase, get:_indexNullable, \
ImmutableLinkedHashBase_getIndex, 0xfe7649ae) \ ImmutableLinkedHashBase_getIndex, 0xfe7649ae) \
V(CompactHashLibrary, _HashVMImmutableBase, set:_index, \ V(CompactHashLibrary, _LinkedHashImmutableBase, set:_index, \
ImmutableLinkedHashBase_setIndexStoreRelease, 0xcf36944c) \ ImmutableLinkedHashBase_setIndexStoreRelease, 0xcf36944c) \
V(CompactHashLibrary, ::, get:_uninitializedIndex, \ V(CompactHashLibrary, ::, get:_uninitializedIndex, \
CompactHash_uninitializedIndex, 0xa25a79e6) \ CompactHash_uninitializedIndex, 0xa25a79e6) \
+1
View File
@@ -671,6 +671,7 @@ class LinkedHashBase : public AllStatic {
static word deleted_keys_offset(); static word deleted_keys_offset();
static word type_arguments_offset(); static word type_arguments_offset();
static word InstanceSize(); static word InstanceSize();
static word NextFieldOffset();
}; };
class ImmutableLinkedHashBase : public LinkedHashBase { class ImmutableLinkedHashBase : public LinkedHashBase {
@@ -271,6 +271,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4; LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x10; 0x10;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x1c;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x8; MarkingStackBlock_pointers_offset = 0x8;
@@ -1039,6 +1041,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8; LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x20; 0x20;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x38;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x10; MarkingStackBlock_pointers_offset = 0x10;
@@ -1806,6 +1810,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4; LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x10; 0x10;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x1c;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x8; MarkingStackBlock_pointers_offset = 0x8;
@@ -2573,6 +2579,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8; LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x20; 0x20;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x38;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x10; MarkingStackBlock_pointers_offset = 0x10;
@@ -3346,6 +3354,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8; LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x14; 0x14;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x20;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x10; MarkingStackBlock_pointers_offset = 0x10;
@@ -4116,6 +4126,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8; LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x14; 0x14;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x20;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x10; MarkingStackBlock_pointers_offset = 0x10;
@@ -4884,6 +4896,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4; LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x10; 0x10;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x1c;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x8; MarkingStackBlock_pointers_offset = 0x8;
@@ -5653,6 +5667,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8; LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x20; 0x20;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x38;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x10; MarkingStackBlock_pointers_offset = 0x10;
@@ -6414,6 +6430,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4; LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x10; 0x10;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x1c;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x8; MarkingStackBlock_pointers_offset = 0x8;
@@ -7174,6 +7192,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8; LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x20; 0x20;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x38;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x10; MarkingStackBlock_pointers_offset = 0x10;
@@ -7933,6 +7953,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4; LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x10; 0x10;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x1c;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x8; MarkingStackBlock_pointers_offset = 0x8;
@@ -8692,6 +8714,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8; LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x20; 0x20;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x38;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x10; MarkingStackBlock_pointers_offset = 0x10;
@@ -9457,6 +9481,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8; LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x14; 0x14;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x20;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x10; MarkingStackBlock_pointers_offset = 0x10;
@@ -10219,6 +10245,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8; LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x14; 0x14;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x20;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x10; MarkingStackBlock_pointers_offset = 0x10;
@@ -10979,6 +11007,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4; LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x10; 0x10;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x1c;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x8; MarkingStackBlock_pointers_offset = 0x8;
@@ -11740,6 +11770,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8; LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset = static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
0x20; 0x20;
static constexpr dart::compiler::target::word LinkedHashBase_NextFieldOffset =
0x38;
static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
MarkingStackBlock_pointers_offset = 0x10; MarkingStackBlock_pointers_offset = 0x10;
@@ -12532,6 +12564,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x4; AOT_LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x10; AOT_LinkedHashBase_used_data_offset = 0x10;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x1c;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x8; AOT_MarkingStackBlock_pointers_offset = 0x8;
@@ -13383,6 +13417,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8; AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x20; AOT_LinkedHashBase_used_data_offset = 0x20;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x38;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x10; AOT_MarkingStackBlock_pointers_offset = 0x10;
@@ -14241,6 +14277,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8; AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x20; AOT_LinkedHashBase_used_data_offset = 0x20;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x38;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x10; AOT_MarkingStackBlock_pointers_offset = 0x10;
@@ -15095,6 +15133,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8; AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x14; AOT_LinkedHashBase_used_data_offset = 0x14;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x20;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x10; AOT_MarkingStackBlock_pointers_offset = 0x10;
@@ -15949,6 +15989,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8; AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x14; AOT_LinkedHashBase_used_data_offset = 0x14;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x20;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x10; AOT_MarkingStackBlock_pointers_offset = 0x10;
@@ -16801,6 +16843,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x4; AOT_LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x10; AOT_LinkedHashBase_used_data_offset = 0x10;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x1c;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x8; AOT_MarkingStackBlock_pointers_offset = 0x8;
@@ -17653,6 +17697,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8; AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x20; AOT_LinkedHashBase_used_data_offset = 0x20;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x38;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x10; AOT_MarkingStackBlock_pointers_offset = 0x10;
@@ -18495,6 +18541,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x4; AOT_LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x10; AOT_LinkedHashBase_used_data_offset = 0x10;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x1c;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x8; AOT_MarkingStackBlock_pointers_offset = 0x8;
@@ -19337,6 +19385,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8; AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x20; AOT_LinkedHashBase_used_data_offset = 0x20;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x38;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x10; AOT_MarkingStackBlock_pointers_offset = 0x10;
@@ -20186,6 +20236,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8; AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x20; AOT_LinkedHashBase_used_data_offset = 0x20;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x38;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x10; AOT_MarkingStackBlock_pointers_offset = 0x10;
@@ -21031,6 +21083,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8; AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x14; AOT_LinkedHashBase_used_data_offset = 0x14;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x20;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x10; AOT_MarkingStackBlock_pointers_offset = 0x10;
@@ -21876,6 +21930,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8; AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x14; AOT_LinkedHashBase_used_data_offset = 0x14;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x20;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x10; AOT_MarkingStackBlock_pointers_offset = 0x10;
@@ -22719,6 +22775,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x4; AOT_LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x10; AOT_LinkedHashBase_used_data_offset = 0x10;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x1c;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x8; AOT_MarkingStackBlock_pointers_offset = 0x8;
@@ -23562,6 +23620,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8; AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_LinkedHashBase_used_data_offset = 0x20; AOT_LinkedHashBase_used_data_offset = 0x20;
static constexpr dart::compiler::target::word
AOT_LinkedHashBase_NextFieldOffset = 0x38;
static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0; static constexpr dart::compiler::target::word AOT_LocalHandle_ptr_offset = 0x0;
static constexpr dart::compiler::target::word static constexpr dart::compiler::target::word
AOT_MarkingStackBlock_pointers_offset = 0x10; AOT_MarkingStackBlock_pointers_offset = 0x10;
@@ -212,6 +212,7 @@
FIELD(LinkedHashBase, index_offset) \ FIELD(LinkedHashBase, index_offset) \
FIELD(LinkedHashBase, type_arguments_offset) \ FIELD(LinkedHashBase, type_arguments_offset) \
FIELD(LinkedHashBase, used_data_offset) \ FIELD(LinkedHashBase, used_data_offset) \
FIELD(LinkedHashBase, NextFieldOffset) \
FIELD(LocalHandle, ptr_offset) \ FIELD(LocalHandle, ptr_offset) \
FIELD(MarkingStackBlock, pointers_offset) \ FIELD(MarkingStackBlock, pointers_offset) \
FIELD(MarkingStackBlock, top_offset) \ FIELD(MarkingStackBlock, top_offset) \
+21
View File
@@ -646,6 +646,11 @@ void Object::InitVtables() {
builtin_vtables_[kUnmodifiableByteDataViewCid] = fake_handle.vtable(); builtin_vtables_[kUnmodifiableByteDataViewCid] = fake_handle.vtable();
} }
{
LinkedHashBase fake_handle;
builtin_vtables_[kLinkedHashBaseCid] = fake_handle.vtable();
}
{ {
Instance fake_handle; Instance fake_handle;
builtin_vtables_[kByteBufferCid] = fake_handle.vtable(); builtin_vtables_[kByteBufferCid] = fake_handle.vtable();
@@ -2143,6 +2148,18 @@ ErrorPtr Object::Init(IsolateGroup* isolate_group,
ASSERT(!lib.IsNull()); ASSERT(!lib.IsNull());
ASSERT(lib.ptr() == Library::CompactHashLibrary()); ASSERT(lib.ptr() == Library::CompactHashLibrary());
cls = Class::New<LinkedHashBase, RTN::LinkedHashBase>(
kLinkedHashBaseCid, isolate_group, /*register_class=*/true,
/*is_abstract=*/true);
cls.set_type_arguments_field_offset(
LinkedHashBase::type_arguments_offset(),
RTN::LinkedHashBase::type_arguments_offset());
cls.set_is_prefinalized();
isolate_group->class_table()->Register(cls);
RegisterPrivateClass(cls, Symbols::_LinkedHashBase(), lib);
pending_classes.Add(cls);
cls = Class::New<Map, RTN::Map>(isolate_group); cls = Class::New<Map, RTN::Map>(isolate_group);
object_store->set_map_impl_class(cls); object_store->set_map_impl_class(cls);
cls.set_type_arguments_field_offset(Map::type_arguments_offset(), cls.set_type_arguments_field_offset(Map::type_arguments_offset(),
@@ -2624,6 +2641,10 @@ ErrorPtr Object::Init(IsolateGroup* isolate_group,
isolate_group); isolate_group);
object_store->set_growable_object_array_class(cls); object_store->set_growable_object_array_class(cls);
cls = Class::New<LinkedHashBase, RTN::LinkedHashBase>(
kLinkedHashBaseCid, isolate_group, /*register_class=*/true,
/*is_abstract=*/true);
cls = Class::New<Map, RTN::Map>(isolate_group); cls = Class::New<Map, RTN::Map>(isolate_group);
object_store->set_map_impl_class(cls); object_store->set_map_impl_class(cls);
+1
View File
@@ -12318,6 +12318,7 @@ class LinkedHashBase : public Instance {
static intptr_t InstanceSize() { static intptr_t InstanceSize() {
return RoundedAllocationSize(sizeof(UntaggedLinkedHashBase)); return RoundedAllocationSize(sizeof(UntaggedLinkedHashBase));
} }
static intptr_t NextFieldOffset() { return sizeof(UntaggedLinkedHashBase); }
static intptr_t type_arguments_offset() { static intptr_t type_arguments_offset() {
return OFFSET_OF(UntaggedLinkedHashBase, type_arguments_); return OFFSET_OF(UntaggedLinkedHashBase, type_arguments_);
+1
View File
@@ -349,6 +349,7 @@ namespace dart {
V(_GrowableListGenerateFactory, "_GrowableList.generate") \ V(_GrowableListGenerateFactory, "_GrowableList.generate") \
V(_GrowableListLiteralFactory, "_GrowableList._literal") \ V(_GrowableListLiteralFactory, "_GrowableList._literal") \
V(_GrowableListWithData, "_GrowableList._withData") \ V(_GrowableListWithData, "_GrowableList._withData") \
V(_LinkedHashBase, "_LinkedHashBase") \
V(_ImmutableList, "_ImmutableList") \ V(_ImmutableList, "_ImmutableList") \
V(_Int16ArrayFactory, "Int16List.") \ V(_Int16ArrayFactory, "Int16List.") \
V(_Int16ArrayView, "_Int16ArrayView") \ V(_Int16ArrayView, "_Int16ArrayView") \
@@ -109,64 +109,8 @@ void _rehashObjects(List objects) {
} }
} }
// Common interface for [_HashFieldBase] and [_HashVMBase]. // Corresponds to `UntaggedLinkedHashBase` VM class.
abstract class _HashAbstractBase { abstract class _LinkedHashBase {
abstract Uint32List _index;
abstract int _hashMask;
abstract List _data;
abstract int _usedData;
abstract int _deletedKeys;
}
abstract class _HashAbstractImmutableBase extends _HashAbstractBase {
Uint32List? get _indexNullable;
}
abstract class _HashFieldBase implements _HashAbstractImmutableBase {
// Each occupied entry in _index is a fixed-size integer that encodes a pair:
// [ hash pattern for key | index of entry in _data ]
// The hash pattern is based on hashCode, but is guaranteed to be non-zero.
// The length of _index is always a power of two, and there is always at
// least one unoccupied entry.
// NOTE: When maps are deserialized, their _index and _hashMask is regenerated
// eagerly by _regenerateIndex.
Uint32List? _indexNullable = _uninitializedIndex;
@pragma("vm:exact-result-type", "dart:typed_data#_Uint32List")
@pragma("vm:prefer-inline")
@pragma("wasm:prefer-inline")
Uint32List get _index => _indexNullable!;
@pragma("vm:prefer-inline")
@pragma("wasm:prefer-inline")
void set _index(Uint32List value) => _indexNullable = value;
// Cached in-place mask for the hash pattern component.
int _hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
// Fixed-length list of keys (set) or key/value at even/odd indices (map).
//
// Can be either a mutable or immutable list.
List _data = _uninitializedData;
// Length of _data that is used (i.e., keys + values for a map).
int _usedData = 0;
// Number of deleted keys.
int _deletedKeys = 0;
// Note: All fields are initialized in a single constructor so that the VM
// recognizes they cannot hold null values. This makes a big (20%) performance
// difference on some operations.
_HashFieldBase();
}
// Base class for VM-internal classes; keep in sync with _HashFieldBase.
abstract class _HashVMBase implements _HashAbstractBase {
@pragma("vm:recognized", "other") @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:typed_data#_Uint32List") @pragma("vm:exact-result-type", "dart:typed_data#_Uint32List")
@pragma("vm:prefer-inline") @pragma("vm:prefer-inline")
@@ -206,11 +150,18 @@ abstract class _HashVMBase implements _HashAbstractBase {
@pragma("vm:recognized", "other") @pragma("vm:recognized", "other")
@pragma("vm:prefer-inline") @pragma("vm:prefer-inline")
external void set _deletedKeys(int value); external void set _deletedKeys(int value);
_LinkedHashBase() {
_index = _uninitializedIndex;
_hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
_data = _uninitializedData;
_usedData = 0;
_deletedKeys = 0;
}
} }
// Base class for immutable VM-internal classes. // Base class for immutable sets and maps.
abstract class _HashVMImmutableBase extends _HashVMBase abstract class _LinkedHashImmutableBase extends _LinkedHashBase {
implements _HashAbstractImmutableBase {
// The data is an immutable list rather than a mutable list. // The data is an immutable list rather than a mutable list.
@pragma("vm:recognized", "other") @pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_ImmutableList") @pragma("vm:exact-result-type", "dart:core#_ImmutableList")
@@ -229,10 +180,13 @@ abstract class _HashVMImmutableBase extends _HashVMBase
external void set _index(Uint32List value); external void set _index(Uint32List value);
} }
// This mixin can be applied to _HashFieldBase or _HashVMBase (for // This mixin can be applied to _LinkedHashBase or _LinkedHashImmutableBase.
// normal and VM-internalized classes, respectively), which provide the //
// actual fields/accessors that this mixin assumes. // Note that _LinkedHashImmutableBase overrides certain accessors on
mixin _HashBase on _HashAbstractBase { // _LinkedHashBase to provide behaviors specific to constant maps and sets.
// We use mixins to copy implementation methods that depend on these accessors
// and avoid polymorphism in the code.
mixin _HashBase on _LinkedHashBase {
// The number of bits used for each component is determined by table size. // The number of bits used for each component is determined by table size.
// If initialized, the length of _index is (at least) twice the number of // If initialized, the length of _index is (at least) twice the number of
// entries in _data, and both are doubled when _data is full. Thus, _index // entries in _data, and both are doubled when _data is full. Thus, _index
@@ -378,7 +332,7 @@ external List get _uninitializedData;
// literals also create instances of this class. // literals also create instances of this class.
@pragma("vm:entry-point") @pragma("vm:entry-point")
@pragma('dyn-module:language-impl:callable') @pragma('dyn-module:language-impl:callable')
base class _Map<K, V> extends _HashVMBase base class _Map<K, V> extends _LinkedHashBase
with with
MapMixin<K, V>, MapMixin<K, V>,
_HashBase, _HashBase,
@@ -386,13 +340,7 @@ base class _Map<K, V> extends _HashVMBase
_LinkedHashMapMixin<K, V> _LinkedHashMapMixin<K, V>
implements LinkedHashMap<K, V> { implements LinkedHashMap<K, V> {
@pragma('dyn-module:language-impl:callable') @pragma('dyn-module:language-impl:callable')
_Map() { _Map();
_index = _uninitializedIndex;
_hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
_data = _uninitializedData;
_usedData = 0;
_deletedKeys = 0;
}
void addAll(Map<K, V> other) { void addAll(Map<K, V> other) {
if (other case final _Map otherBase) { if (other case final _Map otherBase) {
@@ -409,7 +357,7 @@ base class _Map<K, V> extends _HashVMBase
// this class for maps constructed from Dart constant maps. // this class for maps constructed from Dart constant maps.
@pragma("vm:deeply-immutable") @pragma("vm:deeply-immutable")
@pragma("vm:entry-point") @pragma("vm:entry-point")
final class _ConstMap<K, V> extends _HashVMImmutableBase final class _ConstMap<K, V> extends _LinkedHashImmutableBase
with with
MapMixin<K, V>, MapMixin<K, V>,
_HashBase, _HashBase,
@@ -430,7 +378,7 @@ external _ConstMap<K, V> createConstMapFromMapOfDeeplyImmutables<K, V>(
); );
mixin _ImmutableLinkedHashMapMixin<K, V> mixin _ImmutableLinkedHashMapMixin<K, V>
on _LinkedHashMapMixin<K, V>, _HashAbstractImmutableBase { on _LinkedHashMapMixin<K, V>, _LinkedHashImmutableBase {
bool containsKey(Object? key) { bool containsKey(Object? key) {
if (_indexNullable == null) { if (_indexNullable == null) {
_createIndex(); _createIndex();
@@ -781,7 +729,7 @@ mixin _LinkedHashMapMixin<K, V> on _HashBase, _EqualsAndHashCode {
Iterable<MapEntry<K, V>> get entries => _CompactEntriesIterable<K, V>(this); Iterable<MapEntry<K, V>> get entries => _CompactEntriesIterable<K, V>(this);
} }
base class CompactLinkedIdentityHashMap<K, V> extends _HashFieldBase base class CompactLinkedIdentityHashMap<K, V> extends _LinkedHashBase
with with
MapMixin<K, V>, MapMixin<K, V>,
_HashBase, _HashBase,
@@ -798,7 +746,7 @@ base class CompactLinkedIdentityHashMap<K, V> extends _HashFieldBase
} }
} }
base class CompactLinkedCustomHashMap<K, V> extends _HashFieldBase base class CompactLinkedCustomHashMap<K, V> extends _LinkedHashBase
with with
MapMixin<K, V>, MapMixin<K, V>,
_HashBase, _HashBase,
@@ -941,7 +889,7 @@ class _CompactEntriesIterator<K, V> implements Iterator<MapEntry<K, V>> {
// Does not check for concurrent modification since the table // Does not check for concurrent modification since the table
// is known to be immutable. // is known to be immutable.
class _CompactIterableImmutable<E> extends Iterable<E> { class _CompactIterableImmutable<E> extends Iterable<E> {
// _HashBase with _HashVMImmutableBase. // _HashBase with _LinkedHashImmutableBase.
final _HashBase _table; final _HashBase _table;
// dart:core#_ImmutableList (sdk/lib/_internal/vm/lib/array.dart). // dart:core#_ImmutableList (sdk/lib/_internal/vm/lib/array.dart).
final List _data; final List _data;
@@ -966,7 +914,7 @@ class _CompactIterableImmutable<E> extends Iterable<E> {
} }
class _CompactIteratorImmutable<E> implements Iterator<E> { class _CompactIteratorImmutable<E> implements Iterator<E> {
// _HashBase with _HashVMImmutableBase. // _HashBase with _LinkedHashImmutableBase.
final _HashBase _table; final _HashBase _table;
// dart:core#_ImmutableList (sdk/lib/_internal/vm/lib/array.dart). // dart:core#_ImmutableList (sdk/lib/_internal/vm/lib/array.dart).
final List _data; final List _data;
@@ -1172,7 +1120,7 @@ mixin _LinkedHashSetMixin<E> on _HashBase, _EqualsAndHashCode {
// class. // class.
@pragma("vm:entry-point") @pragma("vm:entry-point")
@pragma('dyn-module:language-impl:callable') @pragma('dyn-module:language-impl:callable')
base class _Set<E> extends _HashVMBase base class _Set<E> extends _LinkedHashBase
with with
SetMixin<E>, SetMixin<E>,
_HashBase, _HashBase,
@@ -1180,13 +1128,7 @@ base class _Set<E> extends _HashVMBase
_LinkedHashSetMixin<E> _LinkedHashSetMixin<E>
implements LinkedHashSet<E> { implements LinkedHashSet<E> {
@pragma('dyn-module:language-impl:callable') @pragma('dyn-module:language-impl:callable')
_Set() { _Set();
_index = _uninitializedIndex;
_hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
_data = _uninitializedData;
_usedData = 0;
_deletedKeys = 0;
}
void addAll(Iterable<E> other) { void addAll(Iterable<E> other) {
if (other case final _Set otherBase) { if (other case final _Set otherBase) {
@@ -1205,7 +1147,7 @@ base class _Set<E> extends _HashVMBase
} }
@pragma("vm:entry-point") @pragma("vm:entry-point")
base class _ConstSet<E> extends _HashVMImmutableBase base class _ConstSet<E> extends _LinkedHashImmutableBase
with with
SetMixin<E>, SetMixin<E>,
_HashBase, _HashBase,
@@ -1227,7 +1169,7 @@ base class _ConstSet<E> extends _HashVMImmutableBase
} }
mixin _ImmutableLinkedHashSetMixin<E> mixin _ImmutableLinkedHashSetMixin<E>
on Set<E>, _LinkedHashSetMixin<E>, _HashAbstractImmutableBase { on Set<E>, _LinkedHashSetMixin<E>, _LinkedHashImmutableBase {
E? lookup(Object? key) { E? lookup(Object? key) {
if (_indexNullable == null) { if (_indexNullable == null) {
_createIndex(); _createIndex();
@@ -1288,7 +1230,7 @@ mixin _ImmutableLinkedHashSetMixin<E>
_CompactIteratorImmutable<E>(this, _data, _usedData, -1, 1); _CompactIteratorImmutable<E>(this, _data, _usedData, -1, 1);
} }
base class CompactLinkedIdentityHashSet<E> extends _HashFieldBase base class CompactLinkedIdentityHashSet<E> extends _LinkedHashBase
with with
SetMixin<E>, SetMixin<E>,
_HashBase, _HashBase,
@@ -1311,7 +1253,7 @@ base class CompactLinkedIdentityHashSet<E> extends _HashFieldBase
Set<R> cast<R>() => Set.castFrom<E, R>(this, newSet: _newEmpty); Set<R> cast<R>() => Set.castFrom<E, R>(this, newSet: _newEmpty);
} }
base class CompactLinkedCustomHashSet<E> extends _HashFieldBase base class CompactLinkedCustomHashSet<E> extends _LinkedHashBase
with with
SetMixin<E>, SetMixin<E>,
_HashBase, _HashBase,