Skip to content

Commit 31e8fe7

Browse files
natebiggsCommit Queue
authored andcommitted
[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 <[email protected]> Reviewed-by: Alexander Markov <[email protected]>
1 parent ac1d512 commit 31e8fe7

File tree

7 files changed

+26
-116
lines changed

7 files changed

+26
-116
lines changed

pkg/dynamic_modules/test/data/core_api/dynamic_interface.yaml

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -33,57 +33,3 @@ callable:
3333
member: 'get:current'
3434
- library: 'dart:core'
3535
class: 'Iterator'
36-
37-
# Needed to support creating list literals
38-
- library: 'dart:core'
39-
class: '_GrowableList'
40-
- library: 'dart:core'
41-
class: '_GrowableList'
42-
member: '_literal1'
43-
- library: 'dart:core'
44-
class: '_GrowableList'
45-
member: '_literal2'
46-
- library: 'dart:core'
47-
class: '_GrowableList'
48-
member: '_literal3'
49-
- library: 'dart:core'
50-
class: '_GrowableList'
51-
member: '_literal4'
52-
- library: 'dart:core'
53-
class: '_GrowableList'
54-
member: '_literal5'
55-
- library: 'dart:core'
56-
class: '_GrowableList'
57-
member: '_literal6'
58-
- library: 'dart:core'
59-
class: '_GrowableList'
60-
member: '_literal7'
61-
- library: 'dart:core'
62-
class: '_GrowableList'
63-
member: '_literal8'
64-
- library: 'dart:core'
65-
class: '_GrowableList'
66-
member: ''
67-
- library: 'dart:core'
68-
class: '_GrowableList'
69-
member: 'empty'
70-
- library: 'dart:core'
71-
class: '_GrowableList'
72-
member: 'filled'
73-
- library: 'dart:core'
74-
class: '_GrowableList'
75-
member: 'generate'
76-
- library: 'dart:core'
77-
class: '_List'
78-
- library: 'dart:core'
79-
class: '_List'
80-
member: ''
81-
- library: 'dart:core'
82-
class: '_List'
83-
member: 'empty'
84-
- library: 'dart:core'
85-
class: '_List'
86-
member: 'filled'
87-
- library: 'dart:core'
88-
class: '_List'
89-
member: 'generate'

pkg/vm/testcases/transformations/type_flow/transformer/lists.dart.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class A extends core::Object {
9191

9292
[@vm.closure-id=7]
9393
synthetic constructor •() → self::A
94-
: 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::•()
94+
: 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::•()
9595
;
9696
}
9797

pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class B extends self::A {
7676
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]
7777
[@vm.unboxing-info.metadata=(i,i,i,i)->b]
7878
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
79-
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});
79+
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});
8080
}
8181
abstract class C extends core::Object {
8282
synthetic constructor •() → self::C
@@ -109,7 +109,7 @@ class D extends self::C implements self::A {
109109
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]
110110
[@vm.unboxing-info.metadata=(i,i,i,i)->b]
111111
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
112-
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});
112+
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});
113113
}
114114
class E extends core::Object implements self::A {
115115
synthetic constructor •() → self::E

runtime/vm/compiler/recognized_methods_list.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ namespace dart {
3333
V(CoreLibrary, Object, Object., ObjectConstructor, 0xab6d6cf2) \
3434
V(CoreLibrary, _Array, [], ObjectArrayGetIndexed, 0x78d7e092) \
3535
V(CoreLibrary, _GrowableList, [], GrowableArrayGetIndexed, 0x78d7e092) \
36-
V(CoreLibrary, _List, ., ObjectArrayAllocate, 0x4c802222) \
36+
V(CoreLibrary, _List, ., ObjectArrayAllocate, 0x4c8025e3) \
3737
V(CoreLibrary, _List, []=, ObjectArraySetIndexed, 0x3a23c6fa) \
3838
V(CoreLibrary, _GrowableList, ._withData, GrowableArrayAllocateWithData, \
3939
0x192ac0e1) \
@@ -711,16 +711,16 @@ namespace dart {
711711
// (factory-name-symbol, class-name-string, constructor-name-string,
712712
// result-cid, fingerprint).
713713
#define RECOGNIZED_LIST_FACTORY_LIST(V) \
714-
V(_ListFactory, CoreLibrary, _List, ., kArrayCid, 0x4c802222) \
715-
V(_ListFilledFactory, CoreLibrary, _List, .filled, kArrayCid, 0x9266de51) \
714+
V(_ListFactory, CoreLibrary, _List, ., kArrayCid, 0x4c8025e3) \
715+
V(_ListFilledFactory, CoreLibrary, _List, .filled, kArrayCid, 0x9266e212) \
716716
V(_ListGenerateFactory, CoreLibrary, _List, .generate, kArrayCid, \
717-
0x42760cee) \
717+
0x427610af) \
718718
V(_GrowableListFactory, CoreLibrary, _GrowableList, ., \
719-
kGrowableObjectArrayCid, 0x3c81d48d) \
719+
kGrowableObjectArrayCid, 0x3c81d84e) \
720720
V(_GrowableListFilledFactory, CoreLibrary, _GrowableList, .filled, \
721-
kGrowableObjectArrayCid, 0xead2ffd1) \
721+
kGrowableObjectArrayCid, 0xead30392) \
722722
V(_GrowableListGenerateFactory, CoreLibrary, _GrowableList, .generate, \
723-
kGrowableObjectArrayCid, 0x7bd60e6e) \
723+
kGrowableObjectArrayCid, 0x7bd6122f) \
724724
V(_GrowableListWithData, CoreLibrary, _GrowableList, ._withData, \
725725
kGrowableObjectArrayCid, 0x192ac0e1) \
726726
V(_Int8ArrayFactory, TypedDataLibrary, Int8List, ., kTypedDataInt8ArrayCid, \

sdk/lib/_internal/vm/lib/array.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,18 @@ class _List<E> extends _Array<E> {
8787
])
8888
@pragma("vm:prefer-inline")
8989
@pragma("vm:external-name", "List_allocate")
90+
@pragma('dyn-module:callable')
9091
external factory _List(length);
9192

