[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>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart index c9f502a..c06c8c6 100644 --- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart +++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -2456,7 +2456,7 @@ 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 @@ 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 @@ 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 @@ 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 @@ } 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 @@ 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,
diff --git a/pkg/front_end/testcases/control_flow_collection_inference.dart.type_promotion.expect b/pkg/front_end/testcases/control_flow_collection_inference.dart.type_promotion.expect index bad3fdc..1ac72fb 100644 --- a/pkg/front_end/testcases/control_flow_collection_inference.dart.type_promotion.expect +++ b/pkg/front_end/testcases/control_flow_collection_inference.dart.type_promotion.expect
@@ -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}; ^^
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect b/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect index 0d3a9fb..7599faa 100644 --- a/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect +++ b/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect
@@ -103,9 +103,9 @@ // {... 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 @@ ^" 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);
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/spread_collection_inference.dart.strong.transformed.expect index 8be62ab..3262225 100644 --- a/pkg/front_end/testcases/spread_collection_inference.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/spread_collection_inference.dart.strong.transformed.expect
@@ -103,9 +103,9 @@ // {... 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 @@ ^" 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);