[cfe] Fix pre-inference set/map disambiguation

Closes #36377

Bug: http://dartbug.com/36377
Change-Id: I0a486f467bdc999e6188fb3206f4eed1d8ffb67a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98341
Reviewed-by: Aske Simon Christensen <askesc@google.com>
This commit is contained in:
Dmitry Stefantsov
2019-03-29 17:18:55 +00:00
parent 6b19aa821b
commit f21d521d0e
4 changed files with 143 additions and 123 deletions
@@ -2456,7 +2456,7 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
if (entry is MapEntry) {
// TODO(danrubel): report the error on the colon
addProblem(fasta.templateExpectedButGot.withArguments(','),
entry.value.fileOffset - 1, 1);
entry.fileOffset, 1);
} else {
// TODO(danrubel): Revise once control flow and spread
// collection entries are supported.
@@ -2518,6 +2518,13 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
final typeArgCount = typeArguments?.length;
bool isSet = typeArgCount == 1 ? true : typeArgCount != null ? false : null;
for (int i = 0; i < setOrMapEntries.length; ++i) {
if (setOrMapEntries[i] is! MapEntry &&
!isConvertibleToMapEntry(setOrMapEntries[i])) {
hasSetEntry = true;
}
}
// TODO(danrubel): If the type arguments are not known (null) then
// defer set/map determination until after type resolution as per the
// unified collection spec: https://github.com/dart-lang/language/pull/200
@@ -2527,7 +2534,15 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
if (isSet) {
buildLiteralSet(typeArguments, constKeyword, leftBrace, setOrMapEntries);
} else {
buildLiteralMap(typeArguments, constKeyword, leftBrace, setOrMapEntries);
List<MapEntry> mapEntries = new List<MapEntry>(setOrMapEntries.length);
for (int i = 0; i < setOrMapEntries.length; ++i) {
if (setOrMapEntries[i] is MapEntry) {
mapEntries[i] = setOrMapEntries[i];
} else {
mapEntries[i] = convertToMapEntry(setOrMapEntries[i]);
}
}
buildLiteralMap(typeArguments, constKeyword, leftBrace, mapEntries);
}
}
@@ -2551,10 +2566,26 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
push(forest.literalNull(token));
}
bool isConvertibleToMapEntry(Expression element) {
if (element is SpreadElement) return true;
if (element is IfElement) {
return isConvertibleToMapEntry(element.then) &&
(element.otherwise == null ||
isConvertibleToMapEntry(element.otherwise));
}
if (element is ForElement) {
return isConvertibleToMapEntry(element.body);
}
if (element is ForInElement) {
return isConvertibleToMapEntry(element.body);
}
return false;
}
MapEntry convertToMapEntry(Expression element) {
if (element is SpreadElement) {
return new SpreadMapEntry(element.expression, element.isNullAware)
..fileOffset = element.fileOffset;
..fileOffset = element.expression.fileOffset;
}
if (element is IfElement) {
return new IfMapEntry(
@@ -2586,7 +2617,7 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
}
void buildLiteralMap(List<UnresolvedType<KernelTypeBuilder>> typeArguments,
Token constKeyword, Token leftBrace, List<dynamic> setOrMapEntries) {
Token constKeyword, Token leftBrace, List<MapEntry> entries) {
DartType keyType;
DartType valueType;
if (typeArguments != null) {
@@ -2607,17 +2638,6 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
valueType = implicitTypeArgument;
}
List<MapEntry> entries = <MapEntry>[];
if (setOrMapEntries != null) {
for (var entry in setOrMapEntries) {
if (entry is MapEntry) {
entries.add(entry);
} else {
entries.add(convertToMapEntry(entry));
}
}
}
Expression node = forest.literalMap(
constKeyword,
constKeyword != null || constantContext == ConstantContext.inferred,
@@ -1,288 +1,288 @@
pkg/front_end/testcases/control_flow_collection_inference.dart:106:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:106:49: Context: Write to i@6094
var list10 = [for (int i = 0; oracle("foo"); i++) 42];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:107:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:107:48: Context: Write to i@6094
var set10 = {for (int i = 0; oracle("foo"); i++) 42, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:108:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:108:48: Context: Write to i@6094
var map10 = {for (int i = 0; oracle("foo"); i++) "bar": 42, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:109:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:109:49: Context: Write to i@6094
var list11 = [for (int i = 0; oracle("foo"); i++) dynVar];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:110:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:110:48: Context: Write to i@6094
var set11 = {for (int i = 0; oracle("foo"); i++) dynVar, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:111:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:111:48: Context: Write to i@6094
var map11 = {for (int i = 0; oracle("foo"); i++) "bar": dynVar, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:112:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:112:49: Context: Write to i@6094
var list12 = [for (int i = 0; oracle("foo"); i++) [42]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:113:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:113:48: Context: Write to i@6094
var set12 = {for (int i = 0; oracle("foo"); i++) [42], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:114:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:114:48: Context: Write to i@6094
var map12 = {for (int i = 0; oracle("foo"); i++) "bar": [42], "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:115:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:115:49: Context: Write to i@6094
var list20 = [for (int i = 0; oracle("foo"); i++) ...[42]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:116:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:116:48: Context: Write to i@6094
var set20 = {for (int i = 0; oracle("foo"); i++) ...[42], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:117:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:117:48: Context: Write to i@6094
var map20 = {for (int i = 0; oracle("foo"); i++) ...{"bar": 42}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:118:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:118:49: Context: Write to i@6094
var list21 = [for (int i = 0; oracle("foo"); i++) ...[dynVar]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:119:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:119:48: Context: Write to i@6094
var set21 = {for (int i = 0; oracle("foo"); i++) ...[dynVar], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:120:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:120:48: Context: Write to i@6094
var map21 = {for (int i = 0; oracle("foo"); i++) ...{"bar": dynVar}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:121:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:121:49: Context: Write to i@6094
var list22 = [for (int i = 0; oracle("foo"); i++) ...[[42]]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:122:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:122:48: Context: Write to i@6094
var set22 = {for (int i = 0; oracle("foo"); i++) ...[[42]], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:123:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:123:48: Context: Write to i@6094
var map22 = {for (int i = 0; oracle("foo"); i++) ...{"bar": [42]}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:124:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:124:49: Context: Write to i@6094
var list30 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[42]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:125:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:125:48: Context: Write to i@6094
var set30 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[42], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:126:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:126:48: Context: Write to i@6094
var map30 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": 42}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:127:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:127:49: Context: Write to i@6094
var list31 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[dynVar]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:128:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:128:48: Context: Write to i@6094
var set31 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[dynVar], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:129:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:129:48: Context: Write to i@6094
var map31 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": dynVar}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:130:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:130:49: Context: Write to i@6094
var list33 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[42]]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:131:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:131:48: Context: Write to i@6094
var set33 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[42]], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:132:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:132:48: Context: Write to i@6094
var map33 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": [42]}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:133:61: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:133:61: Context: Write to i@6094
List<List<int>> list40 = [for (int i = 0; oracle("foo"); i++) ...[[]]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:134:59: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:134:59: Context: Write to i@6094
Set<List<int>> set40 = {for (int i = 0; oracle("foo"); i++) ...[[]], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:135:67: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:135:67: Context: Write to i@6094
Map<String, List<int>> map40 = {for (int i = 0; oracle("foo"); i++) ...{"bar": []}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:136:61: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:136:61: Context: Write to i@6094
List<List<int>> list41 = [for (int i = 0; oracle("foo"); i++) ...{[]}];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:137:59: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:137:59: Context: Write to i@6094
Set<List<int>> set41 = {for (int i = 0; oracle("foo"); i++) ...{[]}, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:138:61: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:138:61: Context: Write to i@6094
List<List<int>> list42 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:139:59: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:139:59: Context: Write to i@6094
Set<List<int>> set42 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:140:67: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:140:67: Context: Write to i@6094
Map<String, List<int>> map42 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": []}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:141:55: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:141:55: Context: Write to i@6094
List<int> list50 = [for (int i = 0; oracle("foo"); i++) ...[]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:142:53: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:142:53: Context: Write to i@6094
Set<int> set50 = {for (int i = 0; oracle("foo"); i++) ...[], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:143:61: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:143:61: Context: Write to i@6094
Map<String, int> map50 = {for (int i = 0; oracle("foo"); i++) ...{}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:144:55: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:144:55: Context: Write to i@6094
List<int> list51 = [for (int i = 0; oracle("foo"); i++) ...{}];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:145:53: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:145:53: Context: Write to i@6094
Set<int> set51 = {for (int i = 0; oracle("foo"); i++) ...{}, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:146:55: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:146:55: Context: Write to i@6094
List<int> list52 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:147:53: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:147:53: Context: Write to i@6094
Set<int> set52 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:148:61: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:148:61: Context: Write to i@6094
List<List<int>> list60 = [for (int i = 0; oracle("foo"); i++) ...[[]]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:149:59: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:149:59: Context: Write to i@6094
Set<List<int>> set60 = {for (int i = 0; oracle("foo"); i++) ...[[]], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:150:67: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:150:67: Context: Write to i@6094
Map<String, List<int>> map60 = {for (int i = 0; oracle("foo"); i++) ...{"bar": []}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:151:61: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:151:61: Context: Write to i@6094
List<List<int>> list61 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:152:59: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:152:59: Context: Write to i@6094
Set<List<int>> set61 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:153:67: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:153:67: Context: Write to i@6094
Map<String, List<int>> map61 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": []}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:154:61: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:154:61: Context: Write to i@6094
List<List<int>> list70 = [for (int i = 0; oracle("foo"); i++) []];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:155:59: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:155:59: Context: Write to i@6094
Set<List<int>> set70 = {for (int i = 0; oracle("foo"); i++) [], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:156:67: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:156:67: Context: Write to i@6094
Map<String, List<int>> map70 = {for (int i = 0; oracle("foo"); i++) "bar": [], "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:157:61: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:157:61: Context: Write to i@6094
List<List<int>> list71 = [for (int i = 0; oracle("foo"); i++) if (oracle()) []];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:158:59: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:158:59: Context: Write to i@6094
Set<List<int>> set71 = {for (int i = 0; oracle("foo"); i++) if (oracle()) [], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:159:67: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:159:67: Context: Write to i@6094
Map<String, List<int>> map71 = {for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": [], "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:160:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:160:49: Context: Write to i@6094
var list80 = [for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:161:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:161:48: Context: Write to i@6094
var set80 = {for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:162:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:162:48: Context: Write to i@6094
var map80 = {for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:163:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:163:49: Context: Write to i@6094
var list81 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...listDouble];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:164:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:164:48: Context: Write to i@6094
var set81 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...listDouble, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:165:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:165:48: Context: Write to i@6094
var map81 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...mapStringInt else ...mapStringDouble, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:166:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:166:49: Context: Write to i@6094
var list82 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...dynVar];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:167:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:167:48: Context: Write to i@6094
var set82 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...dynVar, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:168:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:168:48: Context: Write to i@6094
var map82 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...mapStringInt else ...dynVar, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:169:49: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:169:49: Context: Write to i@6094
var list83 = [for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...listDouble];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:170:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:170:48: Context: Write to i@6094
var set83 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else 3.14, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:171:48: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:171:48: Context: Write to i@6094
var map83 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...mapStringInt else "bar": 3.14, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:172:55: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:172:55: Context: Write to i@6094
List<int> list90 = [for (int i = 0; oracle("foo"); i++) dynVar];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:173:53: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:173:53: Context: Write to i@6094
Set<int> set90 = {for (int i = 0; oracle("foo"); i++) dynVar, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:174:61: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:174:61: Context: Write to i@6094
Map<String, int> map90 = {for (int i = 0; oracle("foo"); i++) "bar": dynVar, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:175:55: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:175:55: Context: Write to i@6094
List<int> list91 = [for (int i = 0; oracle("foo"); i++) ...dynVar];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:176:53: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:176:53: Context: Write to i@6094
Set<int> set91 = {for (int i = 0; oracle("foo"); i++) ...dynVar, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:177:61: Context: Write to i@6069
pkg/front_end/testcases/control_flow_collection_inference.dart:177:61: Context: Write to i@6094
Map<String, int> map91 = {for (int i = 0; oracle("foo"); i++) ...dynVar, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:178:40: Context: Write to index@5967
pkg/front_end/testcases/control_flow_collection_inference.dart:178:40: Context: Write to index@5992
List<int> list100 = <int>[for (index = 0; oracle("foo"); index++) 42];
^
pkg/front_end/testcases/control_flow_collection_inference.dart:178:65: Context: Write to index@5967
pkg/front_end/testcases/control_flow_collection_inference.dart:178:65: Context: Write to index@5992
List<int> list100 = <int>[for (index = 0; oracle("foo"); index++) 42];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:179:38: Context: Write to index@5967
pkg/front_end/testcases/control_flow_collection_inference.dart:179:38: Context: Write to index@5992
Set<int> set100 = <int>{for (index = 0; oracle("foo"); index++) 42};
^
pkg/front_end/testcases/control_flow_collection_inference.dart:179:63: Context: Write to index@5967
pkg/front_end/testcases/control_flow_collection_inference.dart:179:63: Context: Write to index@5992
Set<int> set100 = <int>{for (index = 0; oracle("foo"); index++) 42};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:180:53: Context: Write to index@5967
Map<String, int> map100 = <String int>{for (index = 0; oracle("foo"); index++) "bar": 42};
^
pkg/front_end/testcases/control_flow_collection_inference.dart:180:78: Context: Write to index@5967
Map<String, int> map100 = <String int>{for (index = 0; oracle("foo"); index++) "bar": 42};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:190:41: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:180:54: Context: Write to index@5992
Map<String, int> map100 = <String, int>{for (index = 0; oracle("foo"); index++) "bar": 42};
^
pkg/front_end/testcases/control_flow_collection_inference.dart:180:79: Context: Write to index@5992
Map<String, int> map100 = <String, int>{for (index = 0; oracle("foo"); index++) "bar": 42};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:190:41: Context: Write to i@12696
<int>[for (int i = 0; oracle("foo"); i++) "bar"];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:191:41: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:191:41: Context: Write to i@12696
<int>{for (int i = 0; oracle("foo"); i++) "bar", null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:192:46: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:192:46: Context: Write to i@12696
<int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:193:41: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:193:41: Context: Write to i@12696
<int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:194:41: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:194:41: Context: Write to i@12696
<int>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:195:46: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:195:46: Context: Write to i@12696
<int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:196:41: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:196:41: Context: Write to i@12696
<int>[for (int i = 0; oracle("foo"); i++) ...map];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:197:41: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:197:41: Context: Write to i@12696
<int>{for (int i = 0; oracle("foo"); i++) ...map, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:198:46: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:198:46: Context: Write to i@12696
<int, int>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:199:44: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:199:44: Context: Write to i@12696
<String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:200:44: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:200:44: Context: Write to i@12696
<String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:201:52: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:201:52: Context: Write to i@12696
<String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:202:41: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:202:41: Context: Write to i@12696
<int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:203:41: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:203:41: Context: Write to i@12696
<int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:204:49: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:204:49: Context: Write to i@12696
<String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:205:41: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:205:41: Context: Write to i@12696
<int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:206:41: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:206:41: Context: Write to i@12696
<int>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
^^
pkg/front_end/testcases/control_flow_collection_inference.dart:207:49: Context: Write to i@12670
pkg/front_end/testcases/control_flow_collection_inference.dart:207:49: Context: Write to i@12696
<String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
^^
@@ -103,9 +103,9 @@ library;
// {... null, ... /*@typeArgs=dynamic*/
// ^
//
// pkg/front_end/testcases/spread_collection_inference.dart:127:6: Error: Expected ',' before this.
// pkg/front_end/testcases/spread_collection_inference.dart:127:10: Error: Expected ',' before this.
// {... null, ... /*@typeArgs=dynamic*/
// ^
// ^
//
// pkg/front_end/testcases/spread_collection_inference.dart:131:5: Error: Can't spread a value with static type Null.
// null};
@@ -336,9 +336,9 @@ Try changing the type of the left hand side, or casting the right hand side to '
^" as{TypeError} core::int) in #t68;
core::Set<dynamic> set71ambiguous = block {
final core::Set<dynamic> #t70 = col::LinkedHashSet::•<dynamic>();
#t70.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:127:6: Error: Expected ',' before this.
#t70.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:127:10: Error: Expected ',' before this.
{... null, ... /*@typeArgs=dynamic*/
^");
^");
for (final dynamic #t71 in <dynamic>[]) {
final dynamic #t72 = #t71 as{TypeError} dynamic;
#t70.{core::Set::add}(#t72);
@@ -103,9 +103,9 @@ library;
// {... null, ... /*@typeArgs=dynamic*/
// ^
//
// pkg/front_end/testcases/spread_collection_inference.dart:127:6: Error: Expected ',' before this.
// pkg/front_end/testcases/spread_collection_inference.dart:127:10: Error: Expected ',' before this.
// {... null, ... /*@typeArgs=dynamic*/
// ^
// ^
//
// pkg/front_end/testcases/spread_collection_inference.dart:131:5: Error: Can't spread a value with static type Null.
// null};
@@ -336,9 +336,9 @@ Try changing the type of the left hand side, or casting the right hand side to '
^" as{TypeError} core::int) in #t68;
core::Set<dynamic> set71ambiguous = block {
final core::Set<dynamic> #t70 = col::LinkedHashSet::•<dynamic>();
#t70.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:127:6: Error: Expected ',' before this.
#t70.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:127:10: Error: Expected ',' before this.
{... null, ... /*@typeArgs=dynamic*/
^");
^");
for (final dynamic #t71 in <dynamic>[]) {
final dynamic #t72 = #t71 as{TypeError} dynamic;
#t70.{core::Set::add}(#t72);