Reland "[cfe] Disambiguate between sets and maps with spreads"
This is a reland of b817b274c2f9ef1f3232f95aa15efbec9f6b3b80
Original change's description:
> [cfe] Disambiguate between sets and maps with spreads
>
> Change-Id: I8da95178d0864dd0d59232a902cdb142be7f135e
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/95649
> Reviewed-by: Kevin Millikin <kmillikin@google.com>
Change-Id: Id22b7513230f6410dc2af5146d292fc7fc47a0aa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/96130
Reviewed-by: Régis Crelier <regis@google.com>
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index a47e394..c12729c 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -520,6 +520,28 @@
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeCantDisambiguateAmbiguousInformation =
+ messageCantDisambiguateAmbiguousInformation;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageCantDisambiguateAmbiguousInformation = const MessageCode(
+ "CantDisambiguateAmbiguousInformation",
+ message:
+ r"""Both Iterable and Map spread elements encountered in ambiguous literal.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeCantDisambiguateNotEnoughInformation =
+ messageCantDisambiguateNotEnoughInformation;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageCantDisambiguateNotEnoughInformation = const MessageCode(
+ "CantDisambiguateNotEnoughInformation",
+ message:
+ r"""Not enough type information to disambiguate between literal set and literal map.""",
+ tip:
+ r"""Try providing type arguments for the literal explicitly to disambiguate it.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Null> codeCantInferPackagesFromManyInputs =
messageCantInferPackagesFromManyInputs;
@@ -8234,6 +8256,13 @@
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeSpreadElement = messageSpreadElement;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageSpreadElement = const MessageCode("SpreadElement",
+ severity: Severity.context, message: r"""Iterable spread.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(
DartType _type,
@@ -8267,6 +8296,15 @@
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeSpreadMapElement = messageSpreadMapElement;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageSpreadMapElement = const MessageCode(
+ "SpreadMapElement",
+ severity: Severity.context,
+ message: r"""Map spread.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(
DartType _type,
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 5deb216..a81d124 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -817,18 +817,22 @@
(node.valueType is ImplicitTypeArgument));
bool inferenceNeeded = node.keyType is ImplicitTypeArgument;
KernelLibraryBuilder library = inferrer.library;
+ bool typeContextIsMap = false;
+ bool typeContextIsIterable = false;
if (library != null &&
library.loader.target.enableSetLiterals &&
- inferenceNeeded &&
- node.entries.isEmpty) {
+ inferenceNeeded) {
// Ambiguous set/map literal
DartType context =
inferrer.typeSchemaEnvironment.unfutureType(typeContext);
if (context is InterfaceType) {
- if (inferrer.classHierarchy.isSubtypeOf(
- context.classNode, inferrer.coreTypes.iterableClass) &&
- !inferrer.classHierarchy
- .isSubtypeOf(context.classNode, inferrer.coreTypes.mapClass)) {
+ typeContextIsMap = inferrer.classHierarchy
+ .isSubtypeOf(context.classNode, inferrer.coreTypes.mapClass);
+ typeContextIsIterable = inferrer.classHierarchy
+ .isSubtypeOf(context.classNode, inferrer.coreTypes.iterableClass);
+ if (node.entries.isEmpty &&
+ typeContextIsIterable &&
+ !typeContextIsMap) {
// Set literal
SetLiteralJudgment setLiteral = new SetLiteralJudgment([],
typeArgument: const ImplicitTypeArgument(), isConst: node.isConst)
@@ -867,13 +871,24 @@
cachedValues[i] = node.entries[i].value;
}
}
+ int iterableSpreadOffset = null;
+ int mapSpreadOffset = null;
+ int mapEntryOffset = null;
if (inferenceNeeded || typeChecksNeeded) {
+ DartType spreadTypeContext = const UnknownType();
+ if (typeContextIsIterable && !typeContextIsMap) {
+ spreadTypeContext = inferrer.typeSchemaEnvironment
+ .getTypeAsInstanceOf(typeContext, inferrer.coreTypes.iterableClass);
+ } else if (!typeContextIsIterable && typeContextIsMap) {
+ spreadTypeContext =
+ new InterfaceType(inferrer.coreTypes.mapClass, inferredTypes);
+ }
for (int i = 0; i < node.entries.length; ++i) {
MapEntry entry = node.entries[i];
if (entry is SpreadMapEntry) {
DartType spreadMapEntryType = inferrer.inferExpression(
entry.expression,
- new InterfaceType(inferrer.coreTypes.mapClass, inferredTypes),
+ spreadTypeContext,
inferenceNeeded || typeChecksNeeded,
isVoidAllowed: true);
if (inferenceNeeded) {
@@ -883,6 +898,19 @@
if (typeChecksNeeded) {
spreadMapEntryTypes[i] = spreadMapEntryType;
}
+
+ bool isMap = inferrer.typeSchemaEnvironment.isSubtypeOf(
+ spreadMapEntryType, inferrer.coreTypes.mapClass.rawType);
+ bool isSet = inferrer.typeSchemaEnvironment.isSubtypeOf(
+ spreadMapEntryType, inferrer.coreTypes.iterableClass.rawType);
+
+ if (isMap && !isSet) {
+ mapSpreadOffset = entry.expression.fileOffset;
+ }
+ if (!isMap && isSet) {
+ iterableSpreadOffset = entry.expression.fileOffset;
+ }
+
// Use 'dynamic' for error recovery.
int length = actualTypes.length;
actualTypes.add(const DynamicType());
@@ -901,10 +929,62 @@
if (inferenceNeeded) {
formalTypes.addAll(mapType.typeArguments);
}
+
+ mapEntryOffset = entry.fileOffset;
}
}
}
if (inferenceNeeded) {
+ bool canBeSet = mapSpreadOffset == null &&
+ mapEntryOffset == null &&
+ !typeContextIsMap;
+ bool canBeMap = iterableSpreadOffset == null && !typeContextIsIterable;
+ if (canBeSet && !canBeMap) {
+ List<Expression> setElements = <Expression>[];
+ for (int i = 0; i < node.entries.length; ++i) {
+ SpreadMapEntry entry = node.entries[i];
+ // TODO(dmitryas): Add support for null-aware spreads.
+ setElements.add(new SpreadElement(entry.expression, false));
+ }
+ SetLiteralJudgment setLiteral = new SetLiteralJudgment(setElements,
+ typeArgument: const ImplicitTypeArgument(), isConst: node.isConst)
+ ..fileOffset = node.fileOffset;
+ node.parent.replaceChild(node, setLiteral);
+ visitSetLiteralJudgment(setLiteral, typeContext);
+ node.inferredType = setLiteral.inferredType;
+ return;
+ }
+ if (canBeSet && canBeMap && node.entries.isNotEmpty) {
+ node.parent.replaceChild(
+ node,
+ inferrer.helper.desugarSyntheticExpression(inferrer.helper
+ .buildProblem(messageCantDisambiguateNotEnoughInformation,
+ node.fileOffset, 1)));
+ node.inferredType = const BottomType();
+ return;
+ }
+ if (!canBeSet && !canBeMap) {
+ LocatedMessage iterableContextMessage = messageSpreadElement
+ .withLocation(library.uri, iterableSpreadOffset, 1);
+ LocatedMessage mapContextMessage = messageSpreadMapElement.withLocation(
+ library.uri, mapSpreadOffset, 1);
+ List<LocatedMessage> context = <LocatedMessage>[];
+ if (iterableSpreadOffset < mapSpreadOffset) {
+ context.add(iterableContextMessage);
+ context.add(mapContextMessage);
+ } else {
+ context.add(mapContextMessage);
+ context.add(iterableContextMessage);
+ }
+ node.parent.replaceChild(
+ node,
+ inferrer.helper.desugarSyntheticExpression(inferrer.helper
+ .buildProblem(messageCantDisambiguateAmbiguousInformation,
+ node.fileOffset, 1,
+ context: context)));
+ node.inferredType = const BottomType();
+ return;
+ }
inferrer.typeSchemaEnvironment.inferGenericFunctionOrType(
mapType,
mapClass.typeParameters,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 4cdc182..9ebcc33 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -35,6 +35,11 @@
import '../fasta_codes.dart'
show
+ LocatedMessage,
+ messageCantDisambiguateAmbiguousInformation,
+ messageCantDisambiguateNotEnoughInformation,
+ messageSpreadElement,
+ messageSpreadMapElement,
messageSwitchExpressionNotAssignableCause,
messageVoidExpression,
noLength,
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index b644869..69520ef 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -30,6 +30,10 @@
CannotReadSdkSpecification/analyzerCode: Fail
CannotReadSdkSpecification/example: Fail
CantDetermineConstness/analyzerCode: Fail
+CantDisambiguateAmbiguousInformation/analyzerCode: Fail # There's no analyzer code for that error yet.
+CantDisambiguateAmbiguousInformation/script: Fail # Can't be tested until 'spread-collections' flag is on.
+CantDisambiguateNotEnoughInformation/analyzerCode: Fail # There's no analyzer code for that error yet.
+CantDisambiguateNotEnoughInformation/script: Fail # Can't be tested until 'spread-collections' flag is on.
CantInferPackagesFromManyInputs/analyzerCode: Fail
CantInferPackagesFromManyInputs/example: Fail
CantInferPackagesFromPackageUri/analyzerCode: Fail
@@ -343,7 +347,7 @@
SpreadMapEntryTypeMismatch/analyzerCode: Fail # Can't be tested until 'spread-collections' flag is on.
SpreadMapEntryTypeMismatch/script1: Fail # Can't be tested until 'spread-collections' flag is on.
SpreadMapEntryTypeMismatch/script2: Fail # Can't be tested until 'spread-collections' flag is on.
-SpreadTypeMismatch/analyzerCode: Fail # There's not analyzer code for that error yet.
+SpreadTypeMismatch/analyzerCode: Fail # There's no analyzer code for that error yet.
SpreadTypeMismatch/script1: Fail # Can't be tested until 'spread-collections' flag is on.
SpreadTypeMismatch/script2: Fail # Can't be tested until 'spread-collections' flag is on.
StackOverflow/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index aa63668..e713239 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -3530,3 +3530,26 @@
Map<String, int> a = <String, int>{"foo": 42};
Map<String, String> b = <String, String>{...a};
}
+
+CantDisambiguateNotEnoughInformation:
+ template: "Not enough type information to disambiguate between literal set and literal map."
+ tip: "Try providing type arguments for the literal explicitly to disambiguate it."
+ script: >
+ foo(dynamic spread) {
+ var a = {...spread};
+ }
+
+CantDisambiguateAmbiguousInformation:
+ template: "Both Iterable and Map spread elements encountered in ambiguous literal."
+ script: >
+ foo(Iterable<int> iterableSpread, Map<int, int> mapSpread) {
+ var c = {...iterableSpread, ...mapSpread};
+ }
+
+SpreadElement:
+ template: "Iterable spread."
+ severity: CONTEXT
+
+SpreadMapElement:
+ template: "Map spread."
+ severity: CONTEXT
diff --git a/pkg/front_end/testcases/spread_collection.dart.strong.expect b/pkg/front_end/testcases/spread_collection.dart.strong.expect
index 9e18ed0..a05138f 100644
--- a/pkg/front_end/testcases/spread_collection.dart.strong.expect
+++ b/pkg/front_end/testcases/spread_collection.dart.strong.expect
@@ -1,4 +1,12 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/spread_collection.dart:9:21: Error: Not enough type information to disambiguate between literal set and literal map.
+// Try providing type arguments for the literal explicitly to disambiguate it.
+// final aSetOrMap = {...foo()};
+// ^
+//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;
@@ -17,9 +25,9 @@
final core::Map<core::int, core::int> aMap = block {
final core::Map<core::int, core::int> #t5 = <core::int, core::int>{};
#t5.{core::Map::[]=}(1, 1);
- for (final core::MapEntry<core::int, core::int> #t6 in <dynamic, dynamic>{2: 2})
+ for (final core::MapEntry<core::int, core::int> #t6 in <core::int, core::int>{2: 2})
#t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
- for (final core::MapEntry<core::int, core::int> #t7 in <dynamic, dynamic>{3: 3})
+ for (final core::MapEntry<core::int, core::int> #t7 in <core::int, core::int>{3: 3})
#t5.{core::Map::[]=}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
} =>#t5;
final core::Set<core::int> aSet = block {
@@ -32,11 +40,10 @@
for (final core::int #t11 in #t10)
#t8.{core::Set::add}(#t11);
} =>#t8;
- final core::Map<dynamic, dynamic> aSetOrMap = block {
- final core::Map<dynamic, dynamic> #t12 = <dynamic, dynamic>{};
- for (final core::MapEntry<dynamic, dynamic> #t13 in self::foo() as{TypeError} core::Map<dynamic, dynamic>)
- #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
- } =>#t12;
+ final dynamic aSetOrMap = invalid-expression "pkg/front_end/testcases/spread_collection.dart:9:21: Error: Not enough type information to disambiguate between literal set and literal map.
+Try providing type arguments for the literal explicitly to disambiguate it.
+ final aSetOrMap = {...foo()};
+ ^";
core::print(aList);
core::print(aSet);
core::print(aMap);
diff --git a/pkg/front_end/testcases/spread_collection.dart.strong.transformed.expect b/pkg/front_end/testcases/spread_collection.dart.strong.transformed.expect
index 9e18ed0..a05138f 100644
--- a/pkg/front_end/testcases/spread_collection.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/spread_collection.dart.strong.transformed.expect
@@ -1,4 +1,12 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/spread_collection.dart:9:21: Error: Not enough type information to disambiguate between literal set and literal map.
+// Try providing type arguments for the literal explicitly to disambiguate it.
+// final aSetOrMap = {...foo()};
+// ^
+//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;
@@ -17,9 +25,9 @@
final core::Map<core::int, core::int> aMap = block {
final core::Map<core::int, core::int> #t5 = <core::int, core::int>{};
#t5.{core::Map::[]=}(1, 1);
- for (final core::MapEntry<core::int, core::int> #t6 in <dynamic, dynamic>{2: 2})
+ for (final core::MapEntry<core::int, core::int> #t6 in <core::int, core::int>{2: 2})
#t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
- for (final core::MapEntry<core::int, core::int> #t7 in <dynamic, dynamic>{3: 3})
+ for (final core::MapEntry<core::int, core::int> #t7 in <core::int, core::int>{3: 3})
#t5.{core::Map::[]=}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
} =>#t5;
final core::Set<core::int> aSet = block {
@@ -32,11 +40,10 @@
for (final core::int #t11 in #t10)
#t8.{core::Set::add}(#t11);
} =>#t8;
- final core::Map<dynamic, dynamic> aSetOrMap = block {
- final core::Map<dynamic, dynamic> #t12 = <dynamic, dynamic>{};
- for (final core::MapEntry<dynamic, dynamic> #t13 in self::foo() as{TypeError} core::Map<dynamic, dynamic>)
- #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
- } =>#t12;
+ final dynamic aSetOrMap = invalid-expression "pkg/front_end/testcases/spread_collection.dart:9:21: Error: Not enough type information to disambiguate between literal set and literal map.
+Try providing type arguments for the literal explicitly to disambiguate it.
+ final aSetOrMap = {...foo()};
+ ^";
core::print(aList);
core::print(aSet);
core::print(aMap);
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart b/pkg/front_end/testcases/spread_collection_inference.dart
index 474905a..8547fed 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart
+++ b/pkg/front_end/testcases/spread_collection_inference.dart
@@ -21,13 +21,21 @@
var /*@type=Map<dynamic, dynamic>*/ map10 = <dynamic, dynamic>{...
/*@typeArgs=dynamic, dynamic*/ {}};
+ var /*@type=Map<dynamic, dynamic>*/ map10ambiguous =
+ /*@typeArgs=dynamic, dynamic*/ {... /*@typeArgs=dynamic, dynamic*/ {}};
+
var /*@type=List<int>*/ lhs20 = /*@typeArgs=int*/ [...spread];
var /*@type=Set<int>*/ set20 = /*@typeArgs=int*/ {...spread, 42};
+ var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
+
var /*@type=Map<String, int>*/ map20 = /*@typeArgs=String, int*/
{...mapSpread, "baz": 42};
+ var /*@type=Map<String, int>*/ map20ambiguous = /*@typeArgs=String, int*/
+ {...mapSpread};
+
var /*@type=List<dynamic>*/ lhs21 = /*@typeArgs=dynamic*/ [...(spread as
dynamic)];
@@ -35,12 +43,17 @@
dynamic), 42};
var /*@type=Map<dynamic, dynamic>*/ map21 = /*@typeArgs=dynamic, dynamic*/
- {...(spread as dynamic), "baz": 42};
+ {...(mapSpread as dynamic), "baz": 42};
+
+ dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
+ (mapSpread as dynamic)};
List<int> lhs22 = /*@typeArgs=int*/ [... /*@typeArgs=int*/ []];
Set<int> set22 = /*@typeArgs=int*/ {... /*@typeArgs=int*/ [], 42};
+ Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
+
Map<String, int> map22 = /*@typeArgs=String, int*/
{... /*@typeArgs=String, int*/ {}};
@@ -50,16 +63,28 @@
Set<List<int>> set23 = /*@typeArgs=List<int>*/ {... /*@typeArgs=List<int>*/
[/*@typeArgs=int*/ []], <int>[42]};
+ Set<List<int>> set23ambiguous = /*@typeArgs=List<int>*/
+ {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
+
Map<String, List<int>> map23 = /*@typeArgs=String, List<int>*/
{... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
+ dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
+ spread, ...mapSpread};
+
int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
+ int set30ambiguous = /*@error=InvalidAssignment*/ /*@typeArgs=int*/
+ {...spread};
+
int map30 = /*@error=InvalidAssignment*/ /*@typeArgs=String, int*/
{...mapSpread, "baz": 42};
+ int map30ambiguous = /*@error=InvalidAssignment*/ /*@typeArgs=String, int*/
+ {...mapSpread};
+
List<dynamic> lhs40 = <dynamic>[... /*@error=SpreadTypeMismatch*/
notSpreadInt];
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect
index 3507169..a976974 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect
+++ b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect
@@ -18,139 +18,219 @@
// /*@typeArgs=dynamic, dynamic*/ {}};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:24:54: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:25:37: Error: Unexpected token '...'.
+// /*@typeArgs=dynamic, dynamic*/ {... /*@typeArgs=dynamic, dynamic*/ {}};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:25:73: Error: Expected ':' after this.
+// /*@typeArgs=dynamic, dynamic*/ {... /*@typeArgs=dynamic, dynamic*/ {}};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:27:54: Error: Unexpected token '...'.
// var /*@type=List<int>*/ lhs20 = /*@typeArgs=int*/ [...spread];
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:26:53: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:29:53: Error: Unexpected token '...'.
// var /*@type=Set<int>*/ set20 = /*@typeArgs=int*/ {...spread, 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:29:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:31:62: Error: Unexpected token '...'.
+// var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:31:65: Error: Expected ':' after this.
+// var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:34:6: Error: Unexpected token '...'.
// {...mapSpread, "baz": 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:29:9: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:34:9: Error: Expected ':' after this.
// {...mapSpread, "baz": 42};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:31:62: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:37:6: Error: Unexpected token '...'.
+// {...mapSpread};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:37:9: Error: Expected ':' after this.
+// {...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:39:62: Error: Unexpected token '...'.
// var /*@type=List<dynamic>*/ lhs21 = /*@typeArgs=dynamic*/ [...(spread as
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:34:61: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:42:61: Error: Unexpected token '...'.
// var /*@type=Set<dynamic>*/ set21 = /*@typeArgs=dynamic*/ {...(spread as
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:38:6: Error: Unexpected token '...'.
-// {...(spread as dynamic), "baz": 42};
+// pkg/front_end/testcases/spread_collection_inference.dart:46:6: Error: Unexpected token '...'.
+// {...(mapSpread as dynamic), "baz": 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:38:17: Error: Expected ':' after this.
-// {...(spread as dynamic), "baz": 42};
-// ^
+// pkg/front_end/testcases/spread_collection_inference.dart:46:20: Error: Expected ':' after this.
+// {...(mapSpread as dynamic), "baz": 42};
+// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:40:40: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:48:77: Error: Unexpected token '...'.
+// dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:49:16: Error: Expected ':' after this.
+// (mapSpread as dynamic)};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:51:40: Error: Unexpected token '...'.
// List<int> lhs22 = /*@typeArgs=int*/ [... /*@typeArgs=int*/ []];
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:42:39: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:53:39: Error: Unexpected token '...'.
// Set<int> set22 = /*@typeArgs=int*/ {... /*@typeArgs=int*/ [], 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:45:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:55:48: Error: Unexpected token '...'.
+// Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:55:70: Error: Expected ':' after this.
+// Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:58:6: Error: Unexpected token '...'.
// {... /*@typeArgs=String, int*/ {}};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:45:36: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:58:36: Error: Expected ':' after this.
// {... /*@typeArgs=String, int*/ {}};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:47:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:60:52: Error: Unexpected token '...'.
// List<List<int>> lhs23 = /*@typeArgs=List<int>*/ [... /*@typeArgs=List<int>*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:50:51: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:63:51: Error: Unexpected token '...'.
// Set<List<int>> set23 = /*@typeArgs=List<int>*/ {... /*@typeArgs=List<int>*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:54:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:67:6: Error: Unexpected token '...'.
+// {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:67:34: Error: Expected ':' after this.
+// {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:70:6: Error: Unexpected token '...'.
// {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:54:42: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:70:42: Error: Expected ':' after this.
// {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:56:63: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:72:77: Error: Unexpected token '...'.
+// dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:73:13: Error: Unexpected token '...'.
+// spread, ...mapSpread};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Expected ':' after this.
+// spread, ...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:73:16: Error: Expected ':' after this.
+// spread, ...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:75:63: Error: Unexpected token '...'.
// int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:58:63: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:77:63: Error: Unexpected token '...'.
// int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:61:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:80:6: Error: Unexpected token '...'.
+// {...spread};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:80:9: Error: Expected ':' after this.
+// {...spread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:83:6: Error: Unexpected token '...'.
// {...mapSpread, "baz": 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:61:9: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:83:9: Error: Expected ':' after this.
// {...mapSpread, "baz": 42};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:63:35: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:86:6: Error: Unexpected token '...'.
+// {...mapSpread};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:86:9: Error: Expected ':' after this.
+// {...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:88:35: Error: Unexpected token '...'.
// List<dynamic> lhs40 = <dynamic>[... /*@error=SpreadTypeMismatch*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:66:34: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:91:34: Error: Unexpected token '...'.
// Set<dynamic> set40 = <dynamic>{... /*@error=SpreadTypeMismatch*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:69:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:94:52: Error: Unexpected token '...'.
// Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Expected ':' after this.
// /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:72:36: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:97:36: Error: Unexpected token '...'.
// List<dynamic> lhs50 = <dynamic> [... /*@error=SpreadTypeMismatch*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:75:35: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:100:35: Error: Unexpected token '...'.
// Set<dynamic> set50 = <dynamic> {... /*@error=SpreadTypeMismatch*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:78:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:103:52: Error: Unexpected token '...'.
// Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Expected ':' after this.
// /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:81:33: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:106:33: Error: Unexpected token '...'.
// List<String> lhs60 = <String>[... /*@error=SpreadElementTypeMismatch*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:84:32: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:109:32: Error: Unexpected token '...'.
// Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:86:36: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:111:36: Error: Unexpected token '...'.
// Map<int, int> map60 = <int, int>{...
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Expected ':' after this.
// /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:89:48: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:114:48: Error: Unexpected token '...'.
// Map<String, String> map61 = <String, String>{...
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Expected ':' after this.
// /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
// ^
//
@@ -165,21 +245,30 @@
dynamic lhs10 = <dynamic>[<dynamic>[]];
dynamic set10 = <dynamic>{<dynamic>[]};
dynamic map10 = <dynamic, dynamic>{};
+ dynamic map10ambiguous = <dynamic, dynamic>{};
dynamic lhs20 = <dynamic>[spread];
dynamic set20 = <dynamic>{spread, 42};
+ dynamic set20ambiguous = <dynamic, dynamic>{};
dynamic map20 = <dynamic, dynamic>{"baz": 42};
+ dynamic map20ambiguous = <dynamic, dynamic>{};
dynamic lhs21 = <dynamic>[spread as dynamic];
dynamic set21 = <dynamic>{spread as dynamic, 42};
dynamic map21 = <dynamic, dynamic>{"baz": 42};
+ dynamic map21ambiguous = <dynamic, dynamic>{};
core::List<core::int> lhs22 = <dynamic>[<dynamic>[]];
core::Set<core::int> set22 = <dynamic>{<dynamic>[], 42};
+ core::Set<core::int> set22ambiguous = <dynamic, dynamic>{};
core::Map<core::String, core::int> map22 = <dynamic, dynamic>{};
core::List<core::List<core::int>> lhs23 = <dynamic>[<dynamic>[<dynamic>[]]];
core::Set<core::List<core::int>> set23 = <dynamic>{<dynamic>[<dynamic>[]], <core::int>[42]};
+ core::Set<core::List<core::int>> set23ambiguous = <dynamic, dynamic>{};
core::Map<core::String, core::List<core::int>> map23 = <dynamic, dynamic>{};
+ dynamic map24ambiguous = <dynamic, dynamic>{};
core::int lhs30 = <dynamic>[spread];
core::int set30 = <dynamic>{spread, 42};
+ core::int set30ambiguous = <dynamic, dynamic>{};
core::int map30 = <dynamic, dynamic>{"baz": 42};
+ core::int map30ambiguous = <dynamic, dynamic>{};
core::List<dynamic> lhs40 = <dynamic>[notSpreadInt];
core::Set<dynamic> set40 = <dynamic>{notSpreadInt};
core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{};
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect
index 3507169..a976974 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect
@@ -18,139 +18,219 @@
// /*@typeArgs=dynamic, dynamic*/ {}};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:24:54: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:25:37: Error: Unexpected token '...'.
+// /*@typeArgs=dynamic, dynamic*/ {... /*@typeArgs=dynamic, dynamic*/ {}};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:25:73: Error: Expected ':' after this.
+// /*@typeArgs=dynamic, dynamic*/ {... /*@typeArgs=dynamic, dynamic*/ {}};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:27:54: Error: Unexpected token '...'.
// var /*@type=List<int>*/ lhs20 = /*@typeArgs=int*/ [...spread];
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:26:53: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:29:53: Error: Unexpected token '...'.
// var /*@type=Set<int>*/ set20 = /*@typeArgs=int*/ {...spread, 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:29:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:31:62: Error: Unexpected token '...'.
+// var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:31:65: Error: Expected ':' after this.
+// var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:34:6: Error: Unexpected token '...'.
// {...mapSpread, "baz": 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:29:9: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:34:9: Error: Expected ':' after this.
// {...mapSpread, "baz": 42};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:31:62: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:37:6: Error: Unexpected token '...'.
+// {...mapSpread};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:37:9: Error: Expected ':' after this.
+// {...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:39:62: Error: Unexpected token '...'.
// var /*@type=List<dynamic>*/ lhs21 = /*@typeArgs=dynamic*/ [...(spread as
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:34:61: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:42:61: Error: Unexpected token '...'.
// var /*@type=Set<dynamic>*/ set21 = /*@typeArgs=dynamic*/ {...(spread as
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:38:6: Error: Unexpected token '...'.
-// {...(spread as dynamic), "baz": 42};
+// pkg/front_end/testcases/spread_collection_inference.dart:46:6: Error: Unexpected token '...'.
+// {...(mapSpread as dynamic), "baz": 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:38:17: Error: Expected ':' after this.
-// {...(spread as dynamic), "baz": 42};
-// ^
+// pkg/front_end/testcases/spread_collection_inference.dart:46:20: Error: Expected ':' after this.
+// {...(mapSpread as dynamic), "baz": 42};
+// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:40:40: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:48:77: Error: Unexpected token '...'.
+// dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:49:16: Error: Expected ':' after this.
+// (mapSpread as dynamic)};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:51:40: Error: Unexpected token '...'.
// List<int> lhs22 = /*@typeArgs=int*/ [... /*@typeArgs=int*/ []];
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:42:39: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:53:39: Error: Unexpected token '...'.
// Set<int> set22 = /*@typeArgs=int*/ {... /*@typeArgs=int*/ [], 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:45:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:55:48: Error: Unexpected token '...'.
+// Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:55:70: Error: Expected ':' after this.
+// Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:58:6: Error: Unexpected token '...'.
// {... /*@typeArgs=String, int*/ {}};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:45:36: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:58:36: Error: Expected ':' after this.
// {... /*@typeArgs=String, int*/ {}};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:47:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:60:52: Error: Unexpected token '...'.
// List<List<int>> lhs23 = /*@typeArgs=List<int>*/ [... /*@typeArgs=List<int>*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:50:51: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:63:51: Error: Unexpected token '...'.
// Set<List<int>> set23 = /*@typeArgs=List<int>*/ {... /*@typeArgs=List<int>*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:54:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:67:6: Error: Unexpected token '...'.
+// {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:67:34: Error: Expected ':' after this.
+// {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:70:6: Error: Unexpected token '...'.
// {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:54:42: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:70:42: Error: Expected ':' after this.
// {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:56:63: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:72:77: Error: Unexpected token '...'.
+// dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:73:13: Error: Unexpected token '...'.
+// spread, ...mapSpread};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Expected ':' after this.
+// spread, ...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:73:16: Error: Expected ':' after this.
+// spread, ...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:75:63: Error: Unexpected token '...'.
// int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:58:63: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:77:63: Error: Unexpected token '...'.
// int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:61:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:80:6: Error: Unexpected token '...'.
+// {...spread};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:80:9: Error: Expected ':' after this.
+// {...spread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:83:6: Error: Unexpected token '...'.
// {...mapSpread, "baz": 42};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:61:9: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:83:9: Error: Expected ':' after this.
// {...mapSpread, "baz": 42};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:63:35: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:86:6: Error: Unexpected token '...'.
+// {...mapSpread};
+// ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:86:9: Error: Expected ':' after this.
+// {...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:88:35: Error: Unexpected token '...'.
// List<dynamic> lhs40 = <dynamic>[... /*@error=SpreadTypeMismatch*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:66:34: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:91:34: Error: Unexpected token '...'.
// Set<dynamic> set40 = <dynamic>{... /*@error=SpreadTypeMismatch*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:69:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:94:52: Error: Unexpected token '...'.
// Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Expected ':' after this.
// /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:72:36: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:97:36: Error: Unexpected token '...'.
// List<dynamic> lhs50 = <dynamic> [... /*@error=SpreadTypeMismatch*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:75:35: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:100:35: Error: Unexpected token '...'.
// Set<dynamic> set50 = <dynamic> {... /*@error=SpreadTypeMismatch*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:78:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:103:52: Error: Unexpected token '...'.
// Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Expected ':' after this.
// /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:81:33: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:106:33: Error: Unexpected token '...'.
// List<String> lhs60 = <String>[... /*@error=SpreadElementTypeMismatch*/
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:84:32: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:109:32: Error: Unexpected token '...'.
// Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:86:36: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:111:36: Error: Unexpected token '...'.
// Map<int, int> map60 = <int, int>{...
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Expected ':' after this.
// /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:89:48: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:114:48: Error: Unexpected token '...'.
// Map<String, String> map61 = <String, String>{...
// ^^^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Expected ':' after this.
// /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
// ^
//
@@ -165,21 +245,30 @@
dynamic lhs10 = <dynamic>[<dynamic>[]];
dynamic set10 = <dynamic>{<dynamic>[]};
dynamic map10 = <dynamic, dynamic>{};
+ dynamic map10ambiguous = <dynamic, dynamic>{};
dynamic lhs20 = <dynamic>[spread];
dynamic set20 = <dynamic>{spread, 42};
+ dynamic set20ambiguous = <dynamic, dynamic>{};
dynamic map20 = <dynamic, dynamic>{"baz": 42};
+ dynamic map20ambiguous = <dynamic, dynamic>{};
dynamic lhs21 = <dynamic>[spread as dynamic];
dynamic set21 = <dynamic>{spread as dynamic, 42};
dynamic map21 = <dynamic, dynamic>{"baz": 42};
+ dynamic map21ambiguous = <dynamic, dynamic>{};
core::List<core::int> lhs22 = <dynamic>[<dynamic>[]];
core::Set<core::int> set22 = <dynamic>{<dynamic>[], 42};
+ core::Set<core::int> set22ambiguous = <dynamic, dynamic>{};
core::Map<core::String, core::int> map22 = <dynamic, dynamic>{};
core::List<core::List<core::int>> lhs23 = <dynamic>[<dynamic>[<dynamic>[]]];
core::Set<core::List<core::int>> set23 = <dynamic>{<dynamic>[<dynamic>[]], <core::int>[42]};
+ core::Set<core::List<core::int>> set23ambiguous = <dynamic, dynamic>{};
core::Map<core::String, core::List<core::int>> map23 = <dynamic, dynamic>{};
+ dynamic map24ambiguous = <dynamic, dynamic>{};
core::int lhs30 = <dynamic>[spread];
core::int set30 = <dynamic>{spread, 42};
+ core::int set30ambiguous = <dynamic, dynamic>{};
core::int map30 = <dynamic, dynamic>{"baz": 42};
+ core::int map30ambiguous = <dynamic, dynamic>{};
core::List<dynamic> lhs40 = <dynamic>[notSpreadInt];
core::Set<dynamic> set40 = <dynamic>{notSpreadInt};
core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{};
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 a8ade16..a45078f 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect
@@ -2,61 +2,88 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/spread_collection_inference.dart:56:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:48:76: Error: Not enough type information to disambiguate between literal set and literal map.
+// Try providing type arguments for the literal explicitly to disambiguate it.
+// dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:72:76: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
+// ^
+// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Context: Iterable spread.
+// spread, ...mapSpread};
+// ^
+// pkg/front_end/testcases/spread_collection_inference.dart:73:16: Context: Map spread.
+// spread, ...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:75:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
// - 'List' is from 'dart:core'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
// int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:58:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:77:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
// - 'Set' is from 'dart:core'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
// int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:61:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:80:5: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// - 'Set' is from 'dart:core'.
+// Try changing the type of the left hand side, or casting the right hand side to 'int'.
+// {...spread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:83:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
// - 'Map' is from 'dart:core'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
// {...mapSpread, "baz": 42};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:64:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:86:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// - 'Map' is from 'dart:core'.
+// Try changing the type of the left hand side, or casting the right hand side to 'int'.
+// {...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:89:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
// notSpreadInt];
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:67:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:92:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
// notSpreadInt};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Unexpected type 'int' of a map spread entry. Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Unexpected type 'int' of a map spread entry. Expected 'dynamic' or a Map.
// /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:98:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
// notSpreadFunction];
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:76:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:101:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
// notSpreadFunction};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Unexpected type 'int Function()' of a map spread entry. Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Unexpected type 'int Function()' of a map spread entry. Expected 'dynamic' or a Map.
// /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:82:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:107:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
// spread];
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:84:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:109:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
// Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
// /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
// /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
// ^
//
@@ -84,129 +111,179 @@
for (final core::MapEntry<dynamic, dynamic> #t6 in <dynamic, dynamic>{})
#t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
} =>#t5;
- core::List<core::int> lhs20 = block {
- final core::List<core::int> #t7 = <core::int>[];
- for (final core::int #t8 in spread)
- #t7.{core::List::add}(#t8);
+ core::Map<dynamic, dynamic> map10ambiguous = block {
+ final core::Map<dynamic, dynamic> #t7 = <dynamic, dynamic>{};
+ for (final core::MapEntry<dynamic, dynamic> #t8 in <dynamic, dynamic>{})
+ #t7.{core::Map::[]=}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
} =>#t7;
- core::Set<core::int> set20 = block {
- final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
+ core::List<core::int> lhs20 = block {
+ final core::List<core::int> #t9 = <core::int>[];
for (final core::int #t10 in spread)
- #t9.{core::Set::add}(#t10);
- #t9.{core::Set::add}(42);
+ #t9.{core::List::add}(#t10);
} =>#t9;
- core::Map<core::String, core::int> map20 = block {
- final core::Map<core::String, core::int> #t11 = <core::String, core::int>{};
- for (final core::MapEntry<core::String, core::int> #t12 in mapSpread)
- #t11.{core::Map::[]=}(#t12.{core::MapEntry::key}, #t12.{core::MapEntry::value});
- #t11.{core::Map::[]=}("baz", 42);
+ core::Set<core::int> set20 = block {
+ final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t12 in spread)
+ #t11.{core::Set::add}(#t12);
+ #t11.{core::Set::add}(42);
} =>#t11;
- core::List<dynamic> lhs21 = block {
- final core::List<dynamic> #t13 = <dynamic>[];
- for (final dynamic #t14 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
- #t13.{core::List::add}(#t14);
+ core::Set<core::int> set20ambiguous = block {
+ final core::Set<core::int> #t13 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t14 in spread)
+ #t13.{core::Set::add}(#t14);
} =>#t13;
- core::Set<dynamic> set21 = block {
- final core::Set<dynamic> #t15 = col::LinkedHashSet::•<dynamic>();
- for (final dynamic #t16 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
- #t15.{core::Set::add}(#t16);
- #t15.{core::Set::add}(42);
+ core::Map<core::String, core::int> map20 = block {
+ final core::Map<core::String, core::int> #t15 = <core::String, core::int>{};
+ for (final core::MapEntry<core::String, core::int> #t16 in mapSpread)
+ #t15.{core::Map::[]=}(#t16.{core::MapEntry::key}, #t16.{core::MapEntry::value});
+ #t15.{core::Map::[]=}("baz", 42);
} =>#t15;
- core::Map<dynamic, dynamic> map21 = block {
- final core::Map<dynamic, dynamic> #t17 = <dynamic, dynamic>{};
- for (final core::MapEntry<dynamic, dynamic> #t18 in (spread as dynamic) as{TypeError} core::Map<dynamic, dynamic>)
+ core::Map<core::String, core::int> map20ambiguous = block {
+ final core::Map<core::String, core::int> #t17 = <core::String, core::int>{};
+ for (final core::MapEntry<core::String, core::int> #t18 in mapSpread)
#t17.{core::Map::[]=}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
- #t17.{core::Map::[]=}("baz", 42);
} =>#t17;
- core::List<core::int> lhs22 = block {
- final core::List<core::int> #t19 = <core::int>[];
- for (final core::int #t20 in <core::int>[])
+ core::List<dynamic> lhs21 = block {
+ final core::List<dynamic> #t19 = <dynamic>[];
+ for (final dynamic #t20 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
#t19.{core::List::add}(#t20);
} =>#t19;
- core::Set<core::int> set22 = block {
- final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
- for (final core::int #t22 in <core::int>[])
+ core::Set<dynamic> set21 = block {
+ final core::Set<dynamic> #t21 = col::LinkedHashSet::•<dynamic>();
+ for (final dynamic #t22 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
#t21.{core::Set::add}(#t22);
#t21.{core::Set::add}(42);
} =>#t21;
- core::Map<core::String, core::int> map22 = block {
- final core::Map<core::String, core::int> #t23 = <core::String, core::int>{};
- for (final core::MapEntry<core::String, core::int> #t24 in <core::String, core::int>{})
+ core::Map<dynamic, dynamic> map21 = block {
+ final core::Map<dynamic, dynamic> #t23 = <dynamic, dynamic>{};
+ for (final core::MapEntry<dynamic, dynamic> #t24 in (mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>)
#t23.{core::Map::[]=}(#t24.{core::MapEntry::key}, #t24.{core::MapEntry::value});
+ #t23.{core::Map::[]=}("baz", 42);
} =>#t23;
- core::List<core::List<core::int>> lhs23 = block {
- final core::List<core::List<core::int>> #t25 = <core::List<core::int>>[];
- for (final core::List<core::int> #t26 in <core::List<core::int>>[<core::int>[]])
+ dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:48:76: Error: Not enough type information to disambiguate between literal set and literal map.
+Try providing type arguments for the literal explicitly to disambiguate it.
+ dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
+ ^";
+ core::List<core::int> lhs22 = block {
+ final core::List<core::int> #t25 = <core::int>[];
+ for (final core::int #t26 in <core::int>[])
#t25.{core::List::add}(#t26);
} =>#t25;
- core::Set<core::List<core::int>> set23 = block {
- final core::Set<core::List<core::int>> #t27 = col::LinkedHashSet::•<core::List<core::int>>();
- for (final core::List<core::int> #t28 in <core::List<core::int>>[<core::int>[]])
+ core::Set<core::int> set22 = block {
+ final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t28 in <core::int>[])
#t27.{core::Set::add}(#t28);
- #t27.{core::Set::add}(<core::int>[42]);
+ #t27.{core::Set::add}(42);
} =>#t27;
- core::Map<core::String, core::List<core::int>> map23 = block {
- final core::Map<core::String, core::List<core::int>> #t29 = <core::String, core::List<core::int>>{};
- for (final core::MapEntry<core::String, core::List<core::int>> #t30 in <core::String, core::List<core::int>>{"baz": <core::int>[]})
- #t29.{core::Map::[]=}(#t30.{core::MapEntry::key}, #t30.{core::MapEntry::value});
+ core::Set<core::int> set22ambiguous = block {
+ final core::Set<core::int> #t29 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t30 in <core::int>[])
+ #t29.{core::Set::add}(#t30);
} =>#t29;
- core::int lhs30 = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:56:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+ core::Map<core::String, core::int> map22 = block {
+ final core::Map<core::String, core::int> #t31 = <core::String, core::int>{};
+ for (final core::MapEntry<core::String, core::int> #t32 in <core::String, core::int>{})
+ #t31.{core::Map::[]=}(#t32.{core::MapEntry::key}, #t32.{core::MapEntry::value});
+ } =>#t31;
+ core::List<core::List<core::int>> lhs23 = block {
+ final core::List<core::List<core::int>> #t33 = <core::List<core::int>>[];
+ for (final core::List<core::int> #t34 in <core::List<core::int>>[<core::int>[]])
+ #t33.{core::List::add}(#t34);
+ } =>#t33;
+ core::Set<core::List<core::int>> set23 = block {
+ final core::Set<core::List<core::int>> #t35 = col::LinkedHashSet::•<core::List<core::int>>();
+ for (final core::List<core::int> #t36 in <core::List<core::int>>[<core::int>[]])
+ #t35.{core::Set::add}(#t36);
+ #t35.{core::Set::add}(<core::int>[42]);
+ } =>#t35;
+ core::Set<core::List<core::int>> set23ambiguous = block {
+ final core::Set<core::List<core::int>> #t37 = col::LinkedHashSet::•<core::List<core::int>>();
+ for (final core::List<core::int> #t38 in <core::List<core::int>>[<core::int>[]])
+ #t37.{core::Set::add}(#t38);
+ } =>#t37;
+ core::Map<core::String, core::List<core::int>> map23 = block {
+ final core::Map<core::String, core::List<core::int>> #t39 = <core::String, core::List<core::int>>{};
+ for (final core::MapEntry<core::String, core::List<core::int>> #t40 in <core::String, core::List<core::int>>{"baz": <core::int>[]})
+ #t39.{core::Map::[]=}(#t40.{core::MapEntry::key}, #t40.{core::MapEntry::value});
+ } =>#t39;
+ dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:72:76: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+ dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
+ ^";
+ core::int lhs30 = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:75:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
- 'List' is from 'dart:core'.
Try changing the type of the left hand side, or casting the right hand side to 'int'.
int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
^" in ( block {
- final core::List<core::int> #t32 = <core::int>[];
- for (final core::int #t33 in spread)
- #t32.{core::List::add}(#t33);
- } =>#t32) as{TypeError} core::int;
- core::int set30 = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:58:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ final core::List<core::int> #t42 = <core::int>[];
+ for (final core::int #t43 in spread)
+ #t42.{core::List::add}(#t43);
+ } =>#t42) as{TypeError} core::int;
+ core::int set30 = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:77:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
- 'Set' is from 'dart:core'.
Try changing the type of the left hand side, or casting the right hand side to 'int'.
int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
^" in ( block {
- final core::Set<core::int> #t35 = col::LinkedHashSet::•<core::int>();
- for (final core::int #t36 in spread)
- #t35.{core::Set::add}(#t36);
- #t35.{core::Set::add}(42);
- } =>#t35) as{TypeError} core::int;
- core::int map30 = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:61:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t46 in spread)
+ #t45.{core::Set::add}(#t46);
+ #t45.{core::Set::add}(42);
+ } =>#t45) as{TypeError} core::int;
+ core::int set30ambiguous = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:80:5: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ - 'Set' is from 'dart:core'.
+Try changing the type of the left hand side, or casting the right hand side to 'int'.
+ {...spread};
+ ^" in ( block {
+ final core::Set<core::int> #t48 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t49 in spread)
+ #t48.{core::Set::add}(#t49);
+ } =>#t48) as{TypeError} core::int;
+ core::int map30 = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:83:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
- 'Map' is from 'dart:core'.
Try changing the type of the left hand side, or casting the right hand side to 'int'.
{...mapSpread, \"baz\": 42};
^" in ( block {
- final core::Map<core::String, core::int> #t38 = <core::String, core::int>{};
- for (final core::MapEntry<core::String, core::int> #t39 in mapSpread)
- #t38.{core::Map::[]=}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
- #t38.{core::Map::[]=}("baz", 42);
- } =>#t38) as{TypeError} core::int;
- core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:64:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
+ final core::Map<core::String, core::int> #t51 = <core::String, core::int>{};
+ for (final core::MapEntry<core::String, core::int> #t52 in mapSpread)
+ #t51.{core::Map::[]=}(#t52.{core::MapEntry::key}, #t52.{core::MapEntry::value});
+ #t51.{core::Map::[]=}("baz", 42);
+ } =>#t51) as{TypeError} core::int;
+ core::int map30ambiguous = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:86:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ - 'Map' is from 'dart:core'.
+Try changing the type of the left hand side, or casting the right hand side to 'int'.
+ {...mapSpread};
+ ^" in ( block {
+ final core::Map<core::String, core::int> #t54 = <core::String, core::int>{};
+ for (final core::MapEntry<core::String, core::int> #t55 in mapSpread)
+ #t54.{core::Map::[]=}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
+ } =>#t54) as{TypeError} core::int;
+ core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:89:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
notSpreadInt];
^"];
- core::Set<dynamic> set40 = let final core::Set<dynamic> #t40 = col::LinkedHashSet::•<dynamic>() in let final dynamic #t41 = #t40.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:67:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
+ core::Set<dynamic> set40 = let final core::Set<dynamic> #t56 = col::LinkedHashSet::•<dynamic>() in let final dynamic #t57 = #t56.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:92:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
notSpreadInt};
- ^") in #t40;
- core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Unexpected type 'int' of a map spread entry. Expected 'dynamic' or a Map.
+ ^") in #t56;
+ core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Unexpected type 'int' of a map spread entry. Expected 'dynamic' or a Map.
/*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
^": null};
- core::List<dynamic> lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
+ core::List<dynamic> lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:98:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
notSpreadFunction];
^"];
- core::Set<dynamic> set50 = let final core::Set<dynamic> #t42 = col::LinkedHashSet::•<dynamic>() in let final dynamic #t43 = #t42.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:76:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
+ core::Set<dynamic> set50 = let final core::Set<dynamic> #t58 = col::LinkedHashSet::•<dynamic>() in let final dynamic #t59 = #t58.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:101:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
notSpreadFunction};
- ^") in #t42;
- core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Unexpected type 'int Function()' of a map spread entry. Expected 'dynamic' or a Map.
+ ^") in #t58;
+ core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Unexpected type 'int Function()' of a map spread entry. Expected 'dynamic' or a Map.
/*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
^": null};
- core::List<core::String> lhs60 = <core::String>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:82:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+ core::List<core::String> lhs60 = <core::String>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:107:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
spread];
^"];
- core::Set<core::String> set60 = let final core::Set<core::String> #t44 = col::LinkedHashSet::•<core::String>() in let final dynamic #t45 = #t44.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:84:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+ core::Set<core::String> set60 = let final core::Set<core::String> #t60 = col::LinkedHashSet::•<core::String>() in let final dynamic #t61 = #t60.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:109:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
- ^") in #t44;
- core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+ ^") in #t60;
+ core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
/*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
^": null};
- core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+ core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
/*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
^"};
}
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 34ef7b6..0f75319 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
@@ -2,61 +2,88 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/spread_collection_inference.dart:56:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:48:76: Error: Not enough type information to disambiguate between literal set and literal map.
+// Try providing type arguments for the literal explicitly to disambiguate it.
+// dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:72:76: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
+// ^
+// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Context: Iterable spread.
+// spread, ...mapSpread};
+// ^
+// pkg/front_end/testcases/spread_collection_inference.dart:73:16: Context: Map spread.
+// spread, ...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:75:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
// - 'List' is from 'dart:core'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
// int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:58:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:77:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
// - 'Set' is from 'dart:core'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
// int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:61:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:80:5: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// - 'Set' is from 'dart:core'.
+// Try changing the type of the left hand side, or casting the right hand side to 'int'.
+// {...spread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:83:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
// - 'Map' is from 'dart:core'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
// {...mapSpread, "baz": 42};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:64:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:86:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// - 'Map' is from 'dart:core'.
+// Try changing the type of the left hand side, or casting the right hand side to 'int'.
+// {...mapSpread};
+// ^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:89:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
// notSpreadInt];
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:67:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:92:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
// notSpreadInt};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Unexpected type 'int' of a map spread entry. Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Unexpected type 'int' of a map spread entry. Expected 'dynamic' or a Map.
// /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:98:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
// notSpreadFunction];
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:76:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:101:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
// notSpreadFunction};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Unexpected type 'int Function()' of a map spread entry. Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Unexpected type 'int Function()' of a map spread entry. Expected 'dynamic' or a Map.
// /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:82:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:107:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
// spread];
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:84:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:109:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
// Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
// /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
// ^
//
-// pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
// /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
// ^
//
@@ -84,129 +111,179 @@
for (final core::MapEntry<dynamic, dynamic> #t6 in <dynamic, dynamic>{})
#t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
} =>#t5;
- core::List<core::int> lhs20 = block {
- final core::List<core::int> #t7 = <core::int>[];
- for (final core::int #t8 in spread)
- #t7.{core::List::add}(#t8);
+ core::Map<dynamic, dynamic> map10ambiguous = block {
+ final core::Map<dynamic, dynamic> #t7 = <dynamic, dynamic>{};
+ for (final core::MapEntry<dynamic, dynamic> #t8 in <dynamic, dynamic>{})
+ #t7.{core::Map::[]=}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
} =>#t7;
- core::Set<core::int> set20 = block {
- final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
+ core::List<core::int> lhs20 = block {
+ final core::List<core::int> #t9 = <core::int>[];
for (final core::int #t10 in spread)
- #t9.{core::Set::add}(#t10);
- #t9.{core::Set::add}(42);
+ #t9.{core::List::add}(#t10);
} =>#t9;
- core::Map<core::String, core::int> map20 = block {
- final core::Map<core::String, core::int> #t11 = <core::String, core::int>{};
- for (final core::MapEntry<core::String, core::int> #t12 in mapSpread)
- #t11.{core::Map::[]=}(#t12.{core::MapEntry::key}, #t12.{core::MapEntry::value});
- #t11.{core::Map::[]=}("baz", 42);
+ core::Set<core::int> set20 = block {
+ final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t12 in spread)
+ #t11.{core::Set::add}(#t12);
+ #t11.{core::Set::add}(42);
} =>#t11;
- core::List<dynamic> lhs21 = block {
- final core::List<dynamic> #t13 = <dynamic>[];
- for (final dynamic #t14 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
- #t13.{core::List::add}(#t14);
+ core::Set<core::int> set20ambiguous = block {
+ final core::Set<core::int> #t13 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t14 in spread)
+ #t13.{core::Set::add}(#t14);
} =>#t13;
- core::Set<dynamic> set21 = block {
- final core::Set<dynamic> #t15 = col::LinkedHashSet::•<dynamic>();
- for (final dynamic #t16 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
- #t15.{core::Set::add}(#t16);
- #t15.{core::Set::add}(42);
+ core::Map<core::String, core::int> map20 = block {
+ final core::Map<core::String, core::int> #t15 = <core::String, core::int>{};
+ for (final core::MapEntry<core::String, core::int> #t16 in mapSpread)
+ #t15.{core::Map::[]=}(#t16.{core::MapEntry::key}, #t16.{core::MapEntry::value});
+ #t15.{core::Map::[]=}("baz", 42);
} =>#t15;
- core::Map<dynamic, dynamic> map21 = block {
- final core::Map<dynamic, dynamic> #t17 = <dynamic, dynamic>{};
- for (final core::MapEntry<dynamic, dynamic> #t18 in (spread as dynamic) as{TypeError} core::Map<dynamic, dynamic>)
+ core::Map<core::String, core::int> map20ambiguous = block {
+ final core::Map<core::String, core::int> #t17 = <core::String, core::int>{};
+ for (final core::MapEntry<core::String, core::int> #t18 in mapSpread)
#t17.{core::Map::[]=}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
- #t17.{core::Map::[]=}("baz", 42);
} =>#t17;
- core::List<core::int> lhs22 = block {
- final core::List<core::int> #t19 = <core::int>[];
- for (final core::int #t20 in <core::int>[])
+ core::List<dynamic> lhs21 = block {
+ final core::List<dynamic> #t19 = <dynamic>[];
+ for (final dynamic #t20 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
#t19.{core::List::add}(#t20);
} =>#t19;
- core::Set<core::int> set22 = block {
- final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
- for (final core::int #t22 in <core::int>[])
+ core::Set<dynamic> set21 = block {
+ final core::Set<dynamic> #t21 = col::LinkedHashSet::•<dynamic>();
+ for (final dynamic #t22 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
#t21.{core::Set::add}(#t22);
#t21.{core::Set::add}(42);
} =>#t21;
- core::Map<core::String, core::int> map22 = block {
- final core::Map<core::String, core::int> #t23 = <core::String, core::int>{};
- for (final core::MapEntry<core::String, core::int> #t24 in <core::String, core::int>{})
+ core::Map<dynamic, dynamic> map21 = block {
+ final core::Map<dynamic, dynamic> #t23 = <dynamic, dynamic>{};
+ for (final core::MapEntry<dynamic, dynamic> #t24 in (mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>)
#t23.{core::Map::[]=}(#t24.{core::MapEntry::key}, #t24.{core::MapEntry::value});
+ #t23.{core::Map::[]=}("baz", 42);
} =>#t23;
- core::List<core::List<core::int>> lhs23 = block {
- final core::List<core::List<core::int>> #t25 = <core::List<core::int>>[];
- for (final core::List<core::int> #t26 in <core::List<core::int>>[<core::int>[]])
+ dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:48:76: Error: Not enough type information to disambiguate between literal set and literal map.
+Try providing type arguments for the literal explicitly to disambiguate it.
+ dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
+ ^";
+ core::List<core::int> lhs22 = block {
+ final core::List<core::int> #t25 = <core::int>[];
+ for (final core::int #t26 in <core::int>[])
#t25.{core::List::add}(#t26);
} =>#t25;
- core::Set<core::List<core::int>> set23 = block {
- final core::Set<core::List<core::int>> #t27 = col::LinkedHashSet::•<core::List<core::int>>();
- for (final core::List<core::int> #t28 in <core::List<core::int>>[<core::int>[]])
+ core::Set<core::int> set22 = block {
+ final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t28 in <core::int>[])
#t27.{core::Set::add}(#t28);
- #t27.{core::Set::add}(<core::int>[42]);
+ #t27.{core::Set::add}(42);
} =>#t27;
- core::Map<core::String, core::List<core::int>> map23 = block {
- final core::Map<core::String, core::List<core::int>> #t29 = <core::String, core::List<core::int>>{};
- for (final core::MapEntry<core::String, core::List<core::int>> #t30 in <core::String, core::List<core::int>>{"baz": <core::int>[]})
- #t29.{core::Map::[]=}(#t30.{core::MapEntry::key}, #t30.{core::MapEntry::value});
+ core::Set<core::int> set22ambiguous = block {
+ final core::Set<core::int> #t29 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t30 in <core::int>[])
+ #t29.{core::Set::add}(#t30);
} =>#t29;
- core::int lhs30 = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:56:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+ core::Map<core::String, core::int> map22 = block {
+ final core::Map<core::String, core::int> #t31 = <core::String, core::int>{};
+ for (final core::MapEntry<core::String, core::int> #t32 in <core::String, core::int>{})
+ #t31.{core::Map::[]=}(#t32.{core::MapEntry::key}, #t32.{core::MapEntry::value});
+ } =>#t31;
+ core::List<core::List<core::int>> lhs23 = block {
+ final core::List<core::List<core::int>> #t33 = <core::List<core::int>>[];
+ for (final core::List<core::int> #t34 in <core::List<core::int>>[<core::int>[]])
+ #t33.{core::List::add}(#t34);
+ } =>#t33;
+ core::Set<core::List<core::int>> set23 = block {
+ final core::Set<core::List<core::int>> #t35 = col::LinkedHashSet::•<core::List<core::int>>();
+ for (final core::List<core::int> #t36 in <core::List<core::int>>[<core::int>[]])
+ #t35.{core::Set::add}(#t36);
+ #t35.{core::Set::add}(<core::int>[42]);
+ } =>#t35;
+ core::Set<core::List<core::int>> set23ambiguous = block {
+ final core::Set<core::List<core::int>> #t37 = col::LinkedHashSet::•<core::List<core::int>>();
+ for (final core::List<core::int> #t38 in <core::List<core::int>>[<core::int>[]])
+ #t37.{core::Set::add}(#t38);
+ } =>#t37;
+ core::Map<core::String, core::List<core::int>> map23 = block {
+ final core::Map<core::String, core::List<core::int>> #t39 = <core::String, core::List<core::int>>{};
+ for (final core::MapEntry<core::String, core::List<core::int>> #t40 in <core::String, core::List<core::int>>{"baz": <core::int>[]})
+ #t39.{core::Map::[]=}(#t40.{core::MapEntry::key}, #t40.{core::MapEntry::value});
+ } =>#t39;
+ dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:72:76: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+ dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
+ ^";
+ core::int lhs30 = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:75:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
- 'List' is from 'dart:core'.
Try changing the type of the left hand side, or casting the right hand side to 'int'.
int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
^" in ( block {
- final core::List<core::int> #t32 = <core::int>[];
- for (final core::int #t33 in spread)
- #t32.{core::List::add}(#t33);
- } =>#t32) as{TypeError} core::int;
- core::int set30 = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:58:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ final core::List<core::int> #t42 = <core::int>[];
+ for (final core::int #t43 in spread)
+ #t42.{core::List::add}(#t43);
+ } =>#t42) as{TypeError} core::int;
+ core::int set30 = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:77:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
- 'Set' is from 'dart:core'.
Try changing the type of the left hand side, or casting the right hand side to 'int'.
int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
^" in ( block {
- final core::Set<core::int> #t35 = col::LinkedHashSet::•<core::int>();
- for (final core::int #t36 in spread)
- #t35.{core::Set::add}(#t36);
- #t35.{core::Set::add}(42);
- } =>#t35) as{TypeError} core::int;
- core::int map30 = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:61:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t46 in spread)
+ #t45.{core::Set::add}(#t46);
+ #t45.{core::Set::add}(42);
+ } =>#t45) as{TypeError} core::int;
+ core::int set30ambiguous = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:80:5: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ - 'Set' is from 'dart:core'.
+Try changing the type of the left hand side, or casting the right hand side to 'int'.
+ {...spread};
+ ^" in ( block {
+ final core::Set<core::int> #t48 = col::LinkedHashSet::•<core::int>();
+ for (final core::int #t49 in spread)
+ #t48.{core::Set::add}(#t49);
+ } =>#t48) as{TypeError} core::int;
+ core::int map30 = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:83:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
- 'Map' is from 'dart:core'.
Try changing the type of the left hand side, or casting the right hand side to 'int'.
{...mapSpread, \"baz\": 42};
^" in ( block {
- final core::Map<core::String, core::int> #t38 = <core::String, core::int>{};
- for (final core::MapEntry<core::String, core::int> #t39 in mapSpread)
- #t38.{core::Map::[]=}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
- #t38.{core::Map::[]=}("baz", 42);
- } =>#t38) as{TypeError} core::int;
- core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:64:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
+ final core::Map<core::String, core::int> #t51 = <core::String, core::int>{};
+ for (final core::MapEntry<core::String, core::int> #t52 in mapSpread)
+ #t51.{core::Map::[]=}(#t52.{core::MapEntry::key}, #t52.{core::MapEntry::value});
+ #t51.{core::Map::[]=}("baz", 42);
+ } =>#t51) as{TypeError} core::int;
+ core::int map30ambiguous = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:86:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ - 'Map' is from 'dart:core'.
+Try changing the type of the left hand side, or casting the right hand side to 'int'.
+ {...mapSpread};
+ ^" in ( block {
+ final core::Map<core::String, core::int> #t54 = <core::String, core::int>{};
+ for (final core::MapEntry<core::String, core::int> #t55 in mapSpread)
+ #t54.{core::Map::[]=}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
+ } =>#t54) as{TypeError} core::int;
+ core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:89:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
notSpreadInt];
^"];
- core::Set<dynamic> set40 = let final core::Set<dynamic> #t40 = col::LinkedHashSet::•<dynamic>() in let final core::bool #t41 = #t40.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:67:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
+ core::Set<dynamic> set40 = let final core::Set<dynamic> #t56 = col::LinkedHashSet::•<dynamic>() in let final core::bool #t57 = #t56.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:92:5: Error: Unexpected type 'int' of a spread. Expected 'dynamic' or an Iterable.
notSpreadInt};
- ^") in #t40;
- core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Unexpected type 'int' of a map spread entry. Expected 'dynamic' or a Map.
+ ^") in #t56;
+ core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Unexpected type 'int' of a map spread entry. Expected 'dynamic' or a Map.
/*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
^": null};
- core::List<dynamic> lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
+ core::List<dynamic> lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:98:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
notSpreadFunction];
^"];
- core::Set<dynamic> set50 = let final core::Set<dynamic> #t42 = col::LinkedHashSet::•<dynamic>() in let final core::bool #t43 = #t42.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:76:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
+ core::Set<dynamic> set50 = let final core::Set<dynamic> #t58 = col::LinkedHashSet::•<dynamic>() in let final core::bool #t59 = #t58.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:101:5: Error: Unexpected type 'int Function()' of a spread. Expected 'dynamic' or an Iterable.
notSpreadFunction};
- ^") in #t42;
- core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Unexpected type 'int Function()' of a map spread entry. Expected 'dynamic' or a Map.
+ ^") in #t58;
+ core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Unexpected type 'int Function()' of a map spread entry. Expected 'dynamic' or a Map.
/*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
^": null};
- core::List<core::String> lhs60 = <core::String>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:82:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+ core::List<core::String> lhs60 = <core::String>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:107:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
spread];
^"];
- core::Set<core::String> set60 = let final core::Set<core::String> #t44 = col::LinkedHashSet::•<core::String>() in let final core::bool #t45 = #t44.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:84:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+ core::Set<core::String> set60 = let final core::Set<core::String> #t60 = col::LinkedHashSet::•<core::String>() in let final core::bool #t61 = #t60.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:109:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
- ^") in #t44;
- core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+ ^") in #t60;
+ core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
/*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
^": null};
- core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+ core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
/*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
^"};
}