[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 = {
'_HashVMBase': vmOffsets.LinkedHashBase_InstanceSize,
'_LinkedHashBase': vmOffsets.LinkedHashBase_InstanceSize,
};
late final ast.Library _typedDataLibrary = GlobalContext
@@ -144,6 +144,7 @@ base class VMOffsets {
int get LinkedHashBase_index_offset => throw 'Unknown';
int get LinkedHashBase_type_arguments_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 MarkingStackBlock_pointers_offset => throw 'Unknown';
int get MarkingStackBlock_top_offset => throw 'Unknown';
@@ -856,6 +857,8 @@ final class Arm64VMOffsets extends VMOffsets {
@override
int get LinkedHashBase_used_data_offset => 0x20;
@override
int get LinkedHashBase_NextFieldOffset => 0x38;
@override
int get LocalHandle_ptr_offset => 0x0;
@override
int get MarkingStackBlock_pointers_offset => 0x10;
@@ -1813,6 +1816,8 @@ final class Arm64ProductVMOffsets extends VMOffsets {
@override
int get LinkedHashBase_used_data_offset => 0x20;
@override
int get LinkedHashBase_NextFieldOffset => 0x38;
@override
int get LocalHandle_ptr_offset => 0x0;
@override
int get MarkingStackBlock_pointers_offset => 0x10;
@@ -2868,6 +2873,7 @@ enum ClassId {
StringCid,
OneByteStringCid,
TwoByteStringCid,
LinkedHashBaseCid,
FfiNativeFunctionCid,
FfiInt8Cid,
FfiInt16Cid,
@@ -21,7 +21,7 @@ class InheritedElement extends self::Element {
[@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]
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]
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::_();
}
}
@@ -16,7 +16,7 @@ class _Attribute extends core::Object {
[@vm.inferred-return-type.metadata=#lib::_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::_();
}
}
+1
View File
@@ -312,6 +312,7 @@ static constexpr intptr_t kClassIdTagMax = (1 << 20) - 1;
CID(FreeListElement) \
CID(ForwardingCorpse) \
CLASS_LIST(DEFINE_CLASS_ID) \
CID(LinkedHashBaseCid) \
CLASS_LIST_FFI(DEFINE_FFI_CLASS_ID) \
CLASS_LIST_TYPED_DATA(DEFINE_TYPED_DATA_CLASS_ID) \
CID(ByteDataViewCid) \
+13 -13
View File
@@ -78,31 +78,31 @@ namespace dart {
V(CoreLibrary, _Smi, get:hashCode, Smi_hashCode, 0x75c3b512) \
V(CoreLibrary, _Mint, get:hashCode, Mint_hashCode, 0x75c3b512) \
V(CoreLibrary, _Double, get:hashCode, Double_hashCode, 0x75c3b8d3) \
V(CompactHashLibrary, _HashVMBase, get:_index, LinkedHashBase_getIndex, \
V(CompactHashLibrary, _LinkedHashBase, get:_index, LinkedHashBase_getIndex, \
0xb49e7210) \
V(CompactHashLibrary, _HashVMBase, set:_index, LinkedHashBase_setIndex, \
V(CompactHashLibrary, _LinkedHashBase, set:_index, LinkedHashBase_setIndex, \
0xcf36944c) \
V(CompactHashLibrary, _HashVMBase, get:_data, LinkedHashBase_getData, \
V(CompactHashLibrary, _LinkedHashBase, get:_data, LinkedHashBase_getData, \
0x82aeadd7) \
V(CompactHashLibrary, _HashVMBase, set:_data, LinkedHashBase_setData, \
V(CompactHashLibrary, _LinkedHashBase, set:_data, LinkedHashBase_setData, \
0xc1465c93) \
V(CompactHashLibrary, _HashVMBase, get:_usedData, \
V(CompactHashLibrary, _LinkedHashBase, get:_usedData, \
LinkedHashBase_getUsedData, 0x74808f38) \
V(CompactHashLibrary, _HashVMBase, set:_usedData, \
V(CompactHashLibrary, _LinkedHashBase, set:_usedData, \
LinkedHashBase_setUsedData, 0xe14082f4) \
V(CompactHashLibrary, _HashVMBase, get:_hashMask, \
V(CompactHashLibrary, _LinkedHashBase, get:_hashMask, \
LinkedHashBase_getHashMask, 0x53cd6dce) \
V(CompactHashLibrary, _HashVMBase, set:_hashMask, \
V(CompactHashLibrary, _LinkedHashBase, set:_hashMask, \
LinkedHashBase_setHashMask, 0xc08d618a) \
V(CompactHashLibrary, _HashVMBase, get:_deletedKeys, \
V(CompactHashLibrary, _LinkedHashBase, get:_deletedKeys, \
LinkedHashBase_getDeletedKeys, 0x75eeb895) \
V(CompactHashLibrary, _HashVMBase, set:_deletedKeys, \
V(CompactHashLibrary, _LinkedHashBase, set:_deletedKeys, \
LinkedHashBase_setDeletedKeys, 0xe2aeac51) \
V(CompactHashLibrary, _HashVMImmutableBase, get:_data, \
V(CompactHashLibrary, _LinkedHashImmutableBase, get:_data, \
ImmutableLinkedHashBase_getData, 0x82aeadd7) \
V(CompactHashLibrary, _HashVMImmutableBase, get:_indexNullable, \
V(CompactHashLibrary, _LinkedHashImmutableBase, get:_indexNullable, \
ImmutableLinkedHashBase_getIndex, 0xfe7649ae) \
V(CompactHashLibrary, _HashVMImmutableBase, set:_index, \
V(CompactHashLibrary, _LinkedHashImmutableBase, set:_index, \
ImmutableLinkedHashBase_setIndexStoreRelease, 0xcf36944c) \
V(CompactHashLibrary, ::, get:_uninitializedIndex, \
CompactHash_uninitializedIndex, 0xa25a79e6) \
+1
View File
@@ -671,6 +671,7 @@ class LinkedHashBase : public AllStatic {
static word deleted_keys_offset();
static word type_arguments_offset();
static word InstanceSize();
static word NextFieldOffset();
};
class ImmutableLinkedHashBase : public LinkedHashBase {
@@ -271,6 +271,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x8;
@@ -1039,6 +1041,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x10;
@@ -1806,6 +1810,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x8;
@@ -2573,6 +2579,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x10;
@@ -3346,6 +3354,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x10;
@@ -4116,6 +4126,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x10;
@@ -4884,6 +4896,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x8;
@@ -5653,6 +5667,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x10;
@@ -6414,6 +6430,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x8;
@@ -7174,6 +7192,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x10;
@@ -7933,6 +7953,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x8;
@@ -8692,6 +8714,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x10;
@@ -9457,6 +9481,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x10;
@@ -10219,6 +10245,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x10;
@@ -10979,6 +11007,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x8;
@@ -11740,6 +11770,8 @@ static constexpr dart::compiler::target::word
LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word LinkedHashBase_used_data_offset =
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
MarkingStackBlock_pointers_offset = 0x10;
@@ -12532,6 +12564,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x8;
@@ -13383,6 +13417,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x10;
@@ -14241,6 +14277,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x10;
@@ -15095,6 +15133,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x10;
@@ -15949,6 +15989,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x10;
@@ -16801,6 +16843,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x8;
@@ -17653,6 +17697,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x10;
@@ -18495,6 +18541,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x8;
@@ -19337,6 +19385,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x10;
@@ -20186,6 +20236,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x10;
@@ -21031,6 +21083,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x10;
@@ -21876,6 +21930,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x10;
@@ -22719,6 +22775,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x4;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x8;
@@ -23562,6 +23620,8 @@ static constexpr dart::compiler::target::word
AOT_LinkedHashBase_type_arguments_offset = 0x8;
static constexpr dart::compiler::target::word
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_MarkingStackBlock_pointers_offset = 0x10;
@@ -212,6 +212,7 @@
FIELD(LinkedHashBase, index_offset) \
FIELD(LinkedHashBase, type_arguments_offset) \
FIELD(LinkedHashBase, used_data_offset) \
FIELD(LinkedHashBase, NextFieldOffset) \
FIELD(LocalHandle, ptr_offset) \
FIELD(MarkingStackBlock, pointers_offset) \
FIELD(MarkingStackBlock, top_offset) \
+21
View File
@@ -646,6 +646,11 @@ void Object::InitVtables() {
builtin_vtables_[kUnmodifiableByteDataViewCid] = fake_handle.vtable();
}
{
LinkedHashBase fake_handle;
builtin_vtables_[kLinkedHashBaseCid] = fake_handle.vtable();
}
{
Instance fake_handle;
builtin_vtables_[kByteBufferCid] = fake_handle.vtable();
@@ -2143,6 +2148,18 @@ ErrorPtr Object::Init(IsolateGroup* isolate_group,
ASSERT(!lib.IsNull());
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);
object_store->set_map_impl_class(cls);
cls.set_type_arguments_field_offset(Map::type_arguments_offset(),
@@ -2624,6 +2641,10 @@ ErrorPtr Object::Init(IsolateGroup* isolate_group,
isolate_group);
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);
object_store->set_map_impl_class(cls);
+1
View File
@@ -12318,6 +12318,7 @@ class LinkedHashBase : public Instance {
static intptr_t InstanceSize() {
return RoundedAllocationSize(sizeof(UntaggedLinkedHashBase));
}
static intptr_t NextFieldOffset() { return sizeof(UntaggedLinkedHashBase); }
static intptr_t type_arguments_offset() {
return OFFSET_OF(UntaggedLinkedHashBase, type_arguments_);
+1
View File
@@ -349,6 +349,7 @@ namespace dart {
V(_GrowableListGenerateFactory, "_GrowableList.generate") \
V(_GrowableListLiteralFactory, "_GrowableList._literal") \
V(_GrowableListWithData, "_GrowableList._withData") \
V(_LinkedHashBase, "_LinkedHashBase") \
V(_ImmutableList, "_ImmutableList") \
V(_Int16ArrayFactory, "Int16List.") \
V(_Int16ArrayView, "_Int16ArrayView") \
@@ -109,64 +109,8 @@ void _rehashObjects(List objects) {
}
}
// Common interface for [_HashFieldBase] and [_HashVMBase].
abstract class _HashAbstractBase {
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 {
// Corresponds to `UntaggedLinkedHashBase` VM class.
abstract class _LinkedHashBase {
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:typed_data#_Uint32List")
@pragma("vm:prefer-inline")
@@ -206,11 +150,18 @@ abstract class _HashVMBase implements _HashAbstractBase {
@pragma("vm:recognized", "other")
@pragma("vm:prefer-inline")
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.
abstract class _HashVMImmutableBase extends _HashVMBase
implements _HashAbstractImmutableBase {
// Base class for immutable sets and maps.
abstract class _LinkedHashImmutableBase extends _LinkedHashBase {
// The data is an immutable list rather than a mutable list.
@pragma("vm:recognized", "other")
@pragma("vm:exact-result-type", "dart:core#_ImmutableList")
@@ -229,10 +180,13 @@ abstract class _HashVMImmutableBase extends _HashVMBase
external void set _index(Uint32List value);
}
// This mixin can be applied to _HashFieldBase or _HashVMBase (for
// normal and VM-internalized classes, respectively), which provide the
// actual fields/accessors that this mixin assumes.
mixin _HashBase on _HashAbstractBase {
// This mixin can be applied to _LinkedHashBase or _LinkedHashImmutableBase.
//
// Note that _LinkedHashImmutableBase overrides certain accessors on
// _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.
// 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
@@ -378,7 +332,7 @@ external List get _uninitializedData;
// literals also create instances of this class.
@pragma("vm:entry-point")
@pragma('dyn-module:language-impl:callable')
base class _Map<K, V> extends _HashVMBase
base class _Map<K, V> extends _LinkedHashBase
with
MapMixin<K, V>,
_HashBase,
@@ -386,13 +340,7 @@ base class _Map<K, V> extends _HashVMBase
_LinkedHashMapMixin<K, V>
implements LinkedHashMap<K, V> {
@pragma('dyn-module:language-impl:callable')
_Map() {
_index = _uninitializedIndex;
_hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
_data = _uninitializedData;
_usedData = 0;
_deletedKeys = 0;
}
_Map();
void addAll(Map<K, V> other) {
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.
@pragma("vm:deeply-immutable")
@pragma("vm:entry-point")
final class _ConstMap<K, V> extends _HashVMImmutableBase
final class _ConstMap<K, V> extends _LinkedHashImmutableBase
with
MapMixin<K, V>,
_HashBase,
@@ -430,7 +378,7 @@ external _ConstMap<K, V> createConstMapFromMapOfDeeplyImmutables<K, V>(
);
mixin _ImmutableLinkedHashMapMixin<K, V>
on _LinkedHashMapMixin<K, V>, _HashAbstractImmutableBase {
on _LinkedHashMapMixin<K, V>, _LinkedHashImmutableBase {
bool containsKey(Object? key) {
if (_indexNullable == null) {
_createIndex();
@@ -781,7 +729,7 @@ mixin _LinkedHashMapMixin<K, V> on _HashBase, _EqualsAndHashCode {
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
MapMixin<K, V>,
_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
MapMixin<K, V>,
_HashBase,
@@ -941,7 +889,7 @@ class _CompactEntriesIterator<K, V> implements Iterator<MapEntry<K, V>> {
// Does not check for concurrent modification since the table
// is known to be immutable.
class _CompactIterableImmutable<E> extends Iterable<E> {
// _HashBase with _HashVMImmutableBase.
// _HashBase with _LinkedHashImmutableBase.
final _HashBase _table;
// dart:core#_ImmutableList (sdk/lib/_internal/vm/lib/array.dart).
final List _data;
@@ -966,7 +914,7 @@ class _CompactIterableImmutable<E> extends Iterable<E> {
}
class _CompactIteratorImmutable<E> implements Iterator<E> {
// _HashBase with _HashVMImmutableBase.
// _HashBase with _LinkedHashImmutableBase.
final _HashBase _table;
// dart:core#_ImmutableList (sdk/lib/_internal/vm/lib/array.dart).
final List _data;
@@ -1172,7 +1120,7 @@ mixin _LinkedHashSetMixin<E> on _HashBase, _EqualsAndHashCode {
// class.
@pragma("vm:entry-point")
@pragma('dyn-module:language-impl:callable')
base class _Set<E> extends _HashVMBase
base class _Set<E> extends _LinkedHashBase
with
SetMixin<E>,
_HashBase,
@@ -1180,13 +1128,7 @@ base class _Set<E> extends _HashVMBase
_LinkedHashSetMixin<E>
implements LinkedHashSet<E> {
@pragma('dyn-module:language-impl:callable')
_Set() {
_index = _uninitializedIndex;
_hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
_data = _uninitializedData;
_usedData = 0;
_deletedKeys = 0;
}
_Set();
void addAll(Iterable<E> other) {
if (other case final _Set otherBase) {
@@ -1205,7 +1147,7 @@ base class _Set<E> extends _HashVMBase
}
@pragma("vm:entry-point")
base class _ConstSet<E> extends _HashVMImmutableBase
base class _ConstSet<E> extends _LinkedHashImmutableBase
with
SetMixin<E>,
_HashBase,
@@ -1227,7 +1169,7 @@ base class _ConstSet<E> extends _HashVMImmutableBase
}
mixin _ImmutableLinkedHashSetMixin<E>
on Set<E>, _LinkedHashSetMixin<E>, _HashAbstractImmutableBase {
on Set<E>, _LinkedHashSetMixin<E>, _LinkedHashImmutableBase {
E? lookup(Object? key) {
if (_indexNullable == null) {
_createIndex();
@@ -1288,7 +1230,7 @@ mixin _ImmutableLinkedHashSetMixin<E>
_CompactIteratorImmutable<E>(this, _data, _usedData, -1, 1);
}
base class CompactLinkedIdentityHashSet<E> extends _HashFieldBase
base class CompactLinkedIdentityHashSet<E> extends _LinkedHashBase
with
SetMixin<E>,
_HashBase,
@@ -1311,7 +1253,7 @@ base class CompactLinkedIdentityHashSet<E> extends _HashFieldBase
Set<R> cast<R>() => Set.castFrom<E, R>(this, newSet: _newEmpty);
}
base class CompactLinkedCustomHashSet<E> extends _HashFieldBase
base class CompactLinkedCustomHashSet<E> extends _LinkedHashBase
with
SetMixin<E>,
_HashBase,