[vm] Mark _List and _GrowableList factories as dynamic module callable.

Currently this test is failing on other backends because they do not have matching members in the SDK.

TEST=Existing dynamic module tests.

Change-Id: I4b66f3fa046c973ae14868e024395cbcab3b7709
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/416760
Commit-Queue: Nate Biggs <natebiggs@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
Nate Biggs
2025-03-21 09:38:24 -07:00
committed by Commit Queue
parent ac1d512fde
commit 31e8fe78bf
7 changed files with 26 additions and 116 deletions
@@ -33,57 +33,3 @@ callable:
member: 'get:current'
- library: 'dart:core'
class: 'Iterator'
# Needed to support creating list literals
- library: 'dart:core'
class: '_GrowableList'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal1'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal2'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal3'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal4'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal5'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal6'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal7'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal8'
- library: 'dart:core'
class: '_GrowableList'
member: ''
- library: 'dart:core'
class: '_GrowableList'
member: 'empty'
- library: 'dart:core'
class: '_GrowableList'
member: 'filled'
- library: 'dart:core'
class: '_GrowableList'
member: 'generate'
- library: 'dart:core'
class: '_List'
- library: 'dart:core'
class: '_List'
member: ''
- library: 'dart:core'
class: '_List'
member: 'empty'
- library: 'dart:core'
class: '_List'
member: 'filled'
- library: 'dart:core'
class: '_List'
member: 'generate'
@@ -91,7 +91,7 @@ class A extends core::Object {
[@vm.closure-id=7]
synthetic constructor •() → self::A
: self::A::literal1 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::•<core::int>(0), self::A::literal2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::_literal3<core::int>(1, 2, 3), self::A::filledFactory1 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::filled<core::int>(2, 0), self::A::filledFactory2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::filled<core::int>(2, 0), self::A::filledFactory3 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::filled<core::int>(2, 0), self::A::filledFactory4 = let final core::bool #t1 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::filled<core::int>(2, 0, #t1), self::A::filledFactory5 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(2), self::A::filledFactory6 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int?>] core::_GrowableList::•<core::int?>(2), self::A::filledFactory7 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(2), self::A::filledFactory8 = let final core::bool #t2 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::filled<core::int?>(2, null, #t2), self::A::filledFactory9 = let final core::int #t3 = 2 in let final core::bool #t4 = true in [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int?>] core::_GrowableList::•<core::int?>(#t3), self::A::filledFactory10 = let final core::int #t5 = 2 in let final core::bool #t6 = false in [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(#t5), self::A::generateFactory1 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(2, [@vm.closure-id=1](core::int i) → core::int => i), self::A::generateFactory2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(2, [@vm.closure-id=2](core::int i) → core::int => i), self::A::generateFactory3 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::generate<core::int>([@vm.closure-id=3](core::int i) → core::int => i), self::A::generateFactory4 = let final (core::int) → core::int #t7 = [@vm.closure-id=4](core::int i) → core::int => i in let final core::bool #t8 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::generate<core::int>(#t7, #t8), self::A::generateFactory5 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::List<dart.core::int>>] core::_GrowableList::generate<core::List<core::int>>(2, [@vm.closure-id=5](wildcard core::int _#wc0#formal) → core::List<core::int> => [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::•<core::int>(0)), self::A::generateFactory6 = let final core::int #t9 = 2 in let final core::bool #t10 = true in [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(#t9, [@vm.closure-id=6](core::int i) → core::int => i), self::A::generateFactory7 = let final core::int #t11 = 2 in let final core::bool #t12 = false in [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::generate<core::int>([@vm.closure-id=7](core::int i) → core::int => i), super core::Object::•()
: self::A::literal1 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::•<core::int>(0), self::A::literal2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::_literal3<core::int>(1, 2, 3), self::A::filledFactory1 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::filled<core::int>(2, 0), self::A::filledFactory2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::filled<core::int>(2, 0), self::A::filledFactory3 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::filled<core::int>(2, 0), self::A::filledFactory4 = let final core::bool #t1 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::filled<core::int>(2, 0, #t1), self::A::filledFactory5 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(2), self::A::filledFactory6 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int?>] core::_GrowableList::•<core::int?>(2), self::A::filledFactory7 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(2), self::A::filledFactory8 = let final core::bool #t2 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::filled<core::int?>(2, null, #t2), self::A::filledFactory9 = let final core::int #t3 = 2 in let final core::bool #t4 = true in [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int?>] core::_GrowableList::•<core::int?>(#t3), self::A::filledFactory10 = let final core::int #t5 = 2 in let final core::bool #t6 = false in [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(#t5), self::A::generateFactory1 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(2, [@vm.closure-id=1](core::int i) → core::int => i), self::A::generateFactory2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(2, [@vm.closure-id=2](core::int i) → core::int => i), self::A::generateFactory3 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::generate<core::int>(2, [@vm.closure-id=3](core::int i) → core::int => i), self::A::generateFactory4 = let final (core::int) → core::int #t7 = [@vm.closure-id=4](core::int i) → core::int => i in let final core::bool #t8 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::generate<core::int>(#t7, #t8), self::A::generateFactory5 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::List<dart.core::int>>] core::_GrowableList::generate<core::List<core::int>>(2, [@vm.closure-id=5](wildcard core::int _#wc0#formal) → core::List<core::int> => [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::•<core::int>(0)), self::A::generateFactory6 = let final core::int #t9 = 2 in let final core::bool #t10 = true in [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(#t9, [@vm.closure-id=6](core::int i) → core::int => i), self::A::generateFactory7 = let final core::int #t11 = 2 in let final core::bool #t12 = false in [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::generate<core::int>(#t11, [@vm.closure-id=7](core::int i) → core::int => i), super core::Object::•()
;
}
@@ -76,7 +76,7 @@ class B extends self::A {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]
[@vm.unboxing-info.metadata=(i,i,i,i)->b]
no-such-method-forwarder method bazz([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] dynamic a4) → dynamic
return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol, dynamic>] core::Map::unmodifiable<core::Symbol, dynamic>(#C4))){(core::Invocation) → dynamic});
return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>(a1, a2, a3, a4, #C7)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol, dynamic>] core::Map::unmodifiable<core::Symbol, dynamic>(#C4))){(core::Invocation) → dynamic});
}
abstract class C extends core::Object {
synthetic constructor •() → self::C
@@ -109,7 +109,7 @@ class D extends self::C implements self::A {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]
[@vm.unboxing-info.metadata=(i,i,i,i)->b]
no-such-method-forwarder method bazz([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] dynamic a4) → dynamic
return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol, dynamic>] core::Map::unmodifiable<core::Symbol, dynamic>(#C4))){(core::Invocation) → dynamic});
return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>(a1, a2, a3, a4, #C7)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol, dynamic>] core::Map::unmodifiable<core::Symbol, dynamic>(#C4))){(core::Invocation) → dynamic});
}
class E extends core::Object implements self::A {
synthetic constructor •() → self::E
@@ -33,7 +33,7 @@ namespace dart {
V(CoreLibrary, Object, Object., ObjectConstructor, 0xab6d6cf2) \
V(CoreLibrary, _Array, [], ObjectArrayGetIndexed, 0x78d7e092) \
V(CoreLibrary, _GrowableList, [], GrowableArrayGetIndexed, 0x78d7e092) \
V(CoreLibrary, _List, ., ObjectArrayAllocate, 0x4c802222) \
V(CoreLibrary, _List, ., ObjectArrayAllocate, 0x4c8025e3) \
V(CoreLibrary, _List, []=, ObjectArraySetIndexed, 0x3a23c6fa) \
V(CoreLibrary, _GrowableList, ._withData, GrowableArrayAllocateWithData, \
0x192ac0e1) \
@@ -711,16 +711,16 @@ namespace dart {
// (factory-name-symbol, class-name-string, constructor-name-string,
// result-cid, fingerprint).
#define RECOGNIZED_LIST_FACTORY_LIST(V) \
V(_ListFactory, CoreLibrary, _List, ., kArrayCid, 0x4c802222) \
V(_ListFilledFactory, CoreLibrary, _List, .filled, kArrayCid, 0x9266de51) \
V(_ListFactory, CoreLibrary, _List, ., kArrayCid, 0x4c8025e3) \
V(_ListFilledFactory, CoreLibrary, _List, .filled, kArrayCid, 0x9266e212) \
V(_ListGenerateFactory, CoreLibrary, _List, .generate, kArrayCid, \
0x42760cee) \
0x427610af) \
V(_GrowableListFactory, CoreLibrary, _GrowableList, ., \
kGrowableObjectArrayCid, 0x3c81d48d) \
kGrowableObjectArrayCid, 0x3c81d84e) \
V(_GrowableListFilledFactory, CoreLibrary, _GrowableList, .filled, \
kGrowableObjectArrayCid, 0xead2ffd1) \
kGrowableObjectArrayCid, 0xead30392) \
V(_GrowableListGenerateFactory, CoreLibrary, _GrowableList, .generate, \
kGrowableObjectArrayCid, 0x7bd60e6e) \
kGrowableObjectArrayCid, 0x7bd6122f) \
V(_GrowableListWithData, CoreLibrary, _GrowableList, ._withData, \
kGrowableObjectArrayCid, 0x192ac0e1) \
V(_Int8ArrayFactory, TypedDataLibrary, Int8List, ., kTypedDataInt8ArrayCid, \
+4
View File
@@ -87,15 +87,18 @@ class _List<E> extends _Array<E> {
])
@pragma("vm:prefer-inline")
@pragma("vm:external-name", "List_allocate")
@pragma('dyn-module:callable')
external factory _List(length);
// Specialization of List.empty constructor for growable == false.
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
@pragma("vm:prefer-inline")
@pragma('dyn-module:callable')
factory _List.empty() => _List<E>(0);
// Specialization of List.filled constructor for growable == false.
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
@pragma('dyn-module:callable')
factory _List.filled(int length, E fill) {
final result = _List<E>(length);
if (fill != null) {
@@ -109,6 +112,7 @@ class _List<E> extends _Array<E> {
// Specialization of List.generate constructor for growable == false.
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
@pragma("vm:prefer-inline")
@pragma('dyn-module:callable')
factory _List.generate(int length, E generator(int index)) {
final result = _List<E>(length);
for (int i = 0; i < result.length; ++i) {
@@ -93,6 +93,7 @@ class _GrowableList<T> extends ListBase<T> {
return result;
}
@pragma('dyn-module:callable')
factory _GrowableList(int length) {
var data = _allocateData(length);
var result = new _GrowableList<T>._withData(data);
@@ -110,6 +111,7 @@ class _GrowableList<T> extends ListBase<T> {
// Specialization of List.empty constructor for growable == true.
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
@pragma("vm:prefer-inline")
@pragma('dyn-module:callable')
factory _GrowableList.empty() {
// Specialization of `return _GrowableList(0);`.
return _GrowableList<T>._withData(_emptyList);
@@ -117,6 +119,7 @@ class _GrowableList<T> extends ListBase<T> {
// Specialization of List.filled constructor for growable == true.
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
@pragma('dyn-module:callable')
factory _GrowableList.filled(int length, T fill) {
final result = _GrowableList<T>(length);
if (fill != null) {
@@ -130,6 +133,7 @@ class _GrowableList<T> extends ListBase<T> {
// Specialization of List.generate constructor for growable == true.
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
@pragma("vm:prefer-inline")
@pragma('dyn-module:callable')
factory _GrowableList.generate(int length, T generator(int index)) {
final result = _GrowableList<T>(length);
for (int i = 0; i < result.length; ++i) {
@@ -559,6 +563,7 @@ class _GrowableList<T> extends ListBase<T> {
// Specialized list literal constructors.
// Used by pkg/vm/lib/transformations/list_literals_lowering.dart.
@pragma('dyn-module:callable')
factory _GrowableList._literal1(T e0) {
_List elements = _List(1);
elements[0] = e0;
@@ -567,6 +572,7 @@ class _GrowableList<T> extends ListBase<T> {
return result;
}
@pragma('dyn-module:callable')
factory _GrowableList._literal2(T e0, T e1) {
_List elements = _List(2);
elements[0] = e0;
@@ -576,6 +582,7 @@ class _GrowableList<T> extends ListBase<T> {
return result;
}
@pragma('dyn-module:callable')
factory _GrowableList._literal3(T e0, T e1, T e2) {
_List elements = _List(3);
elements[0] = e0;
@@ -586,6 +593,7 @@ class _GrowableList<T> extends ListBase<T> {
return result;
}
@pragma('dyn-module:callable')
factory _GrowableList._literal4(T e0, T e1, T e2, T e3) {
_List elements = _List(4);
elements[0] = e0;
@@ -597,6 +605,7 @@ class _GrowableList<T> extends ListBase<T> {
return result;
}
@pragma('dyn-module:callable')
factory _GrowableList._literal5(T e0, T e1, T e2, T e3, T e4) {
_List elements = _List(5);
elements[0] = e0;
@@ -609,6 +618,7 @@ class _GrowableList<T> extends ListBase<T> {
return result;
}
@pragma('dyn-module:callable')
factory _GrowableList._literal6(T e0, T e1, T e2, T e3, T e4, T e5) {
_List elements = _List(6);
elements[0] = e0;
@@ -622,6 +632,7 @@ class _GrowableList<T> extends ListBase<T> {
return result;
}
@pragma('dyn-module:callable')
factory _GrowableList._literal7(T e0, T e1, T e2, T e3, T e4, T e5, T e6) {
_List elements = _List(7);
elements[0] = e0;
@@ -636,6 +647,7 @@ class _GrowableList<T> extends ListBase<T> {
return result;
}
@pragma('dyn-module:callable')
factory _GrowableList._literal8(
T e0,
T e1,
@@ -24,58 +24,6 @@ callable:
- library: 'dart:core'
class: '_InvocationMirror'
member: '_withType'
- library: 'dart:core'
class: '_GrowableList'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal1'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal2'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal3'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal4'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal5'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal6'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal7'
- library: 'dart:core'
class: '_GrowableList'
member: '_literal8'
- library: 'dart:core'
class: '_GrowableList'
member: ''
- library: 'dart:core'
class: '_GrowableList'
member: 'empty'
- library: 'dart:core'
class: '_GrowableList'
member: 'filled'
- library: 'dart:core'
class: '_GrowableList'
member: 'generate'
- library: 'dart:core'
class: '_List'
- library: 'dart:core'
class: '_List'
member: ''
- library: 'dart:core'
class: '_List'
member: 'empty'
- library: 'dart:core'
class: '_List'
member: 'filled'
- library: 'dart:core'
class: '_List'
member: 'generate'
- library: 'dart:_compact_hash'
class: '_Map'
- library: 'dart:_compact_hash'