9293
// Specialization of List.empty constructor for growable == false.
9394
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
9495
@pragma("vm:prefer-inline")
96+
@pragma('dyn-module:callable')
9597
factory _List.empty() => _List<E>(0);
9698

9799
// Specialization of List.filled constructor for growable == false.
98100
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
101+
@pragma('dyn-module:callable')
99102
factory _List.filled(int length, E fill) {
100103
final result = _List<E>(length);
101104
if (fill != null) {
@@ -109,6 +112,7 @@ class _List<E> extends _Array<E> {
109112
// Specialization of List.generate constructor for growable == false.
110113
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
111114
@pragma("vm:prefer-inline")
115+
@pragma('dyn-module:callable')
112116
factory _List.generate(int length, E generator(int index)) {
113117
final result = _List<E>(length);
114118
for (int i = 0; i < result.length; ++i) {

sdk/lib/_internal/vm/lib/growable_array.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ class _GrowableList<T> extends ListBase<T> {
9393
return result;
9494
}
9595

96+
@pragma('dyn-module:callable')
9697
factory _GrowableList(int length) {
9798
var data = _allocateData(length);
9899
var result = new _GrowableList<T>._withData(data);
@@ -110,13 +111,15 @@ class _GrowableList<T> extends ListBase<T> {
110111
// Specialization of List.empty constructor for growable == true.
111112
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
112113
@pragma("vm:prefer-inline")
114+
@pragma('dyn-module:callable')
113115
factory _GrowableList.empty() {
114116
// Specialization of `return _GrowableList(0);`.
115117
return _GrowableList<T>._withData(_emptyList);
116118
}
117119

118120
// Specialization of List.filled constructor for growable == true.
119121
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
122+
@pragma('dyn-module:callable')
120123
factory _GrowableList.filled(int length, T fill) {
121124
final result = _GrowableList<T>(length);
122125
if (fill != null) {
@@ -130,6 +133,7 @@ class _GrowableList<T> extends ListBase<T> {
130133
// Specialization of List.generate constructor for growable == true.
131134
// Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
132135
@pragma("vm:prefer-inline")
136+
@pragma('dyn-module:callable')
133137
factory _GrowableList.generate(int length, T generator(int index)) {
134138
final result = _GrowableList<T>(length);
135139
for (int i = 0; i < result.length; ++i) {
@@ -559,6 +563,7 @@ class _GrowableList<T> extends ListBase<T> {
559563

560564
// Specialized list literal constructors.
561565
// Used by pkg/vm/lib/transformations/list_literals_lowering.dart.
566+
@pragma('dyn-module:callable')
562567
factory _GrowableList._literal1(T e0) {
563568
_List elements = _List(1);
564569
elements[0] = e0;
@@ -567,6 +572,7 @@ class _GrowableList<T> extends ListBase<T> {
567572
return result;
568573
}
569574

575+
@pragma('dyn-module:callable')
570576
factory _GrowableList._literal2(T e0, T e1) {
571577
_List elements = _List(2);
572578
elements[0] = e0;
@@ -576,6 +582,7 @@ class _GrowableList<T> extends ListBase<T> {
576582
return result;
577583
}
578584

585+
@pragma('dyn-module:callable')
579586
factory _GrowableList._literal3(T e0, T e1, T e2) {
580587
_List elements = _List(3);
581588
elements[0] = e0;
@@ -586,6 +593,7 @@ class _GrowableList<T> extends ListBase<T> {
586593
return result;
587594
}
588595

596+
@pragma('dyn-module:callable')
589597
factory _GrowableList._literal4(T e0, T e1, T e2, T e3) {
590598
_List elements = _List(4);
591599
elements[0] = e0;
@@ -597,6 +605,7 @@ class _GrowableList<T> extends ListBase<T> {
597605
return result;
598606
}
599607

608+
@pragma('dyn-module:callable')
600609
factory _GrowableList._literal5(T e0, T e1, T e2, T e3, T e4) {
601610
_List elements = _List(5);
602611
elements[0] = e0;
@@ -609,6 +618,7 @@ class _GrowableList<T> extends ListBase<T> {
609618
return result;
610619
}
611620

621+
@pragma('dyn-module:callable')
612622
factory _GrowableList._literal6(T e0, T e1, T e2, T e3, T e4, T e5) {
613623
_List elements = _List(6);
614624
elements[0] = e0;
@@ -622,6 +632,7 @@ class _GrowableList<T> extends ListBase<T> {
622632
return result;
623633
}
624634

635+
@pragma('dyn-module:callable')
625636
factory _GrowableList._literal7(T e0, T e1, T e2, T e3, T e4, T e5, T e6) {
626637
_List elements = _List(7);
627638
elements[0] = e0;
@@ -636,6 +647,7 @@ class _GrowableList<T> extends ListBase<T> {
636647
return result;
637648
}
638649

650+
@pragma('dyn-module:callable')
639651
factory _GrowableList._literal8(
640652
T e0,
641653
T e1,

0 commit comments

Comments
 (0)