Skip to content

Commit f7ae22a

Browse files
johnniwinthercommit-bot@chromium.org
authored andcommitted
Reland "[cfe] Improve encoding of set/list literals for unified collections"
Change-Id: I4f8098e110c9a5e5d6e102b8c6230e85c1575c6a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175040 Reviewed-by: Dmitry Stefantsov <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent c7f3645 commit f7ae22a

File tree

90 files changed

+8916
-8109
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+8916
-8109
lines changed

pkg/front_end/lib/src/fasta/kernel/transform_collections.dart

Lines changed: 218 additions & 113 deletions
Large diffs are not rendered by default.

pkg/front_end/lib/src/fasta/source/source_loader.dart

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,13 +1447,15 @@ class Iterable<E> {
14471447
Iterator<E> get iterator => null;
14481448
}
14491449
1450-
class List<E> extends Iterable {
1450+
class List<E> extends Iterable<E> {
14511451
factory List() => null;
14521452
factory List.unmodifiable(elements) => null;
14531453
factory List.filled(int length, E fill, {bool growable = false}) => null;
14541454
factory List.generate(int length, E generator(int index),
14551455
{bool growable = true}) => null;
1456-
void add(E) {}
1456+
factory List.of() => null;
1457+
void add(E element) {}
1458+
void addAll(Iterable<E> iterable) {}
14571459
E operator [](int index) => null;
14581460
}
14591461
@@ -1512,7 +1514,9 @@ class Symbol {}
15121514
class Set<E> {
15131515
factory Set() = Set<E>._fake;
15141516
external factory Set._fake();
1515-
void add(E) {}
1517+
external factory Set.of();
1518+
void add(E element) {}
1519+
void addAll(Iterable<E> iterable) {}
15161520
}
15171521
15181522
class Type {}

pkg/front_end/test/fasta/bootstrap_test.dart

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,17 @@ Future main() async {
4646

4747
Future runCompiler(Uri compiler, Uri input, Uri output) async {
4848
Uri dartVm = Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
49-
StdioProcess result = await StdioProcess.run(
50-
dartVm.toFilePath(),
51-
<String>[
52-
compiler.toFilePath(),
53-
"${Flags.compileSdk}=sdk/",
54-
"${Flags.output}=${output.toFilePath()}",
55-
Flags.verify,
56-
input.toFilePath(),
57-
],
58-
suppressOutput: false);
49+
String executable = dartVm.toFilePath();
50+
List<String> arguments = <String>[
51+
compiler.toFilePath(),
52+
"${Flags.compileSdk}=sdk/",
53+
"${Flags.output}=${output.toFilePath()}",
54+
Flags.verify,
55+
input.toFilePath(),
56+
];
57+
print('Running: $executable ${arguments.join(' ')}');
58+
StdioProcess result =
59+
await StdioProcess.run(executable, arguments, suppressOutput: false);
5960
if (result.exitCode != 0) {
6061
throw "Compilation failed:\n${result.output}";
6162
}

pkg/front_end/test/static_types/data/null_aware_spread.dart

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,40 +12,30 @@ nullAwareListSpread(List<String> list) {
1212
/*cfe.List<String>*/
1313
/*cfe:nnbd.List<String!>!*/
1414
[
15-
/*invoke: void*/
1615
/*cfe.String*/
1716
/*cfe:nnbd.String!*/
1817
'foo',
19-
/*invoke: void*/
20-
/*cfe.current: String*/
21-
/*cfe:nnbd.current: String!*/
2218
...?
2319
/*cfe.List<String>*/
2420
/*cfe:nnbd.List<String!>!*/
25-
list
21+
/*invoke: void*/ list
2622
];
2723
}
2824

2925
nullAwareSetSpread(Set<String> set) {
3026
/*cfe.update: Set<String>*/
3127
/*cfe:nnbd.update: Set<String!>!*/
3228
set =
33-
/*cfe.invoke: LinkedHashSet<String>!*/
34-
/*cfe:nnbd.invoke: LinkedHashSet<String!>!*/
35-
/*cfe.<String>*/
36-
/*cfe:nnbd.<String!>*/
29+
/*cfe.Set<String>*/
30+
/*cfe:nnbd.Set<String!>!*/
3731
{
38-
/*invoke: bool!*/
3932
/*cfe.String*/
4033
/*cfe:nnbd.String!*/
4134
'foo',
42-
/*invoke: bool!*/
43-
/*cfe.current: String*/
44-
/*cfe:nnbd.current: String!*/
4535
...?
4636
/*cfe.Set<String>*/
4737
/*cfe:nnbd.Set<String!>!*/
48-
set
38+
/*invoke: void*/ set
4939
};
5040
}
5141

pkg/front_end/testcases/expression/spread_element.expression.yaml.expect

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,5 @@ Errors: {
22
}
33
method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
44
return block {
5-
final dart.core::List<dart.core::String*>* #t1 = <dart.core::String*>[];
6-
{
7-
dart.core::Iterator<dart.core::String*>* :sync-for-iterator = main::listOfStrings.{dart.core::Iterable::iterator};
8-
for (; :sync-for-iterator.{dart.core::Iterator::moveNext}(); ) {
9-
final dart.core::String* #t2 = :sync-for-iterator.{dart.core::Iterator::current};
10-
#t1.{dart.core::List::add}{Invariant}(#t2);
11-
}
12-
}
5+
final dart.core::List<dart.core::String*>* #t1 = dart.core::List::of<dart.core::String*>(main::listOfStrings);
136
} =>#t1;

pkg/front_end/testcases/general/constants/const_collections.dart.strong.expect

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -405,9 +405,7 @@ static const field core::List<core::String*>* nullList = #C3;
405405
static const field core::List<core::String*>* foo = #C8;
406406
static const field core::List<core::String*>* bar = #C10;
407407
static field core::List<core::String*>* barAsVar = block {
408-
final core::List<core::String*>* #t1 = <core::String*>[];
409-
for (final core::String* #t2 in #C8)
410-
#t1.{core::List::add}{Invariant}(#t2);
408+
final core::List<core::String*>* #t1 = core::List::of<core::String*>(#C8);
411409
#t1.{core::List::add}{Invariant}("!");
412410
} =>#t1;
413411
static const field core::List<core::String*>* barWithNullSpread = invalid-expression "Null value during constant evaluation.";
@@ -481,9 +479,9 @@ static method main() → dynamic {
481479
core::print(#C17);
482480
core::print(#C22);
483481
core::print( block {
484-
final core::Set<core::String*>* #t3 = col::LinkedHashSet::•<core::String*>();
485-
#t3.{core::Set::add}{Invariant}("hello");
486-
} =>#t3);
482+
final core::Set<core::String*>* #t2 = col::LinkedHashSet::•<core::String*>();
483+
#t2.{core::Set::add}{Invariant}("hello");
484+
} =>#t2);
487485
core::print(#C26);
488486
}
489487

pkg/front_end/testcases/general/constants/const_collections.dart.strong.transformed.expect

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -405,14 +405,7 @@ static const field core::List<core::String*>* nullList = #C3;
405405
static const field core::List<core::String*>* foo = #C8;
406406
static const field core::List<core::String*>* bar = #C10;
407407
static field core::List<core::String*>* barAsVar = block {
408-
final core::List<core::String*>* #t1 = <core::String*>[];
409-
{
410-
core::Iterator<core::String*>* :sync-for-iterator = (#C8).{core::Iterable::iterator};
411-
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
412-
final core::String* #t2 = :sync-for-iterator.{core::Iterator::current};
413-
#t1.{core::List::add}{Invariant}(#t2);
414-
}
415-
}
408+
final core::List<core::String*>* #t1 = core::List::of<core::String*>(#C8);
416409
#t1.{core::List::add}{Invariant}("!");
417410
} =>#t1;
418411
static const field core::List<core::String*>* barWithNullSpread = invalid-expression "Null value during constant evaluation.";
@@ -486,9 +479,9 @@ static method main() → dynamic {
486479
core::print(#C17);
487480
core::print(#C22);
488481
core::print( block {
489-
final core::Set<core::String*>* #t3 = new col::_CompactLinkedHashSet::•<core::String*>();
490-
#t3.{core::Set::add}{Invariant}("hello");
491-
} =>#t3);
482+
final core::Set<core::String*>* #t2 = new col::_CompactLinkedHashSet::•<core::String*>();
483+
#t2.{core::Set::add}{Invariant}("hello");
484+
} =>#t2);
492485
core::print(#C26);
493486
}
494487

pkg/front_end/testcases/general/control_flow_collection.dart.strong.expect

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import "dart:collection" as col;
55

66
static method main() → dynamic {
77
final core::List<core::int*>* aList = block {
8-
final core::List<core::int*>* #t1 = <core::int*>[];
9-
#t1.{core::List::add}{Invariant}(1);
8+
final core::List<core::int*>* #t1 = <core::int*>[1];
109
if(self::oracle() as{TypeError,ForDynamic} core::bool*)
1110
#t1.{core::List::add}{Invariant}(2);
1211
if(self::oracle() as{TypeError,ForDynamic} core::bool*)

pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import "dart:collection" as col;
55

66
static method main() → dynamic {
77
final core::List<core::int*>* aList = block {
8-
final core::List<core::int*>* #t1 = <core::int*>[];
9-
#t1.{core::List::add}{Invariant}(1);
8+
final core::List<core::int*>* #t1 = <core::int*>[1];
109
if(self::oracle() as{TypeError,ForDynamic} core::bool*)
1110
#t1.{core::List::add}{Invariant}(2);
1211
if(self::oracle() as{TypeError,ForDynamic} core::bool*)
@@ -107,4 +106,4 @@ Evaluated: MethodInvocation @ org-dartlang-testcase:///control_flow_collection.d
107106
Evaluated: MethodInvocation @ org-dartlang-testcase:///control_flow_collection.dart:18:26 -> IntConstant(-1)
108107
Evaluated: MethodInvocation @ org-dartlang-testcase:///control_flow_collection.dart:27:29 -> IntConstant(-1)
109108
Evaluated: MethodInvocation @ org-dartlang-testcase:///control_flow_collection.dart:27:33 -> IntConstant(-1)
110-
Extra constant evaluation: evaluated: 160, effectively constant: 4
109+
Extra constant evaluation: evaluated: 158, effectively constant: 4

0 commit comments

Comments
 (0)