Version 2.0.0-dev.30.0
Merge commit '6332160798ee4cfb8ce99683f3c315671832e61f' into dev
diff --git a/.packages b/.packages
index 1727351..f306f3b 100644
--- a/.packages
+++ b/.packages
@@ -101,7 +101,6 @@
testing:pkg/testing/lib
tuple:third_party/pkg/tuple/lib
typed_data:third_party/pkg/typed_data/lib
-typed_mock:pkg/typed_mock/lib
unittest:third_party/pkg/unittest/lib
usage:third_party/pkg/usage/lib
utf:third_party/pkg/utf/lib
diff --git a/CHANGELOG.md b/CHANGELOG.md
index adfbe9a..d07d323 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -79,6 +79,7 @@
* `dart:core`
+ * `BigInt` class added to support integers greater than 64-bits.
* Deprecated the `proxy` annotation.
* Added `Provisional` class and `provisional` field.
* `RegExp` added static `escape` function.
@@ -123,19 +124,35 @@
`ZERO` to `zero`.
* `dart:developer`
+
+ * `Flow` class added.
* `Timeline.startSync` and `Timeline.timeSync` now accept an optional
parameter `flow` of type `Flow`. The `flow` parameter is used to generate
flow timeline events that are enclosed by the slice described by
`Timeline.{start,finish}Sync` and `Timeline.timeSync`.
+<!--
+Still need entries for all changes to dart:html since 1.x
+-->
+
* `dart:io`
+
+ * `HttpStatus` added `UPGRADE_REQUIRED`.
+ * `IOOverrides` and `HttpOverrides` added to aid in writing tests that wish to
+ mock varios `dart:io` objects.
+ * `Platform.operatingSystemVersion` added that gives a platform-specific
+ String describing the version of the operating system.
+ * `ProcessStartMode.INHERIT_STDIO` added, which allows a child process to
+ inherit the parent's stdio handles.
+ * `RawZLibFilter` added for low-level access to compression and
+ decompression routines.
* Unified backends for `SecureSocket`, `SecurityContext`, and
`X509Certificate` to be consistent across all platforms. All
`SecureSocket`, `SecurityContext`, and `X509Certificate` properties and
methods are now supported on iOS and OSX.
- * Deprecated `SecurityContext.alpnSupported` as ALPN is now supported on all
+ * `SecurityContext.alpnSupported` deprecated as ALPN is now supported on all
platforms.
- * Added `withTrustedRoots` named optional parameter to `SecurityContext`
+ * `SecurityContext`: added `withTrustedRoots` named optional parameter
constructor, which defaults to false.
* Added a `timeout` parameter to `Socket.connect`, `RawSocket.connect`,
`SecureSocket.connect` and `RawSecureSocket.connect`. If a connection attempt
@@ -143,28 +160,33 @@
will be thrown. Note: if the duration specified in `timeout` is greater than
the OS level timeout, a timeout may occur sooner than specified in
`timeout`.
- * Added `Platform.operatingSystemVersion` that gives a platform-specific
- String describing the version of the operating system.
- * Added `RawZLibFilter` for low-level access to compression and
- decompression routines.
- * Added `IOOverrides` and `HttpOverrides` to aid in writing tests that wish to
- mock varios `dart:io` objects.
- * Added `Stdin.hasTerminal`, which is true if stdin is attached to a terminal.
- * Added `ProcessStartMode.INHERIT_STDIO`, which allows a child process to
- inherit the parent's stdio handles.
+ * `Stdin.hasTerminal` added, which is true if stdin is attached to a terminal.
+ * `WebSocket` added static `userAgent` property.
* `dart:isolate`
- * Rename `IMMEDIATE` and `BEFORE_NEXT_EVENT` on `Isolate` to `immediate` and
- `beforeNextEvent`.
+
* Make `Isolate.spawn` take a type parameter representing the argument type
of the provided function. This allows functions with arguments types other
than `Object` in strong mode.
+ * Rename `IMMEDIATE` and `BEFORE_NEXT_EVENT` on `Isolate` to `immediate` and
+ `beforeNextEvent`.
+
+<!--
+Still need entries for all changes to dart:js since 1.x
+-->
* `dart.math`
+
* Renamed `E`, `LN10`, `LN`, `LOG2E`, `LOG10E`, `PI`, `SQRT1_2` and `SQRT2`
to `e`, `ln10`, `ln`, `log2e`, `log10e`, `pi`, `sqrt1_2` and `sqrt2`.
+<!--
+Still need entries for all changes to dart:svg since 1.x
+-->
+
* `dart:typed_data`
+
+ * Added `Unmodifiable` view classes over all `List` types.
* Renamed `BYTES_PER_ELEMENT` to `bytesPerElement` on all typed data lists.
* Renamed constants `XXXX` through `WWWW` on `Float32x4` and `Int32x4` to
lower-case `xxxx` through `wwww`.
@@ -172,6 +194,10 @@
`BIG_ENDIAN`, `LITTLE_ENDIAN` and `HOST_ENDIAN` to
`little`, `big` and `host`.
+<!--
+Still need entries for all changes to dart:web_audio,web_gl,web_sql since 1.x
+-->
+
### Dart VM
* Support for MIPS has been removed.
diff --git a/DEPS b/DEPS
index 14bad64..f7bafe3 100644
--- a/DEPS
+++ b/DEPS
@@ -81,7 +81,7 @@
# minutes later.
#
# For more details, see https://github.com/dart-lang/sdk/issues/30164
- "dart_style_tag": "@1.0.9", # Please see the note above before updating.
+ "dart_style_tag": "@1.0.10", # Please see the note above before updating.
"dartdoc_tag" : "@v0.16.0",
"fixnum_tag": "@0.10.5",
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 0cdf43b..002314b 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -115,6 +115,7 @@
("tests/corelib/", "tests/corelib_2/"),
("tests/lib/", "tests/lib_2/"),
("tests/html/", "tests/lib_2/html/"),
+ ("tests/isolate/", "tests/lib_2/isolate/")
]
result = []
diff --git a/docs/language/informal/generalized-void.md b/docs/language/informal/generalized-void.md
index 90bf55f..6b5718a 100644
--- a/docs/language/informal/generalized-void.md
+++ b/docs/language/informal/generalized-void.md
@@ -287,22 +287,9 @@
open for the cases where the developer knows that the typing misrepresents
the actual situation.*
-We define void equivalent types inductively as follows: A type `T` is
-_void equivalent_ if `T` is `void` or `T` is a type of the form
-`FutureOr<S>` where `S` is a void equivalent type.
-
-*The subtype rules for `FutureOr` ensure that whenever `T` is a void
-equivalent type we can show `T <: void` and `void <: T`. In that sense we
-may consider void equivalent types to be "the same type". However, we will
-not necessarily treat them identically for all purposes. For instance,
-it is useful to be able to test `if (x is Future<void>) ..` in the case
-where `x` is a variable of type `FutureOr<void>`, but that is not allowed
-when `x` has type `void`.*
-
It is a static warning (in Dart 2: a compile-time error) if a return
statement `return e;` occurs such that the innermost enclosing function
-has return type `void` and the static type of `e` is not a void equivalent
-type.
+has return type `void` and the static type of `e` is not the type void.
It is a static warning (in Dart 2: a compile-time error) if a function
marked `async*`, or `sync*` has return type `void`.
diff --git a/pkg/analysis_server/lib/src/search/search_domain.dart b/pkg/analysis_server/lib/src/search/search_domain.dart
index cb7f02f..6ed9709 100644
--- a/pkg/analysis_server/lib/src/search/search_domain.dart
+++ b/pkg/analysis_server/lib/src/search/search_domain.dart
@@ -11,6 +11,7 @@
import 'package:analysis_server/src/search/type_hierarchy.dart';
import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/analysis/search.dart' as search;
/**
* Instances of the class [SearchDomainHandler] implement a [RequestHandler]
@@ -158,6 +159,65 @@
server.sendResponse(response);
}
+ /**
+ * Implement the `search.getDeclarations` request.
+ */
+ Future getDeclarations(protocol.Request request) async {
+ var files = <String>[];
+ var declarations = <search.Declaration>[];
+
+ protocol.ElementKind getElementKind(search.DeclarationKind kind) {
+ switch (kind) {
+ case search.DeclarationKind.CLASS:
+ return protocol.ElementKind.CLASS;
+ case search.DeclarationKind.CLASS_TYPE_ALIAS:
+ return protocol.ElementKind.CLASS_TYPE_ALIAS;
+ case search.DeclarationKind.CONSTRUCTOR:
+ return protocol.ElementKind.CONSTRUCTOR;
+ case search.DeclarationKind.ENUM:
+ return protocol.ElementKind.ENUM;
+ case search.DeclarationKind.ENUM_CONSTANT:
+ return protocol.ElementKind.ENUM_CONSTANT;
+ case search.DeclarationKind.FIELD:
+ return protocol.ElementKind.FIELD;
+ case search.DeclarationKind.FUNCTION:
+ return protocol.ElementKind.FUNCTION;
+ case search.DeclarationKind.FUNCTION_TYPE_ALIAS:
+ return protocol.ElementKind.FUNCTION_TYPE_ALIAS;
+ case search.DeclarationKind.GETTER:
+ return protocol.ElementKind.GETTER;
+ case search.DeclarationKind.METHOD:
+ return protocol.ElementKind.METHOD;
+ case search.DeclarationKind.SETTER:
+ return protocol.ElementKind.SETTER;
+ case search.DeclarationKind.VARIABLE:
+ return protocol.ElementKind.TOP_LEVEL_VARIABLE;
+ default:
+ return protocol.ElementKind.CLASS;
+ }
+ }
+
+ for (var driver in server.driverMap.values.toList()) {
+ var driverDeclarations = await driver.search.declarations(files);
+ declarations.addAll(driverDeclarations);
+ }
+
+ List<protocol.ElementDeclaration> elementDeclarations =
+ declarations.map((declaration) {
+ return new protocol.ElementDeclaration(
+ declaration.name,
+ getElementKind(declaration.kind),
+ declaration.fileIndex,
+ declaration.offset,
+ declaration.line,
+ declaration.column);
+ }).toList();
+
+ server.sendResponse(new protocol.SearchGetElementDeclarationsResult(
+ elementDeclarations, files)
+ .toResponse(request.id));
+ }
+
@override
protocol.Response handleRequest(protocol.Request request) {
try {
@@ -174,6 +234,9 @@
} else if (requestName == SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS) {
findTopLevelDeclarations(request);
return protocol.Response.DELAYED_RESPONSE;
+ } else if (requestName == SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS) {
+ getDeclarations(request);
+ return protocol.Response.DELAYED_RESPONSE;
} else if (requestName == SEARCH_REQUEST_GET_TYPE_HIERARCHY) {
getTypeHierarchy(request);
return protocol.Response.DELAYED_RESPONSE;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
index 17fc0c5..1e5973c 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
@@ -106,7 +106,6 @@
void _addSuggestion(
ClassDeclaration classDecl, ConstructorDeclaration constructorDecl) {
String completion = classDecl.name.name;
- SimpleIdentifier elemId;
ClassElement classElement =
resolutionMap.elementDeclaredByClassDeclaration(classDecl);
@@ -116,29 +115,30 @@
return;
}
- // Build a suggestion for explicitly declared constructor
if (constructorDecl != null) {
- elemId = constructorDecl.name;
- ConstructorElement elem = constructorDecl.element;
- if (elemId != null) {
- String name = elemId.name;
- if (name != null && name.length > 0) {
- completion = '$completion.$name';
- }
+ // Build a suggestion for explicitly declared constructor
+ ConstructorElement element = constructorDecl.element;
+ if (element == null) {
+ return;
}
- if (elem != null) {
- CompletionSuggestion suggestion = createSuggestion(elem,
- completion: completion, relevance: relevance);
- if (suggestion != null) {
- suggestions.add(suggestion);
- }
+ if (classElement.isAbstract && !element.isFactory) {
+ return;
}
- }
- // Build a suggestion for an implicit constructor
- else {
+ String name = constructorDecl.name?.name;
+ if (name != null && name.length > 0) {
+ completion = '$completion.$name';
+ }
+
+ CompletionSuggestion suggestion = createSuggestion(element,
+ completion: completion, relevance: relevance);
+ if (suggestion != null) {
+ suggestions.add(suggestion);
+ }
+ } else if (!classElement.isAbstract) {
+ // Build a suggestion for an implicit constructor
protocol.Element element = createLocalElement(
- request.source, protocol.ElementKind.CONSTRUCTOR, elemId,
+ request.source, protocol.ElementKind.CONSTRUCTOR, null,
parameters: '()');
element.returnType = classDecl.name.name;
CompletionSuggestion suggestion = new CompletionSuggestion(
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
index e54e3fb..ddf51d0 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
@@ -147,19 +147,24 @@
void _addConstructorSuggestions(ClassElement classElem, int relevance) {
String className = classElem.name;
for (ConstructorElement constructor in classElem.constructors) {
- if (!constructor.isPrivate) {
- CompletionSuggestion suggestion =
- createSuggestion(constructor, relevance: relevance);
- if (suggestion != null) {
- String name = suggestion.completion;
- name = name.length > 0 ? '$className.$name' : className;
- if (prefix != null && prefix.length > 0) {
- name = '$prefix.$name';
- }
- suggestion.completion = name;
- suggestion.selectionOffset = suggestion.completion.length;
- suggestions.add(suggestion);
+ if (constructor.isPrivate) {
+ continue;
+ }
+ if (classElem.isAbstract && !constructor.isFactory) {
+ continue;
+ }
+
+ CompletionSuggestion suggestion =
+ createSuggestion(constructor, relevance: relevance);
+ if (suggestion != null) {
+ String name = suggestion.completion;
+ name = name.length > 0 ? '$className.$name' : className;
+ if (prefix != null && prefix.length > 0) {
+ name = '$prefix.$name';
}
+ suggestion.completion = name;
+ suggestion.selectionOffset = suggestion.completion.length;
+ suggestions.add(suggestion);
}
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index ce93b73..b33abd7 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -145,6 +145,8 @@
'CREATE_MISSING_OVERRIDES', 49, "Create {0} missing override(s)");
static const CREATE_NO_SUCH_METHOD = const FixKind(
'CREATE_NO_SUCH_METHOD', 51, "Create 'noSuchMethod' method");
+ static const CONVERT_TO_NAMED_ARGUMENTS = const FixKind(
+ 'CONVERT_TO_NAMED_ARGUMENTS', 50, "Convert to named arguments");
static const IMPORT_LIBRARY_PREFIX = const FixKind('IMPORT_LIBRARY_PREFIX',
51, "Use imported library '{0}' with prefix '{1}'");
static const IMPORT_LIBRARY_PROJECT1 =
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 9448811..101583e 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -330,6 +330,10 @@
await _addFix_createClass();
await _addFix_undefinedClass_useSimilar();
}
+ if (errorCode ==
+ StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED) {
+ await _addFix_convertToNamedArgument();
+ }
if (errorCode == StaticWarningCode.FINAL_NOT_INITIALIZED) {
await _addFix_createConstructor_forUninitializedFinalFields();
}
@@ -842,6 +846,74 @@
}
}
+ Future<Null> _addFix_convertToNamedArgument() async {
+ var argumentList = this.node;
+ if (argumentList is ArgumentList) {
+ // Prepare ExecutableElement.
+ ExecutableElement executable;
+ var parent = argumentList.parent;
+ if (parent is InstanceCreationExpression) {
+ executable = parent.staticElement;
+ } else if (parent is MethodInvocation) {
+ executable = parent.methodName.staticElement;
+ }
+ if (executable == null) {
+ return;
+ }
+
+ // Prepare named parameters.
+ int numberOfPositionalParameters = 0;
+ var namedParameters = <ParameterElement>[];
+ for (var parameter in executable.parameters) {
+ if (parameter.parameterKind == ParameterKind.NAMED) {
+ namedParameters.add(parameter);
+ } else {
+ numberOfPositionalParameters++;
+ }
+ }
+ if (argumentList.arguments.length <= numberOfPositionalParameters) {
+ return;
+ }
+
+ // Find named parameters for extra arguments.
+ var argumentToParameter = <Expression, ParameterElement>{};
+ Iterable<Expression> extraArguments =
+ argumentList.arguments.skip(numberOfPositionalParameters);
+ for (var argument in extraArguments) {
+ if (argument is! NamedExpression) {
+ ParameterElement uniqueNamedParameter = null;
+ for (var namedParameter in namedParameters) {
+ if (typeSystem.isSubtypeOf(
+ argument.staticType, namedParameter.type)) {
+ if (uniqueNamedParameter == null) {
+ uniqueNamedParameter = namedParameter;
+ } else {
+ uniqueNamedParameter = null;
+ break;
+ }
+ }
+ }
+ if (uniqueNamedParameter != null) {
+ argumentToParameter[argument] = uniqueNamedParameter;
+ namedParameters.remove(uniqueNamedParameter);
+ }
+ }
+ }
+ if (argumentToParameter.isEmpty) {
+ return;
+ }
+
+ DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+ await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+ for (var argument in argumentToParameter.keys) {
+ var parameter = argumentToParameter[argument];
+ builder.addSimpleInsertion(argument.offset, '${parameter.name}: ');
+ }
+ });
+ _addFixFromBuilder(changeBuilder, DartFixKind.CONVERT_TO_NAMED_ARGUMENTS);
+ }
+ }
+
Future<Null> _addFix_createClass() async {
Element prefixElement = null;
String name = null;
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 3ec06b6..bd0864c 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -83,9 +83,9 @@
Source addSource(String path, String content, [Uri uri]) {
File file = newFile(path, content: content);
Source source = file.createSource(uri);
- driver.addFile(path);
- driver.changeFile(path);
- _fileContentOverlay[path] = content;
+ driver.addFile(file.path);
+ driver.changeFile(file.path);
+ _fileContentOverlay[file.path] = content;
return source;
}
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index 18a5002..1ea09b0 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -118,7 +118,7 @@
Future<Null> resolveTestUnit(String code) async {
addTestSource(code);
- testAnalysisResult = await driver.getResult(testFile);
+ testAnalysisResult = await driver.getResult(convertPath(testFile));
testUnit = testAnalysisResult.unit;
if (verifyNoTestUnitErrors) {
expect(testAnalysisResult.errors.where((AnalysisError error) {
diff --git a/pkg/analysis_server/test/benchmarks_test.dart b/pkg/analysis_server/test/benchmarks_test.dart
index 4064bbb..6b3437c 100644
--- a/pkg/analysis_server/test/benchmarks_test.dart
+++ b/pkg/analysis_server/test/benchmarks_test.dart
@@ -38,22 +38,24 @@
reason: 'exit: ${r.exitCode}\n${r.stdout}\n${r.stderr}');
});
- test('$benchmarkId-use-cfe', () {
- ProcessResult r = Process.runSync(
- Platform.resolvedExecutable,
- [
- path.join('benchmark', 'benchmarks.dart'),
- 'run',
- '--repeat=1',
- '--quick',
- '--use-cfe',
- benchmarkId
- ],
- workingDirectory: _serverSourcePath,
- );
- expect(r.exitCode, 0,
- reason: 'exit: ${r.exitCode}\n${r.stdout}\n${r.stderr}');
- });
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // test('$benchmarkId-use-cfe', () {
+ // ProcessResult r = Process.runSync(
+ // Platform.resolvedExecutable,
+ // [
+ // path.join('benchmark', 'benchmarks.dart'),
+ // 'run',
+ // '--repeat=1',
+ // '--quick',
+ // '--use-cfe',
+ // benchmarkId
+ // ],
+ // workingDirectory: _serverSourcePath,
+ // );
+ // expect(r.exitCode, 0,
+ // reason: 'exit: ${r.exitCode}\n${r.stdout}\n${r.stderr}');
+ // });
}
});
}
diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart
index c56fb03..a69de4a 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_test.dart
@@ -12,7 +12,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AnalysisErrorIntegrationTest);
- defineReflectiveTests(AnalysisErrorIntegrationTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(AnalysisErrorIntegrationTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
index a4912ac..b106bf0 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
@@ -12,7 +12,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(GetErrorsTest);
- defineReflectiveTests(GetErrorsTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(GetErrorsTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
index 655fa65..08f8e52 100644
--- a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
@@ -15,7 +15,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest);
- defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index 5174ef4..7054ac4 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -12,7 +12,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(OccurrencesTest);
- defineReflectiveTests(OccurrencesTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(OccurrencesTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/analysis/outline_test.dart b/pkg/analysis_server/test/integration/analysis/outline_test.dart
index 0d5dc43..6886e9c 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart
@@ -12,7 +12,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(OutlineTest);
- defineReflectiveTests(OutlineTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(OutlineTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/analysis/package_root_test.dart b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
index 5cca2f0..4411cc6 100644
--- a/pkg/analysis_server/test/integration/analysis/package_root_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
@@ -13,7 +13,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(SetAnalysisRootsTest);
- defineReflectiveTests(SetAnalysisRootsTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(SetAnalysisRootsTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
index 2238262..f703fe0 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
@@ -11,7 +11,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(UpdateContentTest);
- defineReflectiveTests(UpdateContentTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(UpdateContentTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
index 74aee23..3c90961 100644
--- a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
+++ b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
@@ -12,7 +12,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(GetSuggestionsTest);
- defineReflectiveTests(GetSuggestionsTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(GetSuggestionsTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
index 8e34a3b..842e443 100644
--- a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
@@ -12,7 +12,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(GetPostfixCompletionTest);
- defineReflectiveTests(GetPostfixCompletionTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(GetPostfixCompletionTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
index 32f59cb..02025b9 100644
--- a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
+++ b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
@@ -11,7 +11,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(IsPostfixCompletionApplicableTest);
- defineReflectiveTests(IsPostfixCompletionApplicableTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(IsPostfixCompletionApplicableTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
index 3caf5f80..6bb94c5 100644
--- a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
+++ b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
@@ -11,7 +11,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ListPostfixCompletionTemplatesTest);
- defineReflectiveTests(ListPostfixCompletionTemplatesTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(ListPostfixCompletionTemplatesTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
index 4d519e9..3a9f686 100644
--- a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
+++ b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
@@ -12,7 +12,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(OrganizeDirectivesTest);
- defineReflectiveTests(OrganizeDirectivesTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(OrganizeDirectivesTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/search/find_element_references_test.dart b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
index bc24fb8..3b7e1a0 100644
--- a/pkg/analysis_server/test/integration/search/find_element_references_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
@@ -13,7 +13,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(FindElementReferencesTest);
- defineReflectiveTests(FindElementReferencesTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(FindElementReferencesTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
index 38f0c67..28a8828 100644
--- a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
@@ -11,7 +11,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(FindMemberDeclarationsTest);
- defineReflectiveTests(FindMemberDeclarationsTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(FindMemberDeclarationsTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/integration/server/status_test.dart b/pkg/analysis_server/test/integration/server/status_test.dart
index dab8eaa..de8e9b7 100644
--- a/pkg/analysis_server/test/integration/server/status_test.dart
+++ b/pkg/analysis_server/test/integration/server/status_test.dart
@@ -13,7 +13,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(StatusTest);
- defineReflectiveTests(StatusTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(StatusTest_UseCFE);
});
}
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 5eccc11..dc4c218 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -118,7 +118,7 @@
expect(element.typeParameters, isNull);
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 27);
expect(location.length, '_A'.length);
expect(location.startLine, 2);
@@ -157,7 +157,7 @@
expect(element.typeParameters, isNull);
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 20);
expect(location.length, 'myConstructor'.length);
expect(location.startLine, 2);
@@ -248,7 +248,7 @@
expect(element.typeParameters, isNull);
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 17);
expect(location.length, '_E1'.length);
expect(location.startLine, 2);
@@ -285,7 +285,7 @@
expect(element.name, 'one');
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 23);
expect(location.length, 'one'.length);
expect(location.startLine, 2);
@@ -309,7 +309,7 @@
expect(element.name, 'three');
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 44);
expect(location.length, 'three'.length);
expect(location.startLine, 3);
@@ -328,7 +328,7 @@
expect(element.name, 'index');
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, -1);
expect(location.length, 'index'.length);
expect(location.startLine, 1);
@@ -347,7 +347,7 @@
expect(element.name, 'values');
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, -1);
expect(location.length, 'values'.length);
expect(location.startLine, 1);
@@ -372,7 +372,7 @@
expect(element.name, 'myField');
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 25);
expect(location.length, 'myField'.length);
expect(location.startLine, 2);
@@ -397,7 +397,7 @@
expect(element.typeParameters, '<T>');
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 12);
expect(location.length, 'F'.length);
expect(location.startLine, 1);
@@ -422,7 +422,7 @@
expect(element.name, 'myGetter');
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 23);
expect(location.length, 'myGetter'.length);
expect(location.startLine, 2);
@@ -449,7 +449,7 @@
expect(element.name, 'myLabel');
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 9);
expect(location.length, 'myLabel'.length);
expect(location.startLine, 2);
@@ -475,7 +475,7 @@
expect(element.name, 'myMethod');
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 32);
expect(location.length, 'myGetter'.length);
expect(location.startLine, 2);
@@ -500,7 +500,7 @@
expect(element.name, 'mySetter');
{
Location location = element.location;
- expect(location.file, '/test.dart');
+ expect(location.file, convertPath('/test.dart'));
expect(location.offset, 16);
expect(location.length, 'mySetter'.length);
expect(location.startLine, 2);
diff --git a/pkg/analysis_server/test/search/declarations_test.dart b/pkg/analysis_server/test/search/declarations_test.dart
new file mode 100644
index 0000000..253b657
--- /dev/null
+++ b/pkg/analysis_server/test/search/declarations_test.dart
@@ -0,0 +1,125 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'abstract_search_domain.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(DeclarationsTest);
+ });
+}
+
+@reflectiveTest
+class DeclarationsTest extends AbstractSearchDomainTest {
+ SearchGetElementDeclarationsResult declarationsResult;
+
+ void assertHas(String name, ElementKind kind) {
+ declarationsResult.declarations.singleWhere((d) =>
+ declarationsResult.files[d.fileIndex] == testFile &&
+ d.name == name &&
+ d.kind == kind);
+ }
+
+ test_class() async {
+ addTestFile(r'''
+class C {
+ int f;
+ C();
+ C.named();
+ int get g => 0;
+ void set s(_) {}
+ void m() {}
+}
+''');
+ await _getDeclarations();
+
+ assertHas('C', ElementKind.CLASS);
+ assertHas('f', ElementKind.FIELD);
+ assertHas('named', ElementKind.CONSTRUCTOR);
+ assertHas('g', ElementKind.GETTER);
+ assertHas('s', ElementKind.SETTER);
+ assertHas('m', ElementKind.METHOD);
+ }
+
+ test_enum() async {
+ addTestFile(r'''
+enum E {
+ a, b, c
+}
+''');
+ await _getDeclarations();
+
+ assertHas('E', ElementKind.ENUM);
+ assertHas('a', ElementKind.ENUM_CONSTANT);
+ assertHas('b', ElementKind.ENUM_CONSTANT);
+ assertHas('c', ElementKind.ENUM_CONSTANT);
+ }
+
+ test_multipleFiles() async {
+ var a = newFile(join(testFolder, 'a.dart'), content: 'class A {}').path;
+ var b = newFile(join(testFolder, 'b.dart'), content: 'class B {}').path;
+
+ Request request = new SearchGetElementDeclarationsParams().toRequest('0');
+ Response response = await waitResponse(request);
+
+ var result = new SearchGetElementDeclarationsResult.fromResponse(response);
+
+ expect(result.files, contains(a));
+ expect(result.files, contains(b));
+
+ {
+ ElementDeclaration declaration =
+ result.declarations.singleWhere((d) => d.name == 'A');
+ expect(declaration.name, 'A');
+ expect(declaration.kind, ElementKind.CLASS);
+ expect(result.files[declaration.fileIndex], a);
+ expect(declaration.offset, 6);
+ expect(declaration.line, 1);
+ expect(declaration.column, 7);
+ }
+
+ {
+ ElementDeclaration declaration =
+ result.declarations.singleWhere((d) => d.name == 'B');
+ expect(declaration.name, 'B');
+ expect(declaration.kind, ElementKind.CLASS);
+ expect(result.files[declaration.fileIndex], b);
+ }
+ }
+
+ test_top() async {
+ addTestFile(r'''
+int get g => 0;
+void set s(_) {}
+void f(int p) {}
+int v;
+typedef void tf1();
+typedef tf2<T> = int Function<S>(T tp, S sp);
+''');
+ await _getDeclarations();
+
+ assertHas('g', ElementKind.GETTER);
+ assertHas('s', ElementKind.SETTER);
+ assertHas('f', ElementKind.FUNCTION);
+ assertHas('v', ElementKind.TOP_LEVEL_VARIABLE);
+ assertHas('tf1', ElementKind.FUNCTION_TYPE_ALIAS);
+ assertHas('tf2', ElementKind.FUNCTION_TYPE_ALIAS);
+ }
+
+ Future<Null> _getDeclarations() async {
+ Request request = new SearchGetElementDeclarationsParams().toRequest('0');
+ Response response = await waitResponse(request);
+
+ declarationsResult =
+ new SearchGetElementDeclarationsResult.fromResponse(response);
+ }
+}
diff --git a/pkg/analysis_server/test/search/test_all.dart b/pkg/analysis_server/test/search/test_all.dart
index a2ccb2b..56465f1 100644
--- a/pkg/analysis_server/test/search/test_all.dart
+++ b/pkg/analysis_server/test/search/test_all.dart
@@ -4,6 +4,7 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'declarations_test.dart' as declarations_test;
import 'element_references_test.dart' as element_references_test;
import 'member_declarations_test.dart' as member_declarations;
import 'member_references_test.dart' as member_references_test;
@@ -16,6 +17,7 @@
*/
main() {
defineReflectiveSuite(() {
+ declarations_test.main();
element_references_test.main();
member_declarations.main();
member_references_test.main();
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index 14f2fca..3f38e82 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -135,7 +135,7 @@
expect(cs.element.location.startLine, isNotNull);
}
if (elemFile != null) {
- expect(cs.element.location.file, elemFile);
+ expect(cs.element.location.file, convertPath(elemFile));
}
if (elemOffset != null) {
expect(cs.element.location.offset, elemOffset);
@@ -456,7 +456,8 @@
}
Future computeSuggestions({int times = 200}) async {
- AnalysisResult analysisResult = await driver.getResult(testFile);
+ AnalysisResult analysisResult =
+ await driver.getResult(convertPath(testFile));
testSource = analysisResult.unit.element.source;
CompletionRequestImpl baseRequest = new CompletionRequestImpl(
analysisResult,
diff --git a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
index 7678669..66268e1 100644
--- a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
@@ -40,7 +40,7 @@
''');
addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport('/testB.dart')}";
void main() {f^}''');
await computeSuggestions();
@@ -56,7 +56,7 @@
bool hasLength(int expected) { }
void baz() { }''');
addTestSource('''
- import '/libA.dart';
+ import '${convertPathForImport('/libA.dart')}';
class B { }
String bar() => true;
void main() {expect(^)}''');
@@ -83,7 +83,7 @@
expect(arg) { }
void baz() { }''');
addTestSource('''
- import '/libA.dart'
+ import '${convertPathForImport('/libA.dart')}'
class B { }
String bar() => true;
void main() {expect(^)}''');
@@ -111,7 +111,7 @@
void baz() { }''');
addTestSource('''
import 'dart:async';
- import '/libA.dart';
+ import '${convertPathForImport('/libA.dart')}';
class B { }
String bar() => true;
void main() {new A(^)}''');
@@ -143,7 +143,7 @@
void baz() { }''');
addTestSource('''
import 'dart:async';
- import '/libA.dart';
+ import '${convertPathForImport('/libA.dart')}';
class B { }
String bar() => true;
void main() {new A(^)}''');
@@ -172,7 +172,7 @@
bool hasLength(int expected) { }
void baz() { }''');
addTestSource('''
- import '/libA.dart'
+ import '${convertPathForImport('/libA.dart')}'
expect(arg) { }
class B { }
String bar() => true;
@@ -199,7 +199,7 @@
bool hasLength(int expected) { }
void baz() { }''');
addTestSource('''
- import '/libA.dart'
+ import '${convertPathForImport('/libA.dart')}'
class B {
expect(arg) { }
void foo() {expect(^)}}
@@ -228,7 +228,7 @@
void baz() { }''');
addTestSource('''
import 'dart:async';
- import '/libA.dart';
+ import '${convertPathForImport('/libA.dart')}';
class B { }
String bar(f()) => true;
void main() {bar(^);}''');
@@ -259,7 +259,7 @@
void baz() { }''');
addTestSource('''
import 'dart:async';
- import '/libA.dart';
+ import '${convertPathForImport('/libA.dart')}';
class B { String bar(f()) => true; }
void main() {new B().bar(^);}''');
@@ -286,7 +286,7 @@
library A;
bool hasLength(int expected) { }''');
addTestSource('''
- import '/libA.dart'
+ import '${convertPathForImport('/libA.dart')}'
String bar() => true;
void main() {expect(foo: ^)}''');
@@ -325,7 +325,7 @@
class A {} class B extends A {} class C extends B {}
class X {X.c(); X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
main(){A a; if (a as ^)}''');
await computeSuggestions();
@@ -347,7 +347,7 @@
class A {} class B implements A {} class C implements B {}
class X {X.c(); X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
main(){A a; if (a as ^)}''');
await computeSuggestions();
@@ -495,7 +495,7 @@
Future y() async {return 0;}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
int x;
foo() async {await ^}
@@ -517,7 +517,7 @@
Future y() async { return 0; }
}''');
addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport('/testB.dart')}";
class B extends A {
foo() async {await ^}
}
@@ -581,10 +581,10 @@
int T3;
var _T4;'''); // not imported
addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
+ import "${convertPathForImport('/testAB.dart')}";
+ import "${convertPathForImport('/testCD.dart')}" hide D;
+ import "${convertPathForImport('/testEEF.dart')}" show EE;
+ import "${convertPathForImport('/testG.dart')}" as g;
int T5;
var _T6;
String get T7 => 'hello';
@@ -681,10 +681,10 @@
int T3;
var _T4;'''); // not imported
addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
+ import "${convertPathForImport('/testAB.dart')}";
+ import "${convertPathForImport('/testCD.dart')}" hide D;
+ import "${convertPathForImport('/testEEF.dart')}" show EE;
+ import "${convertPathForImport('/testG.dart')}" as g;
int T5;
var _T6;
String get T7 => 'hello';
@@ -794,10 +794,10 @@
int T3;
var _T4;'''); // not imported
addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g hide G;
+ import "${convertPathForImport('/testAB.dart')}";
+ import "${convertPathForImport('/testCD.dart')}" hide D;
+ import "${convertPathForImport('/testEEF.dart')}" show EE;
+ import "${convertPathForImport('/testG.dart')}" as g hide G;
int T5;
var _T6;
String get T7 => 'hello';
@@ -895,10 +895,10 @@
int T3;
var _T4;'''); // not imported
addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
+ import "${convertPathForImport('/testAB.dart')}";
+ import "${convertPathForImport('/testCD.dart')}" hide D;
+ import "${convertPathForImport('/testEEF.dart')}" show EE;
+ import "${convertPathForImport('/testG.dart')}" as g;
int T5;
var _T6;
String get T7 => 'hello';
@@ -994,10 +994,10 @@
int T3;
var _T4;'''); // not imported
addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
+ import "${convertPathForImport('/testAB.dart')}";
+ import "${convertPathForImport('/testCD.dart')}" hide D;
+ import "${convertPathForImport('/testEEF.dart')}" show EE;
+ import "${convertPathForImport('/testG.dart')}" as g;
int T5;
var _T6;
Z D2() {int x;}
@@ -1059,7 +1059,7 @@
class I { int i1; i2() { } }
class M { var m1; int m2() { } }''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
class A extends E implements I with M {a() {^}}''');
await computeSuggestions();
@@ -1125,10 +1125,10 @@
int T3;
var _T4;'''); // not imported
addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
+ import "${convertPathForImport('/testAB.dart')}";
+ import "${convertPathForImport('/testCD.dart')}" hide D;
+ import "${convertPathForImport('/testEEF.dart')}" show EE;
+ import "${convertPathForImport('/testG.dart')}" as g;
int T5;
var _T6;
String get T7 => 'hello';
@@ -1177,10 +1177,10 @@
int T3;
var _T4;'''); // not imported
addTestSource('''
- import "/testAB.dart";
- import "/testCD.dart" hide D;
- import "/testEEF.dart" show EE;
- import "/testG.dart" as g;
+ import "${convertPathForImport('/testB.dart')}";
+ import "${convertPathForImport('/testCD.dart')}" hide D;
+ import "${convertPathForImport('/testEEF.dart')}" show EE;
+ import "${convertPathForImport('/testG.dart')}" as g;
int T5;
var _T6;
Z D2() {int x;}
@@ -1212,7 +1212,7 @@
addSource('/testB.dart', '''
class B { }''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
class A {var b; X _c;}
class X{}
// looks like a cascade to the parser
@@ -1237,7 +1237,7 @@
addSource('/testB.dart', '''
class B { }''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
class A {var b; X _c;}
class X{}
main() {A a; a..^z}''');
@@ -1260,7 +1260,7 @@
addSource('/testB.dart', '''
class B { }''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
class A {var b; X _c;}
class X{}
main() {A a; a..^ return}''');
@@ -1355,7 +1355,7 @@
addSource('/testB.dart', '''
class B { }''');
addTestSource('''
- import "testB.dart" as x;
+ import "${convertPathForImport('testB.dart')}" as x;
@deprecated class A {^}
class _B {}
A T;''');
@@ -1380,7 +1380,7 @@
addSource('/testB.dart', '''
class B { }''');
addTestSource('''
- import "testB.dart" as x;
+ import "${convertPathForImport('testB.dart')}" as x;
class A {final ^}
class _B {}
A T;''');
@@ -1401,7 +1401,7 @@
addSource('/testB.dart', '''
class B { }''');
addTestSource('''
- import "testB.dart" as x;
+ import "${convertPathForImport('testB.dart')}" as x;
class A {final ^ A(){}}
class _B {}
A T;''');
@@ -1422,7 +1422,7 @@
addSource('/testB.dart', '''
class B { }''');
addTestSource('''
- import "testB.dart" as Soo;
+ import "${convertPathForImport('testB.dart')}" as Soo;
class A {final S^ A();}
class _B {}
A Sew;''');
@@ -1443,7 +1443,7 @@
addSource('/testB.dart', '''
class B { }''');
addTestSource('''
- import "testB.dart" as x;
+ import "${convertPathForImport('testB.dart')}" as x;
class A {final ^ final foo;}
class _B {}
A T;''');
@@ -1464,7 +1464,7 @@
addSource('/testB.dart', '''
class B { }''');
addTestSource('''
- import "testB.dart" as x;
+ import "${convertPathForImport('testB.dart')}" as x;
class A {final ^ var foo;}
class _B {}
A T;''');
@@ -1496,8 +1496,8 @@
class C { }
class D { }''');
addTestSource('''
- import "/testAB.dart" hide ^;
- import "/testCD.dart";
+ import "${convertPathForImport('/testB.dart')}" hide ^;
+ import "${convertPathForImport('/testCD.dart')}";
class X {}''');
await computeSuggestions();
@@ -1522,8 +1522,8 @@
class C { }
class D { }''');
addTestSource('''
- import "/testAB.dart" show ^;
- import "/testCD.dart";
+ import "${convertPathForImport('/testB.dart')}" show ^;
+ import "${convertPathForImport('/testCD.dart')}";
class X {}''');
await computeSuggestions();
@@ -1537,7 +1537,7 @@
F1() { }
class A {int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
class B {int x;}
@@ -1557,7 +1557,7 @@
F1() { }
class A {int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
class B {int x;}
@@ -1583,7 +1583,7 @@
F1() { }
class A {int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
class B {int x;}
@@ -1603,7 +1603,7 @@
F1() { }
class A {int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
class B {int x;}
@@ -1629,7 +1629,7 @@
F1() { }
class A {int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
class B {int x;}
@@ -1651,7 +1651,7 @@
F1() { }
class X {X.c(); X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
var m;
main() {new X.^}''');
@@ -1676,7 +1676,7 @@
F1() { }
class X {factory X.c(); factory X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
var m;
main() {new X.^}''');
@@ -1779,7 +1779,7 @@
/// Longer description.
class A {}
''');
- addTestSource('import "/libA.dart"; main() {^}');
+ addTestSource('import "${convertPathForImport('/libA.dart')}"; main() {^}');
await computeSuggestions();
@@ -1798,7 +1798,7 @@
/// Longer description.
int myFunc() {}
''');
- addTestSource('import "/libA.dart"; main() {^}');
+ addTestSource('import "${convertPathForImport('/libA.dart')}"; main() {^}');
await computeSuggestions();
@@ -1819,7 +1819,7 @@
*/
int myFunc() {}
''');
- addTestSource('import "/libA.dart"; main() {^}');
+ addTestSource('import "${convertPathForImport('/libA.dart')}"; main() {^}');
await computeSuggestions();
@@ -1831,7 +1831,7 @@
test_enum() async {
addSource('/libA.dart', 'library A; enum E { one, two }');
- addTestSource('import "/libA.dart"; main() {^}');
+ addTestSource('import "${convertPathForImport('/libA.dart')}"; main() {^}');
await computeSuggestions();
assertSuggestEnum('E');
assertNotSuggested('one');
@@ -1840,7 +1840,7 @@
test_enum_deprecated() async {
addSource('/libA.dart', 'library A; @deprecated enum E { one, two }');
- addTestSource('import "/libA.dart"; main() {^}');
+ addTestSource('import "${convertPathForImport('/libA.dart')}"; main() {^}');
await computeSuggestions();
// TODO(danrube) investigate why suggestion/element is not deprecated
// when AST node has correct @deprecated annotation
@@ -1856,7 +1856,7 @@
class A {int x;}
class _B { }''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
typedef int F2(int blat);
class Clz = Object with Object;
class C {foo(){^} void bar() {}}''');
@@ -1882,7 +1882,7 @@
B T1;
class B{}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
class C {a() {C ^}}''');
await computeSuggestions();
@@ -1894,7 +1894,7 @@
// FieldDeclaration
addSource('/testA.dart', 'class A { }');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
class C {A ^}''');
await computeSuggestions();
@@ -1906,7 +1906,7 @@
// FieldDeclaration
addSource('/testA.dart', 'class A { }');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
class C {var ^}''');
await computeSuggestions();
@@ -2090,7 +2090,7 @@
int m(x, {int y}) {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -2111,7 +2111,7 @@
void m(x, [int y]) {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -2132,7 +2132,7 @@
void m({x, int y}) {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -2153,7 +2153,7 @@
void m() {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -2172,7 +2172,7 @@
void m([x, int y]) {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -2193,7 +2193,7 @@
void m(x, int y) {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -2217,7 +2217,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -2247,7 +2247,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -2277,7 +2277,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -2398,7 +2398,7 @@
F1() { }
class A {int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
class B {int x;}
@@ -2424,7 +2424,7 @@
F1() { }
class A {int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
class B {int x;}
@@ -2443,7 +2443,7 @@
class B {B(this.x, [String boo]) { } int x;}
class C {C.bar({boo: 'hoo', int z: 0}) { } }''');
addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport('/testA.dart')}";
import "dart:math" as math;
main() {new ^ String x = "hello";}''');
@@ -2486,6 +2486,44 @@
assertNotSuggested('math');
}
+ test_InstanceCreationExpression_abstractClass() async {
+ addSource('/a.dart', '''
+abstract class A {
+ A();
+ A.generative();
+ factory A.factory() => null;
+}
+''');
+ addTestSource('''
+import 'a.dart';
+
+main() {
+ new ^;
+}
+''');
+ await computeSuggestions();
+
+ assertNotSuggested('A');
+ assertNotSuggested('A.generative');
+ assertSuggestConstructor('A.factory');
+ }
+
+ test_InstanceCreationExpression_abstractClass_implicitConstructor() async {
+ addSource('/a.dart', '''
+abstract class A {}
+''');
+ addTestSource('''
+import 'a.dart';
+
+main() {
+ new ^;
+}
+''');
+ await computeSuggestions();
+
+ assertNotSuggested('A');
+ }
+
test_InstanceCreationExpression_imported() async {
// SimpleIdentifier TypeName ConstructorName InstanceCreationExpression
addSource('/testA.dart', '''
@@ -2493,7 +2531,7 @@
F1() { }
class A {A(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
import "dart:async";
int T2;
F2() { }
@@ -2555,7 +2593,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -2585,7 +2623,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -2658,7 +2696,7 @@
foo() { }
class X {X.c(); X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
class Y {Y.c(); Y._d(); z() {}}
main() {var x; if (x is ^) { }}''');
@@ -2728,7 +2766,7 @@
class A {} class B extends A {} class C extends B {}
class X {X.c(); X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
main(){A a; if (a is ^)}''');
await computeSuggestions();
@@ -2750,7 +2788,7 @@
class A {} class B implements A {} class C implements B {}
class X {X.c(); X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
main(){A a; if (a is ^)}''');
await computeSuggestions();
@@ -2773,7 +2811,7 @@
nowIsIt() { }
class X {factory X.c(); factory X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
String newer() {}
var m;
main() {new^ X.c();}''');
@@ -2833,7 +2871,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -2867,7 +2905,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -2894,7 +2932,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -2913,7 +2951,7 @@
void m(x, {int y}) {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -2934,7 +2972,7 @@
void m(x, [int y]) {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -2955,7 +2993,7 @@
void m({x, int y}) {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -2976,7 +3014,7 @@
void m() {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -2995,7 +3033,7 @@
void m([x, int y]) {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -3016,7 +3054,7 @@
void m(x, int y) {}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B {
main() {^}
}
@@ -3053,7 +3091,7 @@
static c3() {}
static var c4;}''');
addTestSource('''
- import "/testC.dart";
+ import "${convertPathForImport('/testC.dart')}";
class B extends C {
b1() {}
var b2;
@@ -3135,7 +3173,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -3164,7 +3202,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -3193,7 +3231,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -3222,7 +3260,7 @@
typedef D1();
class C1 {C1(this.x) { } int x;}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
int T2;
F2() { }
typedef D2();
@@ -3289,7 +3327,7 @@
}
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class C extends B with M1, M2 {
void f() {
^
@@ -3328,8 +3366,8 @@
class ClassInLocalContext {int x;}''');
testFile = '/context1/completionTest.dart';
addTestSource('''
- import "/context1/libA.dart";
- import "/foo.dart";
+ import "${convertPathForImport("/context1/libA.dart")}";
+ import "${convertPathForImport("/foo.dart")}";
main() {C^}
''');
@@ -3356,7 +3394,7 @@
int x;
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -3371,7 +3409,7 @@
int get x => null;
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -3386,7 +3424,7 @@
set x(int value) {};
''');
addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
class B extends A {
main() {^}
}
@@ -3412,8 +3450,8 @@
class X {X.c(); X._d(); z() {}}''');
addSource('/testA.dart', '''
library libA;
- import "/testB.dart";
- part "$testFile";
+ import "${convertPathForImport('/testB.dart')}";
+ part "${convertPathForImport(testFile)}";
class A { }
var m;''');
addTestSource('''
@@ -3451,7 +3489,7 @@
class B { }''');
addTestSource('''
library libA;
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
part "/testA.dart";
class A { A({String boo: 'hoo'}) { } }
main() {new ^}
@@ -3491,7 +3529,7 @@
m(X x) {} I _n(X x) {}}
class X{}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
class A extends B {
static const String scA = 'foo';
w() { }}
@@ -3535,7 +3573,7 @@
m(X x) {} I _n(X x) {}}
class X{}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
main() {A a; a.^}''');
await computeSuggestions();
@@ -3609,7 +3647,7 @@
class X { }
class Y { }''');
addTestSource('''
- import "/testB.dart" as b;
+ import "${convertPathForImport('/testB.dart')}" as b;
var T2;
class A { }
main() {b.^}''');
@@ -3636,7 +3674,7 @@
class X { }
class Y { }''');
addTestSource('''
- import "/testB.dart" as b;
+ import "${convertPathForImport('/testB.dart')}" as b;
var T2;
class A { }
foo(b.^ f) {}''');
@@ -3663,7 +3701,7 @@
class X { }
class Y { }''');
addTestSource('''
- import "/testB.dart" as b;
+ import "${convertPathForImport('/testB.dart')}" as b;
var T2;
class A { }
foo(b.^) {}''');
@@ -3690,7 +3728,7 @@
class X extends _W {}
class M{}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
foo(X x) {x.^}''');
await computeSuggestions();
@@ -3707,7 +3745,7 @@
class A {static int bar = 10;}
_B() {}''');
addTestSource('''
- import "/testA.dart";
+ import "${convertPathForImport('/testA.dart')}";
class X {foo(){A^.bar}}''');
await computeSuggestions();
@@ -4149,7 +4187,7 @@
F1() => 0;
typedef String T1(int blat);''');
addTestSource('''
- import "/testA.dart";'
+ import "${convertPathForImport('/testA.dart')}";'
class C2 {int x;}
F2() => 0;
typedef int T2(int blat);
@@ -4175,7 +4213,7 @@
F1() => 0;
typedef String T1(int blat);''');
addTestSource('''
- import "/testA.dart";'
+ import "${convertPathForImport('/testA.dart')}";'
class C2 {int x;}
F2() => 0;
typedef int T2(int blat);
@@ -4199,7 +4237,7 @@
class B {}
''');
addTestSource('''
-import '/testB.dart';
+import '${convertPathForImport('/testB.dart')}';
List<^> x;
''');
await computeSuggestions();
@@ -4218,7 +4256,7 @@
class _B { }
class X {X.c(); X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
class Y {Y.c(); Y._d(); z() {}}
main() {var ^}''');
@@ -4245,7 +4283,7 @@
class _B { }
class X {X.c(); X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
class Y {Y.c(); Y._d(); z() {}}
class C {bar(){var f; {var x;} var e = ^}}''');
@@ -4271,7 +4309,7 @@
class _B { }
class X {X.c(); X._d(); z() {}}''');
addTestSource('''
- import "/testB.dart";
+ import "${convertPathForImport('/testB.dart')}";
foo2() { }
void bar2() { }
class Y {Y.c(); Y._d(); z() {}}
diff --git a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
index 89c378d..17d3cef 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
@@ -2289,6 +2289,36 @@
expect(suggestion.hasNamedParameters, true);
}
+ test_InstanceCreationExpression_abstractClass() async {
+ addTestSource('''
+abstract class A {
+ A();
+ A.generative();
+ factory A.factory() => null;
+}
+
+main() {
+ new ^;
+}''');
+ await computeSuggestions();
+
+ assertNotSuggested('A');
+ assertNotSuggested('A.generative');
+ assertSuggestConstructor('A.factory');
+ }
+
+ test_InstanceCreationExpression_abstractClass_implicitConstructor() async {
+ addTestSource('''
+abstract class A {}
+
+main() {
+ new ^;
+}''');
+ await computeSuggestions();
+
+ assertNotSuggested('A');
+ }
+
test_InstanceCreationExpression_assignment_expression_filter() async {
addTestSource('''
class A {} class B extends A {} class C implements A {} class D {}
@@ -2358,6 +2388,38 @@
assertNotSuggested('T2');
}
+ test_InstanceCreationExpression_invocationArgument() async {
+ addTestSource('''
+class A {} class B extends A {} class C {}
+void foo(A a) {}
+main() {
+ foo(new ^);
+}''');
+ await computeSuggestions();
+
+ assertSuggestConstructor('A',
+ elemOffset: -1,
+ relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+ assertSuggestConstructor('B', elemOffset: -1);
+ assertNotSuggested('C');
+ }
+
+ test_InstanceCreationExpression_invocationArgument_named() async {
+ addTestSource('''
+class A {} class B extends A {} class C {}
+void foo({A a}) {}
+main() {
+ foo(a: new ^);
+}''');
+ await computeSuggestions();
+
+ assertSuggestConstructor('A',
+ elemOffset: -1,
+ relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+ assertSuggestConstructor('B', elemOffset: -1);
+ assertNotSuggested('C');
+ }
+
test_InstanceCreationExpression_unimported() async {
// SimpleIdentifier TypeName ConstructorName InstanceCreationExpression
addSource('/testAB.dart', 'class Foo { }');
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index be00f2c..847da32 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -86,7 +86,7 @@
String fileContent = testCode;
if (target != null) {
- expect(target, fileEdits.first.file);
+ expect(fileEdits.first.file, convertPath(target));
fileContent = getFile(target).readAsStringSync();
}
@@ -140,7 +140,7 @@
}
Future<List<AnalysisError>> _computeErrors() async {
- return (await driver.getResult(testFile)).errors;
+ return (await driver.getResult(convertPath(testFile))).errors;
}
/**
@@ -1175,6 +1175,95 @@
''');
}
+ test_convertToNamedArguments_BAD_ambiguous() async {
+ await resolveTestUnit('''
+class A {
+ A({int a, int b});
+}
+
+main() {
+ new A(1, 2);
+}
+''');
+ await assertNoFix(DartFixKind.CONVERT_TO_NAMED_ARGUMENTS);
+ }
+
+ test_convertToNamedArguments_BAD_noCompatibleParameter() async {
+ await resolveTestUnit('''
+class A {
+ A({String a});
+}
+
+main() {
+ new A(1);
+}
+''');
+ await assertNoFix(DartFixKind.CONVERT_TO_NAMED_ARGUMENTS);
+ }
+
+ test_convertToNamedArguments_OK_instanceCreation() async {
+ await resolveTestUnit('''
+class A {
+ A({int a, double b});
+}
+
+main() {
+ new A(1.2, 3);
+}
+''');
+ await assertHasFix(DartFixKind.CONVERT_TO_NAMED_ARGUMENTS, '''
+class A {
+ A({int a, double b});
+}
+
+main() {
+ new A(b: 1.2, a: 3);
+}
+''');
+ }
+
+ test_convertToNamedArguments_OK_instanceCreation_hasPositional() async {
+ await resolveTestUnit('''
+class A {
+ A(int a, {int b});
+}
+
+main() {
+ new A(1, 2);
+}
+''');
+ await assertHasFix(DartFixKind.CONVERT_TO_NAMED_ARGUMENTS, '''
+class A {
+ A(int a, {int b});
+}
+
+main() {
+ new A(1, b: 2);
+}
+''');
+ }
+
+ test_convertToNamedArguments_OK_methodInvocation() async {
+ await resolveTestUnit('''
+class C {
+ void foo({int a}) {}
+}
+
+main(C c) {
+ c.foo(1);
+}
+''');
+ await assertHasFix(DartFixKind.CONVERT_TO_NAMED_ARGUMENTS, '''
+class C {
+ void foo({int a}) {}
+}
+
+main(C c) {
+ c.foo(a: 1);
+}
+''');
+ }
+
test_createClass() async {
await resolveTestUnit('''
main() {
@@ -1223,7 +1312,7 @@
List<SourceFileEdit> fileEdits = change.edits;
expect(fileEdits, hasLength(1));
SourceFileEdit fileEdit = change.edits[0];
- expect(fileEdit.file, '/lib.dart');
+ expect(fileEdit.file, convertPath('/lib.dart'));
expect(SourceEdit.applySequence(libCode, fileEdit.edits), r'''
library my.lib;
@@ -2093,7 +2182,7 @@
List<SourceFileEdit> fileEdits = change.edits;
expect(fileEdits, hasLength(1));
SourceFileEdit fileEdit = change.edits[0];
- expect(fileEdit.file, '/my/project/bin/my_file.dart');
+ expect(fileEdit.file, convertPath('/my/project/bin/my_file.dart'));
expect(fileEdit.fileStamp, -1);
expect(fileEdit.edits, hasLength(1));
expect(fileEdit.edits[0].replacement, contains('library my_file;'));
@@ -2130,7 +2219,8 @@
List<SourceFileEdit> fileEdits = change.edits;
expect(fileEdits, hasLength(1));
SourceFileEdit fileEdit = change.edits[0];
- expect(fileEdit.file, '/projects/my_package/lib/a/bb/c_cc/my_lib.dart');
+ expect(fileEdit.file,
+ convertPath('/projects/my_package/lib/a/bb/c_cc/my_lib.dart'));
expect(fileEdit.fileStamp, -1);
expect(fileEdit.edits, hasLength(1));
expect(fileEdit.edits[0].replacement,
@@ -2150,7 +2240,8 @@
List<SourceFileEdit> fileEdits = change.edits;
expect(fileEdits, hasLength(1));
SourceFileEdit fileEdit = change.edits[0];
- expect(fileEdit.file, '/projects/my_package/test/misc/a/bb/my_lib.dart');
+ expect(fileEdit.file,
+ convertPath('/projects/my_package/test/misc/a/bb/my_lib.dart'));
expect(fileEdit.fileStamp, -1);
expect(fileEdit.edits, hasLength(1));
expect(fileEdit.edits[0].replacement,
@@ -2158,7 +2249,7 @@
}
test_createFile_forPart() async {
- testFile = '/my/project/bin/test.dart';
+ testFile = convertPath('/my/project/bin/test.dart');
await resolveTestUnit('''
library my.lib;
part 'my_part.dart';
@@ -2170,7 +2261,7 @@
List<SourceFileEdit> fileEdits = change.edits;
expect(fileEdits, hasLength(1));
SourceFileEdit fileEdit = change.edits[0];
- expect(fileEdit.file, '/my/project/bin/my_part.dart');
+ expect(fileEdit.file, convertPath('/my/project/bin/my_part.dart'));
expect(fileEdit.fileStamp, -1);
expect(fileEdit.edits, hasLength(1));
expect(fileEdit.edits[0].replacement, contains('part of my.lib;'));
@@ -2192,7 +2283,7 @@
SourceFactory sourceFactory = new SourceFactory(
[new DartUriResolver(sdk), pkgResolver, resourceResolver]);
driver.configure(sourceFactory: sourceFactory);
- testUnit = (await driver.getResult(testFile)).unit;
+ testUnit = (await driver.getResult(convertPath(testFile))).unit;
// prepare fix
AnalysisError error = await _findErrorToFix();
fix = await _assertHasFix(DartFixKind.CREATE_FILE, error);
@@ -2201,7 +2292,7 @@
List<SourceFileEdit> fileEdits = change.edits;
expect(fileEdits, hasLength(1));
SourceFileEdit fileEdit = change.edits[0];
- expect(fileEdit.file, '/my/lib/my_part.dart');
+ expect(fileEdit.file, convertPath('/my/lib/my_part.dart'));
expect(fileEdit.fileStamp, -1);
expect(fileEdit.edits, hasLength(1));
expect(fileEdit.edits[0].replacement, contains('part of my.lib;'));
@@ -5368,7 +5459,7 @@
List<SourceFileEdit> fileEdits = change.edits;
expect(fileEdits, hasLength(1));
SourceFileEdit fileEdit = change.edits[0];
- expect(fileEdit.file, '/test2.dart');
+ expect(fileEdit.file, convertPath('/test2.dart'));
expect(SourceEdit.applySequence(code2, fileEdit.edits), r'''
library test2;
import 'test3.dart' as bbb;
@@ -5401,7 +5492,7 @@
List<SourceFileEdit> fileEdits = change.edits;
expect(fileEdits, hasLength(1));
SourceFileEdit fileEdit = change.edits[0];
- expect(fileEdit.file, '/test2.dart');
+ expect(fileEdit.file, convertPath('/test2.dart'));
expect(SourceEdit.applySequence(code2, fileEdit.edits), r'''
library test2;
class D {
diff --git a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
index 03a65f2..0d528d5 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
@@ -1273,17 +1273,15 @@
void _assertSingleLinkedEditGroup(
{int length, List<int> offsets, List<String> names}) {
- String positionsString = offsets
- .map((offset) => '{"file": "$testFile", "offset": $offset}')
- .join(',');
- String suggestionsString =
- names.map((name) => '{"value": "$name", "kind": "VARIABLE"}').join(',');
- _assertSingleLinkedEditGroupJson('''
-{
- "length": $length,
- "positions": [$positionsString],
- "suggestions": [$suggestionsString]
-}''');
+ var positions =
+ offsets.map((offset) => {"file": testFile, "offset": offset});
+ var suggestions = names.map((name) => {"value": name, "kind": "VARIABLE"});
+ var expected = <String, dynamic>{
+ "length": length,
+ "positions": positions.toList(),
+ "suggestions": suggestions.toList()
+ };
+ _assertSingleLinkedEditGroupJson(JSON.encode(expected));
}
void _assertSingleLinkedEditGroupJson(String expectedJsonString) {
diff --git a/pkg/analyzer/lib/src/command_line/arguments.dart b/pkg/analyzer/lib/src/command_line/arguments.dart
index 083c3f2..96f1aa7 100644
--- a/pkg/analyzer/lib/src/command_line/arguments.dart
+++ b/pkg/analyzer/lib/src/command_line/arguments.dart
@@ -168,25 +168,30 @@
* then remove the [ddc] named argument from this method.
*/
void defineAnalysisArguments(ArgParser parser, {bool hide: true, ddc: false}) {
- parser.addOption(sdkPathOption, help: 'The path to the Dart SDK.');
+ parser.addOption(sdkPathOption,
+ help: 'The path to the Dart SDK.', hide: ddc && hide);
parser.addOption(analysisOptionsFileOption,
- help: 'Path to an analysis options file.');
+ help: 'Path to an analysis options file.', hide: ddc && hide);
parser.addOption(packageRootOption,
help: 'The path to a package root directory (deprecated). '
- 'This option cannot be used with --packages.');
+ 'This option cannot be used with --packages.',
+ hide: ddc && hide);
parser.addFlag(strongModeFlag,
help: 'Enable strong static checks (https://goo.gl/DqcBsw).',
- defaultsTo: ddc);
+ defaultsTo: ddc,
+ hide: ddc);
parser.addFlag(declarationCastsFlag,
negatable: true,
- help:
- 'Disable declaration casts in strong mode (https://goo.gl/cTLz40).');
+ help: 'Disable declaration casts in strong mode (https://goo.gl/cTLz40).',
+ hide: ddc && hide);
parser.addFlag(implicitCastsFlag,
negatable: true,
- help: 'Disable implicit casts in strong mode (https://goo.gl/cTLz40).');
+ help: 'Disable implicit casts in strong mode (https://goo.gl/cTLz40).',
+ hide: ddc && hide);
parser.addFlag(noImplicitDynamicFlag,
negatable: false,
- help: 'Disable implicit dynamic (https://goo.gl/m0UgXD).');
+ help: 'Disable implicit dynamic (https://goo.gl/m0UgXD).',
+ hide: ddc && hide);
//
// Hidden flags and options.
diff --git a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
index fdb6d87..bd156df 100644
--- a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
@@ -4,7 +4,6 @@
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/dart/analysis/file_state.dart';
import 'package:analyzer/src/dart/analysis/kernel_metadata.dart';
-import 'package:analyzer/src/fasta/resolution_storer.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/sdk.dart';
import 'package:analyzer/src/generated/source.dart';
@@ -27,7 +26,6 @@
import 'package:front_end/src/fasta/source/stack_listener.dart';
import 'package:front_end/src/fasta/target_implementation.dart';
import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
import 'package:front_end/src/fasta/uri_translator.dart';
import 'package:front_end/src/fasta/uri_translator_impl.dart';
import 'package:kernel/class_hierarchy.dart';
@@ -393,8 +391,7 @@
StackListener createListener(
ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
- [Scope formalParameterScope, TypeInferenceListener listener]) {
- InstrumentedResolutionStorer storer;
+ [Scope formalParameterScope]) {
var fileResolutions = _resolutions[builder.fileUri];
if (fileResolutions == null) {
fileResolutions = <CollectedResolution>[];
@@ -402,15 +399,8 @@
}
var resolution = new CollectedResolution();
fileResolutions.add(resolution);
- storer = new InstrumentedResolutionStorer(
- resolution.kernelDeclarations,
- resolution.kernelReferences,
- resolution.kernelTypes,
- resolution.declarationOffsets,
- resolution.referenceOffsets,
- resolution.typeOffsets);
return super.createListener(
- builder, memberScope, isInstanceMember, formalParameterScope, storer);
+ builder, memberScope, isInstanceMember, formalParameterScope);
}
}
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index e560552..e09ed08 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -668,6 +668,12 @@
push(ast.block(leftBracket, statements, rightBracket));
}
+ void handleInvalidTopLevelBlock(Token token) {
+ // TODO(danrubel): Consider improved recovery by adding a this block
+ // as part of a synthetic top level function.
+ pop(); // block
+ }
+
void endForStatement(Token forKeyword, Token leftParen, Token leftSeparator,
int updateExpressionCount, Token endToken) {
assert(optional('for', forKeyword));
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index 9fd2c8f..f3042e4 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -509,13 +509,8 @@
return;
case "UNEXPECTED_TOKEN":
String text = stringOrTokenLexeme();
- if (text == ';') {
- errorReporter?.reportErrorForOffset(
- ParserErrorCode.EXPECTED_TOKEN, offset, length, [text]);
- } else {
- errorReporter?.reportErrorForOffset(
- ParserErrorCode.UNEXPECTED_TOKEN, offset, length, [text]);
- }
+ errorReporter?.reportErrorForOffset(
+ ParserErrorCode.UNEXPECTED_TOKEN, offset, length, [text]);
return;
case "UNTERMINATED_MULTI_LINE_COMMENT":
errorReporter?.reportErrorForOffset(
diff --git a/pkg/analyzer/lib/src/fasta/resolution_storer.dart b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
index b3774e2..454fc62 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_storer.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
@@ -4,7 +4,6 @@
import 'package:analyzer/src/fasta/resolution_applier.dart';
import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
import 'package:kernel/ast.dart';
import 'package:kernel/type_algebra.dart';
@@ -192,7 +191,7 @@
/// Type inference listener that records inferred types for later use by
/// [ResolutionApplier].
-class ResolutionStorer extends TypeInferenceListener {
+class ResolutionStorer {
/// The offset that is used when the actual offset is not know.
/// The consumer of information should not validate this offset.
static const UNKNOWN_OFFSET = -2;
@@ -209,13 +208,11 @@
ResolutionStorer(this._declarations, this._references, this._types);
- @override
void asExpressionExit(AsExpression expression, DartType inferredType) {
_recordType(expression.type, expression.fileOffset);
_recordType(inferredType, expression.fileOffset);
}
- @override
void cascadeExpressionExit(Let expression, DartType inferredType) {
// Overridden so that the type of the expression will not be recorded. We
// don't need to record the type because the type is always the same as the
@@ -223,7 +220,6 @@
// correctly apply the type even if we recorded it.
}
- @override
void catchStatementEnter(Catch node) {
_recordType(node.guard, node.fileOffset);
@@ -240,7 +236,6 @@
}
}
- @override
void constructorInvocationEnter(InvocationExpression expression,
String prefixName, DartType typeContext) {
_recordImportPrefix(prefixName);
@@ -248,7 +243,6 @@
_deferType(expression.fileOffset);
}
- @override
void constructorInvocationExit(
InvocationExpression expression, DartType inferredType) {
_replaceType(inferredType);
@@ -261,7 +255,6 @@
}
}
- @override
void fieldInitializerEnter(FieldInitializer initializer) {
_recordReference(initializer.field, initializer.fileOffset);
}
@@ -271,7 +264,6 @@
assert(_deferredTypeSlots.isEmpty);
}
- @override
void forInStatementEnter(ForInStatement statement,
VariableDeclaration variable, Expression write) {
if (variable != null) {
@@ -295,7 +287,6 @@
}
}
- @override
void forInStatementExit(
ForInStatement statement, VariableDeclaration variable) {
if (variable != null) {
@@ -305,47 +296,35 @@
void functionDeclarationEnter(FunctionDeclaration statement) {
_recordDeclaration(statement.variable, statement.fileOffset);
- super.functionDeclarationEnter(statement);
}
- @override
void functionExpressionEnter(
FunctionExpression expression, DartType typeContext) {
_recordDeclaration(expression, expression.fileOffset);
- super.functionExpressionEnter(expression, typeContext);
}
- @override
void functionExpressionExit(
FunctionExpression expression, DartType inferredType) {
// We don't need to record the inferred type.
// It is already set in the function declaration.
}
- @override
void genericExpressionEnter(
- String expressionType, Expression expression, DartType typeContext) {
- super.genericExpressionEnter(expressionType, expression, typeContext);
- }
+ String expressionType, Expression expression, DartType typeContext) {}
- @override
void genericExpressionExit(
String expressionType, Expression expression, DartType inferredType) {
_recordType(inferredType, expression.fileOffset);
- super.genericExpressionExit(expressionType, expression, inferredType);
}
- @override
void ifNullBeforeRhs(Expression expression) {
_deferType(expression.fileOffset);
}
- @override
void ifNullExit(Expression expression, DartType inferredType) {
_replaceType(inferredType);
}
- @override
void indexAssignAfterReceiver(Expression write, DartType typeContext) {
_deferReference(write.fileOffset);
_recordType(const IndexAssignNullFunctionType(), write.fileOffset);
@@ -354,7 +333,6 @@
_deferType(write.fileOffset);
}
- @override
void indexAssignExit(Expression expression, Expression write,
Member writeMember, Procedure combiner, DartType inferredType) {
_replaceReference(writeMember);
@@ -364,7 +342,6 @@
_recordType(inferredType, write.fileOffset);
}
- @override
void isExpressionExit(IsExpression expression, DartType inferredType) {
_recordType(expression.type, expression.fileOffset);
_recordType(inferredType, expression.fileOffset);
@@ -376,18 +353,15 @@
_recordType(inferredType, expression.fileOffset);
}
- @override
void logicalExpressionBeforeRhs(LogicalExpression expression) {
_deferType(expression.fileOffset);
}
- @override
void logicalExpressionExit(
LogicalExpression expression, DartType inferredType) {
_replaceType(inferredType);
}
- @override
void methodInvocationBeforeArgs(Expression expression, bool isImplicitCall) {
if (!isImplicitCall) {
// When the invocation target is `VariableGet`, we record the target
@@ -399,10 +373,8 @@
_deferType(expression.fileOffset); // invoke type
_deferType(expression.fileOffset); // type arguments
_deferType(expression.fileOffset); // result type
- super.methodInvocationBeforeArgs(expression, isImplicitCall);
}
- @override
void methodInvocationExit(
Expression expression,
Arguments arguments,
@@ -427,10 +399,8 @@
_replaceReference(interfaceMember);
_replaceType(const NullType()); // callee type
}
- super.genericExpressionExit("methodInvocation", expression, inferredType);
}
- @override
void methodInvocationExitCall(
Expression expression,
Arguments arguments,
@@ -453,18 +423,14 @@
_replaceReference(const NullNode('explicit-call'));
_replaceType(const NullType()); // callee type
}
- super.genericExpressionExit("methodInvocation", expression, inferredType);
}
- @override
void propertyAssignEnter(
Expression expression, Expression write, DartType typeContext) {
_deferReference(write.fileOffset);
_deferType(write.fileOffset);
- super.propertyAssignEnter(expression, write, typeContext);
}
- @override
void propertyAssignExit(
Expression expression,
Expression write,
@@ -480,25 +446,20 @@
_recordType(inferredType, write.fileOffset);
}
- @override
void propertyGetExit(
Expression expression, Member member, DartType inferredType) {
_recordReference(new MemberGetterNode(member), expression.fileOffset);
- super.propertyGetExit(expression, member, inferredType);
}
- @override
void propertyGetExitCall(Expression expression, DartType inferredType) {
_recordReference(const NullNode('explicit-call'), expression.fileOffset);
_recordType(const NullType(), expression.fileOffset);
}
- @override
void redirectingInitializerEnter(RedirectingInitializer initializer) {
_recordReference(initializer.target, initializer.fileOffset);
}
- @override
void staticAssignEnter(
Expression expression,
String prefixName,
@@ -516,11 +477,8 @@
_deferReference(write.fileOffset);
_deferType(write.fileOffset);
- super.staticAssignEnter(
- expression, prefixName, targetOffset, targetClass, write, typeContext);
}
- @override
void staticAssignExit(
Expression expression,
Expression write,
@@ -535,7 +493,6 @@
_recordType(inferredType, write.fileOffset);
}
- @override
void staticGetEnter(StaticGet expression, String prefixName, int targetOffset,
Class targetClass, DartType typeContext) {
// if there was an import prefix, record it.
@@ -545,18 +502,13 @@
_recordReference(targetClass, targetOffset);
_recordType(targetClass.rawType, targetOffset);
}
- super.staticGetEnter(
- expression, prefixName, targetOffset, targetClass, typeContext);
}
- @override
void staticGetExit(StaticGet expression, DartType inferredType) {
_recordReference(
new MemberGetterNode(expression.target), expression.fileOffset);
- super.staticGetExit(expression, inferredType);
}
- @override
void staticInvocationEnter(StaticInvocation expression, String prefixName,
int targetOffset, Class targetClass, DartType typeContext) {
// if there was an import prefix, record it.
@@ -585,11 +537,8 @@
_deferType(expression.arguments.fileOffset); // invoke type
_deferType(expression.arguments.fileOffset); // type arguments
_deferType(expression.arguments.fileOffset); // result type
- super.staticInvocationEnter(
- expression, prefixName, targetOffset, targetClass, typeContext);
}
- @override
void staticInvocationExit(
StaticInvocation expression,
FunctionType calleeType,
@@ -603,40 +552,32 @@
: substitution.substituteType(calleeType.withoutTypeParameters);
_replaceType(invokeType);
_replaceType(const NullType()); // callee type
- super.genericExpressionExit("staticInvocation", expression, inferredType);
}
- @override
void stringConcatenationExit(
StringConcatenation expression, DartType inferredType) {
// We don't need the type - we already know that it is String.
// Moreover, the file offset for StringConcatenation is `-1`.
}
- @override
void thisExpressionExit(ThisExpression expression, DartType inferredType) {}
void typeLiteralEnter(@override TypeLiteral expression, String prefixName,
DartType typeContext) {
// if there was an import prefix, record it.
_recordImportPrefix(prefixName);
- super.typeLiteralEnter(expression, prefixName, typeContext);
}
void typeLiteralExit(TypeLiteral expression, DartType inferredType) {
_recordReference(expression.type, expression.fileOffset);
- super.typeLiteralExit(expression, inferredType);
}
- @override
void variableAssignEnter(
Expression expression, DartType typeContext, Expression write) {
_deferReference(write.fileOffset);
_deferType(write.fileOffset);
- super.variableAssignEnter(expression, typeContext, write);
}
- @override
void variableAssignExit(Expression expression, DartType writeContext,
Expression write, Procedure combiner, DartType inferredType) {
_replaceReference(write is VariableSet
@@ -648,21 +589,16 @@
_recordType(inferredType, write.fileOffset);
}
- @override
void variableDeclarationEnter(VariableDeclaration statement) {
_recordDeclaration(statement, statement.fileOffset);
_deferType(statement.fileOffset);
- super.variableDeclarationEnter(statement);
}
- @override
void variableDeclarationExit(
VariableDeclaration statement, DartType inferredType) {
_replaceType(statement.type);
- super.variableDeclarationExit(statement, inferredType);
}
- @override
void variableGetExit(VariableGet expression, DartType inferredType) {
/// Return `true` if the given [variable] declaration occurs in a let
/// expression that is, or is part of, a cascade expression.
diff --git a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
index 852f5ef..6f6b6e5 100644
--- a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
+++ b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'dart:io';
+
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
@@ -65,4 +67,20 @@
.join(part1, part2, part3, part4, part5, part6, part7, part8);
String convertPath(String path) => resourceProvider.convertPath(path);
+
+ /// Convert the given [path] to be a valid import uri for this provider's path context.
+ String convertPathForImport(String path) {
+ path = resourceProvider.convertPath(path);
+
+ // On Windows, absolute import paths are not quite the same as a normal fs path.
+ // C:\test.dart must be imported as one of:
+ // import "file:///C:/test.dart"
+ // import "/C:/test.dart"
+ if (Platform.isWindows && resourceProvider.pathContext.isAbsolute(path)) {
+ // The .path on a file Uri is in the form "/C:/test.dart"
+ path = new Uri.file(path).path;
+ }
+
+ return path;
+ }
}
diff --git a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
index 7ffdcb3..629ddde 100644
--- a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
@@ -8,7 +8,9 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(CheckedModeCompileTimeErrorCodeTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(CheckedModeCompileTimeErrorCodeTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
index 5795f7b..f766e7c 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
@@ -8,7 +8,9 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(CompileTimeErrorCodeTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(CompileTimeErrorCodeTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
index 410dd7e..34fc3ca 100644
--- a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
+++ b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
@@ -8,7 +8,9 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(ErrorSuppressionTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(ErrorSuppressionTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/generated/hint_code_kernel_test.dart b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
index 9f7c1e0..6f6314d 100644
--- a/pkg/analyzer/test/generated/hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
@@ -8,7 +8,9 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(HintCodeTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(HintCodeTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
index 1268f80..aab1574 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
@@ -8,7 +8,9 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(NonErrorResolverTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(NonErrorResolverTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
index 62c81bc..082ef32 100644
--- a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
@@ -11,7 +11,9 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(NonHintCodeTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(NonHintCodeTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index bee7666..e300956 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -4705,7 +4705,7 @@
expectedError(ParserErrorCode.EXPECTED_STRING_LITERAL, 8, 1),
expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 1),
expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 8, 1),
- expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 9, 1)
+ expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 9, 1)
]
: [
expectedError(
@@ -5261,14 +5261,8 @@
}
void test_unexpectedToken_semicolonBetweenCompilationUnitMembers() {
- parseCompilationUnit("int x; ; int y;", errors: [
- expectedError(
- usingFastaParser
- ? ParserErrorCode.EXPECTED_EXECUTABLE
- : ParserErrorCode.UNEXPECTED_TOKEN,
- 7,
- 1)
- ]);
+ parseCompilationUnit("int x; ; int y;",
+ errors: [expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 7, 1)]);
}
void test_unterminatedString_at_eof() {
@@ -10372,7 +10366,6 @@
// TODO(danrubel): Consolidate and improve error message.
? [
ParserErrorCode.EXPECTED_EXECUTABLE,
- ParserErrorCode.EXPECTED_EXECUTABLE,
ParserErrorCode.EXPECTED_TOKEN
]
: [ParserErrorCode.EXPECTED_TOKEN]);
diff --git a/pkg/analyzer/test/generated/resolver_kernel_test.dart b/pkg/analyzer/test/generated/resolver_kernel_test.dart
index bc11b8b..a3537a4 100644
--- a/pkg/analyzer/test/generated/resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/resolver_kernel_test.dart
@@ -8,7 +8,9 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(StrictModeTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(StrictModeTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
index 3081d1d..07c4b89 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
@@ -8,7 +8,9 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(StaticTypeAnalyzer2Test_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(StaticTypeAnalyzer2Test_Kernel);
});
}
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
index b829db5..f864c75 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
@@ -8,8 +8,10 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(StaticTypeWarningCodeTest_Kernel);
- defineReflectiveTests(StrongModeStaticTypeWarningCodeTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(StaticTypeWarningCodeTest_Kernel);
+ // defineReflectiveTests(StrongModeStaticTypeWarningCodeTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
index 4f7c884..da2d2e9 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -8,7 +8,9 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(StaticWarningCodeTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(StaticWarningCodeTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
index f3bbd6c..433d68c 100644
--- a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
@@ -9,9 +9,11 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(StrongModeLocalInferenceTest_Kernel);
- defineReflectiveTests(StrongModeStaticTypeAnalyzer2Test_Kernel);
- defineReflectiveTests(StrongModeTypePropagationTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(StrongModeLocalInferenceTest_Kernel);
+ // defineReflectiveTests(StrongModeStaticTypeAnalyzer2Test_Kernel);
+ // defineReflectiveTests(StrongModeTypePropagationTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
index 4e92154..19c8d39 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
@@ -9,8 +9,10 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(AnalysisDriverTest_Kernel);
- defineReflectiveTests(AnalysisDriverResolutionTest_Kernel);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(AnalysisDriverTest_Kernel);
+ // defineReflectiveTests(AnalysisDriverResolutionTest_Kernel);
});
}
diff --git a/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart b/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
index f7fa146..3cbbd73 100644
--- a/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
@@ -55,11 +55,8 @@
class B = Object with A {}
''',
// TODO(danrubel): Consolidate and improve error message.
- [
- ParserErrorCode.EXPECTED_EXECUTABLE,
- ParserErrorCode.EXPECTED_EXECUTABLE,
- ParserErrorCode.EXPECTED_TOKEN
- ], '''
+ [ParserErrorCode.EXPECTED_EXECUTABLE, ParserErrorCode.EXPECTED_TOKEN],
+ '''
class B = Object with A;
''');
}
@@ -255,7 +252,7 @@
void test_extraSemicolon_afterLastTopLevelMember() {
testRecovery('''
foo() {};
-''', [ParserErrorCode.EXPECTED_EXECUTABLE], '''
+''', [ParserErrorCode.UNEXPECTED_TOKEN], '''
foo() {}
''');
}
@@ -301,7 +298,7 @@
testRecovery('''
foo() {};
bar() {}
-''', [ParserErrorCode.EXPECTED_EXECUTABLE], '''
+''', [ParserErrorCode.UNEXPECTED_TOKEN], '''
foo() {}
bar() {}
''');
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index 5c1d95a..6e3b75d 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -499,6 +499,9 @@
Token parseFunctionBody(Token token, bool isExpression, bool allowAbstract) {
return skipFunctionBody(token, isExpression, allowAbstract);
}
+
+ @override
+ Token parseInvalidBlock(Token token) => skipBlock(token);
}
/// "Mini AST" representation of a string literal.
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index 2dbafe6..6158de5 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -31,14 +31,18 @@
defineReflectiveTests(BuildModeTest);
defineReflectiveTests(ExitCodesTest);
defineReflectiveTests(ExitCodesTest_PreviewDart2);
- defineReflectiveTests(ExitCodesTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(ExitCodesTest_UseCFE);
defineReflectiveTests(LinterTest);
defineReflectiveTests(LinterTest_PreviewDart2);
defineReflectiveTests(LinterTest_UseCFE);
defineReflectiveTests(NonDartFilesTest);
defineReflectiveTests(OptionsTest);
defineReflectiveTests(OptionsTest_PreviewDart2);
- defineReflectiveTests(OptionsTest_UseCFE);
+ // TODO(scheglov): Restore similar test coverage when the front-end API
+ // allows it. See https://github.com/dart-lang/sdk/issues/32258.
+ // defineReflectiveTests(OptionsTest_UseCFE);
}, name: 'Driver');
}
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index 171f216..83f9c30 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -632,16 +632,16 @@
optype.includeConstructorSuggestions = true;
optype.constructorSuggestionsFilter = (DartType dartType, int relevance) {
DartType localTypeAssertion = null;
- if (node.parent is VariableDeclaration) {
- VariableDeclaration varDeclaration =
- node.parent as VariableDeclaration;
- localTypeAssertion = resolutionMap
- .elementDeclaredByVariableDeclaration(varDeclaration)
- ?.type;
- } else if (node.parent is AssignmentExpression) {
- AssignmentExpression assignmentExpression =
- node.parent as AssignmentExpression;
- localTypeAssertion = assignmentExpression.leftHandSide.staticType;
+ AstNode parent = node.parent;
+ if (parent is VariableDeclaration) {
+ localTypeAssertion = parent.element?.type;
+ } else if (parent is AssignmentExpression) {
+ localTypeAssertion = parent.leftHandSide.staticType;
+ } else if (node.staticParameterElement != null) {
+ localTypeAssertion = node.staticParameterElement.type;
+ } else if (parent is NamedExpression &&
+ parent.staticParameterElement != null) {
+ localTypeAssertion = parent.staticParameterElement.type;
}
if (localTypeAssertion == null ||
dartType == null ||
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 4e7da14..c419478 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -13,6 +13,7 @@
static const String analyzeOnly = '--analyze-only';
static const String analyzeSignaturesOnly = '--analyze-signatures-only';
static const String disableInlining = '--disable-inlining';
+ static const String disableProgramSplit = '--disable-program-split';
static const String disableDiagnosticColors = '--disable-diagnostic-colors';
static const String disableNativeLiveTypeAnalysis =
'--disable-native-live-type-analysis';
diff --git a/pkg/compiler/lib/src/compile_time_constants.dart b/pkg/compiler/lib/src/compile_time_constants.dart
index aa51632..3b253de 100644
--- a/pkg/compiler/lib/src/compile_time_constants.dart
+++ b/pkg/compiler/lib/src/compile_time_constants.dart
@@ -538,8 +538,8 @@
context,
node,
new ConcatenateConstantExpression([left.expression, right.expression]),
- constantSystem.createString(
- leftValue.primitiveValue + rightValue.primitiveValue));
+ constantSystem
+ .createString(leftValue.stringValue + rightValue.stringValue));
}
AstConstant visitStringInterpolation(StringInterpolation node) {
@@ -551,7 +551,7 @@
subexpressions.add(initialString.expression);
StringBuffer sb = new StringBuffer();
StringConstantValue initialStringValue = initialString.value;
- sb.write(initialStringValue.primitiveValue);
+ sb.write(initialStringValue.stringValue);
for (StringInterpolationPart part in node.parts) {
AstConstant subexpression = evaluate(part.expression);
if (subexpression == null || subexpression.isError) {
@@ -560,8 +560,17 @@
subexpressions.add(subexpression.expression);
ConstantValue expression = subexpression.value;
if (expression.isPrimitive) {
- PrimitiveConstantValue primitive = expression;
- sb.write(primitive.primitiveValue);
+ if (expression is IntConstantValue) {
+ sb.write(expression.intValue);
+ } else if (expression is DoubleConstantValue) {
+ sb.write(expression.doubleValue);
+ } else if (expression is StringConstantValue) {
+ sb.write(expression.stringValue);
+ } else if (expression is BoolConstantValue) {
+ sb.write(expression.boolValue);
+ } else if (expression is NullConstantValue) {
+ sb.write(null);
+ }
} else {
// TODO(johnniwinther): Specialize message to indicated that the problem
// is not constness but the types of the const expressions.
@@ -571,7 +580,7 @@
if (partString == null) return null;
subexpressions.add(partString.expression);
StringConstantValue partStringValue = partString.value;
- sb.write(partStringValue.primitiveValue);
+ sb.write(partStringValue.stringValue);
}
return new AstConstant(
context,
@@ -663,7 +672,7 @@
AstConstant left = evaluate(send.receiver);
if (left != null && left.value.isString) {
StringConstantValue stringConstantValue = left.value;
- String string = stringConstantValue.primitiveValue;
+ String string = stringConstantValue.stringValue;
IntConstantValue length = constantSystem.createInt(string.length);
result = new AstConstant(context, send,
new StringLengthConstantExpression(left.expression), length);
@@ -826,9 +835,7 @@
node,
new ConditionalConstantExpression(condition.expression,
thenExpression.expression, elseExpression.expression),
- boolCondition.primitiveValue
- ? thenExpression.value
- : elseExpression.value);
+ boolCondition.boolValue ? thenExpression.value : elseExpression.value);
}
AstConstant visitSendSet(SendSet node) {
@@ -1039,7 +1046,7 @@
{'fromType': type, 'toType': commonElements.stringType});
}
- String name = firstArgument.primitiveValue;
+ String name = firstArgument.stringValue;
String value = compiler.fromEnvironment(name);
AstConstant createEvaluatedConstant(ConstantValue value) {
diff --git a/pkg/compiler/lib/src/constant_system_dart.dart b/pkg/compiler/lib/src/constant_system_dart.dart
index 210a120..36ec90b 100644
--- a/pkg/compiler/lib/src/constant_system_dart.dart
+++ b/pkg/compiler/lib/src/constant_system_dart.dart
@@ -17,7 +17,7 @@
ConstantValue fold(ConstantValue constant) {
if (constant.isInt) {
IntConstantValue intConstant = constant;
- return DART_CONSTANT_SYSTEM.createInt(~intConstant.primitiveValue);
+ return DART_CONSTANT_SYSTEM.createInt(~intConstant.intValue);
}
return null;
}
@@ -29,11 +29,11 @@
ConstantValue fold(ConstantValue constant) {
if (constant.isInt) {
IntConstantValue intConstant = constant;
- return DART_CONSTANT_SYSTEM.createInt(-intConstant.primitiveValue);
+ return DART_CONSTANT_SYSTEM.createInt(-intConstant.intValue);
}
if (constant.isDouble) {
DoubleConstantValue doubleConstant = constant;
- return DART_CONSTANT_SYSTEM.createDouble(-doubleConstant.primitiveValue);
+ return DART_CONSTANT_SYSTEM.createDouble(-doubleConstant.doubleValue);
}
return null;
}
@@ -45,7 +45,7 @@
ConstantValue fold(ConstantValue constant) {
if (constant.isBool) {
BoolConstantValue boolConstant = constant;
- return DART_CONSTANT_SYSTEM.createBool(!boolConstant.primitiveValue);
+ return DART_CONSTANT_SYSTEM.createBool(!boolConstant.boolValue);
}
return null;
}
@@ -60,8 +60,7 @@
if (left.isInt && right.isInt) {
IntConstantValue leftInt = left;
IntConstantValue rightInt = right;
- int resultValue =
- foldInts(leftInt.primitiveValue, rightInt.primitiveValue);
+ int resultValue = foldInts(leftInt.intValue, rightInt.intValue);
if (resultValue == null) return null;
return DART_CONSTANT_SYSTEM.createInt(resultValue);
}
@@ -122,8 +121,7 @@
if (left.isBool && right.isBool) {
BoolConstantValue leftBool = left;
BoolConstantValue rightBool = right;
- bool resultValue =
- foldBools(leftBool.primitiveValue, rightBool.primitiveValue);
+ bool resultValue = foldBools(leftBool.boolValue, rightBool.boolValue);
return DART_CONSTANT_SYSTEM.createBool(resultValue);
}
return null;
@@ -154,9 +152,11 @@
NumConstantValue rightNum = right;
num foldedValue;
if (left.isInt && right.isInt) {
- foldedValue = foldInts(leftNum.primitiveValue, rightNum.primitiveValue);
+ IntConstantValue leftInt = leftNum;
+ IntConstantValue rightInt = rightNum;
+ foldedValue = foldInts(leftInt.intValue, rightInt.intValue);
} else {
- foldedValue = foldNums(leftNum.primitiveValue, rightNum.primitiveValue);
+ foldedValue = foldNums(leftNum.doubleValue, rightNum.doubleValue);
}
// A division by 0 means that we might not have a folded value.
if (foldedValue == null) return null;
@@ -243,17 +243,17 @@
if (left.isInt && right.isInt) {
IntConstantValue leftInt = left;
IntConstantValue rightInt = right;
- int result = leftInt.primitiveValue + rightInt.primitiveValue;
+ int result = leftInt.intValue + rightInt.intValue;
return DART_CONSTANT_SYSTEM.createInt(result);
} else if (left.isNum && right.isNum) {
NumConstantValue leftNum = left;
NumConstantValue rightNum = right;
- double result = leftNum.primitiveValue + rightNum.primitiveValue;
+ double result = leftNum.doubleValue + rightNum.doubleValue;
return DART_CONSTANT_SYSTEM.createDouble(result);
} else if (left.isString && right.isString) {
StringConstantValue leftString = left;
StringConstantValue rightString = right;
- String result = leftString.primitiveValue + rightString.primitiveValue;
+ String result = leftString.stringValue + rightString.stringValue;
return DART_CONSTANT_SYSTEM.createString(result);
} else {
return null;
@@ -267,20 +267,28 @@
const RelationalNumOperation();
ConstantValue fold(ConstantValue left, ConstantValue right) {
if (!left.isNum || !right.isNum) return null;
- NumConstantValue leftNum = left;
- NumConstantValue rightNum = right;
- bool foldedValue =
- foldNums(leftNum.primitiveValue, rightNum.primitiveValue);
+ bool foldedValue;
+ if (left.isInt && right.isInt) {
+ IntConstantValue leftInt = left;
+ IntConstantValue rightInt = right;
+ foldedValue = foldInts(leftInt.intValue, rightInt.intValue);
+ } else {
+ NumConstantValue leftNum = left;
+ NumConstantValue rightNum = right;
+ foldedValue = foldNums(leftNum.doubleValue, rightNum.doubleValue);
+ }
assert(foldedValue != null);
return DART_CONSTANT_SYSTEM.createBool(foldedValue);
}
+ bool foldInts(int left, int right);
bool foldNums(num left, num right);
}
class LessOperation extends RelationalNumOperation {
final String name = '<';
const LessOperation();
+ bool foldInts(int left, int right) => left < right;
bool foldNums(num left, num right) => left < right;
apply(left, right) => left < right;
}
@@ -288,6 +296,7 @@
class LessEqualOperation extends RelationalNumOperation {
final String name = '<=';
const LessEqualOperation();
+ bool foldInts(int left, int right) => left <= right;
bool foldNums(num left, num right) => left <= right;
apply(left, right) => left <= right;
}
@@ -295,6 +304,7 @@
class GreaterOperation extends RelationalNumOperation {
final String name = '>';
const GreaterOperation();
+ bool foldInts(int left, int right) => left > right;
bool foldNums(num left, num right) => left > right;
apply(left, right) => left > right;
}
@@ -302,6 +312,7 @@
class GreaterEqualOperation extends RelationalNumOperation {
final String name = '>=';
const GreaterEqualOperation();
+ bool foldInts(int left, int right) => left >= right;
bool foldNums(num left, num right) => left >= right;
apply(left, right) => left >= right;
}
@@ -310,14 +321,22 @@
final String name = '==';
const EqualsOperation();
ConstantValue fold(ConstantValue left, ConstantValue right) {
- if (left.isNum && right.isNum) {
- // Numbers need to be treated specially because: NaN != NaN, -0.0 == 0.0,
- // and 1 == 1.0.
- NumConstantValue leftNum = left;
- NumConstantValue rightNum = right;
- bool result = leftNum.primitiveValue == rightNum.primitiveValue;
+ // Numbers need to be treated specially because: NaN != NaN, -0.0 == 0.0,
+ // and 1 == 1.0.
+ if (left.isInt && right.isInt) {
+ IntConstantValue leftInt = left;
+ IntConstantValue rightInt = right;
+ bool result = leftInt.intValue == rightInt.intValue;
return DART_CONSTANT_SYSTEM.createBool(result);
}
+
+ if (left.isNum && right.isNum) {
+ NumConstantValue leftNum = left;
+ NumConstantValue rightNum = right;
+ bool result = leftNum.doubleValue == rightNum.doubleValue;
+ return DART_CONSTANT_SYSTEM.createBool(result);
+ }
+
if (left.isConstructedObject) {
// Unless we know that the user-defined object does not implement the
// equality operator we cannot fold here.
@@ -367,8 +386,8 @@
if (left.isString && right.isInt) {
StringConstantValue stringConstant = left;
IntConstantValue indexConstant = right;
- String string = stringConstant.primitiveValue;
- int index = indexConstant.primitiveValue;
+ String string = stringConstant.stringValue;
+ int index = indexConstant.intValue;
if (index < 0 || index >= string.length) return null;
int value = string.codeUnitAt(index);
return DART_CONSTANT_SYSTEM.createInt(value);
diff --git a/pkg/compiler/lib/src/constants/expressions.dart b/pkg/compiler/lib/src/constants/expressions.dart
index ae50ac0..a28c018 100644
--- a/pkg/compiler/lib/src/constants/expressions.dart
+++ b/pkg/compiler/lib/src/constants/expressions.dart
@@ -194,17 +194,11 @@
bool get isImplicit => false;
}
-/// A boolean, int, double, string, or null constant.
-abstract class PrimitiveConstantExpression extends ConstantExpression {
- /// The primitive value of this constant expression.
- get primitiveValue;
-}
-
/// Boolean literal constant.
-class BoolConstantExpression extends PrimitiveConstantExpression {
- final bool primitiveValue;
+class BoolConstantExpression extends ConstantExpression {
+ final bool boolValue;
- BoolConstantExpression(this.primitiveValue);
+ BoolConstantExpression(this.boolValue);
ConstantExpressionKind get kind => ConstantExpressionKind.BOOL;
@@ -214,21 +208,21 @@
@override
void _createStructuredText(StringBuffer sb) {
- sb.write('Bool(value=${primitiveValue})');
+ sb.write('Bool(value=${boolValue})');
}
@override
ConstantValue evaluate(
EvaluationEnvironment environment, ConstantSystem constantSystem) {
- return constantSystem.createBool(primitiveValue);
+ return constantSystem.createBool(boolValue);
}
@override
- int _computeHashCode() => 13 * primitiveValue.hashCode;
+ int _computeHashCode() => 13 * boolValue.hashCode;
@override
bool _equals(BoolConstantExpression other) {
- return primitiveValue == other.primitiveValue;
+ return boolValue == other.boolValue;
}
@override
@@ -237,10 +231,10 @@
}
/// Integer literal constant.
-class IntConstantExpression extends PrimitiveConstantExpression {
- final int primitiveValue;
+class IntConstantExpression extends ConstantExpression {
+ final int intValue;
- IntConstantExpression(this.primitiveValue);
+ IntConstantExpression(this.intValue);
ConstantExpressionKind get kind => ConstantExpressionKind.INT;
@@ -250,21 +244,21 @@
@override
void _createStructuredText(StringBuffer sb) {
- sb.write('Int(value=${primitiveValue})');
+ sb.write('Int(value=${intValue})');
}
@override
ConstantValue evaluate(
EvaluationEnvironment environment, ConstantSystem constantSystem) {
- return constantSystem.createInt(primitiveValue);
+ return constantSystem.createInt(intValue);
}
@override
- int _computeHashCode() => 17 * primitiveValue.hashCode;
+ int _computeHashCode() => 17 * intValue.hashCode;
@override
bool _equals(IntConstantExpression other) {
- return primitiveValue == other.primitiveValue;
+ return intValue == other.intValue;
}
@override
@@ -273,10 +267,10 @@
}
/// Double literal constant.
-class DoubleConstantExpression extends PrimitiveConstantExpression {
- final double primitiveValue;
+class DoubleConstantExpression extends ConstantExpression {
+ final double doubleValue;
- DoubleConstantExpression(this.primitiveValue);
+ DoubleConstantExpression(this.doubleValue);
ConstantExpressionKind get kind => ConstantExpressionKind.DOUBLE;
@@ -286,21 +280,21 @@
@override
void _createStructuredText(StringBuffer sb) {
- sb.write('Double(value=${primitiveValue})');
+ sb.write('Double(value=${doubleValue})');
}
@override
ConstantValue evaluate(
EvaluationEnvironment environment, ConstantSystem constantSystem) {
- return constantSystem.createDouble(primitiveValue);
+ return constantSystem.createDouble(doubleValue);
}
@override
- int _computeHashCode() => 19 * primitiveValue.hashCode;
+ int _computeHashCode() => 19 * doubleValue.hashCode;
@override
bool _equals(DoubleConstantExpression other) {
- return primitiveValue == other.primitiveValue;
+ return doubleValue == other.doubleValue;
}
@override
@@ -309,10 +303,10 @@
}
/// String literal constant.
-class StringConstantExpression extends PrimitiveConstantExpression {
- final String primitiveValue;
+class StringConstantExpression extends ConstantExpression {
+ final String stringValue;
- StringConstantExpression(this.primitiveValue);
+ StringConstantExpression(this.stringValue);
ConstantExpressionKind get kind => ConstantExpressionKind.STRING;
@@ -322,21 +316,21 @@
@override
void _createStructuredText(StringBuffer sb) {
- sb.write('String(value=${primitiveValue})');
+ sb.write('String(value=${stringValue})');
}
@override
ConstantValue evaluate(
EvaluationEnvironment environment, ConstantSystem constantSystem) {
- return constantSystem.createString(primitiveValue);
+ return constantSystem.createString(stringValue);
}
@override
- int _computeHashCode() => 23 * primitiveValue.hashCode;
+ int _computeHashCode() => 23 * stringValue.hashCode;
@override
bool _equals(StringConstantExpression other) {
- return primitiveValue == other.primitiveValue;
+ return stringValue == other.stringValue;
}
@override
@@ -345,7 +339,7 @@
}
/// Null literal constant.
-class NullConstantExpression extends PrimitiveConstantExpression {
+class NullConstantExpression extends ConstantExpression {
NullConstantExpression();
ConstantExpressionKind get kind => ConstantExpressionKind.NULL;
@@ -365,8 +359,6 @@
return constantSystem.createNull();
}
- get primitiveValue => null;
-
@override
int _computeHashCode() => 29;
@@ -696,8 +688,17 @@
continue;
}
if (value.isPrimitive) {
- PrimitiveConstantValue primitive = value;
- sb.write(primitive.primitiveValue);
+ if (value is StringConstantValue) {
+ sb.write(value.stringValue);
+ } else if (value is IntConstantValue) {
+ sb.write(value.intValue);
+ } else if (value is DoubleConstantValue) {
+ sb.write(value.doubleValue);
+ } else if (value is BoolConstantValue) {
+ sb.write(value.boolValue);
+ } else if (value is NullConstantValue) {
+ sb.write(null);
+ }
} else {
environment.reportError(
expression, MessageKind.INVALID_CONSTANT_INTERPOLATION_TYPE, {
@@ -1450,7 +1451,7 @@
return new NonConstantValue();
} else {
StringConstantValue stringValue = value;
- return constantSystem.createInt(stringValue.primitiveValue.length);
+ return constantSystem.createInt(stringValue.stringValue.length);
}
}
@@ -1743,8 +1744,8 @@
}
if (isValid) {
StringConstantValue nameStringConstantValue = nameConstantValue;
- String text = environment
- .readFromEnvironment(nameStringConstantValue.primitiveValue);
+ String text =
+ environment.readFromEnvironment(nameStringConstantValue.stringValue);
if (text == 'true') {
return constantSystem.createBool(true);
} else if (text == 'false') {
@@ -1822,8 +1823,8 @@
}
if (isValid) {
StringConstantValue nameStringConstantValue = nameConstantValue;
- String text = environment
- .readFromEnvironment(nameStringConstantValue.primitiveValue);
+ String text =
+ environment.readFromEnvironment(nameStringConstantValue.stringValue);
int value;
if (text != null) {
value = int.parse(text, onError: (_) => null);
@@ -1903,8 +1904,8 @@
}
if (isValid) {
StringConstantValue nameStringConstantValue = nameConstantValue;
- String text = environment
- .readFromEnvironment(nameStringConstantValue.primitiveValue);
+ String text =
+ environment.readFromEnvironment(nameStringConstantValue.stringValue);
if (text == null) {
return defaultConstantValue;
} else {
@@ -1965,15 +1966,15 @@
if (environment.enableAssertions) {
// Boolean conversion:
validAssert =
- conditionValue is BoolConstantValue && conditionValue.primitiveValue;
+ conditionValue is BoolConstantValue && conditionValue.boolValue;
} else {
validAssert = true;
}
if (!validAssert) {
if (message != null) {
ConstantValue value = message.evaluate(environment, constantSystem);
- if (value is PrimitiveConstantValue) {
- String text = '${value.primitiveValue}';
+ if (value is StringConstantValue) {
+ String text = '${value.stringValue}';
environment.reportError(this,
MessageKind.INVALID_ASSERT_VALUE_MESSAGE, {'message': text});
} else {
@@ -2125,34 +2126,30 @@
return constant.accept(this, null);
}
- void visitPrimitive(PrimitiveConstantExpression exp) {
- sb.write(exp.primitiveValue);
- }
-
@override
void visitBool(BoolConstantExpression exp, [_]) {
- visitPrimitive(exp);
+ sb.write(exp.boolValue);
}
@override
void visitDouble(DoubleConstantExpression exp, [_]) {
- visitPrimitive(exp);
+ sb.write(exp.doubleValue);
}
@override
void visitInt(IntConstantExpression exp, [_]) {
- visitPrimitive(exp);
+ sb.write(exp.intValue);
}
@override
void visitNull(NullConstantExpression exp, [_]) {
- visitPrimitive(exp);
+ sb.write(null);
}
@override
void visitString(StringConstantExpression exp, [_]) {
// TODO(johnniwinther): Ensure correct escaping.
- sb.write('"${exp.primitiveValue}"');
+ sb.write('"${exp.stringValue}"');
}
@override
@@ -2226,7 +2223,7 @@
if (expression.kind == ConstantExpressionKind.STRING) {
StringConstantExpression string = expression;
// TODO(johnniwinther): Ensure correct escaping.
- sb.write('${string.primitiveValue}');
+ sb.write('${string.stringValue}');
} else {
sb.write(r"${");
visit(expression);
diff --git a/pkg/compiler/lib/src/constants/values.dart b/pkg/compiler/lib/src/constants/values.dart
index 115def6..230350a 100644
--- a/pkg/compiler/lib/src/constants/values.dart
+++ b/pkg/compiler/lib/src/constants/values.dart
@@ -153,26 +153,19 @@
}
abstract class PrimitiveConstantValue extends ConstantValue {
- get primitiveValue;
-
const PrimitiveConstantValue();
bool get isPrimitive => true;
bool operator ==(var other) {
- if (other is! PrimitiveConstantValue) return false;
- PrimitiveConstantValue otherPrimitive = other;
- // We use == instead of 'identical' so that DartStrings compare correctly.
- return primitiveValue == otherPrimitive.primitiveValue;
+ // Making this method abstract does not give us an error.
+ throw new UnsupportedError('PrimitiveConstant.==');
}
int get hashCode => throw new UnsupportedError('PrimitiveConstant.hashCode');
// Primitive constants don't have dependencies.
List<ConstantValue> getDependencies() => const <ConstantValue>[];
-
- /// This value in Dart syntax.
- String toDartText() => primitiveValue.toString();
}
class NullConstantValue extends PrimitiveConstantValue {
@@ -185,10 +178,10 @@
bool get isNull => true;
- get primitiveValue => null;
-
DartType getType(CommonElements types) => types.nullType;
+ bool operator ==(other) => other is NullConstantValue;
+
// The magic constant has no meaning. It is just a random value.
int get hashCode => 785965825;
@@ -197,18 +190,21 @@
ConstantValueKind get kind => ConstantValueKind.NULL;
String toStructuredText() => 'NullConstant';
+
+ String toDartText() => 'null';
}
abstract class NumConstantValue extends PrimitiveConstantValue {
- const NumConstantValue();
-
- num get primitiveValue;
+ double get doubleValue;
bool get isNum => true;
+
+ const NumConstantValue();
}
class IntConstantValue extends NumConstantValue {
- final int primitiveValue;
+ final int intValue;
+ double get doubleValue => intValue.toDouble();
factory IntConstantValue(int value) {
switch (value) {
@@ -243,43 +239,42 @@
}
}
- const IntConstantValue._internal(this.primitiveValue);
+ const IntConstantValue._internal(this.intValue);
bool get isInt => true;
- bool isUInt31() => primitiveValue >= 0 && primitiveValue < (1 << 31);
+ bool isUInt31() => intValue >= 0 && intValue < (1 << 31);
- bool isUInt32() => primitiveValue >= 0 && primitiveValue < (1 << 32);
+ bool isUInt32() => intValue >= 0 && intValue < (1 << 32);
- bool isPositive() => primitiveValue >= 0;
+ bool isPositive() => intValue >= 0;
- bool get isZero => primitiveValue == 0;
+ bool get isZero => intValue == 0;
- bool get isOne => primitiveValue == 1;
+ bool get isOne => intValue == 1;
DartType getType(CommonElements types) => types.intType;
- // We have to override the equality operator so that ints and doubles are
- // treated as separate constants.
- // The is [:!IntConstant:] check at the beginning of the function makes sure
- // that we compare only equal to integer constants.
bool operator ==(var other) {
+ // Ints and doubles are treated as separate constants.
if (other is! IntConstantValue) return false;
IntConstantValue otherInt = other;
- return primitiveValue == otherInt.primitiveValue;
+ return intValue == otherInt.intValue;
}
- int get hashCode => primitiveValue & Hashing.SMI_MASK;
+ int get hashCode => intValue & Hashing.SMI_MASK;
accept(ConstantValueVisitor visitor, arg) => visitor.visitInt(this, arg);
ConstantValueKind get kind => ConstantValueKind.INT;
String toStructuredText() => 'IntConstant(${toDartText()})';
+
+ String toDartText() => intValue.toString();
}
class DoubleConstantValue extends NumConstantValue {
- final double primitiveValue;
+ final double doubleValue;
factory DoubleConstantValue(double value) {
if (value.isNaN) {
@@ -297,45 +292,47 @@
}
}
- const DoubleConstantValue._internal(this.primitiveValue);
+ const DoubleConstantValue._internal(this.doubleValue);
bool get isDouble => true;
- bool get isNaN => primitiveValue.isNaN;
+ bool get isNaN => doubleValue.isNaN;
// We need to check for the negative sign since -0.0 == 0.0.
- bool get isMinusZero => primitiveValue == 0.0 && primitiveValue.isNegative;
+ bool get isMinusZero => doubleValue == 0.0 && doubleValue.isNegative;
- bool get isZero => primitiveValue == 0.0;
+ bool get isZero => doubleValue == 0.0;
- bool get isOne => primitiveValue == 1.0;
+ bool get isOne => doubleValue == 1.0;
- bool get isPositiveInfinity => primitiveValue == double.INFINITY;
+ bool get isPositiveInfinity => doubleValue == double.INFINITY;
- bool get isNegativeInfinity => primitiveValue == -double.INFINITY;
+ bool get isNegativeInfinity => doubleValue == -double.INFINITY;
DartType getType(CommonElements types) => types.doubleType;
bool operator ==(var other) {
if (other is! DoubleConstantValue) return false;
DoubleConstantValue otherDouble = other;
- double otherValue = otherDouble.primitiveValue;
- if (primitiveValue == 0.0 && otherValue == 0.0) {
- return primitiveValue.isNegative == otherValue.isNegative;
- } else if (primitiveValue.isNaN) {
+ double otherValue = otherDouble.doubleValue;
+ if (doubleValue == 0.0 && otherValue == 0.0) {
+ return doubleValue.isNegative == otherValue.isNegative;
+ } else if (doubleValue.isNaN) {
return otherValue.isNaN;
} else {
- return primitiveValue == otherValue;
+ return doubleValue == otherValue;
}
}
- int get hashCode => primitiveValue.hashCode;
+ int get hashCode => doubleValue.hashCode;
accept(ConstantValueVisitor visitor, arg) => visitor.visitDouble(this, arg);
ConstantValueKind get kind => ConstantValueKind.DOUBLE;
String toStructuredText() => 'DoubleConstant(${toDartText()})';
+
+ String toDartText() => doubleValue.toString();
}
abstract class BoolConstantValue extends PrimitiveConstantValue {
@@ -347,6 +344,8 @@
bool get isBool => true;
+ bool get boolValue;
+
DartType getType(CommonElements types) => types.boolType;
BoolConstantValue negate();
@@ -365,7 +364,7 @@
bool get isTrue => true;
- bool get primitiveValue => true;
+ bool get boolValue => true;
FalseConstantValue negate() => new FalseConstantValue();
@@ -374,6 +373,8 @@
// The magic constant is just a random value. It does not have any
// significance.
int get hashCode => 499;
+
+ String toDartText() => boolValue.toString();
}
class FalseConstantValue extends BoolConstantValue {
@@ -383,7 +384,7 @@
bool get isFalse => true;
- bool get primitiveValue => false;
+ bool get boolValue => false;
TrueConstantValue negate() => new TrueConstantValue();
@@ -392,16 +393,18 @@
// The magic constant is just a random value. It does not have any
// significance.
int get hashCode => 536555975;
+
+ String toDartText() => boolValue.toString();
}
class StringConstantValue extends PrimitiveConstantValue {
- final String primitiveValue;
+ final String stringValue;
final int hashCode;
// TODO(floitsch): cache StringConstants.
StringConstantValue(String value)
- : this.primitiveValue = value,
+ : this.stringValue = value,
this.hashCode = value.hashCode;
bool get isString => true;
@@ -413,19 +416,19 @@
if (other is! StringConstantValue) return false;
StringConstantValue otherString = other;
return hashCode == otherString.hashCode &&
- primitiveValue == otherString.primitiveValue;
+ stringValue == otherString.stringValue;
}
- String toDartString() => primitiveValue;
+ String toDartString() => stringValue;
- int get length => primitiveValue.length;
+ int get length => stringValue.length;
accept(ConstantValueVisitor visitor, arg) => visitor.visitString(this, arg);
ConstantValueKind get kind => ConstantValueKind.STRING;
// TODO(johnniwinther): Ensure correct escaping.
- String toDartText() => '"${primitiveValue}"';
+ String toDartText() => '"${stringValue}"';
String toStructuredText() => 'StringConstant(${toDartText()})';
}
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 36ac2da..b8f6ab0 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -392,6 +392,7 @@
new OptionHandler(Flags.disableNativeLiveTypeAnalysis, passThrough),
new OptionHandler('--categories=.*', setCategories),
new OptionHandler(Flags.disableInlining, implyCompilation),
+ new OptionHandler(Flags.disableProgramSplit, implyCompilation),
new OptionHandler(Flags.disableTypeInference, implyCompilation),
new OptionHandler(Flags.disableRtiOptimization, implyCompilation),
new OptionHandler(Flags.terse, passThrough),
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index 391f14b..0d03766 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -134,9 +134,10 @@
final ImportSetLattice importSets = new ImportSetLattice();
final Compiler compiler;
- DeferredLoadTask(Compiler compiler)
- : compiler = compiler,
- super(compiler.measurer) {
+
+ bool get disableProgramSplit => compiler.options.disableProgramSplit;
+
+ DeferredLoadTask(this.compiler) : super(compiler.measurer) {
mainOutputUnit = new OutputUnit(true, 'main', new Set<ImportEntity>());
importSets.mainSet.unit = mainOutputUnit;
allOutputUnits.add(mainOutputUnit);
@@ -162,6 +163,7 @@
void registerConstantDeferredUse(
DeferredConstantValue constant, ImportEntity import) {
+ if (!isProgramSplit || disableProgramSplit) return;
var newSet = importSets.singleton(import);
assert(
_constantToSet[constant] == null || _constantToSet[constant] == newSet);
@@ -639,7 +641,9 @@
/// work item (e.g. we might converge faster if we pick first the update that
/// contains a bigger delta.)
OutputUnitData run(FunctionEntity main, ClosedWorld closedWorld) {
- if (!isProgramSplit || main == null) return _buildResult();
+ if (!isProgramSplit || main == null || disableProgramSplit) {
+ return _buildResult();
+ }
work() {
var queue = new WorkQueue(this.importSets);
@@ -689,9 +693,6 @@
addDeferredMirrorElements(queue);
emptyQueue();
}
-
- _createOutputUnits();
- _setupHunksToLoad();
}
reporter.withCurrentElement(main.library, () => measure(work));
@@ -703,6 +704,8 @@
}
OutputUnitData _buildResult() {
+ _createOutputUnits();
+ _setupHunksToLoad();
Map<Entity, OutputUnit> entityMap = <Entity, OutputUnit>{};
Map<ConstantValue, OutputUnit> constantMap = <ConstantValue, OutputUnit>{};
_elementToSet.forEach((entity, s) => entityMap[entity] = s.unit);
@@ -711,8 +714,8 @@
_elementToSet = null;
_constantToSet = null;
cleanup();
- return new OutputUnitData(this.isProgramSplit, this.mainOutputUnit,
- entityMap, constantMap, importSets);
+ return new OutputUnitData(this.isProgramSplit && !disableProgramSplit,
+ this.mainOutputUnit, entityMap, constantMap, importSets);
}
/// Frees up strategy-specific temporary data.
diff --git a/pkg/compiler/lib/src/inferrer/builder.dart b/pkg/compiler/lib/src/inferrer/builder.dart
index e7aaf99..ff6f898 100644
--- a/pkg/compiler/lib/src/inferrer/builder.dart
+++ b/pkg/compiler/lib/src/inferrer/builder.dart
@@ -2297,7 +2297,7 @@
compiler.backend.constants.getConstantValue(fieldElement.constant);
if (value != null && value.isInt) {
IntConstantValue intValue = value;
- return intValue.primitiveValue;
+ return intValue.intValue;
}
}
}
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index a02087a..367e64e 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -1005,7 +1005,7 @@
ConstantValue value = _elementMap.getFieldConstantValue(member);
if (value != null && value.isInt) {
IntConstantValue intValue = value;
- return intValue.primitiveValue;
+ return intValue.intValue;
}
}
}
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
index 2a74cf9..3b2ccaa 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
@@ -1212,7 +1212,8 @@
TypeMask arg = arguments.positional[0].type;
if (arg is ValueTypeMask && arg.value.isString) {
DictionaryTypeMask dictionaryTypeMask = typeMask;
- String key = arg.value.primitiveValue;
+ StringConstantValue value = arg.value;
+ String key = value.stringValue;
if (dictionaryTypeMask.typeMap.containsKey(key)) {
if (debug.VERBOSE) {
print("Dictionary lookup for $key yields "
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index 2f56a2d..12ef4a4 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -120,7 +120,7 @@
@override
jsAst.Expression visitInt(IntConstantValue constant, [_]) {
- int primitiveValue = constant.primitiveValue;
+ int value = constant.intValue;
// Since we are in JavaScript we can shorten long integers to their shorter
// exponential representation, for example: "1e4" is shorter than "10000".
//
@@ -128,12 +128,12 @@
// (like 1234567890123456789012345 which becomes 12345678901234568e8).
// However, since JavaScript engines represent all numbers as doubles, these
// digits are lost anyway.
- String representation = primitiveValue.toString();
+ String representation = value.toString();
String alternative = null;
int cutoff = _options.enableMinification ? 10000 : 1e10.toInt();
- if (primitiveValue.abs() >= cutoff) {
- alternative = _shortenExponentialRepresentation(
- primitiveValue.toStringAsExponential());
+ if (value.abs() >= cutoff) {
+ alternative =
+ _shortenExponentialRepresentation(value.toStringAsExponential());
}
if (alternative != null && alternative.length < representation.length) {
representation = alternative;
@@ -143,7 +143,7 @@
@override
jsAst.Expression visitDouble(DoubleConstantValue constant, [_]) {
- double value = constant.primitiveValue;
+ double value = constant.doubleValue;
if (value.isNaN) {
return js("0/0");
} else if (value == double.INFINITY) {
@@ -178,7 +178,7 @@
*/
@override
jsAst.Expression visitString(StringConstantValue constant, [_]) {
- return js.escapedString(constant.primitiveValue, ascii: true);
+ return js.escapedString(constant.stringValue, ascii: true);
}
@override
@@ -197,7 +197,7 @@
List<jsAst.Property> properties = <jsAst.Property>[];
for (int i = 0; i < constant.length; i++) {
StringConstantValue key = constant.keys[i];
- if (key.primitiveValue == JavaScriptMapConstant.PROTO_PROPERTY) {
+ if (key.stringValue == JavaScriptMapConstant.PROTO_PROPERTY) {
continue;
}
@@ -317,7 +317,7 @@
ClassEntity element = constant.type.element;
if (element == _commonElements.jsConstClass) {
StringConstantValue str = constant.fields.values.single;
- String value = str.primitiveValue;
+ String value = str.stringValue;
return new jsAst.LiteralExpression(stripComments(value));
}
jsAst.Expression constructor =
diff --git a/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart b/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
index 19afd3c..fa32df8 100644
--- a/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
@@ -22,8 +22,7 @@
if (constant.isMinusZero) constant = DART_CONSTANT_SYSTEM.createInt(0);
IntConstantValue intConstant = constant;
// We convert the result of bit-operations to 32 bit unsigned integers.
- return JAVA_SCRIPT_CONSTANT_SYSTEM
- .createInt32(~intConstant.primitiveValue);
+ return JAVA_SCRIPT_CONSTANT_SYSTEM.createInt32(~intConstant.intValue);
}
return null;
}
@@ -47,7 +46,7 @@
IntConstantValue result = dartBitOperation.fold(left, right);
if (result != null) {
// We convert the result of bit-operations to 32 bit unsigned integers.
- return JAVA_SCRIPT_CONSTANT_SYSTEM.createInt32(result.primitiveValue);
+ return JAVA_SCRIPT_CONSTANT_SYSTEM.createInt32(result.intValue);
}
return result;
}
@@ -62,7 +61,7 @@
// Truncate the input value to 32 bits if necessary.
if (left.isInt) {
IntConstantValue intConstant = left;
- int value = intConstant.primitiveValue;
+ int value = intConstant.intValue;
int truncatedValue = value & JAVA_SCRIPT_CONSTANT_SYSTEM.BITS32;
if (value < 0) {
// Sign-extend if the input was negative. The current semantics don't
@@ -96,7 +95,7 @@
ConstantValue fold(ConstantValue constant) {
if (constant.isInt) {
IntConstantValue intConstant = constant;
- if (intConstant.primitiveValue == 0) {
+ if (intConstant.intValue == 0) {
return JAVA_SCRIPT_CONSTANT_SYSTEM.createDouble(-0.0);
}
}
@@ -160,14 +159,19 @@
BoolConstantValue fold(ConstantValue left, ConstantValue right) {
BoolConstantValue result = dartIdentityOperation.fold(left, right);
- if (result == null || result.primitiveValue) return result;
+ if (result == null || result.boolValue) return result;
// In JavaScript -0.0 === 0 and all doubles are equal to their integer
// values. Furthermore NaN !== NaN.
+ if (left.isInt && right.isInt) {
+ IntConstantValue leftInt = left;
+ IntConstantValue rightInt = right;
+ return new BoolConstantValue(leftInt.intValue == rightInt.intValue);
+ }
if (left.isNum && right.isNum) {
NumConstantValue leftNum = left;
NumConstantValue rightNum = right;
- double leftDouble = leftNum.primitiveValue.toDouble();
- double rightDouble = rightNum.primitiveValue.toDouble();
+ double leftDouble = leftNum.doubleValue;
+ double rightDouble = rightNum.doubleValue;
return new BoolConstantValue(leftDouble == rightDouble);
}
return result;
@@ -198,14 +202,14 @@
if (constant.isInt) {
IntConstantValue intConstant = constant;
- int value = intConstant.primitiveValue;
+ int value = intConstant.intValue;
if (value >= -double.MAX_FINITE && value <= double.MAX_FINITE) {
return tryToRound(value);
}
}
if (constant.isDouble) {
DoubleConstantValue doubleConstant = constant;
- double value = doubleConstant.primitiveValue;
+ double value = doubleConstant.doubleValue;
// NaN and infinities will throw.
if (value.isNaN) return null;
if (value.isInfinite) return null;
@@ -269,7 +273,7 @@
NumConstantValue convertToJavaScriptConstant(NumConstantValue constant) {
if (constant.isInt) {
IntConstantValue intConstant = constant;
- int intValue = intConstant.primitiveValue;
+ int intValue = intConstant.intValue;
if (integerBecomesNanOrInfinity(intValue)) {
return new DoubleConstantValue(intValue.toDouble());
}
@@ -281,7 +285,7 @@
}
} else if (constant.isDouble) {
DoubleConstantValue doubleResult = constant;
- double doubleValue = doubleResult.primitiveValue;
+ double doubleValue = doubleResult.doubleValue;
if (!doubleValue.isInfinite &&
!doubleValue.isNaN &&
!constant.isMinusZero) {
@@ -361,7 +365,7 @@
for (int i = 0; i < keys.length; i++) {
dynamic key = keys[i];
if (key.isString) {
- if (key.primitiveValue == JavaScriptMapConstant.PROTO_PROPERTY) {
+ if (key.stringValue == JavaScriptMapConstant.PROTO_PROPERTY) {
protoValue = values[i];
}
} else {
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index a32d5ec..0dab60a 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -1888,10 +1888,10 @@
@override
void visitInt(IntConstantValue constant, [_]) {
// No `addRoot` since IntConstants are always inlined.
- if (constant.primitiveValue < 0) {
- add('m${-constant.primitiveValue}');
+ if (constant.intValue < 0) {
+ add('m${-constant.intValue}');
} else {
- add('${constant.primitiveValue}');
+ add('${constant.intValue}');
}
}
@@ -1908,7 +1908,7 @@
@override
void visitString(StringConstantValue constant, [_]) {
// No `addRoot` since string constants are always inlined.
- addIdentifier(constant.primitiveValue);
+ addIdentifier(constant.stringValue);
}
@override
@@ -2078,17 +2078,17 @@
@override
int visitInt(IntConstantValue constant, [_]) {
- return _hashInt(constant.primitiveValue);
+ return _hashInt(constant.intValue);
}
@override
int visitDouble(DoubleConstantValue constant, [_]) {
- return _hashDouble(constant.primitiveValue);
+ return _hashDouble(constant.doubleValue);
}
@override
int visitString(StringConstantValue constant, [_]) {
- return _hashString(2, constant.primitiveValue);
+ return _hashString(2, constant.stringValue);
}
@override
diff --git a/pkg/compiler/lib/src/js_emitter/constant_ordering.dart b/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
index 0b8e6a7..a1ee6ab 100644
--- a/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
+++ b/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
@@ -139,22 +139,22 @@
}
int visitInt(IntConstantValue a, IntConstantValue b) {
- return a.primitiveValue.compareTo(b.primitiveValue);
+ return a.intValue.compareTo(b.intValue);
}
int visitDouble(DoubleConstantValue a, DoubleConstantValue b) {
- return a.primitiveValue.compareTo(b.primitiveValue);
+ return a.doubleValue.compareTo(b.doubleValue);
}
int visitBool(BoolConstantValue a, BoolConstantValue b) {
- int aInt = a.primitiveValue ? 1 : 0;
- int bInt = b.primitiveValue ? 1 : 0;
+ int aInt = a.boolValue ? 1 : 0;
+ int bInt = b.boolValue ? 1 : 0;
return aInt.compareTo(bInt);
}
int visitString(StringConstantValue a, StringConstantValue b) {
- String aString = a.primitiveValue;
- String bString = b.primitiveValue;
+ String aString = a.stringValue;
+ String bString = b.stringValue;
return aString.compareTo(bString);
}
diff --git a/pkg/compiler/lib/src/kernel/element_map_mixins.dart b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
index 59ba7e9..9138c5f 100644
--- a/pkg/compiler/lib/src/kernel/element_map_mixins.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
@@ -296,7 +296,7 @@
assert(constant.fields.length == 1 || constant.fields.length == 2);
ConstantValue indexConstant = constant.fields.values.first;
if (indexConstant is IntConstantValue) {
- return indexConstant.primitiveValue;
+ return indexConstant.intValue;
}
}
}
diff --git a/pkg/compiler/lib/src/mirrors_used.dart b/pkg/compiler/lib/src/mirrors_used.dart
index e867b81..c295a27 100644
--- a/pkg/compiler/lib/src/mirrors_used.dart
+++ b/pkg/compiler/lib/src/mirrors_used.dart
@@ -385,7 +385,7 @@
for (ConstantValue entry in list.entries) {
if (entry.isString) {
StringConstantValue string = entry;
- result.add(string.primitiveValue);
+ result.add(string.stringValue);
} else if (!onlyStrings && entry.isType) {
TypeConstantValue type = entry;
result.add(type.representedType);
@@ -404,7 +404,7 @@
return [type.representedType];
} else if (constant.isString) {
StringConstantValue string = constant;
- var iterable = string.primitiveValue.split(',').map((e) => e.trim());
+ var iterable = string.stringValue.split(',').map((e) => e.trim());
return onlyStrings ? new List<String>.from(iterable) : iterable.toList();
} else {
Spannable node = positionOf(constant);
diff --git a/pkg/compiler/lib/src/native/behavior.dart b/pkg/compiler/lib/src/native/behavior.dart
index 7c2a59b..a862a9d 100644
--- a/pkg/compiler/lib/src/native/behavior.dart
+++ b/pkg/compiler/lib/src/native/behavior.dart
@@ -897,7 +897,7 @@
'Annotations needs one string: ${value.toStructuredText()}');
}
StringConstantValue specStringConstant = fields.single;
- String specString = specStringConstant.primitiveValue;
+ String specString = specStringConstant.stringValue;
for (final typeString in specString.split('|')) {
var type = NativeBehavior._parseType(typeString, lookupType);
if (types == null) types = [];
diff --git a/pkg/compiler/lib/src/native/resolver.dart b/pkg/compiler/lib/src/native/resolver.dart
index 67d52a4..5ecdf95 100644
--- a/pkg/compiler/lib/src/native/resolver.dart
+++ b/pkg/compiler/lib/src/native/resolver.dart
@@ -635,7 +635,7 @@
return null;
} else if (fields.single is StringConstantValue) {
StringConstantValue specStringConstant = fields.single;
- return specStringConstant.primitiveValue;
+ return specStringConstant.stringValue;
} else if (defaultValue != null && fields.single is NullConstantValue) {
return defaultValue;
} else {
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 3602620..e194cbd 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -108,6 +108,11 @@
// TODO(sigmund): negate, so all flags are positive
final bool disableInlining;
+ /// Disable deferred loading, instead generate everything in one output unit.
+ /// Note: the resulting program still correctly checks that loadLibrary &
+ /// checkLibrary calls are correct.
+ final bool disableProgramSplit;
+
/// Diagnostic option: If `true`, warnings cause the compilation to fail.
final bool fatalWarnings;
@@ -308,6 +313,7 @@
shownPackageWarnings:
_extractOptionalCsvOption(options, Flags.showPackageWarnings),
disableInlining: _hasOption(options, Flags.disableInlining),
+ disableProgramSplit: _hasOption(options, Flags.disableProgramSplit),
disableTypeInference: _hasOption(options, Flags.disableTypeInference),
disableRtiOptimization:
_hasOption(options, Flags.disableRtiOptimization),
@@ -382,6 +388,7 @@
bool suppressHints: false,
List<String> shownPackageWarnings: null,
bool disableInlining: false,
+ bool disableProgramSplit: false,
bool disableTypeInference: false,
bool disableRtiOptimization: false,
bool dumpInfo: false,
@@ -464,6 +471,7 @@
suppressHints: suppressHints,
shownPackageWarnings: shownPackageWarnings,
disableInlining: disableInlining,
+ disableProgramSplit: disableProgramSplit,
disableTypeInference: disableTypeInference,
disableRtiOptimization: disableRtiOptimization,
dumpInfo: dumpInfo,
@@ -520,6 +528,7 @@
this.suppressHints: false,
List<String> shownPackageWarnings: null,
this.disableInlining: false,
+ this.disableProgramSplit: false,
this.disableTypeInference: false,
this.disableRtiOptimization: false,
this.dumpInfo: false,
@@ -582,6 +591,7 @@
suppressHints,
List<String> shownPackageWarnings,
disableInlining,
+ disableProgramSplit,
disableTypeInference,
disableRtiOptimization,
dumpInfo,
@@ -644,6 +654,7 @@
shownPackageWarnings:
shownPackageWarnings ?? options._shownPackageWarnings,
disableInlining: disableInlining ?? options.disableInlining,
+ disableProgramSplit: disableProgramSplit ?? options.disableProgramSplit,
disableTypeInference:
disableTypeInference ?? options.disableTypeInference,
disableRtiOptimization:
diff --git a/pkg/compiler/lib/src/parser/node_listener.dart b/pkg/compiler/lib/src/parser/node_listener.dart
index 7fb0704..4293c57 100644
--- a/pkg/compiler/lib/src/parser/node_listener.dart
+++ b/pkg/compiler/lib/src/parser/node_listener.dart
@@ -640,6 +640,10 @@
pushNode(new Block(makeNodeList(count, beginToken, endToken, null)));
}
+ void handleInvalidTopLevelBlock(Token token) {
+ popNode(); // block
+ }
+
@override
void handleThrowExpression(Token throwToken, Token endToken) {
Expression expression = popNode();
diff --git a/pkg/compiler/lib/src/resolution/deferred_load.dart b/pkg/compiler/lib/src/resolution/deferred_load.dart
index 5824e16..1ed033a 100644
--- a/pkg/compiler/lib/src/resolution/deferred_load.dart
+++ b/pkg/compiler/lib/src/resolution/deferred_load.dart
@@ -366,7 +366,7 @@
if (element == compiler.resolution.commonElements.deferredLibraryClass) {
ConstructedConstantValue constant = value;
StringConstantValue s = constant.fields.values.single;
- result = s.primitiveValue;
+ result = s.stringValue;
break;
}
}
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
index f920e3c..e50aede 100644
--- a/pkg/compiler/lib/src/resolution/members.dart
+++ b/pkg/compiler/lib/src/resolution/members.dart
@@ -3975,7 +3975,7 @@
argumentNode, MessageKind.STRING_EXPECTED, {'type': type});
} else {
StringConstantValue stringConstant = name;
- String nameString = stringConstant.primitiveValue;
+ String nameString = stringConstant.stringValue;
if (validateSymbol(argumentNode, nameString)) {
registry.registerConstSymbol(nameString);
}
diff --git a/pkg/compiler/lib/src/resolution/resolution_strategy.dart b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
index 8d64db4..a3d9504 100644
--- a/pkg/compiler/lib/src/resolution/resolution_strategy.dart
+++ b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
@@ -897,7 +897,7 @@
String name;
if (value.isString) {
StringConstantValue stringValue = value;
- name = stringValue.primitiveValue;
+ name = stringValue.stringValue;
} else {
// TODO(jacobr): report a warning if the value is not a String.
name = '';
diff --git a/pkg/compiler/lib/src/serialization/constant_serialization.dart b/pkg/compiler/lib/src/serialization/constant_serialization.dart
index b1eaa93..bc0a163 100644
--- a/pkg/compiler/lib/src/serialization/constant_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/constant_serialization.dart
@@ -92,22 +92,22 @@
@override
void visitBool(BoolConstantExpression exp, ObjectEncoder encoder) {
- encoder.setBool(Key.VALUE, exp.primitiveValue);
+ encoder.setBool(Key.VALUE, exp.boolValue);
}
@override
void visitInt(IntConstantExpression exp, ObjectEncoder encoder) {
- encoder.setInt(Key.VALUE, exp.primitiveValue);
+ encoder.setInt(Key.VALUE, exp.intValue);
}
@override
void visitDouble(DoubleConstantExpression exp, ObjectEncoder encoder) {
- encoder.setDouble(Key.VALUE, exp.primitiveValue);
+ encoder.setDouble(Key.VALUE, exp.doubleValue);
}
@override
void visitString(StringConstantExpression exp, ObjectEncoder encoder) {
- encoder.setString(Key.VALUE, exp.primitiveValue);
+ encoder.setString(Key.VALUE, exp.stringValue);
}
@override
diff --git a/pkg/compiler/lib/src/serialization/equivalence.dart b/pkg/compiler/lib/src/serialization/equivalence.dart
index 3deda32..06b0dc3 100644
--- a/pkg/compiler/lib/src/serialization/equivalence.dart
+++ b/pkg/compiler/lib/src/serialization/equivalence.dart
@@ -861,21 +861,20 @@
bool visitBool(
BoolConstantExpression exp1, covariant BoolConstantExpression exp2) {
return strategy.test(
- exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
+ exp1, exp2, 'boolValue', exp1.boolValue, exp2.boolValue);
}
@override
bool visitDouble(
DoubleConstantExpression exp1, covariant DoubleConstantExpression exp2) {
return strategy.test(
- exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
+ exp1, exp2, 'doubleValue', exp1.doubleValue, exp2.doubleValue);
}
@override
bool visitInt(
IntConstantExpression exp1, covariant IntConstantExpression exp2) {
- return strategy.test(
- exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
+ return strategy.test(exp1, exp2, 'intValue', exp1.intValue, exp2.intValue);
}
@override
@@ -888,7 +887,7 @@
bool visitString(
StringConstantExpression exp1, covariant StringConstantExpression exp2) {
return strategy.test(
- exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
+ exp1, exp2, 'stringValue', exp1.stringValue, exp2.stringValue);
}
@override
@@ -1002,21 +1001,21 @@
@override
bool visitBool(BoolConstantValue value1, covariant BoolConstantValue value2) {
- return strategy.test(value1, value2, 'primitiveValue',
- value1.primitiveValue, value2.primitiveValue);
+ return strategy.test(
+ value1, value2, 'boolValue', value1.boolValue, value2.boolValue);
}
@override
bool visitDouble(
DoubleConstantValue value1, covariant DoubleConstantValue value2) {
- return strategy.test(value1, value2, 'primitiveValue',
- value1.primitiveValue, value2.primitiveValue);
+ return strategy.test(
+ value1, value2, 'doubleValue', value1.doubleValue, value2.doubleValue);
}
@override
bool visitInt(IntConstantValue value1, covariant IntConstantValue value2) {
- return strategy.test(value1, value2, 'primitiveValue',
- value1.primitiveValue, value2.primitiveValue);
+ return strategy.test(
+ value1, value2, 'intValue', value1.intValue, value2.intValue);
}
@override
@@ -1027,8 +1026,8 @@
@override
bool visitString(
StringConstantValue value1, covariant StringConstantValue value2) {
- return strategy.test(value1, value2, 'primitiveValue',
- value1.primitiveValue, value2.primitiveValue);
+ return strategy.test(
+ value1, value2, 'stringValue', value1.stringValue, value2.stringValue);
}
@override
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 524fa98..8b448f8 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -2972,7 +2972,7 @@
}
HConstant hConstant = globalNameHNode;
StringConstantValue constant = hConstant.constant;
- String globalName = constant.primitiveValue;
+ String globalName = constant.stringValue;
js.Template expr = js.js.expressionTemplateYielding(
emitter.generateEmbeddedGlobalAccess(globalName));
native.NativeBehavior nativeBehavior = elements.getNativeData(node);
@@ -3586,7 +3586,8 @@
bool canThrow = true;
if (inputs[0].isInteger(closedWorld) && inputs[0] is HConstant) {
dynamic constant = inputs[0];
- int value = constant.constant.primitiveValue;
+ IntConstantValue intConstant = constant.constant;
+ int value = intConstant.intValue;
if (0 <= value && value < 0x100000000) canThrow = false;
}
HForeignCode foreign = new HForeignCode(code, elementType, inputs,
@@ -4082,7 +4083,7 @@
if (isSymbolConstructor) {
ConstructedConstantValue symbol = getConstantForNode(node);
StringConstantValue stringConstant = symbol.fields.values.single;
- String nameString = stringConstant.primitiveValue;
+ String nameString = stringConstant.stringValue;
registry?.registerConstSymbol(nameString);
}
} else {
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 096366f..101c9e4 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -3356,7 +3356,7 @@
HConstant hConstant = instruction;
StringConstantValue stringConstant = hConstant.constant;
- return stringConstant.primitiveValue;
+ return stringConstant.stringValue;
}
void handleForeignJsCurrentIsolateContext(ir.StaticInvocation invocation) {
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index cbba76d..25170a9 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -260,10 +260,10 @@
// of bits.
int bitWidth(HInstruction instruction) {
const int MAX = 32;
- int constant(HInstruction insn) {
- if (insn is HConstant && insn.isConstantInteger()) {
- IntConstantValue constant = insn.constant;
- return constant.primitiveValue;
+ int constant(HInstruction instruction) {
+ if (instruction is HConstant && instruction.isConstantInteger()) {
+ IntConstantValue constant = instruction.constant;
+ return constant.intValue;
}
return null;
}
diff --git a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
index f6c368c..bb5bef1 100644
--- a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
+++ b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
@@ -563,7 +563,7 @@
if (!instruction.isConstantInteger()) return false;
HConstant rightConstant = instruction;
IntConstantValue intConstant = rightConstant.constant;
- int count = intConstant.primitiveValue;
+ int count = intConstant.intValue;
return count != 0;
}
@@ -571,7 +571,7 @@
if (!instruction.isConstantInteger()) return false;
HConstant rightConstant = instruction;
IntConstantValue intConstant = rightConstant.constant;
- int count = intConstant.primitiveValue;
+ int count = intConstant.intValue;
return count >= 2;
}
@@ -651,7 +651,7 @@
if (instruction.isConstantInteger()) {
HConstant rightConstant = instruction;
IntConstantValue intConstant = rightConstant.constant;
- int value = intConstant.primitiveValue;
+ int value = intConstant.intValue;
return value >= low && value <= high;
}
// TODO(sra): Integrate with the bit-width analysis in codegen.dart.
diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart
index b191d7b..8f78dd0 100644
--- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
@@ -302,7 +302,7 @@
return;
}
StringConstantValue stringValue = value;
- impactBuilder.registerConstSymbolName(stringValue.primitiveValue);
+ impactBuilder.registerConstSymbolName(stringValue.stringValue);
}
}
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index dc37dc7..8fee4ed 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -1020,10 +1020,12 @@
HInstruction visitIndex(HIndex node) {
if (node.receiver.isConstantList() && node.index.isConstantInteger()) {
- dynamic instruction = node.receiver;
- List<ConstantValue> entries = instruction.constant.entries;
- instruction = node.index;
- int index = instruction.constant.primitiveValue;
+ HConstant instruction = node.receiver;
+ ListConstantValue list = instruction.constant;
+ List<ConstantValue> entries = list.entries;
+ HConstant indexInstruction = node.index;
+ IntConstantValue indexConstant = indexInstruction.constant;
+ int index = indexConstant.intValue;
if (index >= 0 && index < entries.length) {
return _graph.addConstant(entries[index], _closedWorld);
}
@@ -1219,13 +1221,13 @@
}
StringConstantValue leftString = getString(node.left);
- if (leftString != null && leftString.primitiveValue.length == 0) {
+ if (leftString != null && leftString.stringValue.length == 0) {
return node.right;
}
StringConstantValue rightString = getString(node.right);
if (rightString == null) return node;
- if (rightString.primitiveValue.length == 0) return node.left;
+ if (rightString.stringValue.length == 0) return node.left;
HInstruction prefix = null;
if (leftString == null) {
@@ -1238,14 +1240,14 @@
if (leftString == null) return node;
}
- if (leftString.primitiveValue.length + rightString.primitiveValue.length >
+ if (leftString.stringValue.length + rightString.stringValue.length >
MAX_SHARED_CONSTANT_FOLDED_STRING_LENGTH) {
if (node.usedBy.length > 1) return node;
}
HInstruction folded = _graph.addConstant(
- constantSystem.createString(
- leftString.primitiveValue + rightString.primitiveValue),
+ constantSystem
+ .createString(leftString.stringValue + rightString.stringValue),
_closedWorld);
if (prefix == null) return folded;
return new HStringConcat(
@@ -1256,22 +1258,33 @@
HInstruction input = node.inputs[0];
if (input.isString(_closedWorld)) return input;
+ HInstruction asString(String string) =>
+ _graph.addConstant(constantSystem.createString(string), _closedWorld);
+
HInstruction tryConstant() {
if (!input.isConstant()) return null;
HConstant constant = input;
if (!constant.constant.isPrimitive) return null;
- if (constant.constant.isInt) {
+ PrimitiveConstantValue value = constant.constant;
+ if (value is IntConstantValue) {
// Only constant-fold int.toString() when Dart and JS results the same.
// TODO(18103): We should be able to remove this work-around when issue
// 18103 is resolved by providing the correct string.
- IntConstantValue intConstant = constant.constant;
- // Very conservative range.
- if (!intConstant.isUInt32()) return null;
+ if (!value.isUInt32()) return null;
+ return asString('${value.intValue}');
}
- PrimitiveConstantValue primitive = constant.constant;
- return _graph.addConstant(
- constantSystem.createString('${primitive.primitiveValue}'),
- _closedWorld);
+ if (value is BoolConstantValue) {
+ return asString(value.boolValue ? 'true' : 'false');
+ }
+ if (value is NullConstantValue) {
+ return asString('null');
+ }
+ if (value is DoubleConstantValue) {
+ // TODO(sra): It seems unlikely that all dart2js host implementations
+ // produce exactly the same characters as all JavaScript targets.
+ return asString('${value.doubleValue}');
+ }
+ return null;
}
HInstruction tryToString() {
@@ -1969,7 +1982,7 @@
HConstant input = node.inputs[pos];
if (!input.isConstantInteger()) continue;
IntConstantValue constant = input.constant;
- int label = constant.primitiveValue;
+ int label = constant.intValue;
if (!liveLabels.contains(label) && label <= upper && label >= lower) {
markBlockLive(node.block.successors[pos - 1]);
liveLabels.add(label);
diff --git a/pkg/compiler/lib/src/ssa/value_range_analyzer.dart b/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
index d796db4..1be4244f 100644
--- a/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
+++ b/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
@@ -139,7 +139,7 @@
dynamic constant = constantSystem.add.fold(
constantSystem.createInt(value), constantSystem.createInt(other.value));
if (!constant.isInt) return const UnknownValue();
- return info.newIntValue(constant.primitiveValue);
+ return info.newIntValue(constant.intValue);
}
Value operator -(dynamic other) {
@@ -149,7 +149,7 @@
dynamic constant = constantSystem.subtract.fold(
constantSystem.createInt(value), constantSystem.createInt(other.value));
if (!constant.isInt) return const UnknownValue();
- return info.newIntValue(constant.primitiveValue);
+ return info.newIntValue(constant.intValue);
}
Value operator -() {
@@ -158,7 +158,7 @@
dynamic constant =
constantSystem.negate.fold(constantSystem.createInt(value));
if (!constant.isInt) return const UnknownValue();
- return info.newIntValue(constant.primitiveValue);
+ return info.newIntValue(constant.intValue);
}
Value operator &(dynamic other) {
@@ -166,7 +166,7 @@
ConstantSystem constantSystem = info.constantSystem;
dynamic constant = constantSystem.bitAnd.fold(
constantSystem.createInt(value), constantSystem.createInt(other.value));
- return info.newIntValue(constant.primitiveValue);
+ return info.newIntValue(constant.intValue);
}
Value min(dynamic other) {
@@ -693,7 +693,11 @@
return info.newUnboundRange();
}
if (constantNum.isMinusZero) constantNum = new IntConstantValue(0);
- Value value = info.newIntValue(constantNum.primitiveValue);
+
+ int intValue = constantNum is IntConstantValue
+ ? constantNum.intValue
+ : constantNum.doubleValue.toInt();
+ Value value = info.newIntValue(intValue);
return info.newNormalizedRange(value, value);
}
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index 5424157..80cf145 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -280,10 +280,7 @@
List<int> _summarizeModule(List<CompilationUnit> units) {
if (!options.summarizeApi) return null;
- if (!units.any((u) => resolutionMap
- .elementDeclaredByCompilationUnit(u)
- .librarySource
- .isInSystemLibrary)) {
+ if (!units.any((u) => u.element.source.isInSystemLibrary)) {
var sdk = context.sourceFactory.dartSdk;
summaryData.addBundle(
null,
@@ -2822,7 +2819,7 @@
// []= methods need to return the value. We could also address this at
// call sites, but it's cleaner to instead transform the operator method.
code = JS.alwaysReturnLastParameter(code, formals.last);
- } else if (element.name == '==' && !element.library.isInSdk) {
+ } else if (element.name == '==' && !element.source.isInSystemLibrary) {
// In Dart `operator ==` methods are not called with a null argument.
// This is handled before calling them. For performance reasons, we push
// this check inside the method, to simplify our `equals` helper.
@@ -3632,9 +3629,7 @@
var result = _emitForeignJS(node, e);
if (result != null) return result;
- if (e?.name == 'extensionSymbol' &&
- e.library.isInSdk &&
- e.library.source.uri.toString() == 'dart:_runtime') {
+ if (e?.name == 'extensionSymbol' && isSdkInternalRuntime(e.library)) {
var args = node.argumentList.arguments;
var firstArg = args.length == 1 ? args[0] : null;
if (firstArg is StringLiteral) {
@@ -4347,7 +4342,7 @@
JS.Expression emitNew() {
var args = _emitArgumentList(argumentList);
- if (argumentList.arguments.isEmpty && element.library.isInSdk) {
+ if (argumentList.arguments.isEmpty && element.source.isInSystemLibrary) {
// Skip the slow SDK factory constructors when possible.
switch (classElem.name) {
case 'Map':
@@ -6428,7 +6423,7 @@
bool _reifyGeneric(Element e) =>
e == null ||
- !e.library.isInSdk ||
+ !e.source.isInSystemLibrary ||
findAnnotation(
e, (a) => isBuiltinAnnotation(a, '_js_helper', 'NoReifyGeneric')) ==
null;
@@ -6436,7 +6431,7 @@
bool _reifyFunctionType(Element e) {
if (e == null) return true;
var library = e.library;
- if (!library.isInSdk) return true;
+ if (!library.source.isInSystemLibrary) return true;
// SDK libraries can skip reification if they request it.
reifyFunctionTypes(DartObjectImpl a) =>
isBuiltinAnnotation(a, '_js_helper', 'ReifyFunctionTypes');
diff --git a/pkg/dev_compiler/lib/src/analyzer/command.dart b/pkg/dev_compiler/lib/src/analyzer/command.dart
index a1c75c4..b12e5f8 100644
--- a/pkg/dev_compiler/lib/src/analyzer/command.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/command.dart
@@ -95,23 +95,22 @@
var argParser = new ArgParser(allowTrailingOptions: true)
..addFlag('help',
abbr: 'h',
- help: 'Display this message. Add --verbose to show hidden options.',
+ help: 'Display this message. Add -v to show hidden options.',
negatable: false)
- ..addFlag('verbose', abbr: 'v', help: 'Verbose output.')
+ ..addFlag('verbose',
+ abbr: 'v', negatable: false, help: 'Verbose help output.', hide: hide)
..addFlag('version',
- negatable: false, help: 'Print the $_binaryName version.')
+ negatable: false, help: 'Print the $_binaryName version.', hide: hide)
..addFlag(ignoreUnrecognizedFlagsFlag,
help: 'Ignore unrecognized command line flags.',
defaultsTo: false,
- negatable: false)
+ hide: hide)
..addOption('out',
abbr: 'o', allowMultiple: true, help: 'Output file (required).')
..addOption('module-root',
- help: 'Root module directory. '
- 'Generated module paths are relative to this root.')
+ help: 'Root module directory. Module paths are relative to this root.')
..addOption('library-root',
- help: 'Root of source files. '
- 'Generated library names are relative to this root.');
+ help: 'Root of source files. Library names are relative to this root.');
defineAnalysisArguments(argParser, hide: hide, ddc: true);
addModuleFormatOptions(argParser, allowMultiple: true, hide: hide);
AnalyzerOptions.addArguments(argParser, hide: hide);
diff --git a/pkg/dev_compiler/lib/src/analyzer/context.dart b/pkg/dev_compiler/lib/src/analyzer/context.dart
index 12fb82d..b3b855c 100644
--- a/pkg/dev_compiler/lib/src/analyzer/context.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/context.dart
@@ -105,7 +105,8 @@
help: '--url-mapping=libraryUri,/path/to/library.dart uses\n'
'library.dart as the source for an import of of "libraryUri".',
allowMultiple: true,
- splitCommas: false);
+ splitCommas: false,
+ hide: hide);
}
static Map<String, String> _parseUrlMappings(Iterable argument) {
diff --git a/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart b/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
index a97aa6d..b40e3ff 100644
--- a/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
@@ -97,11 +97,13 @@
return parent is MethodInvocation && parent.methodName == node;
}
-bool isInlineJS(Element e) =>
- e is FunctionElement &&
- e.name == 'JS' &&
- e.library.isInSdk &&
- e.library.source.uri.toString() == 'dart:_foreign_helper';
+bool isInlineJS(Element e) {
+ if (e != null && e.name == 'JS' && e is FunctionElement) {
+ var uri = e.librarySource.uri;
+ return uri.scheme == 'dart' && uri.path == '_foreign_helper';
+ }
+ return false;
+}
ExecutableElement getFunctionBodyElement(FunctionBody body) {
var f = body.parent;
@@ -163,8 +165,10 @@
/// Returns true if the library [l] is dart:_runtime.
// TODO(jmesserly): unlike other methods in this file, this one wouldn't be
// suitable for upstream to Analyzer, as it's DDC specific.
-bool isSdkInternalRuntime(LibraryElement l) =>
- l.isInSdk && l.source.uri.toString() == 'dart:_runtime';
+bool isSdkInternalRuntime(LibraryElement l) {
+ var uri = l.source.uri;
+ return uri.scheme == 'dart' && uri.path == '_runtime';
+}
/// Return `true` if the given [classElement] has a noSuchMethod() method
/// distinct from the one declared in class Object, as per the Dart Language
diff --git a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
index 90cae8e..d0286ab 100644
--- a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
@@ -304,25 +304,29 @@
static void addArguments(ArgParser parser, {bool hide: true}) {
parser
- ..addFlag('summarize', help: 'emit an API summary file', defaultsTo: true)
+ ..addFlag('summarize',
+ help: 'emit an API summary file', defaultsTo: true, hide: hide)
..addOption('summary-extension',
help: 'file extension for Dart summary files',
defaultsTo: 'sum',
hide: hide)
- ..addFlag('source-map', help: 'emit source mapping', defaultsTo: true)
+ ..addFlag('source-map',
+ help: 'emit source mapping', defaultsTo: true, hide: hide)
..addFlag('source-map-comment',
help: 'adds a sourceMappingURL comment to the end of the JS,\n'
'disable if using X-SourceMap header',
defaultsTo: true,
hide: hide)
..addFlag('inline-source-map',
- help: 'emit source mapping inline', defaultsTo: false)
+ help: 'emit source mapping inline', defaultsTo: false, hide: hide)
..addFlag('emit-metadata',
help: 'emit metadata annotations queriable via mirrors',
- defaultsTo: false)
+ defaultsTo: false,
+ hide: hide)
..addFlag('closure-experimental',
help: 'emit Closure Compiler-friendly code (experimental)',
- defaultsTo: false)
+ defaultsTo: false,
+ hide: hide)
..addFlag('unsafe-force-compile',
help: 'Compile code even if it has errors. ಠ_ಠ\n'
'This has undefined behavior!',
diff --git a/pkg/dev_compiler/lib/src/analyzer/property_model.dart b/pkg/dev_compiler/lib/src/analyzer/property_model.dart
index 1813c27..34b2330 100644
--- a/pkg/dev_compiler/lib/src/analyzer/property_model.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/property_model.dart
@@ -135,8 +135,8 @@
if (field.isStatic) return false;
var type = field.enclosingElement;
- var library = type.library;
- if (library.isInSdk && library.source.uri.toString().startsWith('dart:_')) {
+ var uri = type.source.uri;
+ if (uri.scheme == 'dart' && uri.path.startsWith('_')) {
// There should be no extensible fields in private SDK libraries.
return false;
}
diff --git a/pkg/dev_compiler/tool/build_pkgs.dart b/pkg/dev_compiler/tool/build_pkgs.dart
index b67fbb2..7662b36 100755
--- a/pkg/dev_compiler/tool/build_pkgs.dart
+++ b/pkg/dev_compiler/tool/build_pkgs.dart
@@ -81,7 +81,6 @@
await compileModule('meta');
if (isTravis) {
await compileModule('microlytics', libs: ['html_channels']);
- await compileModule('typed_mock');
}
// Under third_party/pkg.
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
index 1b3aa2a..de39cbb 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
@@ -2534,7 +2534,15 @@
return (this & (signMask - one)) - (this & signMask);
}
- bool get isValidInt => this == new _BigIntImpl._fromInt(toInt());
+ // Maximum number of digits that always fit in mantissa.
+ static const _simpleValidIntDigits = 53 ~/ _digitBits;
+
+ bool get isValidInt {
+ if (_used <= _simpleValidIntDigits) return true;
+ var asInt = toInt();
+ if (!asInt.toDouble().isFinite) return false;
+ return this == new _BigIntImpl._fromInt(asInt);
+ }
int toInt() {
var result = 0;
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index c2c73e1..5633f5f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1310,9 +1310,8 @@
return new ThisPropertyAccessor(this, token, n, getter, setter);
} else if (builder.isRegularMethod) {
assert(builder.isStatic || builder.isTopLevel);
- StaticAccessor accessor = new StaticAccessor(
- this, token, builder.target, null,
- prefixName: prefix?.name);
+ StaticAccessor accessor =
+ new StaticAccessor(this, token, builder.target, null);
return (prefix?.deferred == true)
? new DeferredAccessor(this, token, prefix, accessor)
: accessor;
@@ -1339,9 +1338,8 @@
} else if (builder.isField && !builder.isFinal) {
setter = builder;
}
- StaticAccessor accessor = new StaticAccessor.fromBuilder(
- this, builder, token, setter,
- prefix: prefix);
+ StaticAccessor accessor =
+ new StaticAccessor.fromBuilder(this, builder, token, setter);
if (constantExpressionRequired) {
Member readTarget = accessor.readTarget;
if (!(readTarget is Field && readTarget.isConst ||
@@ -1627,6 +1625,10 @@
push(block);
}
+ void handleInvalidTopLevelBlock(Token token) {
+ pop(); // block
+ }
+
@override
void handleAssignmentExpression(Token token) {
debugEvent("AssignmentExpression");
@@ -2376,10 +2378,7 @@
{bool isConst: false,
int charOffset: -1,
Member initialTarget,
- List<DartType> targetTypeArguments,
- String prefixName,
- int targetOffset: -1,
- Class targetClass}) {
+ List<DartType> targetTypeArguments}) {
initialTarget ??= target;
List<TypeParameter> typeParameters = target.function.typeParameters;
if (target is Constructor) {
@@ -2406,7 +2405,7 @@
"Not a const constructor.", charOffset);
}
return new ShadowConstructorInvocation(
- prefixName, target, targetTypeArguments, initialTarget, arguments,
+ target, targetTypeArguments, initialTarget, arguments,
isConst: isConst)
..fileOffset = charOffset;
} else {
@@ -2416,13 +2415,11 @@
"Not a const factory.", charOffset);
} else if (procedure.isFactory) {
return new ShadowFactoryConstructorInvocation(
- prefixName, target, targetTypeArguments, initialTarget, arguments,
+ target, targetTypeArguments, initialTarget, arguments,
isConst: isConst)
..fileOffset = charOffset;
} else {
- return new ShadowStaticInvocation(
- prefixName, targetOffset, targetClass, target, arguments,
- isConst: isConst)
+ return new ShadowStaticInvocation(target, arguments, isConst: isConst)
..fileOffset = charOffset;
}
}
@@ -2545,7 +2542,6 @@
String name = pop();
List<DartType> typeArguments = pop();
- String prefixName;
var type = pop();
PrefixBuilder deferredPrefix;
int checkOffset;
@@ -2559,7 +2555,6 @@
if (type is TypeDeclarationAccessor) {
TypeDeclarationAccessor accessor = type;
if (accessor.prefix != null) {
- prefixName = accessor.prefix.name;
nameToken = nameToken.next.next;
}
type = accessor.declaration;
@@ -2574,8 +2569,7 @@
name,
typeArguments,
token.charOffset,
- optional("const", token) || optional("@", token),
- prefixName: prefixName);
+ optional("const", token) || optional("@", token));
push(deferredPrefix != null
? wrapInDeferredCheck(expression, deferredPrefix, checkOffset)
: expression);
@@ -2599,8 +2593,7 @@
String name,
List<DartType> typeArguments,
int charOffset,
- bool isConst,
- {String prefixName}) {
+ bool isConst) {
if (arguments == null) {
return deprecated_buildCompileTimeError(
"No arguments.", nameToken.charOffset);
@@ -2671,7 +2664,6 @@
return buildStaticInvocation(target, arguments,
isConst: isConst,
charOffset: nameToken.charOffset,
- prefixName: prefixName,
initialTarget: initialTarget,
targetTypeArguments: targetTypeArguments);
} else {
@@ -3788,11 +3780,8 @@
}
@override
- StaticGet makeStaticGet(Member readTarget, Token token,
- {String prefixName, int targetOffset: -1, Class targetClass}) {
- return new ShadowStaticGet(
- prefixName, targetOffset, targetClass, readTarget)
- ..fileOffset = offsetForToken(token);
+ StaticGet makeStaticGet(Member readTarget, Token token) {
+ return new ShadowStaticGet(readTarget)..fileOffset = offsetForToken(token);
}
@override
diff --git a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
index 1651606..ee89d72 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -115,12 +115,7 @@
[int charOffset = -1]);
Expression buildStaticInvocation(Procedure target, Arguments arguments,
- {bool isConst,
- int charOffset,
- Member initialTarget,
- String prefixName,
- int targetOffset: -1,
- Class targetClass});
+ {bool isConst, int charOffset, Member initialTarget});
Expression buildProblemExpression(ProblemBuilder builder, int offset);
@@ -137,8 +132,7 @@
Arguments arguments, CalleeDesignation calleeKind, int offset,
[List<TypeParameter> typeParameters]);
- StaticGet makeStaticGet(Member readTarget, Token token,
- {String prefixName, int targetOffset: -1, Class targetClass});
+ StaticGet makeStaticGet(Member readTarget, Token token);
Expression wrapInDeferredCheck(
Expression expression, PrefixBuilder prefix, int charOffset);
@@ -826,16 +820,13 @@
class StaticAccessor extends kernel.StaticAccessor with FastaAccessor {
StaticAccessor(
- BuilderHelper helper, Token token, Member readTarget, Member writeTarget,
- {String prefixName, int targetOffset: -1, Class targetClass})
- : super(helper, prefixName, targetOffset, targetClass, readTarget,
- writeTarget, token) {
+ BuilderHelper helper, Token token, Member readTarget, Member writeTarget)
+ : super(helper, readTarget, writeTarget, token) {
assert(readTarget != null || writeTarget != null);
}
- factory StaticAccessor.fromBuilder(
- BuilderHelper helper, Builder builder, Token token, Builder builderSetter,
- {PrefixBuilder prefix, int targetOffset: -1, Class targetClass}) {
+ factory StaticAccessor.fromBuilder(BuilderHelper helper, Builder builder,
+ Token token, Builder builderSetter) {
if (builder is AccessErrorBuilder) {
AccessErrorBuilder error = builder;
builder = error.builder;
@@ -853,10 +844,7 @@
setter = builderSetter.target;
}
}
- return new StaticAccessor(helper, token, getter, setter,
- prefixName: prefix?.name,
- targetOffset: targetOffset,
- targetClass: targetClass);
+ return new StaticAccessor(helper, token, getter, setter);
}
String get plainNameForRead => (readTarget ?? writeTarget).name.name;
@@ -875,10 +863,7 @@
isImplicitCall: true);
} else {
return helper.buildStaticInvocation(readTarget, arguments,
- charOffset: offset,
- prefixName: prefixName,
- targetOffset: targetOffset,
- targetClass: targetClass);
+ charOffset: offset);
}
}
@@ -886,7 +871,7 @@
@override
ShadowComplexAssignment startComplexAssignment(Expression rhs) =>
- new ShadowStaticAssignment(prefixName, targetOffset, targetClass, rhs);
+ new ShadowStaticAssignment(rhs);
}
class LoadLibraryAccessor extends kernel.LoadLibraryAccessor
@@ -1178,7 +1163,7 @@
..fileOffset = offsetForToken(token))
..fileOffset = offset;
} else {
- super.expression = new ShadowTypeLiteral(prefix?.name,
+ super.expression = new ShadowTypeLiteral(
buildTypeWithBuiltArguments(null, nonInstanceAccessIsError: true))
..fileOffset = offsetForToken(token);
}
@@ -1234,11 +1219,8 @@
} else if (builder.isField && !builder.isFinal) {
setter = builder;
}
- accessor = new StaticAccessor.fromBuilder(
- helper, builder, send.token, setter,
- prefix: prefix,
- targetOffset: declarationReferenceOffset,
- targetClass: declaration.target);
+ accessor =
+ new StaticAccessor.fromBuilder(helper, builder, send.token, setter);
}
return arguments == null
diff --git a/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
index e698255..bc25472 100644
--- a/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
@@ -669,34 +669,18 @@
}
class StaticAccessor extends Accessor {
- /// The name of the import prefix preceding the [targetClass], [readTarget],
- /// or [writeTarget], or `null` if the reference is not prefixed.
- String prefixName;
-
- /// If [targetClass] is not `null`, the offset at which the explicit
- /// reference to it is; otherwise `-1`.
- int targetOffset;
-
- /// The [Class] that was explicitly referenced to get the [readTarget] or
- /// the [writeTarget], or `null` if the class is implicit, and targets were
- /// get from the scope.
- Class targetClass;
-
Member readTarget;
Member writeTarget;
- StaticAccessor(BuilderHelper helper, this.prefixName, this.targetOffset,
- this.targetClass, this.readTarget, this.writeTarget, Token token)
+ StaticAccessor(
+ BuilderHelper helper, this.readTarget, this.writeTarget, Token token)
: super(helper, token);
Expression _makeRead(ShadowComplexAssignment complexAssignment) {
if (readTarget == null) {
return makeInvalidRead();
} else {
- var read = helper.makeStaticGet(readTarget, token,
- prefixName: prefixName,
- targetOffset: targetOffset,
- targetClass: targetClass);
+ var read = helper.makeStaticGet(readTarget, token);
complexAssignment?.read = read;
return read;
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
index 744fd1a..9a1756a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
@@ -22,9 +22,6 @@
import '../source/source_library_builder.dart' show SourceLibraryBuilder;
-import '../type_inference/type_inference_listener.dart'
- show TypeInferenceListener;
-
import 'body_builder.dart' show BodyBuilder;
import 'kernel_builder.dart'
@@ -95,9 +92,8 @@
var memberScope =
currentClass == null ? library.scope : currentClass.scope;
var typeInferenceEngine = library.loader.typeInferenceEngine;
- var listener = new TypeInferenceListener();
var typeInferrer = typeInferenceEngine.createTopLevelTypeInferrer(
- listener, field.enclosingClass?.thisType, field);
+ field.enclosingClass?.thisType, field);
if (hasInitializer) {
var bodyBuilder = new BodyBuilder(
library,
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 7d61f46..568f3f9 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
@@ -29,7 +29,6 @@
import 'package:front_end/src/fasta/source/source_library_builder.dart';
import 'package:front_end/src/fasta/type_inference/interface_resolver.dart';
import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
import 'package:front_end/src/fasta/type_inference/type_promotion.dart';
import 'package:front_end/src/fasta/type_inference/type_schema.dart';
@@ -113,11 +112,8 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.asExpressionEnter(this, typeContext);
inferrer.inferExpression(operand, null, false);
- var inferredType = type;
- inferrer.listener.asExpressionExit(this, inferredType);
- return inferredType;
+ return type;
}
}
@@ -128,9 +124,7 @@
@override
void _inferInitializer(ShadowTypeInferrer inferrer) {
- inferrer.listener.assertInitializerEnter(this);
inferrer.inferStatement(statement);
- inferrer.listener.assertInitializerExit(this);
}
}
@@ -145,7 +139,6 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.assertStatementEnter(this);
var expectedType = inferrer.coreTypes.boolClass.rawType;
var actualType =
inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
@@ -154,7 +147,6 @@
if (message != null) {
inferrer.inferExpression(message, null, false);
}
- inferrer.listener.assertStatementExit(this);
}
}
@@ -165,14 +157,11 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.awaitExpressionEnter(this, typeContext);
if (!inferrer.typeSchemaEnvironment.isEmptyContext(typeContext)) {
typeContext = inferrer.wrapFutureOrType(typeContext);
}
var inferredType = inferrer.inferExpression(operand, typeContext, true);
- inferredType = inferrer.typeSchemaEnvironment.unfutureType(inferredType);
- inferrer.listener.awaitExpressionExit(this, inferredType);
- return inferredType;
+ return inferrer.typeSchemaEnvironment.unfutureType(inferredType);
}
}
@@ -182,11 +171,9 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.blockEnter(this);
for (var statement in statements) {
inferrer.inferStatement(statement);
}
- inferrer.listener.blockExit(this);
}
}
@@ -196,10 +183,7 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.boolLiteralEnter(this, typeContext);
- var inferredType = inferrer.coreTypes.boolClass.rawType;
- inferrer.listener.boolLiteralExit(this, inferredType);
- return inferredType;
+ return inferrer.coreTypes.boolClass.rawType;
}
}
@@ -210,9 +194,7 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.breakStatementEnter(this);
// No inference needs to be done.
- inferrer.listener.breakStatementExit(this);
}
}
@@ -271,7 +253,6 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.cascadeExpressionEnter(this, typeContext);
var lhsType =
inferrer.inferExpression(variable.initializer, typeContext, true);
if (inferrer.strongMode) {
@@ -283,7 +264,6 @@
if (section.body is! Let) break;
section = section.body;
}
- inferrer.listener.cascadeExpressionExit(this, lhsType);
return lhsType;
}
}
@@ -537,7 +517,6 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.conditionalExpressionEnter(this, typeContext);
var expectedType = inferrer.coreTypes.boolClass.rawType;
var conditionType =
inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
@@ -554,19 +533,13 @@
if (inferrer.strongMode) {
staticType = type;
}
- var inferredType = type;
- inferrer.listener.conditionalExpressionExit(this, inferredType);
- return inferredType;
+ return type;
}
}
/// Shadow object for [ConstructorInvocation].
class ShadowConstructorInvocation extends ConstructorInvocation
implements ShadowExpression {
- /// The name of the import prefix preceding the instantiated type; or `null`
- /// if the type is not prefixed.
- final String _prefixName;
-
final Member _initialTarget;
/// If the constructor invocation points to a redirected constructor, the type
@@ -585,15 +558,13 @@
/// [targetTypeArguments] is a list containing the type `List<T>`.
final List<DartType> targetTypeArguments;
- ShadowConstructorInvocation(this._prefixName, Constructor target,
- this.targetTypeArguments, this._initialTarget, Arguments arguments,
+ ShadowConstructorInvocation(Constructor target, this.targetTypeArguments,
+ this._initialTarget, Arguments arguments,
{bool isConst: false})
: super(target, arguments, isConst: isConst);
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener
- .constructorInvocationEnter(this, _prefixName, typeContext);
var inferredType = inferrer.inferInvocation(
typeContext,
fileOffset,
@@ -610,7 +581,6 @@
.withArguments(inferredType)
.message);
}
- inferrer.listener.constructorInvocationExit(this, inferredType);
if (isRedirected(this)) {
InterfaceType returnType = inferredType;
@@ -657,9 +627,7 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.continueSwitchStatementEnter(this);
// No inference needs to be done.
- inferrer.listener.continueSwitchStatementExit(this);
}
}
@@ -670,12 +638,9 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.deferredCheckEnter(this, typeContext);
// Since the variable is not used in the body we don't need to type infer
// it. We can just type infer the body.
- var inferredType = inferrer.inferExpression(body, typeContext, true);
- inferrer.listener.deferredCheckExit(this, inferredType);
- return inferredType;
+ return inferrer.inferExpression(body, typeContext, true);
}
}
@@ -686,14 +651,12 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.doStatementEnter(this);
inferrer.inferStatement(body);
var boolType = inferrer.coreTypes.boolClass.rawType;
var actualType =
inferrer.inferExpression(condition, boolType, !inferrer.isTopLevel);
inferrer.ensureAssignable(
boolType, actualType, condition, condition.fileOffset);
- inferrer.listener.doStatementExit(this);
}
}
@@ -703,10 +666,7 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.doubleLiteralEnter(this, typeContext);
- var inferredType = inferrer.coreTypes.doubleClass.rawType;
- inferrer.listener.doubleLiteralExit(this, inferredType);
- return inferredType;
+ return inferrer.coreTypes.doubleClass.rawType;
}
}
@@ -725,9 +685,7 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.expressionStatementEnter(this);
inferrer.inferExpression(expression, null, false);
- inferrer.listener.expressionStatementExit(this);
}
}
@@ -735,10 +693,6 @@
/// factory constructor.
class ShadowFactoryConstructorInvocation extends StaticInvocation
implements ShadowExpression {
- /// The name of the import prefix preceding the instantiated type; or `null`
- /// if the type is not prefixed.
- final String _prefixName;
-
final Member _initialTarget;
/// If the factory invocation points to a redirected factory, the type
@@ -757,22 +711,19 @@
/// [targetTypeArguments] is a list containing the type `List<T>`.
final List<DartType> targetTypeArguments;
- ShadowFactoryConstructorInvocation(this._prefixName, Procedure target,
- this.targetTypeArguments, this._initialTarget, Arguments arguments,
+ ShadowFactoryConstructorInvocation(Procedure target, this.targetTypeArguments,
+ this._initialTarget, Arguments arguments,
{bool isConst: false})
: super(target, arguments, isConst: isConst);
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener
- .constructorInvocationEnter(this, _prefixName, typeContext);
var inferredType = inferrer.inferInvocation(
typeContext,
fileOffset,
_initialTarget.function.functionType,
computeConstructorReturnType(_initialTarget),
arguments);
- inferrer.listener.constructorInvocationExit(this, inferredType);
if (isRedirected(this)) {
InterfaceType returnType = inferredType;
@@ -844,10 +795,8 @@
@override
void _inferInitializer(ShadowTypeInferrer inferrer) {
- inferrer.listener.fieldInitializerEnter(this);
var initializerType = inferrer.inferExpression(value, field.type, true);
inferrer.ensureAssignable(field.type, initializerType, value, fileOffset);
- inferrer.listener.fieldInitializerExit(this);
}
}
@@ -872,7 +821,6 @@
bool typeChecksNeeded = !inferrer.isTopLevel;
ShadowVariableDeclaration variable;
var syntheticAssignment = _syntheticAssignment;
- Expression syntheticWrite;
DartType syntheticWriteType;
if (_declaresVariable) {
variable = this.variable;
@@ -883,14 +831,12 @@
context = variable.type;
}
} else if (syntheticAssignment is ShadowComplexAssignment) {
- syntheticWrite = syntheticAssignment.write;
syntheticWriteType =
context = syntheticAssignment._getWriteType(inferrer);
} else {
context = const UnknownType();
}
context = inferrer.wrapType(context, iterableClass);
- inferrer.listener.forInStatementEnter(this, variable, syntheticWrite);
var inferredExpressionType = inferrer.resolveTypeParameter(inferrer
.inferExpression(iterable, context, typeNeeded || typeChecksNeeded));
inferrer.ensureAssignable(
@@ -944,7 +890,6 @@
}
syntheticAssignment._replaceWithDesugared();
}
- inferrer.listener.forInStatementExit(this, variable);
}
}
@@ -956,7 +901,6 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.forStatementEnter(this);
variables.forEach(inferrer.inferStatement);
if (condition != null) {
var expectedType = inferrer.coreTypes.boolClass.rawType;
@@ -969,7 +913,6 @@
inferrer.inferExpression(update, null, false);
}
inferrer.inferStatement(body);
- inferrer.listener.forStatementExit(this);
}
}
@@ -984,7 +927,6 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.functionDeclarationEnter(this);
inferrer.inferLocalFunction(
function,
null,
@@ -993,7 +935,6 @@
? (inferrer.strongMode ? null : const DynamicType())
: function.returnType);
variable.type = function.functionType;
- inferrer.listener.functionDeclarationExit(this);
}
static void setHasImplicitReturnType(
@@ -1009,11 +950,7 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.functionExpressionEnter(this, typeContext);
- var inferredType =
- inferrer.inferLocalFunction(function, typeContext, fileOffset, null);
- inferrer.listener.functionExpressionExit(this, inferredType);
- return inferredType;
+ return inferrer.inferLocalFunction(function, typeContext, fileOffset, null);
}
}
@@ -1038,14 +975,12 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.ifNullEnter(this, typeContext);
// To infer `e0 ?? e1` in context K:
// - Infer e0 in context K to get T0
var lhsType = inferrer.inferExpression(_lhs, typeContext, true);
if (inferrer.strongMode) {
variable.type = lhsType;
}
- inferrer.listener.ifNullBeforeRhs(this);
// - Let J = T0 if K is `_` else K.
var rhsContext = typeContext ?? lhsType;
// - Infer e1 in context J to get T1
@@ -1060,7 +995,6 @@
if (inferrer.strongMode) {
body.staticType = inferredType;
}
- inferrer.listener.ifNullExit(this, inferredType);
return inferredType;
}
}
@@ -1072,7 +1006,6 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.ifStatementEnter(this);
var expectedType = inferrer.coreTypes.boolClass.rawType;
var conditionType =
inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
@@ -1080,7 +1013,6 @@
expectedType, conditionType, condition, condition.fileOffset);
inferrer.inferStatement(then);
if (otherwise != null) inferrer.inferStatement(otherwise);
- inferrer.listener.ifStatementExit(this);
}
}
@@ -1135,9 +1067,7 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.indexAssignEnter(desugared, typeContext);
var receiverType = _inferReceiver(inferrer);
- inferrer.listener.indexAssignAfterReceiver(write, typeContext);
var writeMember = inferrer.findMethodInvocationMember(receiverType, write);
// To replicate analyzer behavior, we base type inference on the write
// member. TODO(paulberry): would it be better to use the read member
@@ -1191,8 +1121,6 @@
_storeLetType(inferrer, replacedRead, readType);
}
var inferredResult = _inferRhs(inferrer, readType, writeContext);
- inferrer.listener.indexAssignExit(desugared, write, writeMember,
- inferredResult.combiner, inferredResult.type);
_replaceWithDesugared();
return inferredResult.type;
}
@@ -1212,10 +1140,7 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.intLiteralEnter(this, typeContext);
- var inferredType = inferrer.coreTypes.intClass.rawType;
- inferrer.listener.intLiteralExit(this, inferredType);
- return inferredType;
+ return inferrer.coreTypes.intClass.rawType;
}
}
@@ -1226,9 +1151,7 @@
@override
void _inferInitializer(ShadowTypeInferrer inferrer) {
- inferrer.listener.invalidInitializerEnter(this);
inferrer.inferExpression(variable.initializer, null, false);
- inferrer.listener.invalidInitializerExit(this);
}
}
@@ -1238,11 +1161,8 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.isExpressionEnter(this, typeContext);
inferrer.inferExpression(operand, null, false);
- var inferredType = inferrer.coreTypes.boolClass.rawType;
- inferrer.listener.isExpressionExit(this, inferredType);
- return inferredType;
+ return inferrer.coreTypes.boolClass.rawType;
}
}
@@ -1254,13 +1174,8 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
IsExpression isExpression = this.operand;
-
- inferrer.listener.isNotExpressionEnter(this, typeContext);
inferrer.inferExpression(isExpression.operand, null, false);
- var inferredType = inferrer.coreTypes.boolClass.rawType;
- inferrer.listener
- .isNotExpressionExit(this, isExpression.type, inferredType);
- return inferredType;
+ return inferrer.coreTypes.boolClass.rawType;
}
}
@@ -1271,9 +1186,7 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.labeledStatementEnter(this);
inferrer.inferStatement(body);
- inferrer.listener.labeledStatementExit(this);
}
}
@@ -1290,7 +1203,6 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.listLiteralEnter(this, typeContext);
var listClass = inferrer.coreTypes.listClass;
var listType = listClass.thisType;
List<DartType> inferredTypes;
@@ -1341,9 +1253,7 @@
expressions[i].fileOffset);
}
}
- var inferredType = new InterfaceType(listClass, [inferredTypeArgument]);
- inferrer.listener.listLiteralExit(this, inferredType);
- return inferredType;
+ return new InterfaceType(listClass, [inferredTypeArgument]);
}
}
@@ -1355,18 +1265,14 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.logicalExpressionEnter(this, typeContext);
var boolType = inferrer.coreTypes.boolClass.rawType;
var leftType =
inferrer.inferExpression(left, boolType, !inferrer.isTopLevel);
- inferrer.listener.logicalExpressionBeforeRhs(this);
var rightType =
inferrer.inferExpression(right, boolType, !inferrer.isTopLevel);
inferrer.ensureAssignable(boolType, leftType, left, left.fileOffset);
inferrer.ensureAssignable(boolType, rightType, right, right.fileOffset);
- var inferredType = boolType;
- inferrer.listener.logicalExpressionExit(this, inferredType);
- return inferredType;
+ return boolType;
}
}
@@ -1399,7 +1305,6 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.mapLiteralEnter(this, typeContext);
var mapClass = inferrer.coreTypes.mapClass;
var mapType = mapClass.thisType;
List<DartType> inferredTypes;
@@ -1468,10 +1373,7 @@
valueType, actualTypes[2 * i + 1], value, value.fileOffset);
}
}
- var inferredType =
- new InterfaceType(mapClass, [inferredKeyType, inferredValueType]);
- inferrer.listener.mapLiteralExit(this, inferredType);
- return inferredType;
+ return new InterfaceType(mapClass, [inferredKeyType, inferredValueType]);
}
}
@@ -1531,11 +1433,9 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.namedFunctionExpressionEnter(this, typeContext);
var inferredType =
inferrer.inferExpression(variable.initializer, typeContext, true);
if (inferrer.strongMode) variable.type = inferredType;
- inferrer.listener.namedFunctionExpressionExit(this, inferredType);
return inferredType;
}
}
@@ -1546,15 +1446,12 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.notEnter(this, typeContext);
// First infer the receiver so we can look up the method that was invoked.
var boolType = inferrer.coreTypes.boolClass.rawType;
var actualType =
inferrer.inferExpression(operand, boolType, !inferrer.isTopLevel);
inferrer.ensureAssignable(boolType, actualType, operand, fileOffset);
- DartType inferredType = boolType;
- inferrer.listener.notExit(this, inferredType);
- return inferredType;
+ return boolType;
}
}
@@ -1617,10 +1514,7 @@
class ShadowNullLiteral extends NullLiteral implements ShadowExpression {
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.nullLiteralEnter(this, typeContext);
- var inferredType = inferrer.coreTypes.nullClass.rawType;
- inferrer.listener.nullLiteralExit(this, inferredType);
- return inferredType;
+ return inferrer.coreTypes.nullClass.rawType;
}
}
@@ -1692,7 +1586,6 @@
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
var receiverType = _inferReceiver(inferrer);
- inferrer.listener.propertyAssignEnter(desugared, write, typeContext);
DartType readType;
if (read != null) {
var readMember =
@@ -1712,8 +1605,6 @@
var writeContext = inferrer.getSetterType(writeMember, receiverType);
var inferredResult = _inferRhs(inferrer, readType, writeContext);
if (inferrer.strongMode) nullAwareGuard?.staticType = inferredResult.type;
- inferrer.listener.propertyAssignExit(desugared, write, writeMember,
- writeContext, inferredResult.combiner, inferredResult.type);
_replaceWithDesugared();
return inferredResult.type;
}
@@ -1744,11 +1635,9 @@
@override
_inferInitializer(ShadowTypeInferrer inferrer) {
- inferrer.listener.redirectingInitializerEnter(this);
inferrer.inferInvocation(null, fileOffset, target.function.functionType,
target.enclosingClass.thisType, arguments,
skipTypeArgumentInference: true);
- inferrer.listener.redirectingInitializerExit(this);
}
}
@@ -1756,10 +1645,7 @@
class ShadowRethrow extends Rethrow implements ShadowExpression {
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.rethrowEnter(this, typeContext);
- var inferredType = const BottomType();
- inferrer.listener.rethrowExit(this, inferredType);
- return inferredType;
+ return const BottomType();
}
}
@@ -1769,7 +1655,6 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.returnStatementEnter(this);
var closureContext = inferrer.closureContext;
var typeContext = !closureContext.isGenerator
? closureContext.returnOrYieldContext
@@ -1784,7 +1669,6 @@
closureContext.handleReturn(
inferrer, inferredType, expression, fileOffset);
}
- inferrer.listener.returnStatementExit(this);
}
}
@@ -1798,21 +1682,7 @@
/// Concrete shadow object representing an assignment to a static variable.
class ShadowStaticAssignment extends ShadowComplexAssignment {
- /// The name of the import prefix preceding the [_targetClass], or the target
- /// [Procedure]; or `null` if the reference is not prefixed.
- final String _prefixName;
-
- /// If [_targetClass] is not `null`, the offset at which the explicit
- /// reference to it is; otherwise `-1`.
- final int _targetOffset;
-
- /// The [Class] that was explicitly referenced to get the target [Procedure],
- /// or `null` if the class is implicit.
- final Class _targetClass;
-
- ShadowStaticAssignment(
- this._prefixName, this._targetOffset, this._targetClass, Expression rhs)
- : super(rhs);
+ ShadowStaticAssignment(Expression rhs) : super(rhs);
@override
DartType _getWriteType(ShadowTypeInferrer inferrer) {
@@ -1822,8 +1692,6 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.staticAssignEnter(desugared, _prefixName, _targetOffset,
- _targetClass, this.write, typeContext);
DartType readType;
var read = this.read;
if (read is StaticGet) {
@@ -1842,8 +1710,6 @@
}
}
var inferredResult = _inferRhs(inferrer, readType, writeContext);
- inferrer.listener.staticAssignExit(desugared, write, writeMember,
- writeContext, inferredResult.combiner, inferredResult.type);
_replaceWithDesugared();
return inferredResult.type;
}
@@ -1852,26 +1718,10 @@
/// Concrete shadow object representing a read of a static variable in kernel
/// form.
class ShadowStaticGet extends StaticGet implements ShadowExpression {
- /// The name of the import prefix preceding the [_targetClass], or the target
- /// [Procedure]; or `null` if the reference is not prefixed.
- final String _prefixName;
-
- /// If [_targetClass] is not `null`, the offset at which the explicit
- /// reference to it is; otherwise `-1`.
- final int _targetOffset;
-
- /// The [Class] that was explicitly referenced to get the target [Procedure],
- /// or `null` if the class is implicit.
- final Class _targetClass;
-
- ShadowStaticGet(
- this._prefixName, this._targetOffset, this._targetClass, Member target)
- : super(target);
+ ShadowStaticGet(Member target) : super(target);
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.staticGetEnter(
- this, _prefixName, _targetOffset, _targetClass, typeContext);
var target = this.target;
if (target is ShadowField && target._inferenceNode != null) {
target._inferenceNode.resolve();
@@ -1881,42 +1731,22 @@
if (target is Procedure && target.kind == ProcedureKind.Method) {
type = inferrer.instantiateTearOff(type, typeContext, this);
}
- var inferredType = type;
- inferrer.listener.staticGetExit(this, inferredType);
- return inferredType;
+ return type;
}
}
/// Shadow object for [StaticInvocation].
class ShadowStaticInvocation extends StaticInvocation
implements ShadowExpression {
- /// The name of the import prefix preceding the [_targetClass], or the target
- /// [Procedure]; or `null` if the reference is not prefixed.
- final String _prefixName;
-
- /// If [_targetClass] is not `null`, the offset at which the explicit
- /// reference to it is; otherwise `-1`.
- final int _targetOffset;
-
- /// The [Class] that was explicitly referenced to get the target [Procedure],
- /// or `null` if the class is implicit.
- final Class _targetClass;
-
- ShadowStaticInvocation(this._prefixName, this._targetOffset,
- this._targetClass, Procedure target, Arguments arguments,
+ ShadowStaticInvocation(Procedure target, Arguments arguments,
{bool isConst: false})
: super(target, arguments, isConst: isConst);
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.staticInvocationEnter(
- this, _prefixName, _targetOffset, _targetClass, typeContext);
var calleeType = target.function.functionType;
- var inferredType = inferrer.inferInvocation(
+ return inferrer.inferInvocation(
typeContext, fileOffset, calleeType, calleeType.returnType, arguments);
- inferrer.listener.staticInvocationExit(this, inferrer.lastCalleeType,
- inferrer.lastInferredSubstitution, inferredType);
- return inferredType;
}
}
@@ -1927,15 +1757,12 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.stringConcatenationEnter(this, typeContext);
if (!inferrer.isTopLevel) {
for (Expression expression in expressions) {
inferrer.inferExpression(expression, null, false);
}
}
- var inferredType = inferrer.coreTypes.stringClass.rawType;
- inferrer.listener.stringConcatenationExit(this, inferredType);
- return inferredType;
+ return inferrer.coreTypes.stringClass.rawType;
}
}
@@ -1945,10 +1772,7 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.stringLiteralEnter(this, typeContext);
- var inferredType = inferrer.coreTypes.stringClass.rawType;
- inferrer.listener.stringLiteralExit(this, inferredType);
- return inferredType;
+ return inferrer.coreTypes.stringClass.rawType;
}
}
@@ -1960,7 +1784,6 @@
@override
void _inferInitializer(ShadowTypeInferrer inferrer) {
- inferrer.listener.superInitializerEnter(this);
var substitution = Substitution.fromSupertype(inferrer.classHierarchy
.getClassAsInstanceOf(
inferrer.thisType.classNode, target.enclosingClass));
@@ -1972,7 +1795,6 @@
inferrer.thisType,
arguments,
skipTypeArgumentInference: true);
- inferrer.listener.superInitializerExit(this);
}
}
@@ -2021,7 +1843,6 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.switchStatementEnter(this);
var expressionType = inferrer.inferExpression(expression, null, true);
for (var switchCase in cases) {
for (var caseExpression in switchCase.expressions) {
@@ -2029,7 +1850,6 @@
}
inferrer.inferStatement(switchCase.body);
}
- inferrer.listener.switchStatementExit(this);
}
}
@@ -2039,10 +1859,7 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.symbolLiteralEnter(this, typeContext);
- var inferredType = inferrer.coreTypes.symbolClass.rawType;
- inferrer.listener.symbolLiteralExit(this, inferredType);
- return inferredType;
+ return inferrer.coreTypes.symbolClass.rawType;
}
}
@@ -2112,10 +1929,7 @@
class ShadowThisExpression extends ThisExpression implements ShadowExpression {
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.thisExpressionEnter(this, typeContext);
- var inferredType = (inferrer.thisType ?? const DynamicType());
- inferrer.listener.thisExpressionExit(this, inferredType);
- return inferredType;
+ return (inferrer.thisType ?? const DynamicType());
}
}
@@ -2125,11 +1939,8 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.throwEnter(this, typeContext);
inferrer.inferExpression(expression, null, false);
- var inferredType = const BottomType();
- inferrer.listener.throwExit(this, inferredType);
- return inferredType;
+ return const BottomType();
}
}
@@ -2139,14 +1950,10 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.tryCatchEnter(this);
inferrer.inferStatement(body);
for (var catch_ in catches) {
- inferrer.listener.catchStatementEnter(catch_);
inferrer.inferStatement(catch_.body);
- inferrer.listener.catchStatementExit(catch_);
}
- inferrer.listener.tryCatchExit(this);
}
}
@@ -2157,10 +1964,8 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.tryFinallyEnter(this);
inferrer.inferStatement(body);
inferrer.inferStatement(finalizer);
- inferrer.listener.tryFinallyExit(this);
}
}
@@ -2176,19 +1981,15 @@
@override
ShadowTypeInferrer createLocalTypeInferrer(
- Uri uri,
- TypeInferenceListener listener,
- InterfaceType thisType,
- SourceLibraryBuilder library) {
- return new ShadowTypeInferrer._(
- this, uri, listener, false, thisType, library);
+ Uri uri, InterfaceType thisType, SourceLibraryBuilder library) {
+ return new ShadowTypeInferrer._(this, uri, false, thisType, library);
}
@override
- ShadowTypeInferrer createTopLevelTypeInferrer(TypeInferenceListener listener,
+ ShadowTypeInferrer createTopLevelTypeInferrer(
InterfaceType thisType, ShadowField field) {
- return field._typeInferrer = new ShadowTypeInferrer._(
- this, field.fileUri, listener, true, thisType, null);
+ return field._typeInferrer =
+ new ShadowTypeInferrer._(this, field.fileUri, true, thisType, null);
}
@override
@@ -2203,15 +2004,10 @@
@override
final typePromoter;
- ShadowTypeInferrer._(
- ShadowTypeInferenceEngine engine,
- Uri uri,
- TypeInferenceListener listener,
- bool topLevel,
- InterfaceType thisType,
- SourceLibraryBuilder library)
+ ShadowTypeInferrer._(ShadowTypeInferenceEngine engine, Uri uri, bool topLevel,
+ InterfaceType thisType, SourceLibraryBuilder library)
: typePromoter = new ShadowTypePromoter(engine.typeSchemaEnvironment),
- super(engine, uri, listener, topLevel, thisType, library);
+ super(engine, uri, topLevel, thisType, library);
@override
Expression getFieldInitializer(ShadowField field) {
@@ -2296,18 +2092,11 @@
/// Shadow object for [TypeLiteral].
class ShadowTypeLiteral extends TypeLiteral implements ShadowExpression {
- /// The name of the import prefix preceding the referenced type literal;
- /// or `null` if the reference is not prefixed.
- final String prefixName;
-
- ShadowTypeLiteral(this.prefixName, DartType type) : super(type);
+ ShadowTypeLiteral(DartType type) : super(type);
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.typeLiteralEnter(this, prefixName, typeContext);
- var inferredType = inferrer.coreTypes.typeClass.rawType;
- inferrer.listener.typeLiteralExit(this, inferredType);
- return inferredType;
+ return inferrer.coreTypes.typeClass.rawType;
}
}
@@ -2392,7 +2181,6 @@
@override
DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
- inferrer.listener.variableAssignEnter(desugared, typeContext, this.write);
DartType readType;
var read = this.read;
if (read is VariableGet) {
@@ -2407,8 +2195,6 @@
}
}
var inferredResult = _inferRhs(inferrer, readType, writeContext);
- inferrer.listener.variableAssignExit(desugared, writeContext, write,
- inferredResult.combiner, inferredResult.type);
_replaceWithDesugared();
return inferredResult.type;
}
@@ -2459,7 +2245,6 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.variableDeclarationEnter(this);
var declaredType = _implicitlyTyped ? null : type;
DartType inferredType;
DartType initializerType;
@@ -2482,7 +2267,6 @@
initializer = replacedInitializer;
}
}
- inferrer.listener.variableDeclarationExit(this, inferredType);
}
/// Determine whether the given [ShadowVariableDeclaration] had an implicit
@@ -2517,7 +2301,6 @@
bool mutatedInClosure = variable._mutatedInClosure;
DartType declaredOrInferredType = variable.type;
- inferrer.listener.variableGetEnter(this, typeContext);
DartType promotedType = inferrer.typePromoter
.computePromotedType(_fact, _scope, mutatedInClosure);
if (promotedType != null) {
@@ -2529,9 +2312,7 @@
if (variable._isLocalFunction) {
type = inferrer.instantiateTearOff(type, typeContext, this);
}
- var inferredType = type;
- inferrer.listener.variableGetExit(this, inferredType);
- return inferredType;
+ return type;
}
}
@@ -2542,14 +2323,12 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.whileStatementEnter(this);
var expectedType = inferrer.coreTypes.boolClass.rawType;
var actualType =
inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
inferrer.ensureAssignable(
expectedType, actualType, condition, condition.fileOffset);
inferrer.inferStatement(body);
- inferrer.listener.whileStatementExit(this);
}
}
@@ -2560,7 +2339,6 @@
@override
void _inferStatement(ShadowTypeInferrer inferrer) {
- inferrer.listener.yieldStatementEnter(this);
var closureContext = inferrer.closureContext;
var typeContext =
closureContext.isGenerator ? closureContext.returnOrYieldContext : null;
@@ -2574,7 +2352,6 @@
var inferredType = inferrer.inferExpression(expression, typeContext, true);
closureContext.handleYield(
inferrer, isYieldStar, inferredType, expression, fileOffset);
- inferrer.listener.yieldStatementExit(this);
}
}
diff --git a/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart b/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart
index 381c598..fb9401b 100644
--- a/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart
@@ -44,4 +44,7 @@
Token parseFunctionBody(Token token, bool isExpression, bool allowAbstract) {
return skipFunctionBody(token, isExpression, allowAbstract);
}
+
+ @override
+ Token parseInvalidBlock(Token token) => skipBlock(token);
}
diff --git a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
index ccdefbb..04095bd 100644
--- a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
@@ -8,6 +8,7 @@
class ForwardingListener implements Listener {
Listener listener;
+ bool forwardErrors = true;
ForwardingListener([this.listener]);
@@ -1028,6 +1029,10 @@
listener?.handleInvalidTypeReference(token);
}
+ void handleInvalidTopLevelBlock(Token token) {
+ listener?.handleInvalidTopLevelBlock(token);
+ }
+
@override
void handleInvalidTopLevelDeclaration(Token endToken) {
listener?.handleInvalidTopLevelDeclaration(endToken);
@@ -1203,7 +1208,9 @@
@override
void handleRecoverableError(
Message message, Token startToken, Token endToken) {
- listener?.handleRecoverableError(message, startToken, endToken);
+ if (forwardErrors) {
+ listener?.handleRecoverableError(message, startToken, endToken);
+ }
}
@override
diff --git a/pkg/front_end/lib/src/fasta/parser/listener.dart b/pkg/front_end/lib/src/fasta/parser/listener.dart
index ce5ca69..eefe576 100644
--- a/pkg/front_end/lib/src/fasta/parser/listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/listener.dart
@@ -62,6 +62,8 @@
logEvent("Block");
}
+ void handleInvalidTopLevelBlock(Token token) {}
+
void beginCascade(Token token) {}
void endCascade() {
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index cc3f267..57623b8 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -68,6 +68,8 @@
isMandatoryFormalParameterKind,
isOptionalPositionalFormalParameterKind;
+import 'forwarding_listener.dart' show ForwardingListener;
+
import 'identifier_context.dart' show IdentifierContext;
import 'listener.dart' show Listener;
@@ -465,7 +467,7 @@
}
return parseTopLevelKeywordDeclaration(
token, beforeAbstractToken, directiveState);
- } else if (next.isIdentifier || next.keyword != null) {
+ } else if (next.isKeywordOrIdentifier) {
// TODO(danrubel): improve parseTopLevelMember
// so that we don't parse modifiers twice.
directiveState?.checkDeclaration();
@@ -489,7 +491,7 @@
}
// Ignore any preceding modifiers and just report the unexpected token
listener.beginTopLevelMember(next);
- return reportInvalidTopLevelDeclaration(next);
+ return parseInvalidTopLevelDeclaration(token);
}
// Report an error for the given modifier preceding a top level keyword
@@ -1026,21 +1028,8 @@
token =
parseFormalParametersRequiredOpt(token, MemberKind.FunctionTypeAlias);
}
- Token semicolon = token.next;
- if (optional(';', semicolon)) {
- token = semicolon;
- } else {
- // Recovery
- token = semicolon = ensureSemicolon(token);
- if (optional('{', token.next) && token.next.endGroup != null) {
- // Looks like a typedef and function declaration collided.
- // TODO(danrubel) Consider better error message and recovery.
- reportRecoverableErrorWithToken(
- token.next, fasta.templateExpectedDeclaration);
- token = token.next.endGroup;
- }
- }
- listener.endFunctionTypeAlias(typedefKeyword, equals, semicolon);
+ token = ensureSemicolon(token);
+ listener.endFunctionTypeAlias(typedefKeyword, equals, token);
return token;
}
@@ -3057,7 +3046,7 @@
// ensureIdentifier will report the error.
} else if (token == beforeStart) {
// Ensure we make progress.
- return reportInvalidTopLevelDeclaration(next);
+ return parseInvalidTopLevelDeclaration(token);
} else {
// Looks like a declaration missing an identifier.
// Insert synthetic identifier and fall through.
@@ -5872,6 +5861,19 @@
return token;
}
+ Token parseInvalidBlock(Token token) {
+ Token begin = token.next;
+ assert(optional('{', begin));
+ // Parse and report the invalid block, but suppress errors
+ // because an error has already been reported by the caller.
+ Listener originalListener = listener;
+ listener = new ForwardingListener(listener)..forwardErrors = false;
+ token = parseBlock(token);
+ listener = originalListener;
+ listener.handleInvalidTopLevelBlock(begin);
+ return token;
+ }
+
/// ```
/// awaitExpression:
/// 'await' unaryExpression
@@ -6452,10 +6454,18 @@
return nextToken;
}
- Token reportInvalidTopLevelDeclaration(Token token) {
- reportRecoverableErrorWithToken(token, fasta.templateExpectedDeclaration);
- listener.handleInvalidTopLevelDeclaration(token);
- return token;
+ Token parseInvalidTopLevelDeclaration(Token token) {
+ Token next = token.next;
+ reportRecoverableErrorWithToken(
+ next,
+ optional(';', next)
+ ? fasta.templateUnexpectedToken
+ : fasta.templateExpectedDeclaration);
+ if (optional('{', next)) {
+ next = parseInvalidBlock(token);
+ }
+ listener.handleInvalidTopLevelDeclaration(next);
+ return next;
}
Token reportUnmatchedToken(BeginToken token) {
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 0dda491..4d9da6f 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -31,9 +31,6 @@
import '../type_inference/type_inference_engine.dart' show TypeInferenceEngine;
-import '../type_inference/type_inference_listener.dart'
- show TypeInferenceListener;
-
import 'source_library_builder.dart' show SourceLibraryBuilder;
import 'stack_listener.dart' show NullValue, StackListener;
@@ -537,8 +534,7 @@
StackListener createListener(
ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
- [Scope formalParameterScope, TypeInferenceListener listener]) {
- listener ??= new TypeInferenceListener();
+ [Scope formalParameterScope]) {
InterfaceType thisType;
if (builder.isClassMember) {
// Note: we set thisType regardless of whether we are building a static
@@ -548,8 +544,7 @@
}
var typeInferrer = library.disableTypeInference
? typeInferenceEngine.createDisabledTypeInferrer()
- : typeInferenceEngine.createLocalTypeInferrer(
- uri, listener, thisType, library);
+ : typeInferenceEngine.createLocalTypeInferrer(uri, thisType, library);
return new BodyBuilder(library, builder, memberScope, formalParameterScope,
hierarchy, coreTypes, currentClass, isInstanceMember, uri, typeInferrer)
..constantExpressionRequired = builder.isConstructor && builder.isConst;
diff --git a/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart b/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
index 07486e1..47a7d33 100644
--- a/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
+++ b/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
@@ -124,7 +124,7 @@
StringBuffer buffer = new StringBuffer();
new Printer(buffer).writeLibraryFile(library);
String actual = "$buffer".replaceAll("$base", "org-dartlang-testcase:///");
-
+ actual = actual.replaceAll("\\n", "\n");
File expectedFile = new File("${uri.toFilePath()}$suffix");
if (await expectedFile.exists()) {
String expected = await expectedFile.readAsString();
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index b933a4887..18e43e9 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -7,7 +7,6 @@
import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
import 'package:front_end/src/fasta/messages.dart';
import 'package:front_end/src/fasta/source/source_library_builder.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart';
import 'package:kernel/ast.dart'
@@ -210,12 +209,12 @@
/// Creates a type inferrer for use inside of a method body declared in a file
/// with the given [uri].
- TypeInferrer createLocalTypeInferrer(Uri uri, TypeInferenceListener listener,
- InterfaceType thisType, SourceLibraryBuilder library);
+ TypeInferrer createLocalTypeInferrer(
+ Uri uri, InterfaceType thisType, SourceLibraryBuilder library);
/// Creates a [TypeInferrer] object which is ready to perform type inference
/// on the given [field].
- TypeInferrer createTopLevelTypeInferrer(TypeInferenceListener listener,
+ TypeInferrer createTopLevelTypeInferrer(
InterfaceType thisType, ShadowField field);
/// Performs the second phase of top level initializer inference, which is to
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
deleted file mode 100644
index 30cf05c..0000000
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
+++ /dev/null
@@ -1,540 +0,0 @@
-// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE.md file.
-
-import 'package:kernel/ast.dart';
-import 'package:kernel/type_algebra.dart';
-
-/// Base class for [TypeInferenceListener] that defines the API for debugging.
-///
-/// By default no debug info is printed. To enable debug printing, mix in
-/// [TypeInferenceDebugging].
-class TypeInferenceBase {
- void genericExpressionEnter(
- String expressionType, Expression expression, DartType typeContext) {}
-
- void genericExpressionExit(
- String expressionType, Expression expression, DartType inferredType) {}
-
- void genericInitializerEnter(
- String initializerType, Initializer initializer) {}
-
- void genericInitializerExit(
- String initializerType, Initializer initializer) {}
-
- void genericStatementEnter(String statementType, Statement statement) {}
-
- void genericStatementExit(String statementType, Statement statement) {}
-}
-
-/// Mixin which can be applied to [TypeInferenceListener] to cause debug info to
-/// be printed.
-class TypeInferenceDebugging implements TypeInferenceBase {
- int _indentLevel = 0;
-
- String get _indent => '| ' * _indentLevel;
-
- void genericExpressionEnter(
- String expressionType, Expression expression, DartType typeContext) {
- _enter('genericExpressionEnter', '$expressionType($expression)',
- '(offset=${expression.fileOffset}, context=$typeContext)');
- }
-
- void genericExpressionExit(
- String expressionType, Expression expression, DartType inferredType) {
- _exit('genericExpressionExit', '$expressionType($expression)',
- '(offset=${expression.fileOffset}, type=$inferredType)');
- }
-
- void genericInitializerEnter(
- String initializerType, Initializer initializer) {
- _enter('genericInitializerEnter', '$initializerType($initializer)',
- '(offset=${initializer.fileOffset})');
- }
-
- void genericInitializerExit(String initializerType, Initializer initializer) {
- _exit('genericInitializerExit', '$initializerType($initializer)',
- '(offset=${initializer.fileOffset})');
- }
-
- void genericStatementEnter(String statementType, Statement statement) {
- _enter('genericStatementEnter', '$statementType($statement)',
- '(offset=${statement.fileOffset})');
- }
-
- void genericStatementExit(String statementType, Statement statement) {
- _exit('genericStatementExit', '$statementType($statement)',
- '(offset=${statement.fileOffset})');
- }
-
- void _enter(String methodName, String description, String details) {
- print('$_indent$methodName');
- print('$_indent| $description');
- print('$_indent| $details');
- _indentLevel++;
- }
-
- void _exit(String methodName, String description, String details) {
- _indentLevel--;
- print('$_indent$methodName');
- print('$_indent $description');
- print('$_indent $details');
- }
-}
-
-/// Callback interface used by [TypeInferrer] to report the results of type
-/// inference to a client.
-///
-/// The interface is structured as a set of enter/exit methods. The enter
-/// methods are called as the inferrer recurses down through the AST, and the
-/// exit methods are called on the way back up. The enter methods take a
-/// [DartType] argument representing the downwards inference context; the exit
-/// methods take [DartType] argument representing the final inferred type.
-///
-/// The default implementation (in this base class) does nothing, however it can
-/// be used to debug type inference by uncommenting the
-/// "with TypeInferenceDebugging" clause below.
-class TypeInferenceListener
- extends TypeInferenceBase // with TypeInferenceDebugging
-{
- void asExpressionEnter(AsExpression expression, DartType typeContext) =>
- genericExpressionEnter("asExpression", expression, typeContext);
-
- void asExpressionExit(AsExpression expression, DartType inferredType) =>
- genericExpressionExit("asExpression", expression, inferredType);
-
- void assertInitializerEnter(AssertInitializer initializer) =>
- genericInitializerEnter("assertInitializer", initializer);
-
- void assertInitializerExit(AssertInitializer initializer) =>
- genericInitializerExit("assertInitializer", initializer);
-
- void assertStatementEnter(AssertStatement statement) =>
- genericStatementEnter('assertStatement', statement);
-
- void assertStatementExit(AssertStatement statement) =>
- genericStatementExit('assertStatement', statement);
-
- void awaitExpressionEnter(AwaitExpression expression, DartType typeContext) =>
- genericExpressionEnter("awaitExpression", expression, typeContext);
-
- void awaitExpressionExit(AwaitExpression expression, DartType inferredType) =>
- genericExpressionExit("awaitExpression", expression, inferredType);
-
- void blockEnter(Block statement) => genericStatementEnter('block', statement);
-
- void blockExit(Block statement) => genericStatementExit('block', statement);
-
- void boolLiteralEnter(BoolLiteral expression, DartType typeContext) =>
- genericExpressionEnter("boolLiteral", expression, typeContext);
-
- void boolLiteralExit(BoolLiteral expression, DartType inferredType) =>
- genericExpressionExit("boolLiteral", expression, inferredType);
-
- void breakStatementEnter(BreakStatement statement) =>
- genericStatementEnter('breakStatement', statement);
-
- void breakStatementExit(BreakStatement statement) =>
- genericStatementExit('breakStatement', statement);
-
- void cascadeExpressionEnter(Let expression, DartType typeContext) =>
- genericExpressionEnter("cascade", expression, typeContext);
-
- void cascadeExpressionExit(Let expression, DartType inferredType) =>
- genericExpressionExit("cascade", expression, inferredType);
-
- void catchStatementEnter(Catch statement) {}
-
- void catchStatementExit(Catch statement) {}
-
- void conditionalExpressionEnter(
- ConditionalExpression expression, DartType typeContext) =>
- genericExpressionEnter("conditionalExpression", expression, typeContext);
-
- void conditionalExpressionExit(
- ConditionalExpression expression, DartType inferredType) =>
- genericExpressionExit("conditionalExpression", expression, inferredType);
-
- void constructorInvocationEnter(InvocationExpression expression,
- String prefixName, DartType typeContext) =>
- genericExpressionEnter("constructorInvocation", expression, typeContext);
-
- void constructorInvocationExit(
- InvocationExpression expression, DartType inferredType) =>
- genericExpressionExit("constructorInvocation", expression, inferredType);
-
- void continueSwitchStatementEnter(ContinueSwitchStatement statement) =>
- genericStatementEnter('continueSwitchStatement', statement);
-
- void continueSwitchStatementExit(ContinueSwitchStatement statement) =>
- genericStatementExit('continueSwitchStatement', statement);
-
- void deferredCheckEnter(Let expression, DartType typeContext) =>
- genericExpressionEnter("deferredCheck", expression, typeContext);
-
- void deferredCheckExit(Let expression, DartType inferredType) =>
- genericExpressionExit("deferredCheck", expression, inferredType);
-
- void doStatementEnter(DoStatement statement) =>
- genericStatementEnter("doStatement", statement);
-
- void doStatementExit(DoStatement statement) =>
- genericStatementExit("doStatement", statement);
-
- void doubleLiteralEnter(DoubleLiteral expression, DartType typeContext) =>
- genericExpressionEnter("doubleLiteral", expression, typeContext);
-
- void doubleLiteralExit(DoubleLiteral expression, DartType inferredType) =>
- genericExpressionExit("doubleLiteral", expression, inferredType);
-
- void dryRunEnter(Expression expression) =>
- genericExpressionEnter("dryRun", expression, null);
-
- void dryRunExit(Expression expression) =>
- genericExpressionExit("dryRun", expression, null);
-
- void expressionStatementEnter(ExpressionStatement statement) =>
- genericStatementEnter('expressionStatement', statement);
-
- void expressionStatementExit(ExpressionStatement statement) =>
- genericStatementExit('expressionStatement', statement);
-
- void fieldInitializerEnter(FieldInitializer initializer) =>
- genericInitializerEnter("fieldInitializer", initializer);
-
- void fieldInitializerExit(FieldInitializer initializer) =>
- genericInitializerExit("fieldInitializer", initializer);
-
- void forInStatementEnter(ForInStatement statement,
- VariableDeclaration variable, Expression write) =>
- genericStatementEnter('forInStatement', statement);
-
- void forInStatementExit(
- ForInStatement statement, VariableDeclaration variable) =>
- genericStatementExit('forInStatement', statement);
-
- void forStatementEnter(ForStatement statement) =>
- genericStatementEnter('forStatement', statement);
-
- void forStatementExit(ForStatement statement) =>
- genericStatementExit('forStatement', statement);
-
- void functionDeclarationEnter(FunctionDeclaration statement) =>
- genericStatementEnter('functionDeclaration', statement);
-
- void functionDeclarationExit(FunctionDeclaration statement) =>
- genericStatementExit('functionDeclaration', statement);
-
- void functionExpressionEnter(
- FunctionExpression expression, DartType typeContext) =>
- genericExpressionEnter("functionExpression", expression, typeContext);
-
- void functionExpressionExit(
- FunctionExpression expression, DartType inferredType) =>
- genericExpressionExit("functionExpression", expression, inferredType);
-
- void ifNullBeforeRhs(Expression expression) {}
-
- void ifNullEnter(Expression expression, DartType typeContext) =>
- genericExpressionEnter('ifNull', expression, typeContext);
-
- void ifNullExit(Expression expression, DartType inferredType) =>
- genericExpressionExit('ifNull', expression, inferredType);
-
- void ifStatementEnter(IfStatement statement) =>
- genericStatementEnter('ifStatement', statement);
-
- void ifStatementExit(IfStatement statement) =>
- genericStatementExit('ifStatement', statement);
-
- void indexAssignAfterReceiver(Expression expression, DartType typeContext) {}
-
- void indexAssignEnter(Expression expression, DartType typeContext) =>
- genericExpressionEnter("indexAssign", expression, typeContext);
-
- void indexAssignExit(Expression expression, Expression write,
- Member writeMember, Procedure combiner, DartType inferredType) =>
- genericExpressionExit("indexAssign", expression, inferredType);
-
- void intLiteralEnter(IntLiteral expression, DartType typeContext) =>
- genericExpressionEnter("intLiteral", expression, typeContext);
-
- void intLiteralExit(IntLiteral expression, DartType inferredType) =>
- genericExpressionExit("intLiteral", expression, inferredType);
-
- void invalidInitializerEnter(LocalInitializer initializer) =>
- genericInitializerEnter("invalidInitializer", initializer);
-
- void invalidInitializerExit(LocalInitializer initializer) =>
- genericInitializerExit("invalidInitializer", initializer);
-
- void isExpressionEnter(IsExpression expression, DartType typeContext) =>
- genericExpressionEnter("isExpression", expression, typeContext);
-
- void isExpressionExit(IsExpression expression, DartType inferredType) =>
- genericExpressionExit("isExpression", expression, inferredType);
-
- void isNotExpressionEnter(Not expression, DartType typeContext) =>
- genericExpressionEnter("isNotExpression", expression, typeContext);
-
- void isNotExpressionExit(
- Not expression, DartType type, DartType inferredType) =>
- genericExpressionExit("isNotExpression", expression, inferredType);
-
- void labeledStatementEnter(LabeledStatement statement) =>
- genericStatementEnter('labeledStatement', statement);
-
- void labeledStatementExit(LabeledStatement statement) =>
- genericStatementExit('labeledStatement', statement);
-
- void listLiteralEnter(ListLiteral expression, DartType typeContext) =>
- genericExpressionEnter("listLiteral", expression, typeContext);
-
- void listLiteralExit(ListLiteral expression, DartType inferredType) =>
- genericExpressionExit("listLiteral", expression, inferredType);
-
- void logicalExpressionBeforeRhs(LogicalExpression expression) {}
-
- void logicalExpressionEnter(
- LogicalExpression expression, DartType typeContext) =>
- genericExpressionEnter("logicalExpression", expression, typeContext);
-
- void logicalExpressionExit(
- LogicalExpression expression, DartType inferredType) =>
- genericExpressionExit("logicalExpression", expression, inferredType);
-
- void mapLiteralEnter(MapLiteral expression, DartType typeContext) =>
- genericExpressionEnter("mapLiteral", expression, typeContext);
-
- void mapLiteralExit(MapLiteral expression, DartType typeContext) =>
- genericExpressionExit("mapLiteral", expression, typeContext);
-
- void methodInvocationBeforeArgs(Expression expression, bool isImplicitCall) {}
-
- void methodInvocationEnter(Expression expression, DartType typeContext) =>
- genericExpressionEnter("methodInvocation", expression, typeContext);
-
- void methodInvocationExit(
- Expression expression,
- Arguments arguments,
- bool isImplicitCall,
- Member interfaceMember,
- FunctionType calleeType,
- Substitution substitution,
- DartType inferredType) =>
- genericExpressionExit("methodInvocation", expression, inferredType);
-
- void methodInvocationExitCall(
- Expression expression,
- Arguments arguments,
- bool isImplicitCall,
- FunctionType calleeType,
- Substitution substitution,
- DartType inferredType) =>
- genericExpressionExit("methodInvocation", expression, inferredType);
-
- void namedFunctionExpressionEnter(Let expression, DartType typeContext) =>
- genericExpressionEnter(
- "namedFunctionExpression", expression, typeContext);
-
- void namedFunctionExpressionExit(Let expression, DartType inferredType) =>
- genericExpressionExit(
- "namedFunctionExpression", expression, inferredType);
-
- void notEnter(Not expression, DartType typeContext) =>
- genericExpressionEnter("not", expression, typeContext);
-
- void notExit(Not expression, DartType inferredType) =>
- genericExpressionExit("not", expression, inferredType);
-
- void nullLiteralEnter(NullLiteral expression, DartType typeContext) =>
- genericExpressionEnter("nullLiteral", expression, typeContext);
-
- void nullLiteralExit(NullLiteral expression, DartType inferredType) =>
- genericExpressionExit("nullLiteral", expression, inferredType);
-
- void propertyAssignEnter(
- Expression expression, Expression write, DartType typeContext) =>
- genericExpressionEnter("propertyAssign", expression, typeContext);
-
- void propertyAssignExit(
- Expression expression,
- Expression write,
- Member writeMember,
- DartType writeContext,
- Procedure combiner,
- DartType inferredType) =>
- genericExpressionExit("propertyAssign", expression, inferredType);
-
- void propertyGetEnter(Expression expression, DartType typeContext) =>
- genericExpressionEnter("propertyGet", expression, typeContext);
-
- void propertyGetExit(
- Expression expression, Member member, DartType inferredType) =>
- genericExpressionExit("propertyGet", expression, inferredType);
-
- void propertyGetExitCall(Expression expression, DartType inferredType) =>
- genericExpressionExit("propertyGet", expression, inferredType);
-
- void propertySetEnter(PropertySet expression, DartType typeContext) =>
- genericExpressionEnter("propertySet", expression, typeContext);
-
- void propertySetExit(PropertySet expression, DartType inferredType) =>
- genericExpressionExit("propertySet", expression, inferredType);
-
- void redirectingInitializerEnter(RedirectingInitializer initializer) =>
- genericInitializerEnter("redirectingInitializer", initializer);
-
- void redirectingInitializerExit(RedirectingInitializer initializer) =>
- genericInitializerExit("redirectingInitializer", initializer);
-
- void rethrowEnter(Rethrow expression, DartType typeContext) =>
- genericExpressionEnter('rethrow', expression, typeContext);
-
- void rethrowExit(Rethrow expression, DartType inferredType) =>
- genericExpressionExit('rethrow', expression, inferredType);
-
- void returnStatementEnter(ReturnStatement statement) =>
- genericStatementEnter('returnStatement', statement);
-
- void returnStatementExit(ReturnStatement statement) =>
- genericStatementExit('returnStatement', statement);
-
- void staticAssignEnter(
- Expression expression,
- String prefixName,
- int targetOffset,
- Class targetClass,
- Expression write,
- DartType typeContext) =>
- genericExpressionEnter("staticAssign", expression, typeContext);
-
- void staticAssignExit(
- Expression expression,
- Expression write,
- Member writeMember,
- DartType writeContext,
- Procedure combiner,
- DartType inferredType) =>
- genericExpressionExit("staticAssign", expression, inferredType);
-
- void staticGetEnter(StaticGet expression, String prefixName, int targetOffset,
- Class targetClass, DartType typeContext) =>
- genericExpressionEnter("staticGet", expression, typeContext);
-
- void staticGetExit(StaticGet expression, DartType inferredType) =>
- genericExpressionExit("staticGet", expression, inferredType);
-
- void staticInvocationEnter(StaticInvocation expression, String prefixName,
- int targetOffset, Class targetClass, DartType typeContext) =>
- genericExpressionEnter("staticInvocation", expression, typeContext);
-
- void staticInvocationExit(
- StaticInvocation expression,
- FunctionType calleeType,
- Substitution substitution,
- DartType inferredType) =>
- genericExpressionExit("staticInvocation", expression, inferredType);
-
- void stringConcatenationEnter(
- StringConcatenation expression, DartType typeContext) =>
- genericExpressionEnter("stringConcatenation", expression, typeContext);
-
- void stringConcatenationExit(
- StringConcatenation expression, DartType inferredType) =>
- genericExpressionExit("stringConcatenation", expression, inferredType);
-
- void stringLiteralEnter(StringLiteral expression, DartType typeContext) =>
- genericExpressionEnter("StringLiteral", expression, typeContext);
-
- void stringLiteralExit(StringLiteral expression, DartType inferredType) =>
- genericExpressionExit("StringLiteral", expression, inferredType);
-
- void superInitializerEnter(SuperInitializer initializer) =>
- genericInitializerEnter("superInitializer", initializer);
-
- void superInitializerExit(SuperInitializer initializer) =>
- genericInitializerExit("superInitializer", initializer);
-
- void switchStatementEnter(SwitchStatement statement) =>
- genericStatementEnter('switchStatement', statement);
-
- void switchStatementExit(SwitchStatement statement) =>
- genericStatementExit('switchStatement', statement);
-
- void symbolLiteralEnter(SymbolLiteral expression, DartType typeContext) =>
- genericExpressionEnter("symbolLiteral", expression, typeContext);
-
- void symbolLiteralExit(SymbolLiteral expression, DartType inferredType) =>
- genericExpressionExit("symbolLiteral", expression, inferredType);
-
- void thisExpressionEnter(ThisExpression expression, DartType typeContext) =>
- genericExpressionEnter("thisExpression", expression, typeContext);
-
- void thisExpressionExit(ThisExpression expression, DartType inferredType) =>
- genericExpressionExit("thisExpression", expression, inferredType);
-
- void throwEnter(Throw expression, DartType typeContext) =>
- genericExpressionEnter('throw', expression, typeContext);
-
- void throwExit(Throw expression, DartType inferredType) =>
- genericExpressionExit('throw', expression, inferredType);
-
- void tryCatchEnter(TryCatch statement) =>
- genericStatementEnter('tryCatch', statement);
-
- void tryCatchExit(TryCatch statement) =>
- genericStatementExit('tryCatch', statement);
-
- void tryFinallyEnter(TryFinally statement) =>
- genericStatementEnter('tryFinally', statement);
-
- void tryFinallyExit(TryFinally statement) =>
- genericStatementExit('tryFinally', statement);
-
- void typeLiteralEnter(
- TypeLiteral expression, String prefixName, DartType typeContext) =>
- genericExpressionEnter("typeLiteral", expression, typeContext);
-
- void typeLiteralExit(TypeLiteral expression, DartType inferredType) =>
- genericExpressionExit("typeLiteral", expression, inferredType);
-
- void variableAssignEnter(
- Expression expression, DartType typeContext, Expression write) =>
- genericExpressionEnter("variableAssign", expression, typeContext);
-
- void variableAssignExit(Expression expression, DartType writeContext,
- Expression write, Procedure combiner, DartType inferredType) =>
- genericExpressionExit("variableAssign", expression, inferredType);
-
- void variableDeclarationEnter(VariableDeclaration statement) =>
- genericStatementEnter('variableDeclaration', statement);
-
- void variableDeclarationExit(
- VariableDeclaration statement, DartType inferredType) =>
- genericStatementExit('variableDeclaration', statement);
-
- void variableGetEnter(VariableGet expression, DartType typeContext) =>
- genericExpressionEnter("variableGet", expression, typeContext);
-
- void variableGetExit(VariableGet expression, DartType inferredType) =>
- genericExpressionExit("variableGet", expression, inferredType);
-
- void variableSetEnter(VariableSet expression, DartType typeContext) =>
- genericExpressionEnter("variableSet", expression, typeContext);
-
- void variableSetExit(VariableSet expression, DartType inferredType) =>
- genericExpressionExit("variableSet", expression, inferredType);
-
- void whileStatementEnter(WhileStatement statement) =>
- genericStatementEnter("whileStatement", statement);
-
- void whileStatementExit(WhileStatement statement) =>
- genericStatementExit("whileStatement", statement);
-
- void yieldStatementEnter(YieldStatement statement) =>
- genericStatementEnter('yieldStatement', statement);
-
- void yieldStatementExit(YieldStatement statement) =>
- genericStatementExit('yieldStatement', statement);
-}
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 152af57..0c41b9b 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -89,8 +89,6 @@
import 'type_inference_engine.dart' show TypeInferenceEngineImpl;
-import 'type_inference_listener.dart' show TypeInferenceListener;
-
import 'type_promotion.dart' show TypePromoter, TypePromoterDisabled;
import 'type_schema.dart' show isKnown, UnknownType;
@@ -413,8 +411,6 @@
final TypeSchemaEnvironment typeSchemaEnvironment;
- final TypeInferenceListener listener;
-
final InterfaceType thisType;
final SourceLibraryBuilder library;
@@ -433,8 +429,8 @@
/// if the last invocation didn't require any inference.
FunctionType lastCalleeType;
- TypeInferrerImpl(this.engine, this.uri, this.listener, bool topLevel,
- this.thisType, this.library)
+ TypeInferrerImpl(
+ this.engine, this.uri, bool topLevel, this.thisType, this.library)
: coreTypes = engine.coreTypes,
strongMode = engine.strongMode,
classHierarchy = engine.classHierarchy,
@@ -1279,11 +1275,9 @@
Object interfaceMember,
Name methodName,
Arguments arguments}) {
- listener.methodInvocationEnter(expression, typeContext);
// First infer the receiver so we can look up the method that was invoked.
var receiverType =
receiver == null ? thisType : inferExpression(receiver, null, true);
- listener.methodInvocationBeforeArgs(expression, isImplicitCall);
if (strongMode) {
receiverVariable?.type = receiverType;
}
@@ -1311,30 +1305,18 @@
}
handleInvocationContravariance(checkKind, desugaredInvocation, arguments,
expression, inferredType, calleeType, fileOffset);
- if (identical(interfaceMember, 'call')) {
- listener.methodInvocationExitCall(expression, arguments, isImplicitCall,
- lastCalleeType, lastInferredSubstitution, inferredType);
- } else {
- if (strongMode &&
- isImplicitCall &&
- interfaceMember != null &&
- !(interfaceMember is Procedure &&
- interfaceMember.kind == ProcedureKind.Method) &&
- receiverType is! DynamicType &&
- receiverType != typeSchemaEnvironment.rawFunctionType) {
- var parent = expression.parent;
- var errorNode = helper.wrapInCompileTimeError(expression,
- templateImplicitCallOfNonMethod.withArguments(receiverType));
- parent?.replaceChild(expression, errorNode);
- }
- listener.methodInvocationExit(
- expression,
- arguments,
- isImplicitCall,
- interfaceMember,
- lastCalleeType,
- lastInferredSubstitution,
- inferredType);
+ if (!identical(interfaceMember, 'call') &&
+ strongMode &&
+ isImplicitCall &&
+ interfaceMember != null &&
+ !(interfaceMember is Procedure &&
+ interfaceMember.kind == ProcedureKind.Method) &&
+ receiverType is! DynamicType &&
+ receiverType != typeSchemaEnvironment.rawFunctionType) {
+ var parent = expression.parent;
+ var errorNode = helper.wrapInCompileTimeError(expression,
+ templateImplicitCallOfNonMethod.withArguments(receiverType));
+ parent?.replaceChild(expression, errorNode);
}
return inferredType;
}
@@ -1359,7 +1341,6 @@
PropertyGet desugaredGet,
Object interfaceMember,
Name propertyName}) {
- listener.propertyGetEnter(expression, typeContext);
// First infer the receiver so we can look up the getter that was invoked.
var receiverType =
receiver == null ? thisType : inferExpression(receiver, null, true);
@@ -1385,11 +1366,6 @@
inferredType =
instantiateTearOff(inferredType, typeContext, replacedExpression);
}
- if (identical(interfaceMember, 'call')) {
- listener.propertyGetExitCall(expression, inferredType);
- } else {
- listener.propertyGetExit(expression, interfaceMember, inferredType);
- }
return inferredType;
}
diff --git a/pkg/front_end/lib/src/incremental/unlinked_unit.dart b/pkg/front_end/lib/src/incremental/unlinked_unit.dart
index 12bccce..0b5753a 100644
--- a/pkg/front_end/lib/src/incremental/unlinked_unit.dart
+++ b/pkg/front_end/lib/src/incremental/unlinked_unit.dart
@@ -123,6 +123,9 @@
return super.parseFunctionBody(token, ofFunctionExpression, allowAbstract);
}
+ @override
+ Token parseInvalidBlock(Token token) => skipBlock(token);
+
Token parseMixinApplicationRest(Token token) {
hasMixin = true;
return super.parseMixinApplicationRest(token);
diff --git a/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart b/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
index 7e1de38..a09b51d 100644
--- a/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
+++ b/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
@@ -4,34 +4,23 @@
library fasta.analyzer_diet_listener;
-import 'package:analyzer/dart/ast/ast.dart' as ast show AstNode, ClassMember;
+import 'package:analyzer/dart/ast/ast.dart' as ast show ClassMember;
import 'package:analyzer/dart/ast/standard_ast_factory.dart' show astFactory;
import 'package:analyzer/dart/element/element.dart' as ast;
-import 'package:analyzer/dart/element/type.dart' as ast show DartType;
-
import 'package:analyzer/src/dart/element/element.dart' as ast;
import 'package:analyzer/src/dart/element/type.dart' as ast;
import 'package:analyzer/src/fasta/ast_builder.dart' show AstBuilder;
-import 'package:analyzer/src/fasta/resolution_applier.dart'
- show ValidatingResolutionApplier, TypeContext;
-
-import 'package:analyzer/src/fasta/resolution_storer.dart'
- show InstrumentedResolutionStorer;
-
import 'package:front_end/src/fasta/kernel/body_builder.dart' show BodyBuilder;
import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart'
show TypeInferenceEngine;
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart'
- show TypeInferenceListener;
-
import 'package:kernel/ast.dart' show AsyncMarker;
import 'package:front_end/src/fasta/source/stack_listener.dart'
@@ -56,8 +45,6 @@
import 'package:kernel/core_types.dart' show CoreTypes;
-import 'package:kernel/kernel.dart' as kernel;
-
class AnalyzerDietListener extends DietListener {
/// The body builder for the method currently being compiled, or `null` if no
/// method is currently being compiled.
@@ -65,35 +52,6 @@
/// Needed because it performs resolution and type inference.
BodyBuilder _bodyBuilder;
- /// The list of local declarations in the body builder for the method
- /// currently being compiled, or `null` if no method is currently being
- /// compiled.
- List<kernel.TreeNode> _kernelDeclarations;
-
- /// The list of objects referenced by the body builder for the method
- /// currently being compiled, or `null` if no method is currently being
- /// compiled.
- List<kernel.Node> _kernelReferences;
-
- /// The list of types inferred by the body builder for the method currently
- /// being compiled, or `null` if no method is currently being compiled.
- List<kernel.DartType> _kernelTypes;
-
- /// File offsets corresponding to the items in [_kernelDeclarations].
- ///
- /// These are used strictly for validation purposes.
- List<int> _declarationOffsets;
-
- /// File offsets corresponding to the items in [_kernelReferences].
- ///
- /// These are used strictly for validation purposes.
- List<int> _referenceOffsets;
-
- /// File offsets corresponding to the types in [_kernelTypes].
- ///
- /// These are used strictly for validation purposes.
- List<int> _typeOffsets;
-
AnalyzerDietListener(SourceLibraryBuilder library, ClassHierarchy hierarchy,
CoreTypes coreTypes, TypeInferenceEngine typeInferenceEngine)
: super(library, hierarchy, coreTypes, typeInferenceEngine);
@@ -152,7 +110,7 @@
StackListener createListener(
ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
- [Scope formalParameterScope, TypeInferenceListener listener]) {
+ [Scope formalParameterScope]) {
return new AstBuilder(null, library, builder, memberScope, false, uri);
}
@@ -176,22 +134,6 @@
}
_bodyBuilder.finishFields();
_bodyBuilder.checkEmpty(token.charOffset);
-
- // Now apply the resolution data and inferred types to the analyzer AST.
- var translatedDeclarations = _translateDeclarations(_kernelDeclarations);
- var translatedReferences = _translateReferences(_kernelReferences);
- var resolutionApplier = new ValidatingResolutionApplier(
- null,
- new _TestTypeContext(),
- translatedDeclarations,
- translatedReferences,
- _kernelTypes,
- _declarationOffsets,
- _referenceOffsets,
- _typeOffsets);
- ast.AstNode fields = listener.finishFields();
- fields.accept(resolutionApplier);
- resolutionApplier.checkDone();
}
@override
@@ -237,23 +179,6 @@
bodyBuilderFormals, asyncModifier, bodyBuilderBody);
// Now apply the resolution data and inferred types to the analyzer AST.
- var translatedDeclarations = _translateDeclarations(_kernelDeclarations);
- var translatedReferences = _translateReferences(_kernelReferences);
- var resolutionApplier = new ValidatingResolutionApplier(
- null,
- new _TestTypeContext(),
- translatedDeclarations,
- translatedReferences,
- _kernelTypes,
- _declarationOffsets,
- _referenceOffsets,
- _typeOffsets);
- ast.AstNode formalsAsAstNode = formals;
- ast.AstNode bodyAsAstNode = body;
- formalsAsAstNode?.accept(resolutionApplier);
- bodyAsAstNode.accept(resolutionApplier);
- resolutionApplier.checkDone();
-
listener.finishFunction(metadataConstants, formals, asyncModifier, body);
}
@@ -266,73 +191,12 @@
void parserCallback()) {
// Create a body builder to do type inference, and a listener to record the
// types that are inferred.
- _kernelDeclarations = <kernel.TreeNode>[];
- _kernelReferences = <kernel.Node>[];
- _kernelTypes = <kernel.DartType>[];
- _declarationOffsets = <int>[];
- _referenceOffsets = <int>[];
- _typeOffsets = <int>[];
- var resolutionStorer = new InstrumentedResolutionStorer(
- _kernelDeclarations,
- _kernelReferences,
- _kernelTypes,
- _declarationOffsets,
- _referenceOffsets,
- _typeOffsets);
- _bodyBuilder = super.createListener(builder, memberScope,
- builder.isInstanceMember, formalParameterScope, resolutionStorer);
+ _bodyBuilder = super.createListener(
+ builder, memberScope, builder.isInstanceMember, formalParameterScope);
// Run the parser callback; this will build the analyzer AST, run
// the body builder to do type inference, and then copy the inferred types
// over to the analyzer AST.
parserCallback();
- resolutionStorer.finished();
- // The inferred types and the body builder are no longer needed.
_bodyBuilder = null;
- _kernelDeclarations = null;
- _kernelReferences = null;
- _kernelTypes = null;
- _declarationOffsets = null;
- _referenceOffsets = null;
- _typeOffsets = null;
- }
-
- /// Translates the given kernel declarations into analyzer elements.
- static List<ast.Element> _translateDeclarations(
- List<kernel.TreeNode> kernelDeclarations) {
- // TODO(scheglov): implement proper translation of elements.
- return new List<ast.Element>.filled(kernelDeclarations.length, null);
- }
-
- /// Translates the given kernel references into analyzer elements.
- static List<ast.Element> _translateReferences(
- List<kernel.Node> kernelDeclarations) {
- // TODO(scheglov): implement proper translation of elements.
- return new List<ast.Element>.filled(kernelDeclarations.length, null);
- }
-}
-
-/// Test implementation of [TypeContext].
-class _TestTypeContext implements TypeContext {
- @override
- ast.ClassElement get enclosingClassElement => null;
-
- @override
- ast.DartType get stringType => null;
-
- @override
- ast.DartType get typeType => null;
-
- @override
- void encloseVariable(ast.ElementImpl element) {}
-
- @override
- void enterLocalFunction(ast.FunctionElementImpl element) {}
-
- @override
- void exitLocalFunction(ast.FunctionElementImpl element) {}
-
- @override
- ast.DartType translateType(kernel.DartType kernelType) {
- return ast.UndefinedTypeImpl.instance;
}
}
diff --git a/pkg/front_end/testcases/annotation_eof.dart.direct.expect b/pkg/front_end/testcases/annotation_eof.dart.direct.expect
index 3d63244..f78b3b6 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.direct.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.direct.expect
@@ -2,7 +2,9 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.\n\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
+
+^"]/* from null */;
static method main() → dynamic {
core::print("There is a dangling annotation at the end of this file");
}
diff --git a/pkg/front_end/testcases/annotation_eof.dart.strong.expect b/pkg/front_end/testcases/annotation_eof.dart.strong.expect
index 3d63244..f78b3b6 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.strong.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.strong.expect
@@ -2,7 +2,9 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.\n\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
+
+^"]/* from null */;
static method main() → dynamic {
core::print("There is a dangling annotation at the end of this file");
}
diff --git a/pkg/front_end/testcases/ast_builder.status b/pkg/front_end/testcases/ast_builder.status
index 6fd0d80..dc8b1a2 100644
--- a/pkg/front_end/testcases/ast_builder.status
+++ b/pkg/front_end/testcases/ast_builder.status
@@ -4,93 +4,40 @@
# Status file for the ast_builder_test.dart test suite. This is testing
# generating analyzer ASTs and connecting up type inference information.
-DeltaBlue: Crash
-accessors: Crash
annotation_top: Crash
-argument_mismatch: Crash
-bad_setter_abstract: Crash
-cascade: Crash
-check_deferred_allocation: Crash
-check_deferred_before_args2: Crash
-check_deferred_before_args: Crash
-check_deferred_before_call: Crash
-check_deferred_before_write: Crash
-check_deferred_read: Crash
-check_deferred_read_static_field: Crash
-check_deferred_read_type: Crash
-check_deferred_static_method_call: Crash
-classes: Crash
-duplicated_named_args_3: Crash
+argument_mismatch: Fail
dynamic_and_void: Fail
-expressions: Crash
-function_type_is_check: Crash
-function_type_recovery: Crash
illegal_named_function_expression: Crash
illegal_named_function_expression_scope: Crash
-implicit_new: Crash
-implicit_scope_test: Crash
-inference/abstract_class_instantiation: Crash
-inference/assert_initializer: Crash
-inference/bug30251: Crash
-inference/bug30624: Crash
-inference/bug31133: Crash
-inference/bug31436: Crash
-inference/closure_param_null_to_object: Crash
-inference/constructors_infer_from_arguments_redirecting: Crash
-inference/constructors_too_many_positional_arguments: Crash
+inference/abstract_class_instantiation: Fail
+inference/constructors_too_many_positional_arguments: Fail
inference/downwards_inference_annotations: Crash
-inference/downwards_inference_annotations_class_members: Crash
-inference/downwards_inference_annotations_for_loop_variable: Crash
-inference/downwards_inference_annotations_locals: Crash
-inference/downwards_inference_annotations_locals_referring_to_locals: Crash
+inference/downwards_inference_annotations_for_loop_variable: Fail
+inference/downwards_inference_annotations_locals: Fail
+inference/downwards_inference_annotations_locals_referring_to_locals: Fail
inference/downwards_inference_annotations_parameter: Fail
inference/downwards_inference_annotations_parameter_local: Fail
inference/downwards_inference_annotations_type_variable: Fail
-inference/downwards_inference_annotations_type_variable_local: Crash
+inference/downwards_inference_annotations_type_variable_local: Fail
inference/downwards_inference_annotations_typedef: Crash
-inference/downwards_inference_on_function_of_t_using_the_t: Crash
-inference/downwards_inference_on_generic_function_expressions: Crash
-inference/downwards_inference_on_instance_creations_infer_downwards: Crash
+inference/downwards_inference_on_function_of_t_using_the_t: Fail
inference/downwards_inference_yield_yield_star: Fail
-inference/field_initializer_context_explicit: Crash
-inference/field_initializer_context_implicit: Crash
-inference/field_initializer_context_this: Crash
-inference/field_initializer_parameter: Crash
-inference/for_loop_initializer_expression: Crash
inference/future_then_explicit_future: Fail
inference/generic_functions_return_typedef: Fail
inference/generic_methods_do_not_infer_invalid_override_of_generic_method: Fail
inference/generic_methods_handle_override_of_non_generic_with_generic: Fail
inference/generic_methods_infer_js_builtin: Fail
-inference/infer_correctly_on_multiple_variables_declared_together: Crash
-inference/infer_from_complex_expressions_if_outer_most_value_is_precise: Crash
-inference/infer_local_function_referenced_before_declaration: Crash
inference/infer_method_missing_params: Fail
-inference/infer_rethrow: Crash
-inference/instantiate_tearoff: Crash
-inference/instantiate_tearoff_after_contravariance_check: Crash
-inference/instantiate_tearoff_of_call: Crash
-inference/lambda_does_not_have_propagated_type_hint: Crash
-inference/override_equals: Crash
-inference/super_initializer: Crash
-inference/super_initializer_substitution: Crash
inference/top_level_return_and_yield: Fail
-inference/try_catch: Crash
-inference/try_catch_finally: Crash
-inference/try_catch_promotion: Crash
-inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: Crash
+inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: Fail
inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: Crash
+inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: Fail
inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Fail
inference_new/dependency_only_if_generic_method: Fail
-inference_new/for_each_identifier_downwards: Crash
-instantiate_to_bound/supertypes: Crash
-invalid_cast: Crash
-invocations: Crash
+invocations: VerificationError
metadata_enum: Crash
metadata_named_mixin_application: Crash
-micro: Crash
-native_as_name: Crash
+minimum_int: Crash
override_check_accessor_after_inference: Fail
override_check_accessor_basic: Fail
override_check_accessor_with_covariant_modifier: Fail
@@ -98,71 +45,22 @@
override_check_basic: Fail
override_check_two_substitutions: Fail
override_check_with_covariant_modifier: Fail
-qualified: Crash
-rasta/abstract_constructor: Crash
-rasta/bad_default_constructor: Crash
-rasta/bad_interpolation: Crash
-rasta/bad_redirection: Crash
-rasta/class_hierarchy: Crash
-rasta/deferred_load: Crash
-rasta/generic_factory: Crash
-rasta/issue_000001: Crash
-rasta/issue_000002: Crash
-rasta/issue_000004: Crash
-rasta/issue_000031: Crash
-rasta/issue_000032: Crash
-rasta/issue_000036: Crash
+rasta/bad_default_constructor: VerificationError
rasta/issue_000039: VerificationError
rasta/issue_000042: Crash
-rasta/issue_000044: Crash
-rasta/issue_000067: Crash
-rasta/issue_000068: Crash
-rasta/issue_000069: Crash
-rasta/issue_000070: Crash
-rasta/malformed_function: Crash
-rasta/mandatory_parameter_initializer: Crash
-rasta/parser_error: Crash
-rasta/previsit_deferred: Crash
-rasta/static: Crash
-rasta/super_initializer: Crash
-rasta/type_literals: Crash
-rasta/typedef: Crash
-rasta/unresolved: Crash
-rasta/unresolved_constructor: Crash
+rasta/mandatory_parameter_initializer: VerificationError
+rasta/parser_error: VerificationError
rasta/unresolved_for_in: Crash
-rasta/unresolved_recovery: Crash
-redirection_chain_type_arguments: Crash
-redirection_chain_type_arguments_subst: Crash
-redirection_type_arguments: Crash
regress/issue_29937: Crash
regress/issue_29941: Crash
regress/issue_29942: Crash
regress/issue_29943: Crash
regress/issue_29978: Crash
regress/issue_29979: Crash
-regress/issue_29983: Crash
-regress/issue_29984: Crash
-regress/issue_29985: Crash
+regress/issue_29983: Crash # 'package:analyzer/src/fasta/ast_builder.dart': Failed assertion: line 478 pos 12: 'star == null': is not true.
regress/issue_31155: Crash # Issue 31155.
regress/issue_31157: Crash
regress/issue_31180: Crash
-regress/issue_31184: Crash
regress/issue_31186: Crash
regress/issue_31187: Crash
-regress/issue_31198: Crash
-regress/issue_31213: Crash
-regress/issue_31299: Crash
-regress/issue_31766: Crash
-regress/issue_31846: Crash
-reorder_super: Crash
-runtime_checks/call_method_implicit_tear_off: Crash
-runtime_checks/call_method_implicit_tear_off_future_or: Crash
-runtime_checks/implicit_downcast_assert_initializer: Crash
-runtime_checks/implicit_downcast_constructor_initializer: Crash
-runtime_checks_new/for_in_call_kinds: Crash
-statements: Crash
-super_call: Crash
-type_variable_as_super: Crash
-uninitialized_fields: Crash
warn_unresolved_sends: Fail
-minimum_int: Crash
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
index f67b6d5..fb62763 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
@@ -7,24 +7,42 @@
: super core::Object::•()
;
set a(dynamic #synthetic) → dynamic
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.\n set a();\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.
+ set a();
+ ^";
set d(dynamic #synthetic) → dynamic
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.\n set d(x, y);\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.
+ set d(x, y);
+ ^";
}
abstract class B extends core::Object {
synthetic constructor •() → void
: super core::Object::•()
;
set a(dynamic #synthetic) → dynamic
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.\n set a();\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.
+ set a();
+ ^";
set d(dynamic #synthetic) → dynamic
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.\n set d(x, y);\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.
+ set d(x, y);
+ ^";
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.\nTry adding {}.\nset b();\n ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.\nTry adding {}.\nset c(x, y);\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
+Try adding {}.
+set b();
+ ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.
+Try adding {}.
+set c(x, y);
+ ^"]/* from null */;
static set b(dynamic #synthetic) → dynamic
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.\nset b();\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
+set b();
+ ^";
static set c(dynamic #synthetic) → dynamic
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.\nset c(x, y);\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
+set c(x, y);
+ ^";
static method main() → dynamic {
core::bool threw;
try {
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
index 12509e7..a02d903 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
@@ -7,24 +7,44 @@
: super core::Object::•()
;
set a(dynamic #synthetic) → void
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.\n set a();\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.
+ set a();
+ ^";
set d(dynamic #synthetic) → void
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.\n set d(x, y);\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.
+ set d(x, y);
+ ^";
}
abstract class B extends core::Object {
synthetic constructor •() → void
: super core::Object::•()
;
set a(dynamic #synthetic) → void
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.\n set a();\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.
+ set a();
+ ^";
set d(dynamic #synthetic) → void
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.\n set d(x, y);\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.
+ set d(x, y);
+ ^";
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.\nTry adding {}.\nset b();\n ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.\nTry adding {}.\nset c(x, y);\n ^", "pkg/front_end/testcases/bad_setter_abstract.dart:66:9: Error: The class 'B' is abstract and can't be instantiated.\n new B();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
+Try adding {}.
+set b();
+ ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.
+Try adding {}.
+set c(x, y);
+ ^", "pkg/front_end/testcases/bad_setter_abstract.dart:66:9: Error: The class 'B' is abstract and can't be instantiated.
+ new B();
+ ^"]/* from null */;
static set b(dynamic #synthetic) → void
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.\nset b();\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
+set b();
+ ^";
static set c(dynamic #synthetic) → void
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.\nset c(x, y);\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
+set c(x, y);
+ ^";
static method main() → dynamic {
core::bool threw;
try {
diff --git a/pkg/front_end/testcases/bug21938.dart.strong.expect b/pkg/front_end/testcases/bug21938.dart.strong.expect
index 55b0b3d..cc7a72b 100644
--- a/pkg/front_end/testcases/bug21938.dart.strong.expect
+++ b/pkg/front_end/testcases/bug21938.dart.strong.expect
@@ -5,10 +5,19 @@
static method test() → dynamic {
core::Object x;
core::Function f;
- let final dynamic #t1 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:10:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.\nTry correcting the name to the name of an existing method, or defining a method named 'call'.\n x /*@error=UndefinedMethod*/ ();\n ^";
- let final dynamic #t2 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:11:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.\nTry correcting the name to the name of an existing method, or defining a method named 'call'.\n x /*@error=UndefinedMethod*/ (3);\n ^";
+ let final dynamic #t1 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:10:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+ x /*@error=UndefinedMethod*/ ();
+ ^";
+ let final dynamic #t2 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:11:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+ x /*@error=UndefinedMethod*/ (3);
+ ^";
f.call(5, 2);
- let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:13:33: Error: The method 'call' isn't defined for the class 'dart.core::Object'.\nTry correcting the name to the name of an existing method, or defining a method named 'call'.\n x. /*@error=UndefinedMethod*/ call();\n ^";
+ let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:13:33: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+ x. /*@error=UndefinedMethod*/ call();
+ ^";
f.call;
f.call(5, 2);
}
diff --git a/pkg/front_end/testcases/bug31124.dart.direct.expect b/pkg/front_end/testcases/bug31124.dart.direct.expect
index 6b49659..e470ed2 100644
--- a/pkg/front_end/testcases/bug31124.dart.direct.expect
+++ b/pkg/front_end/testcases/bug31124.dart.direct.expect
@@ -2,5 +2,7 @@
import self as self;
static method #main() → dynamic {
- throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a\nvar a = () => 'b';a();\n^";
+ throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a
+var a = () => 'b';a();
+^";
}
diff --git a/pkg/front_end/testcases/bug31124.dart.strong.expect b/pkg/front_end/testcases/bug31124.dart.strong.expect
index 6b49659..e470ed2 100644
--- a/pkg/front_end/testcases/bug31124.dart.strong.expect
+++ b/pkg/front_end/testcases/bug31124.dart.strong.expect
@@ -2,5 +2,7 @@
import self as self;
static method #main() → dynamic {
- throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a\nvar a = () => 'b';a();\n^";
+ throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a
+var a = () => 'b';a();
+^";
}
diff --git a/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect b/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
index bd033e5..aaf6e75 100644
--- a/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
@@ -1,7 +1,10 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_as_check.dart:9:8: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.\nTry removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.\n x as lib.C;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_as_check.dart:9:8: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+ x as lib.C;
+ ^"]/* from null */;
static method main() → dynamic {}
static method test(dynamic x) → dynamic {
x as invalid-type;
diff --git a/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect b/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
index c612334..e7e9db7 100644
--- a/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
@@ -2,7 +2,10 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_is_check.dart:9:14: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.\nTry removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.\n print(x is lib.C);\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_is_check.dart:9:14: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+ print(x is lib.C);
+ ^"]/* from null */;
static method main() → dynamic {}
static method test(dynamic x) → dynamic {
core::print(x is invalid-type);
diff --git a/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect b/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
index 944b59d..cc18211 100644
--- a/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
@@ -1,7 +1,10 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_type_declaration.dart:9:3: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.\nTry removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.\n lib.C x = null;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_type_declaration.dart:9:3: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+ lib.C x = null;
+ ^"]/* from null */;
static method main() → dynamic
return self::test();
static method test() → dynamic {
diff --git a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect
index 6262bfd..7b807bd 100644
--- a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect
+++ b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect
@@ -2,5 +2,7 @@
import self as self;
static method #main() → dynamic {
- throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A\nclass A {\n ^";
+ throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A
+class A {
+ ^";
}
diff --git a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect
index 6262bfd..7b807bd 100644
--- a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect
+++ b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect
@@ -2,5 +2,7 @@
import self as self;
static method #main() → dynamic {
- throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A\nclass A {\n ^";
+ throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A
+class A {
+ ^";
}
diff --git a/pkg/front_end/testcases/cycles.dart.direct.expect b/pkg/front_end/testcases/cycles.dart.direct.expect
index f7cd8dc..930f646 100644
--- a/pkg/front_end/testcases/cycles.dart.direct.expect
+++ b/pkg/front_end/testcases/cycles.dart.direct.expect
@@ -22,7 +22,13 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/cycles.dart:5:7: Error: 'A' is a supertype of itself via 'B', 'C'.\nclass A implements C {}\n ^", "pkg/front_end/testcases/cycles.dart:7:7: Error: 'B' is a supertype of itself via 'A', 'C'.\nclass B extends A {}\n ^", "pkg/front_end/testcases/cycles.dart:9:7: Error: 'C' is a supertype of itself via 'A', 'B'.\nclass C extends B implements D {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/cycles.dart:5:7: Error: 'A' is a supertype of itself via 'B', 'C'.
+class A implements C {}
+ ^", "pkg/front_end/testcases/cycles.dart:7:7: Error: 'B' is a supertype of itself via 'A', 'C'.
+class B extends A {}
+ ^", "pkg/front_end/testcases/cycles.dart:9:7: Error: 'C' is a supertype of itself via 'A', 'B'.
+class C extends B implements D {}
+ ^"]/* from null */;
static method main() → dynamic {
core::print(new self::A::•());
core::print(new self::B::•());
diff --git a/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect b/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
index 4a2bfdc..e95737c 100644
--- a/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
+++ b/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
@@ -9,6 +9,8 @@
static method m({core::int a = 0}) → dynamic {}
}
static method test() → void {
- self::C::m(a: invalid-expression "pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.\n C.m(a: 1, a: 2, a: 3);\n ^");
+ self::C::m(a: invalid-expression "pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
+ C.m(a: 1, a: 2, a: 3);
+ ^");
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect b/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
index 29999e5..6fc51ce 100644
--- a/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
+++ b/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
@@ -9,6 +9,8 @@
static method m({core::int a = 0}) → dynamic {}
}
static method test() → void {
- self::C::m(a: invalid-expression "pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.\n C.m(a: 1, a: 2, a: 3);\n ^" as{TypeError} core::int);
+ self::C::m(a: invalid-expression "pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
+ C.m(a: 1, a: 2, a: 3);
+ ^" as{TypeError} core::int);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/expressions.dart.strong.expect b/pkg/front_end/testcases/expressions.dart.strong.expect
index c0b0a88..49f6c0e 100644
--- a/pkg/front_end/testcases/expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/expressions.dart.strong.expect
@@ -2,7 +2,9 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'int.toString'.\n print(int?.toString());\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'int.toString'.
+ print(int?.toString());
+ ^"]/* from null */;
static method foo({dynamic fisk = null}) → dynamic {
core::print(fisk);
}
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
index dc947aa..96f3264 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
@@ -2,7 +2,15 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a return type.\n var x = void f<T>(T t) {};\n ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.\n var x = void f<T>(T t) {};\n ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a return type.\n print(void g<T>(T t) {});\n ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.\n print(void g<T>(T t) {});\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a return type.
+ var x = void f<T>(T t) {};
+ ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
+ var x = void f<T>(T t) {};
+ ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a return type.
+ print(void g<T>(T t) {});
+ ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
+ print(void g<T>(T t) {});
+ ^"]/* from null */;
static method main() → dynamic {
dynamic x = let final <T extends core::Object>(T) → void f = <T extends core::Object>(T t) → dynamic {} in f;
core::print(x.runtimeType);
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
index 55e933f..1bc8dba 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
@@ -2,7 +2,15 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a return type.\n var x = void f<T>(T t) {};\n ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.\n var x = void f<T>(T t) {};\n ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a return type.\n print(void g<T>(T t) {});\n ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.\n print(void g<T>(T t) {});\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a return type.
+ var x = void f<T>(T t) {};
+ ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
+ var x = void f<T>(T t) {};
+ ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a return type.
+ print(void g<T>(T t) {});
+ ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
+ print(void g<T>(T t) {});
+ ^"]/* from null */;
static method main() → dynamic {
<T extends core::Object>(T) → core::Null x = let final <T extends core::Object>(T) → core::Null f = <T extends core::Object>(T t) → core::Null {} in f;
core::print(x.{core::Object::runtimeType});
diff --git a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
index dbf1b9f..793fc06 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
@@ -2,7 +2,11 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a return type.\n print(void f() {});\n ^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.\n print(void f() {});\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a return type.
+ print(void f() {});
+ ^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
+ print(void f() {});
+ ^"]/* from null */;
static method main() → dynamic {
function f() → void {}
core::print(let final () → void f = () → dynamic {} in f);
diff --git a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
index 80d6fbc..fd8b0bb 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
@@ -2,7 +2,11 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a return type.\n print(void f() {});\n ^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.\n print(void f() {});\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a return type.
+ print(void f() {});
+ ^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
+ print(void f() {});
+ ^"]/* from null */;
static method main() → dynamic {
function f() → void {}
core::print(let final () → core::Null f = () → core::Null {} in f);
diff --git a/pkg/front_end/testcases/implicit_new.dart.strong.expect b/pkg/front_end/testcases/implicit_new.dart.strong.expect
index a8531fc..8c23c2b 100644
--- a/pkg/front_end/testcases/implicit_new.dart.strong.expect
+++ b/pkg/front_end/testcases/implicit_new.dart.strong.expect
@@ -24,7 +24,11 @@
return null;
operator []=(dynamic _a, dynamic _b) → void {}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/implicit_new.dart:18:18: Error: Method not found: 'Bar'.\n var y = prefix.Bar();\n ^", "pkg/front_end/testcases/implicit_new.dart:19:10: Error: Method not found: 'Bar'.\n prefix.Bar();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
+ var y = prefix.Bar();
+ ^", "pkg/front_end/testcases/implicit_new.dart:19:10: Error: Method not found: 'Bar'.
+ prefix.Bar();
+ ^"]/* from null */;
static method testNSM() → dynamic {
dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
index deb6838..30dae6e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
@@ -7,6 +7,9 @@
return null;
() → core::String g = f;
g = () → core::String {
- return let final dynamic #t1 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n return /*error:RETURN_OF_INVALID_TYPE*/ 1;\n ^";
+ return let final dynamic #t1 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ return /*error:RETURN_OF_INVALID_TYPE*/ 1;
+ ^";
};
}
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
index 2ecc9fd..e22e2f0 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
@@ -14,5 +14,9 @@
;
abstract method f(dynamic x) → dynamic;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.\nabstract class A extends B {\n ^", "pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.\nabstract class B extends A {\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
+abstract class A extends B {
+ ^", "pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.
+abstract class B extends A {
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
index 2ecc9fd..e22e2f0 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
@@ -14,5 +14,9 @@
;
abstract method f(dynamic x) → dynamic;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.\nabstract class A extends B {\n ^", "pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.\nabstract class B extends A {\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
+abstract class A extends B {
+ ^", "pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.
+abstract class B extends A {
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
index 80af899..56ef48b 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
@@ -3,5 +3,11 @@
static field dynamic x = () → dynamic => self::y;
static field dynamic y = () → dynamic => self::x;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_reference_via_closures.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>\n ^", "pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:67: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_reference_via_closures.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>
+ ^", "pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:67: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
index a19d846..8df972c 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
@@ -3,5 +3,11 @@
static field dynamic x = () → dynamic => self::y;
static field dynamic y = () → dynamic => self::x;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>\n ^", "pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:67: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>
+ ^", "pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:67: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
index f222190..dd5268b 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
@@ -40,5 +40,11 @@
get a() → dynamic
return null;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:79: Error: Can't infer the type of 'a': overridden members must all have the same type.\nSpecify the type explicitly.\n get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>\n ^", "pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:79: Error: Can't infer the type of 'a': overridden members must all have the same type.\nSpecify the type explicitly.\n get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:79: Error: Can't infer the type of 'a': overridden members must all have the same type.
+Specify the type explicitly.
+ get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
+ ^", "pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:79: Error: Can't infer the type of 'a': overridden members must all have the same type.
+Specify the type explicitly.
+ get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
index 5a724b7..6ae3a3d 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
@@ -47,5 +47,8 @@
get a() → dynamic
return null;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:79: Error: Can't infer the type of 'a': overridden members must all have the same type.\nSpecify the type explicitly.\n get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:79: Error: Can't infer the type of 'a': overridden members must all have the same type.
+Specify the type explicitly.
+ get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
index a16af52..fa4e2f9 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
@@ -15,6 +15,9 @@
self::C<core::num> c_num = new self::C::•<core::num>(123);
self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in let final dynamic #t2 = #t1.{self::C::t} = 1.0 in #t1;
self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
- x.{self::C::t} = let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';\n ^";
+ x.{self::C::t} = let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
index 7f05ebe..e36424d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
@@ -15,6 +15,9 @@
}
static method test() → dynamic {
self::C<core::int> x = self::C::•<core::int>(42);
- x.{self::C::t} = let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';\n ^";
+ x.{self::C::t} = let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
index a88cab0..6b36422 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
@@ -19,7 +19,9 @@
get reversed() → self::Pair<self::Pair::U, self::Pair::T>
return new self::Pair::•<self::Pair::U, self::Pair::T>(this.{self::Pair::u}, this.{self::Pair::t});
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Can't use a super-bounded type for instance creation. Got 'test::Pair<test::Clonable<dynamic>, test::Clonable<dynamic>>'.\n new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Can't use a super-bounded type for instance creation. Got 'test::Pair<test::Clonable<dynamic>, test::Clonable<dynamic>>'.
+ new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair
+ ^"]/* from null */;
static method main() → dynamic {
final self::Pair<self::Clonable<dynamic>, self::Clonable<dynamic>> x = new self::Pair::_<self::Clonable<dynamic>, self::Clonable<dynamic>>();
}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
index 7abb51e..48f74f8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
@@ -4,7 +4,10 @@
static method test() → void {
core::List<core::int> l;
- l = <core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];\n ^"];
+ l = <core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
+ ^"];
l = l = <core::int>[1];
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
index c6c4809..ef16127 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
@@ -25,23 +25,53 @@
static method test() → void {
new self::F0::•(<core::int>[]);
new self::F0::•(<core::int>[3]);
- new self::F0::•(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n ^"]);
- new self::F0::•(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3]);
+ new self::F0::•(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+ ^"]);
+ new self::F0::•(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3]);
new self::F1::•(a: <core::int>[]);
new self::F1::•(a: <core::int>[3]);
- new self::F1::•(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n ^"]);
- new self::F1::•(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3]);
+ new self::F1::•(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+ ^"]);
+ new self::F1::•(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3]);
new self::F2::•(<core::int>[]);
new self::F2::•(<core::int>[3]);
- new self::F2::•(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n ^"]);
- new self::F2::•(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3]);
+ new self::F2::•(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+ ^"]);
+ new self::F2::•(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3]);
new self::F3::•(<core::Iterable<core::int>>[]);
new self::F3::•(<core::Iterable<core::int>>[<core::int>[3]]);
- new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n ^"]]);
- new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n ^"], <core::int>[3]]);
+ new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+ ^"]]);
+ new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+ ^"], <core::int>[3]]);
new self::F4::•(a: <core::Iterable<core::int>>[]);
new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[3]]);
- new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n ^"]]);
- new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n ^"], <core::int>[3]]);
+ new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+ ^"]]);
+ new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+ ^"], <core::int>[3]]);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
index cedb9f0..039b9a5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
@@ -10,23 +10,53 @@
static method test() → void {
self::f0(<core::int>[]);
self::f0(<core::int>[3]);
- self::f0(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n ^"]);
- self::f0(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);\n ^", 3]);
+ self::f0(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+ ^"]);
+ self::f0(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+ ^", 3]);
self::f1(a: <core::int>[]);
self::f1(a: <core::int>[3]);
- self::f1(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n ^"]);
- self::f1(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3]);
+ self::f1(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+ ^"]);
+ self::f1(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3]);
self::f2(<core::int>[]);
self::f2(<core::int>[3]);
- self::f2(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n ^"]);
- self::f2(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);\n ^", 3]);
+ self::f2(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+ ^"]);
+ self::f2(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+ ^", 3]);
self::f3(<core::Iterable<core::int>>[]);
self::f3(<core::Iterable<core::int>>[<core::int>[3]]);
- self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n ^"]]);
- self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n ^"], <core::int>[3]]);
+ self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+ ^"]]);
+ self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+ ^"], <core::int>[3]]);
self::f4(a: <core::Iterable<core::int>>[]);
self::f4(a: <core::Iterable<core::int>>[<core::int>[3]]);
- self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n ^"]]);
- self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n ^"], <core::int>[3]]);
+ self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+ ^"]]);
+ self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+ ^"], <core::int>[3]]);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
index a4f41b5..e11e0c0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
@@ -7,37 +7,70 @@
{
(core::int) → core::String l0 = (core::int x) → core::Null => null;
(core::int) → core::String l1 = (core::int x) → core::String => "hello";
- (core::int) → core::String l2 = let final dynamic #t1 = (core::String x) → core::String => "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.\n l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>\n ^";
- (core::int) → core::String l3 = (core::int x) → core::String => let final dynamic #t2 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;\n ^";
+ (core::int) → core::String l2 = let final dynamic #t1 = (core::String x) → core::String => "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.
+ l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
+ ^";
+ (core::int) → core::String l3 = (core::int x) → core::String => let final dynamic #t2 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
+ ^";
(core::int) → core::String l4 = (core::int x) → core::String {
- return let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n ^";
+ return let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+ ^";
};
}
{
(core::int) → core::String l0 = (core::int x) → core::Null => null;
(core::int) → core::String l1 = (core::int x) → core::String => "hello";
- (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n 3;\n ^";
+ (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ 3;
+ ^";
(core::int) → core::String l3 = (core::int x) → core::String {
- return let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n ^";
+ return let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+ ^";
};
(core::int) → core::String l4 = (core::int x) → core::String {
- return let final dynamic #t6 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n return /*error:RETURN_OF_INVALID_TYPE*/ x;\n ^";
+ return let final dynamic #t6 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ return /*error:RETURN_OF_INVALID_TYPE*/ x;
+ ^";
};
}
{
(core::int) → core::List<core::String> l0 = (core::int x) → core::Null => null;
(core::int) → core::List<core::String> l1 = (core::int x) → core::List<core::String> => <core::String>["hello"];
- (core::int) → core::List<core::String> l2 = let final dynamic #t7 = (core::String x) → core::List<core::String> => <core::String>["hello"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\n l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String\n ^";
- (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n ^"];
+ (core::int) → core::List<core::String> l2 = let final dynamic #t7 = (core::String x) → core::List<core::String> => <core::String>["hello"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+ l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
+ ^";
+ (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"];
(core::int) → core::List<core::String> l4 = (core::int x) → core::List<core::String> {
- return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n ^"];
+ return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"];
};
}
{
(core::int) → core::int l0 = (core::int x) → core::int => x;
(core::int) → core::int l1 = (core::int x) → core::int => x.{core::num::+}(1);
- (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t10 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n x;\n ^";
- (core::int) → core::String l3 = (core::int x) → core::String => (let final dynamic #t11 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'dart.core::int'.\nTry correcting the name to the name of an existing method, or defining a method named 'substring'.\n .substring(3);\n ^") as{TypeError} core::String;
+ (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t10 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ x;
+ ^";
+ (core::int) → core::String l3 = (core::int x) → core::String => (let final dynamic #t11 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
+Try correcting the name to the name of an existing method, or defining a method named 'substring'.
+ .substring(3);
+ ^") as{TypeError} core::String;
(core::String) → core::String l4 = (core::String x) → core::String => x.{core::String::substring}(3);
}
}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
index 1c86887..4d7dbdf 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
@@ -25,24 +25,54 @@
static method test() → void {
new self::F0::•<core::int>(<core::int>[]);
new self::F0::•<core::int>(<core::int>[3]);
- new self::F0::•<core::int>(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n ^"]);
- new self::F0::•<core::int>(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3]);
+ new self::F0::•<core::int>(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+ ^"]);
+ new self::F0::•<core::int>(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3]);
new self::F1::•<core::int>(a: <core::int>[]);
new self::F1::•<core::int>(a: <core::int>[3]);
- new self::F1::•<core::int>(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n ^"]);
- new self::F1::•<core::int>(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3]);
+ new self::F1::•<core::int>(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+ ^"]);
+ new self::F1::•<core::int>(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3]);
new self::F2::•<core::int>(<core::int>[]);
new self::F2::•<core::int>(<core::int>[3]);
- new self::F2::•<core::int>(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n ^"]);
- new self::F2::•<core::int>(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3]);
+ new self::F2::•<core::int>(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+ ^"]);
+ new self::F2::•<core::int>(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3]);
new self::F3::•<core::int>(<core::Iterable<core::int>>[]);
new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[3]]);
- new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n ^"]]);
- new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n ^"], <core::int>[3]]);
+ new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+ ^"]]);
+ new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+ ^"], <core::int>[3]]);
new self::F4::•<core::int>(a: <core::Iterable<core::int>>[]);
new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[3]]);
- new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n ^"]]);
- new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n ^"], <core::int>[3]]);
+ new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+ ^"]]);
+ new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+ ^"], <core::int>[3]]);
new self::F3::•<dynamic>(<core::Iterable<dynamic>>[]);
self::F3<core::int> f31 = new self::F3::•<core::int>(<core::List<core::int>>[<core::int>[3]]);
self::F3<core::String> f32 = new self::F3::•<core::String>(<core::List<core::String>>[<core::String>["hello"]]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
index 0322edf..024b075 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
@@ -9,10 +9,19 @@
<S extends core::Object>(core::int) → core::String v = f;
v = <T extends core::Object>(core::int x) → core::Null => null;
v = <T extends core::Object>(core::int x) → core::String => "hello";
- v = let final dynamic #t1 = <T extends core::Object>(core::String x) → core::String => "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\n v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>\n ^";
- v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t2 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;\n ^";
+ v = let final dynamic #t1 = <T extends core::Object>(core::String x) → core::String => "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.
+ v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
+ ^";
+ v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t2 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+ ^";
v = <T extends core::Object>(core::int x) → core::String {
- return let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n ^";
+ return let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+ ^";
};
}
{
@@ -21,12 +30,21 @@
<S extends core::Object>(core::int) → core::String v = f;
v = <T extends core::Object>(core::int x) → core::Null => null;
v = <T extends core::Object>(core::int x) → core::String => "hello";
- v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n 3;\n ^";
+ v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ 3;
+ ^";
v = <T extends core::Object>(core::int x) → core::String {
- return let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n ^";
+ return let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+ ^";
};
v = <T extends core::Object>(core::int x) → core::String {
- return let final dynamic #t6 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n return /*error:RETURN_OF_INVALID_TYPE*/ x;\n ^";
+ return let final dynamic #t6 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ return /*error:RETURN_OF_INVALID_TYPE*/ x;
+ ^";
};
}
{
@@ -35,10 +53,19 @@
<S extends core::Object>(core::int) → core::List<core::String> v = f;
v = <T extends core::Object>(core::int x) → core::Null => null;
v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>["hello"];
- v = let final dynamic #t7 = <T extends core::Object>(core::String x) → core::List<core::String> => <core::String>["hello"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\n v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String\n ^";
- v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n ^"];
+ v = let final dynamic #t7 = <T extends core::Object>(core::String x) → core::List<core::String> => <core::String>["hello"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+ v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+ ^";
+ v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"];
v = <T extends core::Object>(core::int x) → core::List<core::String> {
- return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n ^"];
+ return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"];
};
}
{
@@ -52,8 +79,14 @@
x = <T extends core::Object>(core::int x) → core::int => x;
x = <T extends core::Object>(core::int x) → core::int => x.{core::num::+}(1);
<T extends core::Object>(core::int) → core::String y = int2String;
- y = <T extends core::Object>(core::int x) → core::String => let final dynamic #t10 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n x;\n ^";
- y = <T extends core::Object>(core::int x) → core::String => (let final dynamic #t11 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'dart.core::int'.\nTry correcting the name to the name of an existing method, or defining a method named 'substring'.\n .substring(3);\n ^") as{TypeError} core::String;
+ y = <T extends core::Object>(core::int x) → core::String => let final dynamic #t10 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ x;
+ ^";
+ y = <T extends core::Object>(core::int x) → core::String => (let final dynamic #t11 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
+Try correcting the name to the name of an existing method, or defining a method named 'substring'.
+ .substring(3);
+ ^") as{TypeError} core::String;
<T extends core::Object>(core::String) → core::String z = string2String;
z = <T extends core::Object>(core::String x) → core::String => x.{core::String::substring}(3);
}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
index 251b409..58de7fb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
@@ -56,59 +56,134 @@
self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(3, "hello");
self::A<core::int, core::String> a2 = new self::A::•<core::int, core::String>(3, "hello");
self::A<core::int, core::String> a3 = new self::A::named<core::int, core::String>(3, "hello");
- self::A<core::int, core::String> a4 = let final dynamic #t1 = new self::A::•<core::int, dynamic>(3, "hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.\nChange the type of the object being constructed or the context in which it is used.\n a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");\n ^";
- self::A<core::int, core::String> a5 = let final dynamic #t2 = new self::A::named<dynamic, dynamic>(3, "hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.\nChange the type of the object being constructed or the context in which it is used.\n a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(\n ^";
+ self::A<core::int, core::String> a4 = let final dynamic #t1 = new self::A::•<core::int, dynamic>(3, "hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+Change the type of the object being constructed or the context in which it is used.
+ a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
+ ^";
+ self::A<core::int, core::String> a5 = let final dynamic #t2 = new self::A::named<dynamic, dynamic>(3, "hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+Change the type of the object being constructed or the context in which it is used.
+ a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
+ ^";
}
{
- self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n ^");
- self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", let final dynamic #t6 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n ^");
+ self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+ ^");
+ self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", let final dynamic #t6 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+ ^");
}
{
self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>("hello", 3);
self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>("hello", 3);
self::A<core::int, core::String> a2 = new self::B::•<core::String, core::int>("hello", 3);
self::A<core::int, core::String> a3 = new self::B::named<core::String, core::int>("hello", 3);
- self::A<core::int, core::String> a4 = let final dynamic #t7 = new self::B::•<core::String, dynamic>("hello", 3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);\n ^";
- self::A<core::int, core::String> a5 = let final dynamic #t8 = new self::B::named<dynamic, dynamic>("hello", 3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(\n ^";
+ self::A<core::int, core::String> a4 = let final dynamic #t7 = new self::B::•<core::String, dynamic>("hello", 3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+ a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
+ ^";
+ self::A<core::int, core::String> a5 = let final dynamic #t8 = new self::B::named<dynamic, dynamic>("hello", 3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+ a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
+ ^";
}
{
- self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,\n ^", let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n ^");
- self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let final dynamic #t11 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,\n ^", let final dynamic #t12 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n ^");
+ self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
+ ^", let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+ ^");
+ self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let final dynamic #t11 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
+ ^", let final dynamic #t12 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+ ^");
}
{
self::A<core::int, core::int> a0 = new self::C::•<core::int>(3);
self::A<core::int, core::int> a1 = new self::C::named<core::int>(3);
self::A<core::int, core::int> a2 = new self::C::•<core::int>(3);
self::A<core::int, core::int> a3 = new self::C::named<core::int>(3);
- self::A<core::int, core::int> a4 = let final dynamic #t13 = new self::C::•<dynamic>(3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.\n A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);\n ^";
- self::A<core::int, core::int> a5 = let final dynamic #t14 = new self::C::named<dynamic>(3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.\n A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);\n ^";
+ self::A<core::int, core::int> a4 = let final dynamic #t13 = new self::C::•<dynamic>(3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
+ A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
+ ^";
+ self::A<core::int, core::int> a5 = let final dynamic #t14 = new self::C::named<dynamic>(3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
+ A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
+ ^";
}
{
- self::A<core::int, core::int> a0 = new self::C::•<core::int>(let final dynamic #t15 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n ^");
- self::A<core::int, core::int> a1 = new self::C::named<core::int>(let final dynamic #t16 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n ^");
+ self::A<core::int, core::int> a0 = new self::C::•<core::int>(let final dynamic #t15 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+ ^");
+ self::A<core::int, core::int> a1 = new self::C::named<core::int>(let final dynamic #t16 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+ ^");
}
{
self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>("hello");
self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>("hello");
self::A<core::int, core::String> a2 = new self::D::•<core::int, core::String>("hello");
self::A<core::int, core::String> a3 = new self::D::named<core::String, core::String>("hello");
- self::A<core::int, core::String> a4 = let final dynamic #t17 = new self::D::•<core::num, dynamic>("hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");\n ^";
- self::A<core::int, core::String> a5 = let final dynamic #t18 = new self::D::named<dynamic, dynamic>("hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(\n ^";
+ self::A<core::int, core::String> a4 = let final dynamic #t17 = new self::D::•<core::num, dynamic>("hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+ a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
+ ^";
+ self::A<core::int, core::String> a5 = let final dynamic #t18 = new self::D::named<dynamic, dynamic>("hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+ a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
+ ^";
}
{
- self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let final dynamic #t19 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n ^");
- self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let final dynamic #t20 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n ^");
+ self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let final dynamic #t19 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+ ^");
+ self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let final dynamic #t20 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+ ^");
}
{
self::A<self::C<core::int>, core::String> a0 = new self::E::•<core::int, core::String>("hello");
}
{
self::A<core::int, core::String> a0 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[3], b: <core::String>["hello"]);
- self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let final dynamic #t21 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n ^"], b: <core::String>[let final dynamic #t22 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n ^"]);
+ self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let final dynamic #t21 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+ ^"], b: <core::String>[let final dynamic #t22 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"]);
self::A<core::int, core::String> a2 = new self::F::named<core::int, core::String>(3, "hello", 3, "hello");
self::A<core::int, core::String> a3 = new self::F::named<core::int, core::String>(3, "hello");
- self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t23 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", let final dynamic #t24 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n ^");
- self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t25 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n ^");
+ self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t23 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", let final dynamic #t24 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+ ^");
+ self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t25 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+ ^");
}
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
index 682efdc..741fe3a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
@@ -2,13 +2,22 @@
import self as self;
import "dart:core" as core;
-static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let final dynamic #t1 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42\n ^"]]) → void {}
+static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let final dynamic #t1 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+ ^"]]) → void {}
static method main() → void {
{
core::List<core::int> l0 = <core::int>[];
core::List<core::int> l1 = <core::int>[3];
- core::List<core::int> l2 = <core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n ^"];
- core::List<core::int> l3 = <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3];
+ core::List<core::int> l2 = <core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+ ^"];
+ core::List<core::int> l3 = <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3];
}
{
core::List<dynamic> l0 = <dynamic>[];
@@ -17,21 +26,51 @@
core::List<dynamic> l3 = <dynamic>["hello", 3];
}
{
- core::List<core::int> l0 = let final dynamic #t4 = <core::num>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.\nChange the type of the list literal or the context in which it is used.\n List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];\n ^";
- core::List<core::int> l1 = let final dynamic #t5 = <core::num>[3] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.\nChange the type of the list literal or the context in which it is used.\n List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];\n ^";
- core::List<core::int> l2 = let final dynamic #t6 = <core::num>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n ^"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.\nChange the type of the list literal or the context in which it is used.\n List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[\n ^";
- core::List<core::int> l3 = let final dynamic #t8 = <core::num>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.\nChange the type of the list literal or the context in which it is used.\n List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[\n ^";
+ core::List<core::int> l0 = let final dynamic #t4 = <core::num>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+Change the type of the list literal or the context in which it is used.
+ List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+ ^";
+ core::List<core::int> l1 = let final dynamic #t5 = <core::num>[3] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+Change the type of the list literal or the context in which it is used.
+ List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+ ^";
+ core::List<core::int> l2 = let final dynamic #t6 = <core::num>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+ ^"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+Change the type of the list literal or the context in which it is used.
+ List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+ ^";
+ core::List<core::int> l3 = let final dynamic #t8 = <core::num>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+Change the type of the list literal or the context in which it is used.
+ List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+ ^";
}
{
core::Iterable<core::int> i0 = <core::int>[];
core::Iterable<core::int> i1 = <core::int>[3];
- core::Iterable<core::int> i2 = <core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n ^"];
- core::Iterable<core::int> i3 = <core::int>[let final dynamic #t11 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3];
+ core::Iterable<core::int> i2 = <core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+ ^"];
+ core::Iterable<core::int> i3 = <core::int>[let final dynamic #t11 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3];
}
{
const core::List<core::int> c0 = const <core::int>[];
const core::List<core::int> c1 = const <core::int>[3];
- const core::List<core::int> c2 = const <core::int>[let final dynamic #t12 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n ^"];
- const core::List<core::int> c3 = const <core::int>[let final dynamic #t13 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n ^", 3];
+ const core::List<core::int> c2 = const <core::int>[let final dynamic #t12 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+ ^"];
+ const core::List<core::int> c3 = const <core::int>[let final dynamic #t13 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+ ^", 3];
}
}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
index b13ab72..d56b390 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
@@ -2,14 +2,29 @@
import self as self;
import "dart:core" as core;
-static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n ^": "world"}]) → void {}
+static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+ ^": "world"}]) → void {}
static method test() → void {
{
core::Map<core::int, core::String> l0 = <core::int, core::String>{};
core::Map<core::int, core::String> l1 = <core::int, core::String>{3: "hello"};
- core::Map<core::int, core::String> l2 = <core::int, core::String>{let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"\n ^": "hello"};
- core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n ^"};
- core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n ^": let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n ^"};
+ core::Map<core::int, core::String> l2 = <core::int, core::String>{let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+ ^": "hello"};
+ core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"};
+ core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+ ^": let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"};
}
{
core::Map<dynamic, dynamic> l0 = <dynamic, dynamic>{};
@@ -22,27 +37,60 @@
core::Map<dynamic, core::String> l0 = <dynamic, core::String>{};
core::Map<dynamic, core::String> l1 = <dynamic, core::String>{3: "hello"};
core::Map<dynamic, core::String> l2 = <dynamic, core::String>{"hello": "hello"};
- core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let final dynamic #t6 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n ^"};
- core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let final dynamic #t7 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n ^"};
+ core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let final dynamic #t6 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"};
+ core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let final dynamic #t7 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"};
}
{
core::Map<core::int, dynamic> l0 = <core::int, dynamic>{};
core::Map<core::int, dynamic> l1 = <core::int, dynamic>{3: "hello"};
- core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"\n ^": "hello"};
+ core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+ ^": "hello"};
core::Map<core::int, dynamic> l3 = <core::int, dynamic>{3: 3};
- core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3\n ^": 3};
+ core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
+ ^": 3};
}
{
- core::Map<core::int, core::String> l0 = let final dynamic #t10 = <core::num, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.\nChange the type of the map literal or the context in which it is used.\n Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};\n ^";
- core::Map<core::int, core::String> l1 = let final dynamic #t11 = <core::num, dynamic>{3: "hello"} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.\nChange the type of the map literal or the context in which it is used.\n Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{\n ^";
- core::Map<core::int, core::String> l3 = let final dynamic #t12 = <core::num, dynamic>{3: 3} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.\nChange the type of the map literal or the context in which it is used.\n Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{\n ^";
+ core::Map<core::int, core::String> l0 = let final dynamic #t10 = <core::num, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+Change the type of the map literal or the context in which it is used.
+ Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+ ^";
+ core::Map<core::int, core::String> l1 = let final dynamic #t11 = <core::num, dynamic>{3: "hello"} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+Change the type of the map literal or the context in which it is used.
+ Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+ ^";
+ core::Map<core::int, core::String> l3 = let final dynamic #t12 = <core::num, dynamic>{3: 3} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+Change the type of the map literal or the context in which it is used.
+ Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+ ^";
}
{
const core::Map<core::int, core::String> l0 = const <core::int, core::String>{};
const core::Map<core::int, core::String> l1 = const <core::int, core::String>{3: "hello"};
- const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let final dynamic #t13 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n ^": "hello"};
- const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let final dynamic #t14 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n ^"};
- const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let final dynamic #t15 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n ^": let final dynamic #t16 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n ^"};
+ const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let final dynamic #t13 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+ ^": "hello"};
+ const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let final dynamic #t14 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"};
+ const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let final dynamic #t15 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+ ^": let final dynamic #t16 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+ ^"};
}
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
index abcd30c..1e89b94 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
@@ -9,14 +9,26 @@
}
static method foo() → asy::Stream<core::List<core::int>> async* {
yield<core::int>[];
- yield let final dynamic #t1 = self::MyStream::•<dynamic>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dart.core::int>'.\n yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();\n ^";
- yield* let final dynamic #t2 = <dynamic>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dart.core::List<dart.core::int>>'.\n yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];\n ^";
+ yield let final dynamic #t1 = self::MyStream::•<dynamic>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dart.core::int>'.
+ yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();
+ ^";
+ yield* let final dynamic #t2 = <dynamic>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dart.core::List<dart.core::int>>'.
+ yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
+ ^";
yield* self::MyStream::•<core::List<core::int>>();
}
static method bar() → core::Iterable<core::Map<core::int, core::int>> sync* {
yield<core::int, core::int>{};
- yield let final dynamic #t3 = core::List::•<dynamic>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dart.core::int, dart.core::int>'.\n yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();\n ^";
- yield* let final dynamic #t4 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.\n yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic, dynamic*/ {};\n ^";
+ yield let final dynamic #t3 = core::List::•<dynamic>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dart.core::int, dart.core::int>'.
+ yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();
+ ^";
+ yield* let final dynamic #t4 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
+ yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic, dynamic*/ {};
+ ^";
yield* core::List::•<core::Map<core::int, core::int>>();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
index 90b2c64..bdb3e4c 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
@@ -14,7 +14,10 @@
}
static method main() → void {
self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
- asy::Future<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.\n Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;\n ^";
+ asy::Future<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
+ Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+ ^";
asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3) as asy::Future<core::double>;
}
static method foo() → self::MyFuture<dynamic>
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
index c13378b..ac234d7 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
@@ -14,7 +14,10 @@
}
static method main() → void {
self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
- self::MyFuture<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::MyFuture<dart.core::int>'.\n MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;\n ^";
+ self::MyFuture<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::MyFuture<dart.core::int>'.
+ MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+ ^";
self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3) as self::MyFuture<core::double>;
}
static method foo() → self::MyFuture<dynamic>
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
index 7885101..8218490 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
@@ -14,7 +14,10 @@
}
static method test() → void {
asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3);
- asy::Future<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.\n Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;\n ^";
+ asy::Future<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
+ Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+ ^";
asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3) as asy::Future<core::double>;
}
static method foo() → asy::Future<dynamic>
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
index c7158f8f..8cdf437 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
@@ -13,7 +13,10 @@
return null;
}
static field self::MyFuture<dynamic> f;
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.\n new /*@typeArgs=int*/ Future.value('hi'));\n ^"));
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.
+ new /*@typeArgs=int*/ Future.value('hi'));
+ ^"));
static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]);
static method g2() → asy::Future<core::List<core::int>> async {
return <core::int>[3];
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
index c135f5a..9ab33f7 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
@@ -13,7 +13,10 @@
return null;
}
static field asy::Future<dynamic> f;
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.\n new /*@typeArgs=int*/ Future.value('hi'));\n ^"));
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.
+ new /*@typeArgs=int*/ Future.value('hi'));
+ ^"));
static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]);
static method g2() → asy::Future<core::List<core::int>> async {
return <core::int>[3];
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
index 9f39d90..0b1e57b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
@@ -16,10 +16,28 @@
self::printDouble(math::min<core::double>(1.0, 2.0));
self::printInt(self::myMax(1, 2) as{TypeError} core::int);
self::printInt(self::myMax(1, 2) as core::int);
- self::printInt(math::max<core::int>(1, let final dynamic #t1 = 2.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:29:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));\n ^"));
- self::printInt(math::min<core::int>(1, let final dynamic #t2 = 2.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:31:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*@typeArgs=int*/ min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));\n ^"));
- self::printDouble(math::max<core::double>(let final dynamic #t3 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:33:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n /*@typeArgs=double*/ max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));\n ^", 2.0));
- self::printDouble(math::min<core::double>(let final dynamic #t4 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:35:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n /*@typeArgs=double*/ min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));\n ^", 2.0));
- self::printInt(math::min<core::int>(let final dynamic #t5 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hi\",\n ^", let final dynamic #t6 = "there" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:40:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"there\"));\n ^"));
+ self::printInt(math::max<core::int>(1, let final dynamic #t1 = 2.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:29:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));
+ ^"));
+ self::printInt(math::min<core::int>(1, let final dynamic #t2 = 2.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:31:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*@typeArgs=int*/ min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));
+ ^"));
+ self::printDouble(math::max<core::double>(let final dynamic #t3 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:33:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ /*@typeArgs=double*/ max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));
+ ^", 2.0));
+ self::printDouble(math::min<core::double>(let final dynamic #t4 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:35:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ /*@typeArgs=double*/ min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));
+ ^", 2.0));
+ self::printInt(math::min<core::int>(let final dynamic #t5 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hi\",
+ ^", let final dynamic #t6 = "there" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:40:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"there\"));
+ ^"));
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
index 32898c1..8514bf6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
@@ -16,7 +16,12 @@
method m(dynamic x) → dynamic
return x;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.\n/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(\n ^", "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: The return type of the method 'D::m' is dynamic, which does not match the return type of the overridden method (test::C::m::T).\nChange to a subtype of test::C::m::T.\n/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.
+/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
+ ^", "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: The return type of the method 'D::m' is dynamic, which does not match the return type of the overridden method (test::C::m::T).
+Change to a subtype of test::C::m::T.
+/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
+ ^"]/* from null */;
static method main() → dynamic {
core::int y = new self::D::•().{self::D::m}<core::int>(42) as{TypeError} core::int;
core::print(y);
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
index 159630d..71d37ab 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
@@ -6,6 +6,9 @@
return null;
static method test() → dynamic {
core::String x = self::f<core::String>(<core::String>["hi"]);
- core::String y = self::f<core::String>(<core::String>[let final dynamic #t1 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);\n ^"]);
+ core::String y = self::f<core::String>(<core::String>[let final dynamic #t1 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+ ^"]);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
index ddc01f1..db0f902 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
@@ -20,7 +20,17 @@
method g<T extends core::Object>(self::D::g::T x) → self::D::g::T
return x;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:46: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.\n T /*@error=OverrideTypeVariablesMismatch*/ m<T>(\n ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:54: Error: The parameter 'x' of the method 'D::m' has type test::D::m::T, which does not match the corresponding type in the overridden method (dynamic).\nChange to a supertype of dynamic (or, for a covariant parameter, a subtype).\n T /*@error=OverrideTypeMismatchParameter*/ x) =>\n ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:17:46: Error: Declared type variables of 'D::g' doesn't match those on overridden method 'C::g'.\n T /*@error=OverrideTypeVariablesMismatch*/ g<T>(\n ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:18:54: Error: The parameter 'x' of the method 'D::g' has type test::D::g::T, which does not match the corresponding type in the overridden method (dart.core::int).\nChange to a supertype of dart.core::int (or, for a covariant parameter, a subtype).\n T /*@error=OverrideTypeMismatchParameter*/ x) =>\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:46: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.
+ T /*@error=OverrideTypeVariablesMismatch*/ m<T>(
+ ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:54: Error: The parameter 'x' of the method 'D::m' has type test::D::m::T, which does not match the corresponding type in the overridden method (dynamic).
+Change to a supertype of dynamic (or, for a covariant parameter, a subtype).
+ T /*@error=OverrideTypeMismatchParameter*/ x) =>
+ ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:17:46: Error: Declared type variables of 'D::g' doesn't match those on overridden method 'C::g'.
+ T /*@error=OverrideTypeVariablesMismatch*/ g<T>(
+ ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:18:54: Error: The parameter 'x' of the method 'D::g' has type test::D::g::T, which does not match the corresponding type in the overridden method (dart.core::int).
+Change to a supertype of dart.core::int (or, for a covariant parameter, a subtype).
+ T /*@error=OverrideTypeMismatchParameter*/ x) =>
+ ^"]/* from null */;
static method main() → dynamic {
core::int y = (new self::D::•() as self::C).{self::C::m}(42) as{TypeError} core::int;
core::print(y);
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
index 59579ba..138df56 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
@@ -21,8 +21,14 @@
self::takeIIO(math::max<core::int>);
self::takeDDO(math::max<core::double>);
self::takeOOI((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
- self::takeIDI(let final dynamic #t1 = math::max<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\n /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);\n ^");
- self::takeDID(let final dynamic #t2 = math::max<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\n /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);\n ^");
+ self::takeIDI(let final dynamic #t1 = math::max<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+ /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+ ^");
+ self::takeDID(let final dynamic #t2 = math::max<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+ /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+ ^");
self::takeOON((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
self::takeOOO((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
self::takeIII(math::min<core::int>);
@@ -35,8 +41,14 @@
self::takeIIO(math::min<core::int>);
self::takeDDO(math::min<core::double>);
self::takeOOI((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
- self::takeIDI(let final dynamic #t3 = math::min<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\n takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);\n ^");
- self::takeDID(let final dynamic #t4 = math::min<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\n takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);\n ^");
+ self::takeIDI(let final dynamic #t3 = math::min<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+ takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+ ^");
+ self::takeDID(let final dynamic #t4 = math::min<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+ takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+ ^");
self::takeOON((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
self::takeOOO((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
self::takeIII(new self::C::•().{self::C::m}<core::int>);
@@ -51,8 +63,14 @@
self::takeOON((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
self::takeOOO((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
self::takeOOI((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
- self::takeIDI(let final dynamic #t5 = new self::C::•().{self::C::m}<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\n . /*@target=C::m*/ m);\n ^");
- self::takeDID(let final dynamic #t6 = new self::C::•().{self::C::m}<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\n . /*@target=C::m*/ m);\n ^");
+ self::takeIDI(let final dynamic #t5 = new self::C::•().{self::C::m}<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+ . /*@target=C::m*/ m);
+ ^");
+ self::takeDID(let final dynamic #t6 = new self::C::•().{self::C::m}<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+ . /*@target=C::m*/ m);
+ ^");
}
static method takeIII((core::int, core::int) → core::int fn) → void {}
static method takeDDD((core::double, core::double) → core::double fn) → void {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
index 07fd5ca..a11e34a 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
@@ -4,6 +4,9 @@
static method f() → void {
core::List<core::String> y;
- core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let final dynamic #t1 = 1.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n 1.0);\n ^");
+ core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let final dynamic #t1 = 1.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ 1.0);
+ ^");
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
index 38c148a..478b5a6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
@@ -8,8 +8,14 @@
static method test() → dynamic {
core::Iterable<asy::Future<core::int>> list = <core::int>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int>>(self::make);
asy::Future<core::List<core::int>> results = asy::Future::wait<core::int>(list);
- asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", (asy::FutureOr<core::String> x, core::int y) → asy::FutureOr<core::String> => (let final dynamic #t1 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The method '+' isn't defined for the class 'dart.async::FutureOr<dart.core::String>'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +\n ^") as{TypeError} asy::FutureOr<core::String>));
- asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", let final dynamic #t2 = (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: A value of type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.\n /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String\n ^"));
+ asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", (asy::FutureOr<core::String> x, core::int y) → asy::FutureOr<core::String> => (let final dynamic #t1 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The method '+' isn't defined for the class 'dart.async::FutureOr<dart.core::String>'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+ ^") as{TypeError} asy::FutureOr<core::String>));
+ asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", let final dynamic #t2 = (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: A value of type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
+ /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
+ ^"));
asy::Future<core::String> results4 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → core::String => list.{core::Iterable::fold}<core::String>("", (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}())));
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
index 729c29c..c82ec9e 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
@@ -23,12 +23,21 @@
core::String s;
core::int i;
s = new self::B::•().{self::B::x} as{TypeError} core::String;
- s = let final dynamic #t1 = new self::B::•().{self::B::y} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;\n ^";
+ s = let final dynamic #t1 = new self::B::•().{self::B::y} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
+ ^";
s = new self::B::•().{self::B::z};
- s = let final dynamic #t2 = new self::B::•().{self::B::w} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;\n ^";
+ s = let final dynamic #t2 = new self::B::•().{self::B::w} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
+ ^";
i = new self::B::•().{self::B::x} as{TypeError} core::int;
i = new self::B::•().{self::B::y};
- i = let final dynamic #t3 = new self::B::•().{self::B::z} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;\n ^";
+ i = let final dynamic #t3 = new self::B::•().{self::B::z} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
+ ^";
i = new self::B::•().{self::B::w};
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
index 10d7729..d7a5129 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
@@ -50,5 +50,14 @@
: super self::C::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:79: Error: Can't infer the type of 'x': overridden members must all have the same type.\nSpecify the type explicitly.\n var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;\n ^", "pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:79: Error: Can't infer the type of 'x': overridden members must all have the same type.\nSpecify the type explicitly.\n var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;\n ^", "pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:79: Error: Can't infer the type of 'x': overridden members must all have the same type.\nSpecify the type explicitly.\n var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:79: Error: Can't infer the type of 'x': overridden members must all have the same type.
+Specify the type explicitly.
+ var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
+ ^", "pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:79: Error: Can't infer the type of 'x': overridden members must all have the same type.
+Specify the type explicitly.
+ var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
+ ^", "pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:79: Error: Can't infer the type of 'x': overridden members must all have the same type.
+Specify the type explicitly.
+ var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
index 0ee04be..f10837a 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
@@ -24,31 +24,71 @@
static field core::int f = 2.{core::num::+}(3);
static field core::int g = 3.{core::int::unary-}();
static field self::B h = new self::A::•().{self::A::+}(3);
-static field dynamic i = let final dynamic #t3 = new self::A::•() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:34:79: Error: The method 'unary-' isn't defined for the class 'test::A'.\nTry correcting the name to the name of an existing method, or defining a method named 'unary-'.\nvar /*@topType=dynamic*/ i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();\n ^";
+static field dynamic i = let final dynamic #t3 = new self::A::•() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:34:79: Error: The method 'unary-' isn't defined for the class 'test::A'.
+Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+var /*@topType=dynamic*/ i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
+ ^";
static field self::B j = null as self::B;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:61: Error: Getter not found: 'x'.\nvar /*@topType=B*/ b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations\n ^", "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.\n /*error:UNDEFINED_IDENTIFIER*/ x\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:61: Error: Getter not found: 'x'.
+var /*@topType=B*/ b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
+ ^", "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.
+ /*error:UNDEFINED_IDENTIFIER*/ x
+ ^"]/* from null */;
static method test1() → dynamic {
- self::a = let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\n a = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ self::a = let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+ a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
self::a = new self::B::•(3);
- self::b = let final dynamic #t5 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n b = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ self::b = let final dynamic #t5 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+ b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
self::b = new self::B::•(3);
self::c1 = <dynamic>[];
- self::c1 = let final dynamic #t6 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.\n c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};\n ^";
+ self::c1 = let final dynamic #t6 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
+ c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+ ^";
self::c2 = <dynamic>[];
- self::c2 = let final dynamic #t7 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.\n c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};\n ^";
+ self::c2 = let final dynamic #t7 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
+ c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+ ^";
self::d = <dynamic, dynamic>{};
- self::d = let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dynamic, dynamic>'.\n d = /*error:INVALID_ASSIGNMENT*/ 3;\n ^";
+ self::d = let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dynamic, dynamic>'.
+ d = /*error:INVALID_ASSIGNMENT*/ 3;
+ ^";
self::e = new self::A::•();
- self::e = let final dynamic #t9 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\n e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};\n ^";
+ self::e = let final dynamic #t9 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+ e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+ ^";
self::f = 3;
- self::f = let final dynamic #t10 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n f = /*error:INVALID_ASSIGNMENT*/ false;\n ^";
+ self::f = let final dynamic #t10 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ f = /*error:INVALID_ASSIGNMENT*/ false;
+ ^";
self::g = 1;
- self::g = let final dynamic #t11 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n g = /*error:INVALID_ASSIGNMENT*/ false;\n ^";
- self::h = let final dynamic #t12 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n h = /*error:INVALID_ASSIGNMENT*/ false;\n ^";
+ self::g = let final dynamic #t11 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ g = /*error:INVALID_ASSIGNMENT*/ false;
+ ^";
+ self::h = let final dynamic #t12 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+ h = /*error:INVALID_ASSIGNMENT*/ false;
+ ^";
self::h = new self::B::•("b");
self::i = false;
self::j = new self::B::•("b");
- self::j = let final dynamic #t13 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n j = /*error:INVALID_ASSIGNMENT*/ false;\n ^";
- self::j = let final dynamic #t14 = <dynamic>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];\n ^";
+ self::j = let final dynamic #t13 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+ j = /*error:INVALID_ASSIGNMENT*/ false;
+ ^";
+ self::j = let final dynamic #t14 = <dynamic>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+ j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
index 8240108..9a2fd7b 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
@@ -5,7 +5,13 @@
static field core::int y = inf::x;
static method test1() → dynamic {
- inf::x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
- self::y = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n y = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ inf::x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
+ self::y = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
index b7577f1..ec6bb1e 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
@@ -10,7 +10,13 @@
;
}
static method test1() → dynamic {
- inf::A::x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
- self::B::y = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ inf::A::x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
+ self::B::y = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
index 3d75d52..b71b402 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
@@ -2,11 +2,15 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.\n /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.
+ /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+ ^"]/* from null */;
static method test() → dynamic {
function f() → dynamic
return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
- invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.\n g() => 0;\n ^";
+ invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
+ g() => 0;
+ ^";
dynamic v = f;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
index 292334d..6343ea9 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
@@ -2,11 +2,17 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Method not found: 'g'.\n /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();\n ^", "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.\n /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Method not found: 'g'.
+ /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+ ^", "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.
+ /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+ ^"]/* from null */;
static method test() → dynamic {
function f() → dynamic
return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
- invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.\n g() => 0;\n ^";
+ invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
+ g() => 0;
+ ^";
() → dynamic v = f;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
index 97b8ef2..b1c4e7f 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
@@ -26,5 +26,16 @@
abstract method g(core::int x, [dynamic y = null]) → core::int;
abstract method h(core::int x, {dynamic y = null}) → core::int;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:79: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y);\n ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:29:80: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n {/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y});\n ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:27:80: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n [/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y]);\n ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:61: Error: The method 'C::f' has more required arguments than those of overridden method 'B::f'.\n /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:79: Error: Can't infer the type of 'y': overridden members must all have the same type.
+Specify the type explicitly.
+ /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y);
+ ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:29:80: Error: Can't infer the type of 'y': overridden members must all have the same type.
+Specify the type explicitly.
+ {/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y});
+ ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:27:80: Error: Can't infer the type of 'y': overridden members must all have the same type.
+Specify the type explicitly.
+ [/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y]);
+ ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:61: Error: The method 'C::f' has more required arguments than those of overridden method 'B::f'.
+ /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
index 834f9ea..fa17ad2 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
@@ -16,7 +16,10 @@
return 3;
}
static method foo() → dynamic {
- core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;\n ^";
+ core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
+ ^";
core::int z = new self::B::•().{self::B::x};
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
index e4288a1..45ce781 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
@@ -16,7 +16,10 @@
return 3;
}
static method foo() → dynamic {
- core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;\n ^";
+ core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
+ ^";
core::int z = new self::B::•().{self::B::x};
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
index 5808152..66fe036 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
@@ -4,6 +4,9 @@
static method test1() → dynamic {
core::int x = 3;
- x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
index 366198e..147a582 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
@@ -4,6 +4,9 @@
static method test2() → dynamic {
core::int x = 3;
- x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
index a9a4a29..1ed7c28 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
@@ -11,13 +11,22 @@
;
method test1() → dynamic {
core::int a = this.{self::A::x};
- a = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n a = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ a = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
a = 3;
core::int b = this.{self::A::y};
- b = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n b = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ b = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
b = 4;
core::int c = this.{self::A::z};
- c = let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n c = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ c = let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
c = 4;
}
}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
index 76876ca..637a3da 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
@@ -7,13 +7,22 @@
static final field core::int z = 42;
static method test1() → dynamic {
core::int a = self::x;
- a = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n a = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ a = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
a = 3;
core::int b = self::y;
- b = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n b = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ b = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
b = 4;
core::int c = self::z;
- c = let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n c = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ c = let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
c = 4;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
index 7775a27..a1338de 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
@@ -19,7 +19,10 @@
}
static method foo() → dynamic {
core::int y = new self::C::•().{self::C::x};
- core::String z = let final dynamic #t1 = new self::C::•().{self::C::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;\n ^";
+ core::String z = let final dynamic #t1 = new self::C::•().{self::C::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;
+ ^";
}
static method main() → dynamic {
self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
index 27998b1..0fce35c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
@@ -16,10 +16,16 @@
get x() → core::int
return 3;
get w() → core::int
- return let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n get /*@topType=int*/ w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";\n ^";
+ return let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ get /*@topType=int*/ w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
+ ^";
}
static method foo() → dynamic {
- core::String y = let final dynamic #t2 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;\n ^";
+ core::String y = let final dynamic #t2 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
+ ^";
core::int z = new self::B::•().{self::B::x};
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
index f7b87c6..81eb021 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
@@ -17,7 +17,10 @@
return this.{self::B::y};
}
static method foo() → dynamic {
- core::int y = let final dynamic #t1 = new self::B::•<core::String>().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B::x*/ x;\n ^";
+ core::int y = let final dynamic #t1 = new self::B::•<core::String>().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B::x*/ x;
+ ^";
core::String z = new self::B::•<core::String>().{self::B::x};
}
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
index b8b15d5..e9d2281 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
@@ -29,7 +29,10 @@
method m(dynamic a, (dynamic, self::B::E) → dynamic f) → core::String {}
}
static method foo() → dynamic {
- core::int y = let final dynamic #t1 = new self::B::•<dynamic>().{self::B::m}(null, null) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n . /*@target=B::m*/ m(null, null);\n ^";
+ core::int y = let final dynamic #t1 = new self::B::•<dynamic>().{self::B::m}(null, null) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ . /*@target=B::m*/ m(null, null);
+ ^";
core::String z = new self::B::•<dynamic>().{self::B::m}(null, null);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
index 74b6bdc..6cc6701 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
@@ -24,7 +24,10 @@
method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E> {}
}
static method foo() → dynamic {
- core::int y = let final dynamic #t1 = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n . /*@target=A::value*/ value;\n ^";
+ core::int y = let final dynamic #t1 = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ . /*@target=A::value*/ value;
+ ^";
core::String z = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value};
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
index 7e2bbc8..32d9436 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
@@ -14,7 +14,10 @@
;
method foo(generic-covariant-impl generic-covariant-interface self::Bar::T t) → void {
for (core::String i in t) {
- core::int x = let final dynamic #t1 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n int x = /*error:INVALID_ASSIGNMENT*/ i;\n ^";
+ core::int x = let final dynamic #t1 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ int x = /*error:INVALID_ASSIGNMENT*/ i;
+ ^";
}
}
}
@@ -24,7 +27,10 @@
;
method foo(generic-covariant-impl generic-covariant-interface self::Baz::S t) → void {
for (self::Baz::T i in t) {
- core::int x = let final dynamic #t2 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n int x = /*error:INVALID_ASSIGNMENT*/ i;\n ^";
+ core::int x = let final dynamic #t2 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ int x = /*error:INVALID_ASSIGNMENT*/ i;
+ ^";
self::Baz::T y = i;
}
}
@@ -32,13 +38,19 @@
static method test() → dynamic {
core::List<self::Foo> list = <self::Foo>[];
for (self::Foo x in list) {
- core::String y = let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n String y = /*error:INVALID_ASSIGNMENT*/ x;\n ^";
+ core::String y = let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ String y = /*error:INVALID_ASSIGNMENT*/ x;
+ ^";
}
for (dynamic x in list) {
core::String y = x as{TypeError} core::String;
}
for (final self::Foo #t4 in list) {
- core::String x = let final dynamic #t5 = #t4 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {\n ^";
+ core::String x = let final dynamic #t5 = #t4 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
+ ^";
core::String y = x;
}
dynamic z;
@@ -57,7 +69,10 @@
self::Foo y = x;
}
core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
- for (dynamic x in let final dynamic #t9 = map in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.\n for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {\n ^") {
+ for (dynamic x in let final dynamic #t9 = map in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
+ for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+ ^") {
core::String y = x as{TypeError} core::String;
}
for (core::String x in map.{core::Map::keys}) {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
index 242f2f4..50cce8f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
@@ -15,7 +15,10 @@
;
method foo(generic-covariant-impl generic-covariant-interface self::Bar::T t) → dynamic async {
await for (core::String i in t) {
- core::int x = let final dynamic #t1 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n int x = /*error:INVALID_ASSIGNMENT*/ i;\n ^";
+ core::int x = let final dynamic #t1 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ int x = /*error:INVALID_ASSIGNMENT*/ i;
+ ^";
}
}
}
@@ -25,7 +28,10 @@
;
method foo(generic-covariant-impl generic-covariant-interface self::Baz::S t) → dynamic async {
await for (self::Baz::T i in t) {
- core::int x = let final dynamic #t2 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n int x = /*error:INVALID_ASSIGNMENT*/ i;\n ^";
+ core::int x = let final dynamic #t2 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ int x = /*error:INVALID_ASSIGNMENT*/ i;
+ ^";
self::Baz::T y = i;
}
}
@@ -37,13 +43,19 @@
static method test() → dynamic async {
self::MyStream<self::Foo> myStream = self::MyStream::•<self::Foo>();
await for (self::Foo x in myStream) {
- core::String y = let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n String y = /*error:INVALID_ASSIGNMENT*/ x;\n ^";
+ core::String y = let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ String y = /*error:INVALID_ASSIGNMENT*/ x;
+ ^";
}
await for (dynamic x in myStream) {
core::String y = x as{TypeError} core::String;
}
await for (final self::Foo #t4 in myStream) {
- core::String x = let final dynamic #t5 = #t4 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {\n ^";
+ core::String x = let final dynamic #t5 = #t4 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
+ ^";
core::String y = x;
}
dynamic z;
@@ -62,7 +74,10 @@
self::Foo y = x;
}
core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
- await for (dynamic x in let final dynamic #t9 = map in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.\n await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {\n ^") {
+ await for (dynamic x in let final dynamic #t9 = map in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
+ await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+ ^") {
core::String y = x as{TypeError} core::String;
}
}
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
index eb2a83e..77bf377 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
@@ -4,7 +4,10 @@
class Foo extends core::Object {
field core::int x = 1;
- constructor •([core::int x = let final dynamic #t1 = "1" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);\n ^"]) → void
+ constructor •([core::int x = let final dynamic #t1 = "1" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
+ ^"]) → void
: self::Foo::x = x, super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
index 58cfa0a..d2cd058 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
@@ -4,14 +4,23 @@
static method test1() → dynamic {
core::List<core::int> x = <core::int>[1, 2, 3];
- x.{core::List::add}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n ^");
- x.{core::List::add}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);\n ^");
+ x.{core::List::add}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+ ^");
+ x.{core::List::add}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
+ ^");
x.{core::List::add}(4);
core::List<core::num> y = x;
}
static method test2() → dynamic {
core::List<core::num> x = <core::num>[1, 2.0, 3];
- x.{core::List::add}(let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n ^");
+ x.{core::List::add}(let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+ x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+ ^");
x.{core::List::add}(4.0);
core::List<core::int> y = x as{TypeError} core::List<core::int>;
}
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
index 821836d..a66913c 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
@@ -5,13 +5,22 @@
static field core::List<core::int> x1 = <core::int>[1, 2, 3];
static field core::List<core::num> x2 = <core::num>[1, 2.0, 3];
static method test1() → dynamic {
- self::x1.{core::List::add}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n ^");
- self::x1.{core::List::add}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);\n ^");
+ self::x1.{core::List::add}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+ ^");
+ self::x1.{core::List::add}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
+ ^");
self::x1.{core::List::add}(4);
core::List<core::num> y = self::x1;
}
static method test2() → dynamic {
- self::x2.{core::List::add}(let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n x2. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n ^");
+ self::x2.{core::List::add}(let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+ x2. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+ ^");
self::x2.{core::List::add}(4.0);
core::List<core::int> y = self::x2 as{TypeError} core::List<core::int>;
}
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
index 08b1d5d..1627953 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
@@ -9,7 +9,10 @@
return (core::int x) → core::int => x;
}
function b() → asy::Future<(core::int) → core::int> async {
- return let final dynamic #t1 = (dynamic x) → dynamic => x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\n return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;\n ^";
+ return let final dynamic #t1 = (dynamic x) → dynamic => x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+ return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
+ ^";
}
function c() → core::Iterable<(core::int) → core::int> sync* {
yield(core::int x) → core::int => x;
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
index b8f2535..cd3c271 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
@@ -5,17 +5,32 @@
static method test1() → dynamic {
core::Map<core::int, core::String> x = <core::int, core::String>{1: "x", 2: "y"};
x.{core::Map::[]=}(3, "z");
- x.{core::Map::[]=}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n ^", "w");
- x.{core::Map::[]=}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';\n ^", "u");
- x.{core::Map::[]=}(3, let final dynamic #t3 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n ^");
+ x.{core::Map::[]=}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+ ^", "w");
+ x.{core::Map::[]=}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+ ^", "u");
+ x.{core::Map::[]=}(3, let final dynamic #t3 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+ ^");
core::Map<core::num, core::String> y = x;
}
static method test2() → dynamic {
core::Map<core::num, core::Pattern> x = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
x.{core::Map::[]=}(3, "z");
- x.{core::Map::[]=}(let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n ^", "w");
+ x.{core::Map::[]=}(let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+ /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+ ^", "w");
x.{core::Map::[]=}(4.0, "u");
- x.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.\n x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n ^");
+ x.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
+ x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+ ^");
core::Pattern p = null;
x.{core::Map::[]=}(2, p);
core::Map<core::int, core::String> y = x as{TypeError} core::Map<core::int, core::String>;
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
index 8798304..8e54198 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
@@ -6,16 +6,31 @@
static field core::Map<core::num, core::Pattern> x2 = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
static method test1() → dynamic {
self::x1.{core::Map::[]=}(3, "z");
- self::x1.{core::Map::[]=}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n ^", "w");
- self::x1.{core::Map::[]=}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';\n ^", "u");
- self::x1.{core::Map::[]=}(3, let final dynamic #t3 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n x1 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n ^");
+ self::x1.{core::Map::[]=}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+ ^", "w");
+ self::x1.{core::Map::[]=}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+ ^", "u");
+ self::x1.{core::Map::[]=}(3, let final dynamic #t3 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ x1 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+ ^");
core::Map<core::num, core::String> y = self::x1;
}
static method test2() → dynamic {
self::x2.{core::Map::[]=}(3, "z");
- self::x2.{core::Map::[]=}(let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n x2 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n ^", "w");
+ self::x2.{core::Map::[]=}(let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+ x2 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+ ^", "w");
self::x2.{core::Map::[]=}(4.0, "u");
- self::x2.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.\n x2 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n ^");
+ self::x2.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
+ x2 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+ ^");
core::Pattern p = null;
self::x2.{core::Map::[]=}(2, p);
core::Map<core::int, core::String> y = self::x2 as{TypeError} core::Map<core::int, core::String>;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
index e7f862e..2613be2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
@@ -26,5 +26,7 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
index e7f862e..2613be2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
@@ -26,5 +26,7 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
index f0f0486..7928f75 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
@@ -26,5 +26,7 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+class /*@error=AmbiguousSupertypes*/ A extends Object
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
index f0f0486..7928f75 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
@@ -26,5 +26,7 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+class /*@error=AmbiguousSupertypes*/ A extends Object
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
index eb6188f..f3fb9a5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
@@ -26,5 +26,7 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
index eb6188f..f3fb9a5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
@@ -26,5 +26,7 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
index fa0b39f..ba12e18 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
@@ -26,5 +26,7 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
index fa0b39f..ba12e18 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
@@ -26,5 +26,7 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
index 1fd007a..89082f3 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
@@ -10,8 +10,14 @@
}
static method test5() → dynamic {
self::A a1 = new self::A::•();
- a1.{self::A::x} = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n a1. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ a1.{self::A::x} = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ a1. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
self::A a2 = new self::A::•();
- a2.{self::A::x} = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n a2. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n ^";
+ a2.{self::A::x} = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ a2. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
index e226c84..48cc6c8 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
@@ -7,7 +7,9 @@
: super core::Object::•()
;
set x(dynamic #synthetic) → void
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.\n void set x() {}\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.
+ void set x() {}
+ ^";
}
static method f(self::A a) → void {
dynamic x = a.x = 0;
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
index 9441461..d34e8a8 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
@@ -7,7 +7,9 @@
: super core::Object::•()
;
set x(dynamic #synthetic) → void
- let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.\n void set x() {}\n ^";
+ let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.
+ void set x() {}
+ ^";
}
static method f(self::A a) → void {
core::int x = a.{self::A::x} = 0;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
index 9deb7db..6b890da 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
@@ -8,7 +8,10 @@
return (core::int x) → core::int => x;
}
static method b() → asy::Future<(core::int) → core::int> async {
- return let final dynamic #t1 = (dynamic x) → dynamic => x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\n return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;\n ^";
+ return let final dynamic #t1 = (dynamic x) → dynamic => x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+ return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
+ ^";
}
static method c() → core::Iterable<(core::int) → core::int> sync* {
yield(core::int x) → core::int => x;
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
index 1634538..75a5d90 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
@@ -14,7 +14,17 @@
dynamic v5 = let final core::int #t1 = 0 in let final dynamic #t2 = self::f<dynamic>() in let final void #t3 = super.[]=(#t1, #t2) in #t2;
}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Error: Superclass has no method named 'foo'.\n var /*@type=dynamic*/ v1 = super.foo(/*@typeArgs=dynamic*/ f());\n ^", "pkg/front_end/testcases/inference/unresolved_super.dart:13:38: Error: Superclass has no getter named 'bar'.\n var /*@type=dynamic*/ v2 = super.bar;\n ^", "pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Error: Superclass has no method named '[]'.\n var /*@type=dynamic*/ v3 = super[0];\n ^", "pkg/front_end/testcases/inference/unresolved_super.dart:15:38: Error: Superclass has no setter named 'bar'.\n var /*@type=dynamic*/ v4 = super.bar = /*@typeArgs=dynamic*/ f();\n ^", "pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.\n var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Error: Superclass has no method named 'foo'.
+ var /*@type=dynamic*/ v1 = super.foo(/*@typeArgs=dynamic*/ f());
+ ^", "pkg/front_end/testcases/inference/unresolved_super.dart:13:38: Error: Superclass has no getter named 'bar'.
+ var /*@type=dynamic*/ v2 = super.bar;
+ ^", "pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Error: Superclass has no method named '[]'.
+ var /*@type=dynamic*/ v3 = super[0];
+ ^", "pkg/front_end/testcases/inference/unresolved_super.dart:15:38: Error: Superclass has no setter named 'bar'.
+ var /*@type=dynamic*/ v4 = super.bar = /*@typeArgs=dynamic*/ f();
+ ^", "pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.
+ var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();
+ ^"]/* from null */;
static method f<T extends core::Object>() → self::f::T
return null;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
index 8e902ec..b23bd77 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
@@ -16,5 +16,11 @@
static field dynamic c = () → dynamic => self::a.{self::A::f}<dynamic>(self::b);
static field () → () → core::int d = () → () → core::int => self::a.{self::A::f}<() → core::int>(self::e);
static field () → core::int e = () → core::int => self::a.{self::A::g}(self::d);
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:20:67: Error: Can't infer the type of 'c': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ c = /*@returnType=dynamic*/ () =>\n ^", "pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:67: Error: Can't infer the type of 'b': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:20:67: Error: Can't infer the type of 'c': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ c = /*@returnType=dynamic*/ () =>
+ ^", "pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:67: Error: Can't infer the type of 'b': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
index e86a790..8c0e3f3 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
@@ -11,5 +11,11 @@
static field core::num d = self::c.call();
static field () → core::double e = () → core::double => self::doubleValue.{core::double::+}(self::f);
static field core::double f = self::e.call();
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:67: Error: Can't infer the type of 'b': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = a();\n ^", "pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:67: Error: Can't infer the type of 'a': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ a = /*@returnType=num*/ () =>\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:67: Error: Can't infer the type of 'b': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = a();
+ ^", "pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:67: Error: Can't infer the type of 'a': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ a = /*@returnType=num*/ () =>
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
index 30acbb6..b5ea678 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
@@ -16,5 +16,11 @@
: super self::A::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/field_inference_circularity.dart:12:69: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\n var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>\n ^", "pkg/front_end/testcases/inference_new/field_inference_circularity.dart:19:69: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\n var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/field_inference_circularity.dart:12:69: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+ var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+ ^", "pkg/front_end/testcases/inference_new/field_inference_circularity.dart:19:69: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+ var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x;
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
index 6e772f2..8a74bfc 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
@@ -4,17 +4,29 @@
static method test() → dynamic async {
core::String s;
- for (final dynamic #t1 in let final dynamic #t2 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.\n for (int x in /*@error=InvalidAssignment*/ s) {}\n ^") {
+ for (final dynamic #t1 in let final dynamic #t2 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
+ for (int x in /*@error=InvalidAssignment*/ s) {}
+ ^") {
core::int x = #t1 as{TypeError} core::int;
}
- await for (final dynamic #t3 in let final dynamic #t4 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:52: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.\n await for (int x in /*@error=InvalidAssignment*/ s) {}\n ^") {
+ await for (final dynamic #t3 in let final dynamic #t4 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:52: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
+ await for (int x in /*@error=InvalidAssignment*/ s) {}
+ ^") {
core::int x = #t3 as{TypeError} core::int;
}
core::int y;
- for (final dynamic #t5 in let final dynamic #t6 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:42: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.\n for (y in /*@error=InvalidAssignment*/ s) {}\n ^") {
+ for (final dynamic #t5 in let final dynamic #t6 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:42: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
+ for (y in /*@error=InvalidAssignment*/ s) {}
+ ^") {
y = #t5 as{TypeError} core::int;
}
- await for (final dynamic #t7 in let final dynamic #t8 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.\n await for (y in /*@error=InvalidAssignment*/ s) {}\n ^") {
+ await for (final dynamic #t7 in let final dynamic #t8 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
+ await for (y in /*@error=InvalidAssignment*/ s) {}
+ ^") {
y = #t7 as{TypeError} core::int;
}
}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
index 8d16152..665b8a5 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
@@ -34,10 +34,16 @@
b = #t4 as{TypeError} self::B;
}
for (final self::A #t5 in iterable) {
- i = let final dynamic #t6 = #t5 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:39: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n for (i /*@error=InvalidAssignment*/ in iterable) {}\n ^";
+ i = let final dynamic #t6 = #t5 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:39: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ for (i /*@error=InvalidAssignment*/ in iterable) {}
+ ^";
}
await for (final self::A #t7 in stream) {
- i = let final dynamic #t8 = #t7 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:45: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n await for (i /*@error=InvalidAssignment*/ in stream) {}\n ^";
+ i = let final dynamic #t8 = #t7 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:45: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ await for (i /*@error=InvalidAssignment*/ in stream) {}
+ ^";
}
for (final self::A #t9 in self::f<core::Iterable<self::A>>()) {
a = #t9;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
index a5de1b6..d51204e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
@@ -59,11 +59,20 @@
core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = super.{self::Base::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() as{TypeError} core::double in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = super.{self::Base::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
- core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:55:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n var /*@type=int*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();\n ^" in let final void #t80 = super.{self::Base::[]=}(#t77, #t78) in #t78;
+ core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:55:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ var /*@type=int*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();
+ ^" in let final void #t80 = super.{self::Base::[]=}(#t77, #t78) in #t78;
core::num v8 = let final core::String #t81 = "x" in let final core::num #t82 = super.{self::Base::[]}(#t81).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t83 = super.{self::Base::[]=}(#t81, #t82) in #t82;
core::double v9 = let final core::String #t84 = "x" in let final core::double #t85 = super.{self::Base::[]}(#t84).{core::num::+}(self::getDouble()) in let final void #t86 = super.{self::Base::[]=}(#t84, #t85) in #t85;
- core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final dynamic #t89 = super.{self::Base::[]}(#t87).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:58:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n var /*@type=int*/ v10 = ++super /*@target=Base::[]=*/ ['x'];\n ^" in let final void #t90 = super.{self::Base::[]=}(#t87, #t88) in #t88;
- core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = super.{self::Base::[]}(#t91) in let final void #t93 = super.{self::Base::[]=}(#t91, let final dynamic #t94 = #t92.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:59:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n var /*@type=int*/ v11 = super /*@target=Base::[]=*/ ['x']++;\n ^") in #t92;
+ core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final dynamic #t89 = super.{self::Base::[]}(#t87).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:58:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ var /*@type=int*/ v10 = ++super /*@target=Base::[]=*/ ['x'];
+ ^" in let final void #t90 = super.{self::Base::[]=}(#t87, #t88) in #t88;
+ core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = super.{self::Base::[]}(#t91) in let final void #t93 = super.{self::Base::[]=}(#t91, let final dynamic #t94 = #t92.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:59:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ var /*@type=int*/ v11 = super /*@target=Base::[]=*/ ['x']++;
+ ^") in #t92;
}
abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::double v) → void;
abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::double v) → void;
@@ -132,10 +141,22 @@
core::num v2 = let final core::String #t189 = "x" in let final core::num #t190 = self::getNum() as{TypeError} core::int in let final void #t191 = super.{self::Base::[]=}(#t189, #t190) in #t190;
core::num v4 = let final core::String #t192 = "x" in let final core::double #t193 = super.{self::Base::[]}(#t192) in #t193.{core::num::==}(null) ?{core::num} let final core::int #t194 = self::getInt() in let final void #t195 = super.{self::Base::[]=}(#t192, #t194) in #t194 : #t193;
core::num v5 = let final core::String #t196 = "x" in let final core::double #t197 = super.{self::Base::[]}(#t196) in #t197.{core::num::==}(null) ?{core::num} let final core::num #t198 = self::getNum() as{TypeError} core::int in let final void #t199 = super.{self::Base::[]=}(#t196, #t198) in #t198 : #t197;
- core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final dynamic #t202 = super.{self::Base::[]}(#t200).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:112:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();\n ^" in let final void #t203 = super.{self::Base::[]=}(#t200, #t201) in #t201;
- core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final dynamic #t206 = super.{self::Base::[]}(#t204).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:113:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v8 = super /*@target=Base::[]=*/ ['x'] += getNum();\n ^" in let final void #t207 = super.{self::Base::[]=}(#t204, #t205) in #t205;
- core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = super.{self::Base::[]}(#t208).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:114:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v10 = ++super /*@target=Base::[]=*/ ['x'];\n ^" in let final void #t211 = super.{self::Base::[]=}(#t208, #t209) in #t209;
- core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = super.{self::Base::[]}(#t212) in let final void #t214 = super.{self::Base::[]=}(#t212, let final dynamic #t215 = #t213.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:115:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v11 = super /*@target=Base::[]=*/ ['x']++;\n ^") in #t213;
+ core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final dynamic #t202 = super.{self::Base::[]}(#t200).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:112:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();
+ ^" in let final void #t203 = super.{self::Base::[]=}(#t200, #t201) in #t201;
+ core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final dynamic #t206 = super.{self::Base::[]}(#t204).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:113:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v8 = super /*@target=Base::[]=*/ ['x'] += getNum();
+ ^" in let final void #t207 = super.{self::Base::[]=}(#t204, #t205) in #t205;
+ core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = super.{self::Base::[]}(#t208).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:114:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v10 = ++super /*@target=Base::[]=*/ ['x'];
+ ^" in let final void #t211 = super.{self::Base::[]=}(#t208, #t209) in #t209;
+ core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = super.{self::Base::[]}(#t212) in let final void #t214 = super.{self::Base::[]=}(#t212, let final dynamic #t215 = #t213.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:115:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v11 = super /*@target=Base::[]=*/ ['x']++;
+ ^") in #t213;
}
abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::int v) → void;
abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::int v) → void;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
index 055146e..1905286 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
@@ -50,11 +50,20 @@
core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67) in #t67;
core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = this.{self::Test3::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() as{TypeError} core::double in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71) in #t71 : #t70;
core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = this.{self::Test3::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75) in #t75 : #t74;
- core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = this.{self::Test3::[]}(#t77).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:56:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n var /*@type=int*/ v7 = this /*@target=Test3::[]=*/ ['x'] += getInt();\n ^" in let final void #t80 = this.{self::Test3::[]=}(#t77, #t78) in #t78;
+ core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = this.{self::Test3::[]}(#t77).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:56:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ var /*@type=int*/ v7 = this /*@target=Test3::[]=*/ ['x'] += getInt();
+ ^" in let final void #t80 = this.{self::Test3::[]=}(#t77, #t78) in #t78;
core::num v8 = let final core::String #t81 = "x" in let final core::num #t82 = this.{self::Test3::[]}(#t81).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t83 = this.{self::Test3::[]=}(#t81, #t82) in #t82;
core::double v9 = let final core::String #t84 = "x" in let final core::double #t85 = this.{self::Test3::[]}(#t84).{core::num::+}(self::getDouble()) in let final void #t86 = this.{self::Test3::[]=}(#t84, #t85) in #t85;
- core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final dynamic #t89 = this.{self::Test3::[]}(#t87).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:59:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n var /*@type=int*/ v10 = ++this /*@target=Test3::[]=*/ ['x'];\n ^" in let final void #t90 = this.{self::Test3::[]=}(#t87, #t88) in #t88;
- core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = this.{self::Test3::[]}(#t91) in let final void #t93 = this.{self::Test3::[]=}(#t91, let final dynamic #t94 = #t92.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:60:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n var /*@type=int*/ v11 = this /*@target=Test3::[]=*/ ['x']++;\n ^") in #t92;
+ core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final dynamic #t89 = this.{self::Test3::[]}(#t87).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:59:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ var /*@type=int*/ v10 = ++this /*@target=Test3::[]=*/ ['x'];
+ ^" in let final void #t90 = this.{self::Test3::[]=}(#t87, #t88) in #t88;
+ core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = this.{self::Test3::[]}(#t91) in let final void #t93 = this.{self::Test3::[]=}(#t91, let final dynamic #t94 = #t92.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:60:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ var /*@type=int*/ v11 = this /*@target=Test3::[]=*/ ['x']++;
+ ^") in #t92;
}
}
abstract class Test4 extends core::Object {
@@ -123,10 +132,22 @@
core::num v2 = let final core::String #t189 = "x" in let final core::num #t190 = self::getNum() as{TypeError} core::int in let final void #t191 = this.{self::Test7::[]=}(#t189, #t190) in #t190;
core::num v4 = let final core::String #t192 = "x" in let final core::double #t193 = this.{self::Test7::[]}(#t192) in #t193.{core::num::==}(null) ?{core::num} let final core::int #t194 = self::getInt() in let final void #t195 = this.{self::Test7::[]=}(#t192, #t194) in #t194 : #t193;
core::num v5 = let final core::String #t196 = "x" in let final core::double #t197 = this.{self::Test7::[]}(#t196) in #t197.{core::num::==}(null) ?{core::num} let final core::num #t198 = self::getNum() as{TypeError} core::int in let final void #t199 = this.{self::Test7::[]=}(#t196, #t198) in #t198 : #t197;
- core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final dynamic #t202 = this.{self::Test7::[]}(#t200).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:125:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v7 = this /*@target=Test7::[]=*/ ['x'] += getInt();\n ^" in let final void #t203 = this.{self::Test7::[]=}(#t200, #t201) in #t201;
- core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final dynamic #t206 = this.{self::Test7::[]}(#t204).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v8 = this /*@target=Test7::[]=*/ ['x'] += getNum();\n ^" in let final void #t207 = this.{self::Test7::[]=}(#t204, #t205) in #t205;
- core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = this.{self::Test7::[]}(#t208).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:127:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v10 = ++this /*@target=Test7::[]=*/ ['x'];\n ^" in let final void #t211 = this.{self::Test7::[]=}(#t208, #t209) in #t209;
- core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = this.{self::Test7::[]}(#t212) in let final void #t214 = this.{self::Test7::[]=}(#t212, let final dynamic #t215 = #t213.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:128:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v11 = this /*@target=Test7::[]=*/ ['x']++;\n ^") in #t213;
+ core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final dynamic #t202 = this.{self::Test7::[]}(#t200).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:125:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v7 = this /*@target=Test7::[]=*/ ['x'] += getInt();
+ ^" in let final void #t203 = this.{self::Test7::[]=}(#t200, #t201) in #t201;
+ core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final dynamic #t206 = this.{self::Test7::[]}(#t204).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v8 = this /*@target=Test7::[]=*/ ['x'] += getNum();
+ ^" in let final void #t207 = this.{self::Test7::[]=}(#t204, #t205) in #t205;
+ core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = this.{self::Test7::[]}(#t208).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:127:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v10 = ++this /*@target=Test7::[]=*/ ['x'];
+ ^" in let final void #t211 = this.{self::Test7::[]=}(#t208, #t209) in #t209;
+ core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = this.{self::Test7::[]}(#t212) in let final void #t214 = this.{self::Test7::[]=}(#t212, let final dynamic #t215 = #t213.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:128:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v11 = this /*@target=Test7::[]=*/ ['x']++;
+ ^") in #t213;
}
}
abstract class Test8 extends core::Object {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
index b758276..7be767f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
@@ -43,11 +43,20 @@
core::double v3 = let final self::Test<core::int, core::double> #t86 = t in let final core::String #t87 = "x" in let final core::double #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88) in #t88;
core::num v5 = let final self::Test<core::int, core::double> #t90 = t in let final core::String #t91 = "x" in let final core::int #t92 = #t90.{self::Test::[]}(#t91) in #t92.{core::num::==}(null) ?{core::num} let final core::num #t93 = self::getNum() as{TypeError} core::double in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93) in #t93 : #t92;
core::num v6 = let final self::Test<core::int, core::double> #t95 = t in let final core::String #t96 = "x" in let final core::int #t97 = #t95.{self::Test::[]}(#t96) in #t97.{core::num::==}(null) ?{core::num} let final core::double #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98) in #t98 : #t97;
- core::int v7 = let final self::Test<core::int, core::double> #t100 = t in let final core::String #t101 = "x" in let final core::int #t102 = let final dynamic #t103 = #t100.{self::Test::[]}(#t101).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:47:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n var /*@type=int*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();\n ^" in let final void #t104 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
+ core::int v7 = let final self::Test<core::int, core::double> #t100 = t in let final core::String #t101 = "x" in let final core::int #t102 = let final dynamic #t103 = #t100.{self::Test::[]}(#t101).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:47:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ var /*@type=int*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();
+ ^" in let final void #t104 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
core::num v8 = let final self::Test<core::int, core::double> #t105 = t in let final core::String #t106 = "x" in let final core::num #t107 = #t105.{self::Test::[]}(#t106).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t108 = #t105.{self::Test::[]=}(#t106, #t107) in #t107;
core::double v9 = let final self::Test<core::int, core::double> #t109 = t in let final core::String #t110 = "x" in let final core::double #t111 = #t109.{self::Test::[]}(#t110).{core::num::+}(self::getDouble()) in let final void #t112 = #t109.{self::Test::[]=}(#t110, #t111) in #t111;
- core::int v10 = let final self::Test<core::int, core::double> #t113 = t in let final core::String #t114 = "x" in let final core::int #t115 = let final dynamic #t116 = #t113.{self::Test::[]}(#t114).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:50:27: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n var /*@type=int*/ v10 = ++t /*@target=Test::[]=*/ ['x'];\n ^" in let final void #t117 = #t113.{self::Test::[]=}(#t114, #t115) in #t115;
- core::int v11 = let final self::Test<core::int, core::double> #t118 = t in let final core::String #t119 = "x" in let final core::int #t120 = #t118.{self::Test::[]}(#t119) in let final void #t121 = #t118.{self::Test::[]=}(#t119, let final dynamic #t122 = #t120.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:51:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n var /*@type=int*/ v11 = t /*@target=Test::[]=*/ ['x']++;\n ^") in #t120;
+ core::int v10 = let final self::Test<core::int, core::double> #t113 = t in let final core::String #t114 = "x" in let final core::int #t115 = let final dynamic #t116 = #t113.{self::Test::[]}(#t114).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:50:27: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ var /*@type=int*/ v10 = ++t /*@target=Test::[]=*/ ['x'];
+ ^" in let final void #t117 = #t113.{self::Test::[]=}(#t114, #t115) in #t115;
+ core::int v11 = let final self::Test<core::int, core::double> #t118 = t in let final core::String #t119 = "x" in let final core::int #t120 = #t118.{self::Test::[]}(#t119) in let final void #t121 = #t118.{self::Test::[]=}(#t119, let final dynamic #t122 = #t120.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:51:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+ var /*@type=int*/ v11 = t /*@target=Test::[]=*/ ['x']++;
+ ^") in #t120;
}
static method test4(self::Test<core::num, core::int> t) → void {
core::int v1 = let final self::Test<core::num, core::int> #t123 = t in let final core::String #t124 = "x" in let final core::int #t125 = self::getInt() in let final void #t126 = #t123.{self::Test::[]=}(#t124, #t125) in #t125;
@@ -88,10 +97,22 @@
core::num v2 = let final self::Test<core::double, core::int> #t246 = t in let final core::String #t247 = "x" in let final core::num #t248 = self::getNum() as{TypeError} core::int in let final void #t249 = #t246.{self::Test::[]=}(#t247, #t248) in #t248;
core::num v4 = let final self::Test<core::double, core::int> #t250 = t in let final core::String #t251 = "x" in let final core::double #t252 = #t250.{self::Test::[]}(#t251) in #t252.{core::num::==}(null) ?{core::num} let final core::int #t253 = self::getInt() in let final void #t254 = #t250.{self::Test::[]=}(#t251, #t253) in #t253 : #t252;
core::num v5 = let final self::Test<core::double, core::int> #t255 = t in let final core::String #t256 = "x" in let final core::double #t257 = #t255.{self::Test::[]}(#t256) in #t257.{core::num::==}(null) ?{core::num} let final core::num #t258 = self::getNum() as{TypeError} core::int in let final void #t259 = #t255.{self::Test::[]=}(#t256, #t258) in #t258 : #t257;
- core::double v7 = let final self::Test<core::double, core::int> #t260 = t in let final core::String #t261 = "x" in let final core::double #t262 = let final dynamic #t263 = #t260.{self::Test::[]}(#t261).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:96:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();\n ^" in let final void #t264 = #t260.{self::Test::[]=}(#t261, #t262) in #t262;
- core::double v8 = let final self::Test<core::double, core::int> #t265 = t in let final core::String #t266 = "x" in let final core::double #t267 = let final dynamic #t268 = #t265.{self::Test::[]}(#t266).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:97:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v8 = t /*@target=Test::[]=*/ ['x'] += getNum();\n ^" in let final void #t269 = #t265.{self::Test::[]=}(#t266, #t267) in #t267;
- core::double v10 = let final self::Test<core::double, core::int> #t270 = t in let final core::String #t271 = "x" in let final core::double #t272 = let final dynamic #t273 = #t270.{self::Test::[]}(#t271).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:98:30: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v10 = ++t /*@target=Test::[]=*/ ['x'];\n ^" in let final void #t274 = #t270.{self::Test::[]=}(#t271, #t272) in #t272;
- core::double v11 = let final self::Test<core::double, core::int> #t275 = t in let final core::String #t276 = "x" in let final core::double #t277 = #t275.{self::Test::[]}(#t276) in let final void #t278 = #t275.{self::Test::[]=}(#t276, let final dynamic #t279 = #t277.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:99:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n var /*@type=double*/ v11 = t /*@target=Test::[]=*/ ['x']++;\n ^") in #t277;
+ core::double v7 = let final self::Test<core::double, core::int> #t260 = t in let final core::String #t261 = "x" in let final core::double #t262 = let final dynamic #t263 = #t260.{self::Test::[]}(#t261).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:96:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();
+ ^" in let final void #t264 = #t260.{self::Test::[]=}(#t261, #t262) in #t262;
+ core::double v8 = let final self::Test<core::double, core::int> #t265 = t in let final core::String #t266 = "x" in let final core::double #t267 = let final dynamic #t268 = #t265.{self::Test::[]}(#t266).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:97:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v8 = t /*@target=Test::[]=*/ ['x'] += getNum();
+ ^" in let final void #t269 = #t265.{self::Test::[]=}(#t266, #t267) in #t267;
+ core::double v10 = let final self::Test<core::double, core::int> #t270 = t in let final core::String #t271 = "x" in let final core::double #t272 = let final dynamic #t273 = #t270.{self::Test::[]}(#t271).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:98:30: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v10 = ++t /*@target=Test::[]=*/ ['x'];
+ ^" in let final void #t274 = #t270.{self::Test::[]=}(#t271, #t272) in #t272;
+ core::double v11 = let final self::Test<core::double, core::int> #t275 = t in let final core::String #t276 = "x" in let final core::double #t277 = #t275.{self::Test::[]}(#t276) in let final void #t278 = #t275.{self::Test::[]=}(#t276, let final dynamic #t279 = #t277.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:99:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ var /*@type=double*/ v11 = t /*@target=Test::[]=*/ ['x']++;
+ ^") in #t277;
}
static method test8(self::Test<core::double, core::num> t) → void {
core::int v1 = let final self::Test<core::double, core::num> #t280 = t in let final core::String #t281 = "x" in let final core::int #t282 = self::getInt() in let final void #t283 = #t280.{self::Test::[]=}(#t281, #t282) in #t282;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
index c5411ae..c9f0f9a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
@@ -17,8 +17,20 @@
: super core::Object::•()
;
}
-static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let final dynamic #t2 = #t1.{self::B::a}.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=int*/ v_prefix_pp = (++new B(). /*@target=B::a*/ a);\n ^";
-static field core::double v_prefix_mm = let final self::B #t3 = new self::B::•() in #t3.{self::B::a} = let final dynamic #t4 = #t3.{self::B::a}.{self::A::-}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=double*/ v_prefix_mm = (--new B(). /*@target=B::a*/ a);\n ^";
-static field self::A v_postfix_pp = let final self::B #t5 = new self::B::•() in let final self::A #t6 = #t5.{self::B::a} in let final core::int #t7 = #t5.{self::B::a} = let final dynamic #t8 = #t6.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=A*/ v_postfix_pp = (new B(). /*@target=B::a*/ a++);\n ^" in #t6;
-static field self::A v_postfix_mm = let final self::B #t9 = new self::B::•() in let final self::A #t10 = #t9.{self::B::a} in let final core::double #t11 = #t9.{self::B::a} = let final dynamic #t12 = #t10.{self::A::-}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=A*/ v_postfix_mm = (new B(). /*@target=B::a*/ a--);\n ^" in #t10;
+static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let final dynamic #t2 = #t1.{self::B::a}.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+var /*@topType=int*/ v_prefix_pp = (++new B(). /*@target=B::a*/ a);
+ ^";
+static field core::double v_prefix_mm = let final self::B #t3 = new self::B::•() in #t3.{self::B::a} = let final dynamic #t4 = #t3.{self::B::a}.{self::A::-}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+var /*@topType=double*/ v_prefix_mm = (--new B(). /*@target=B::a*/ a);
+ ^";
+static field self::A v_postfix_pp = let final self::B #t5 = new self::B::•() in let final self::A #t6 = #t5.{self::B::a} in let final core::int #t7 = #t5.{self::B::a} = let final dynamic #t8 = #t6.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+var /*@topType=A*/ v_postfix_pp = (new B(). /*@target=B::a*/ a++);
+ ^" in #t6;
+static field self::A v_postfix_mm = let final self::B #t9 = new self::B::•() in let final self::A #t10 = #t9.{self::B::a} in let final core::double #t11 = #t9.{self::B::a} = let final dynamic #t12 = #t10.{self::A::-}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+var /*@topType=A*/ v_postfix_mm = (new B(). /*@target=B::a*/ a--);
+ ^" in #t10;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
index 1425513..192bdbe 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
@@ -12,5 +12,11 @@
static field self::A a = new self::A::•();
static field dynamic x = () → dynamic => self::a.{self::A::b};
static field () → () → dynamic y = () → () → dynamic => self::a.{self::A::c};
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:69: Error: Can't infer the type of 'b': circularity found during type inference.\nSpecify the type explicitly.\n var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>\n ^", "pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:69: Error: Can't infer the type of 'b': circularity found during type inference.
+Specify the type explicitly.
+ var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>
+ ^", "pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
index 6a1582a..517380a 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
@@ -4,5 +4,8 @@
static field core::int i;
static field core::String s;
-static field core::String x = self::i = let final dynamic #t1 = self::s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\nvar /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;\n ^";
+static field core::String x = self::i = let final dynamic #t1 = self::s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+var /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;
+ ^";
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
index a51da21..7f9a899 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
@@ -5,7 +5,13 @@
static field dynamic x = () → dynamic => self::f() ?{dynamic} self::y : self::z;
static field dynamic y = () → dynamic => self::x;
static field () → dynamic z = () → dynamic => self::x;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/strongly_connected_component.dart:19:67: Error: Can't infer the type of 'y': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>\n ^", "pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/strongly_connected_component.dart:19:67: Error: Can't infer the type of 'y': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>
+ ^", "pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+ ^"]/* from null */;
static method f() → core::bool
return null;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
index 6a927d8..c3b6891 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
@@ -8,5 +8,7 @@
;
}
static field self::B<core::Comparable<dynamic>> y = new self::B::•<core::Comparable<dynamic>>();
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Can't use a super-bounded type for instance creation. Got '#lib1::B<dart.core::Comparable<dynamic>>'.\nvar y = new B();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Can't use a super-bounded type for instance creation. Got '#lib1::B<dart.core::Comparable<dynamic>>'.
+var y = new B();
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
index 964488f..3d764da 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
@@ -11,10 +11,19 @@
}
static method test(core::int i, core::String s, self::A a) → dynamic {
i = 1;
- i = let final dynamic #t1 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n i = /*@error=InvalidAssignment*/ s;\n ^";
+ i = let final dynamic #t1 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ i = /*@error=InvalidAssignment*/ s;
+ ^";
i.{core::num::==}(null) ?{core::int} i = 1 : null;
- i.{core::num::==}(null) ?{core::Object} i = let final dynamic #t2 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n i ??= /*@error=InvalidAssignment*/ s;\n ^" : null;
+ i.{core::num::==}(null) ?{core::Object} i = let final dynamic #t2 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+ i ??= /*@error=InvalidAssignment*/ s;
+ ^" : null;
a = new self::A::•();
- a = let final dynamic #t3 = a.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.\nTry changing the type of the left hand side, or casting the right hand side to '#lib1::A'.\n a /*@error=InvalidAssignment*/ += 1;\n ^";
+ a = let final dynamic #t3 = a.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
+Try changing the type of the left hand side, or casting the right hand side to '#lib1::A'.
+ a /*@error=InvalidAssignment*/ += 1;
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/invalid_cast.dart.strong.expect b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
index b1bc2fc..502c68ac 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
@@ -27,17 +27,44 @@
static method topLevelFunction(core::int i) → void {}
static method bad() → dynamic {
function localFunction(core::int i) → void {}
- core::List<core::int> a = let final dynamic #t1 = <core::Object>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.\nChange the type of the list literal or the context in which it is used.\n List<int> a = <Object> /*@error=InvalidCastLiteralList*/ [];\n ^";
- core::Map<core::int, core::String> b = let final dynamic #t2 = <core::Object, core::String>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.\nChange the type of the map literal or the context in which it is used.\n Map<int, String> b = <Object, String> /*@error=InvalidCastLiteralMap*/ {};\n ^";
- core::Map<core::int, core::String> c = let final dynamic #t3 = <core::int, core::Object>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.\nChange the type of the map literal or the context in which it is used.\n Map<int, String> c = <int, Object> /*@error=InvalidCastLiteralMap*/ {};\n ^";
- (core::Object) → core::int d = let final dynamic #t4 = (core::int i) → core::int => i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.\nChange the type of the function expression or the context in which it is used.\n int Function(Object) d = /*@error=InvalidCastFunctionExpr*/ (int i) => i;\n ^";
+ core::List<core::int> a = let final dynamic #t1 = <core::Object>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
+Change the type of the list literal or the context in which it is used.
+ List<int> a = <Object> /*@error=InvalidCastLiteralList*/ [];
+ ^";
+ core::Map<core::int, core::String> b = let final dynamic #t2 = <core::Object, core::String>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+Change the type of the map literal or the context in which it is used.
+ Map<int, String> b = <Object, String> /*@error=InvalidCastLiteralMap*/ {};
+ ^";
+ core::Map<core::int, core::String> c = let final dynamic #t3 = <core::int, core::Object>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+Change the type of the map literal or the context in which it is used.
+ Map<int, String> c = <int, Object> /*@error=InvalidCastLiteralMap*/ {};
+ ^";
+ (core::Object) → core::int d = let final dynamic #t4 = (core::int i) → core::int => i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.
+Change the type of the function expression or the context in which it is used.
+ int Function(Object) d = /*@error=InvalidCastFunctionExpr*/ (int i) => i;
+ ^";
self::D e = self::C::fact() as{TypeError} self::D;
self::D f = new self::D::•() as{TypeError} self::D;
- self::D g = let final dynamic #t5 = new self::C::nonFact() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.\nChange the type of the object being constructed or the context in which it is used.\n D g = new /*@error=InvalidCastNewExpr*/ C.nonFact();\n ^";
- self::D h = let final dynamic #t6 = new self::C::nonFact2() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.\nChange the type of the object being constructed or the context in which it is used.\n D h = new /*@error=InvalidCastNewExpr*/ C.nonFact2();\n ^";
- (core::Object) → void i = let final dynamic #t7 = self::C::staticFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.\nChange the type of the method or the context in which it is used.\n C. /*@error=InvalidCastStaticMethod*/ staticFunction;\n ^";
- (core::Object) → void j = let final dynamic #t8 = self::topLevelFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.\nChange the type of the function or the context in which it is used.\n j = /*@error=InvalidCastTopLevelFunction*/ topLevelFunction;\n ^";
- (core::Object) → void k = let final dynamic #t9 = localFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.\nChange the type of the function or the context in which it is used.\n void Function(Object) k = /*@error=InvalidCastLocalFunction*/ localFunction;\n ^";
+ self::D g = let final dynamic #t5 = new self::C::nonFact() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+Change the type of the object being constructed or the context in which it is used.
+ D g = new /*@error=InvalidCastNewExpr*/ C.nonFact();
+ ^";
+ self::D h = let final dynamic #t6 = new self::C::nonFact2() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+Change the type of the object being constructed or the context in which it is used.
+ D h = new /*@error=InvalidCastNewExpr*/ C.nonFact2();
+ ^";
+ (core::Object) → void i = let final dynamic #t7 = self::C::staticFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+Change the type of the method or the context in which it is used.
+ C. /*@error=InvalidCastStaticMethod*/ staticFunction;
+ ^";
+ (core::Object) → void j = let final dynamic #t8 = self::topLevelFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+Change the type of the function or the context in which it is used.
+ j = /*@error=InvalidCastTopLevelFunction*/ topLevelFunction;
+ ^";
+ (core::Object) → void k = let final dynamic #t9 = localFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+Change the type of the function or the context in which it is used.
+ void Function(Object) k = /*@error=InvalidCastLocalFunction*/ localFunction;
+ ^";
}
static method ok() → dynamic {
function localFunction(core::int i) → void {}
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
index 680ce86..7cab6c0 100644
--- a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
@@ -44,5 +44,11 @@
get y() → self::A
return null;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_after_inference.dart:28:51: Error: The return type of the method 'F::y' is #lib1::A, which does not match the return type of the overridden method (#lib1::B).\nChange to a subtype of #lib1::B.\n A get /*@error=OverrideTypeMismatchReturnType*/ y => null;\n ^", "pkg/front_end/testcases/override_check_accessor_after_inference.dart:27:57: Error: The parameter 'value' of the method 'F::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_after_inference.dart:28:51: Error: The return type of the method 'F::y' is #lib1::A, which does not match the return type of the overridden method (#lib1::B).
+Change to a subtype of #lib1::B.
+ A get /*@error=OverrideTypeMismatchReturnType*/ y => null;
+ ^", "pkg/front_end/testcases/override_check_accessor_after_inference.dart:27:57: Error: The parameter 'value' of the method 'F::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+ void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
index 39e3d95..944f780 100644
--- a/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
@@ -36,5 +36,11 @@
get y() → core::Object
return null;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_basic.dart:23:56: Error: The return type of the method 'E::y' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).\nChange to a subtype of #lib1::A.\n Object get /*@error=OverrideTypeMismatchReturnType*/ y => null;\n ^", "pkg/front_end/testcases/override_check_accessor_basic.dart:22:57: Error: The parameter 'value' of the method 'E::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_basic.dart:23:56: Error: The return type of the method 'E::y' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).
+Change to a subtype of #lib1::A.
+ Object get /*@error=OverrideTypeMismatchReturnType*/ y => null;
+ ^", "pkg/front_end/testcases/override_check_accessor_basic.dart:22:57: Error: The parameter 'value' of the method 'E::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+ void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
index 9502e43..2790cab 100644
--- a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
@@ -34,5 +34,11 @@
set x5(covariant core::String value) → void {}
set x6(covariant self::A value) → void {}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:25:50: Error: The parameter 'value' of the method 'D::x4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n B /*@error=OverrideTypeMismatchParameter*/ value) {} // Not covariant\n ^", "pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:27:65: Error: The parameter 'value' of the method 'D::x5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n covariant String /*@error=OverrideTypeMismatchParameter*/ value) {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:25:50: Error: The parameter 'value' of the method 'D::x4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+ B /*@error=OverrideTypeMismatchParameter*/ value) {} // Not covariant
+ ^", "pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:27:65: Error: The parameter 'value' of the method 'D::x5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+ covariant String /*@error=OverrideTypeMismatchParameter*/ value) {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect b/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
index f95d0be..507e18b 100644
--- a/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
@@ -36,5 +36,8 @@
;
method f(self::B x) → void {}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_after_inference.dart:24:53: Error: The parameter 'x' of the method 'F::f' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n void f(B /*@error=OverrideTypeMismatchParameter*/ x) {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_after_inference.dart:24:53: Error: The parameter 'x' of the method 'F::f' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+ void f(B /*@error=OverrideTypeMismatchParameter*/ x) {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_basic.dart.strong.expect b/pkg/front_end/testcases/override_check_basic.dart.strong.expect
index 7ca80f6..31a1120 100644
--- a/pkg/front_end/testcases/override_check_basic.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_basic.dart.strong.expect
@@ -39,5 +39,17 @@
method f3({self::B x = null}) → void {}
method f4() → core::Object {}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_basic.dart:29:52: Error: The return type of the method 'E::f4' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).\nChange to a subtype of #lib1::A.\n Object /*@error=OverrideTypeMismatchReturnType*/ f4() {}\n ^", "pkg/front_end/testcases/override_check_basic.dart:28:55: Error: The parameter 'x' of the method 'E::f3' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n void f3({B /*@error=OverrideTypeMismatchParameter*/ x}) {}\n ^", "pkg/front_end/testcases/override_check_basic.dart:26:54: Error: The parameter 'x' of the method 'E::f1' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n void f1(B /*@error=OverrideTypeMismatchParameter*/ x) {}\n ^", "pkg/front_end/testcases/override_check_basic.dart:27:55: Error: The parameter 'x' of the method 'E::f2' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n void f2([B /*@error=OverrideTypeMismatchParameter*/ x]) {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_basic.dart:29:52: Error: The return type of the method 'E::f4' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).
+Change to a subtype of #lib1::A.
+ Object /*@error=OverrideTypeMismatchReturnType*/ f4() {}
+ ^", "pkg/front_end/testcases/override_check_basic.dart:28:55: Error: The parameter 'x' of the method 'E::f3' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+ void f3({B /*@error=OverrideTypeMismatchParameter*/ x}) {}
+ ^", "pkg/front_end/testcases/override_check_basic.dart:26:54: Error: The parameter 'x' of the method 'E::f1' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+ void f1(B /*@error=OverrideTypeMismatchParameter*/ x) {}
+ ^", "pkg/front_end/testcases/override_check_basic.dart:27:55: Error: The parameter 'x' of the method 'E::f2' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+ void f2([B /*@error=OverrideTypeMismatchParameter*/ x]) {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
index a4ef49c..100a773 100644
--- a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
@@ -34,5 +34,11 @@
method f5(covariant core::String x) → void {}
method f6(covariant self::A x) → void {}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_with_covariant_modifier.dart:25:69: Error: The parameter 'x' of the method 'D::f5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n void f5(covariant String /*@error=OverrideTypeMismatchParameter*/ x) {}\n ^", "pkg/front_end/testcases/override_check_with_covariant_modifier.dart:24:54: Error: The parameter 'x' of the method 'D::f4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n void f4(B /*@error=OverrideTypeMismatchParameter*/ x) {} // Not covariant\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_with_covariant_modifier.dart:25:69: Error: The parameter 'x' of the method 'D::f5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+ void f5(covariant String /*@error=OverrideTypeMismatchParameter*/ x) {}
+ ^", "pkg/front_end/testcases/override_check_with_covariant_modifier.dart:24:54: Error: The parameter 'x' of the method 'D::f4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+ void f4(B /*@error=OverrideTypeMismatchParameter*/ x) {} // Not covariant
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/qualified.dart.direct.expect b/pkg/front_end/testcases/qualified.dart.direct.expect
index 79c595d..07abef7 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.expect
@@ -25,7 +25,9 @@
static factory b<T extends core::Object>() → self::C<self::C::b::T>
let dynamic #redirecting_factory = lib::C::b in let self::C::b::T #typeArg0 = null in invalid-expression;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:11:7: Error: The type 'lib.Missing' can't be used as supertype.\nclass Bad extends lib.Missing {\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:11:7: Error: The type 'lib.Missing' can't be used as supertype.
+class Bad extends lib.Missing {
+ ^"]/* from null */;
static method main() → dynamic {
new self::C::•<core::String>();
new self::C::a<core::String>();
diff --git a/pkg/front_end/testcases/qualified.dart.strong.expect b/pkg/front_end/testcases/qualified.dart.strong.expect
index 6f5c8a1..79b0cfb 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.expect
@@ -25,7 +25,11 @@
static factory b<T extends core::Object>() → self::C<self::C::b::T>
let dynamic #redirecting_factory = lib::C::b in let self::C::b::T #typeArg0 = null in invalid-expression;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:12:3: Error: Type 'lib.Missing' not found.\n lib.Missing method() {}\n ^", "pkg/front_end/testcases/qualified.dart:11:7: Error: The type 'lib.Missing' can't be used as supertype.\nclass Bad extends lib.Missing {\n ^", "pkg/front_end/testcases/qualified.dart: Error: Couldn't find constructor 'WrongName'."]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:12:3: Error: Type 'lib.Missing' not found.
+ lib.Missing method() {}
+ ^", "pkg/front_end/testcases/qualified.dart:11:7: Error: The type 'lib.Missing' can't be used as supertype.
+class Bad extends lib.Missing {
+ ^", "pkg/front_end/testcases/qualified.dart: Error: Couldn't find constructor 'WrongName'."]/* from null */;
static method main() → dynamic {
new self::C::•<core::String>();
new self::C::a<core::String>();
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
index a3bb321..0f7997f 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
@@ -1,5 +1,7 @@
library;
import self as self;
-@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.\n@JS()\n ^"
+@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.
+@JS()
+ ^"
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect
index 67cc740..c20357f 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect
@@ -3,7 +3,9 @@
import "dart:core" as core;
typedef Handle = (core::String) → dynamic;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/malformed_function_type.dart:5:16: Error: The typedef 'Handle' has a reference to itself.\ntypedef Handle Handle(String command);\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/malformed_function_type.dart:5:16: Error: The typedef 'Handle' has a reference to itself.
+typedef Handle Handle(String command);
+ ^"]/* from null */;
static method main() → dynamic {
(core::String) → dynamic h;
}
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
index 514b8d0..655bd55 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
@@ -23,7 +23,9 @@
method publicMethod() → dynamic
return this.{self::Mixin::_privateMethod}();
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.\n foo() => super.foo() + f();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
+ foo() => super.foo() + f();
+ ^"]/* from null */;
static method f() → dynamic
return 2;
static method V() → dynamic
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index 45abd32..ad45ff5 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -51,8 +51,20 @@
self::use(super.{self::A::~}());
super.{self::A::unary-}();
self::use(super.{self::A::unary-}());
- (let final dynamic #t1 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:5: Error: The getter '' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named ''.\n +super;\n ^").+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n +super;\n ^");
- self::use((let final dynamic #t2 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:9: Error: The getter '' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named ''.\n use(+super);\n ^").+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n use(+super);\n ^"));
+ (let final dynamic #t1 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:5: Error: The getter '' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named ''.
+ +super;
+ ^").+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+ +super;
+ ^");
+ self::use((let final dynamic #t2 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:9: Error: The getter '' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named ''.
+ use(+super);
+ ^").+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+ use(+super);
+ ^"));
super.{self::A::==}(87);
self::use(super.{self::A::==}(87));
!super.{self::A::==}(87);
@@ -101,10 +113,22 @@
self::use(let final dynamic #t19 = super.{self::A::i} in let final dynamic #t20 = super.{self::B::i} = #t19.+(1) in #t19);
let final core::int #t21 = 87 in super.{self::A::[]=}(#t21, super.{self::A::[]}(#t21).+(1));
self::use(let final core::int #t22 = 87 in let final dynamic #t23 = super.{self::A::[]}(#t22) in let final void #t24 = super.{self::A::[]=}(#t22, #t23.+(1)) in #t23);
- super.m = let final dynamic #t25 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n super.m++;\n ^";
- self::use(let final () → void #t26 = super.{self::A::m} in let final dynamic #t27 = super.m = let final dynamic #t28 = #t26 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n use(super.m++);\n ^" in #t26);
- super.{self::A::n} = let final dynamic #t29 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:97:12: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n super.n++;\n ^";
- self::use(let final () → void #t30 = super.{self::A::n} in let final dynamic #t31 = super.{self::A::n} = let final dynamic #t32 = #t30 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n use(super.n++);\n ^" in #t30);
+ super.m = let final dynamic #t25 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ super.m++;
+ ^";
+ self::use(let final () → void #t26 = super.{self::A::m} in let final dynamic #t27 = super.m = let final dynamic #t28 = #t26 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ use(super.m++);
+ ^" in #t26);
+ super.{self::A::n} = let final dynamic #t29 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:97:12: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ super.n++;
+ ^";
+ self::use(let final () → void #t30 = super.{self::A::n} in let final dynamic #t31 = super.{self::A::n} = let final dynamic #t32 = #t30 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ use(super.n++);
+ ^" in #t30);
super.{self::A::a} = super.{self::A::a}.+(1);
self::use(super.{self::A::a} = super.{self::A::a}.+(1));
super.{self::A::b} = super.{self::B::b}.+(1);
@@ -125,10 +149,22 @@
self::use(super.{self::B::i} = super.{self::A::i}.+(1));
let final core::int #t33 = 87 in let final dynamic #t34 = super.{self::A::[]}(#t33).+(1) in let final void #t35 = super.{self::A::[]=}(#t33, #t34) in #t34;
self::use(let final core::int #t36 = 87 in let final dynamic #t37 = super.{self::A::[]}(#t36).+(1) in let final void #t38 = super.{self::A::[]=}(#t36, #t37) in #t37);
- super.m = let final dynamic #t39 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n ++super.m;\n ^";
- self::use(super.m = let final dynamic #t40 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:121:9: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n use(++super.m);\n ^");
- super.{self::A::n} = let final dynamic #t41 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:122:5: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n ++super.n;\n ^";
- self::use(super.{self::A::n} = let final dynamic #t42 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:123:9: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n use(++super.n);\n ^");
+ super.m = let final dynamic #t39 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ ++super.m;
+ ^";
+ self::use(super.m = let final dynamic #t40 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:121:9: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ use(++super.m);
+ ^");
+ super.{self::A::n} = let final dynamic #t41 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:122:5: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ ++super.n;
+ ^";
+ self::use(super.{self::A::n} = let final dynamic #t42 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:123:9: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ use(++super.n);
+ ^");
super.{self::A::a}.call();
self::use(super.{self::A::a}.call());
super.{self::B::b}.call();
@@ -223,10 +259,22 @@
self::use(super.{self::B::i} = super.{self::A::i}.+(42));
let final core::int #t64 = 87 in super.{self::A::[]=}(#t64, super.{self::A::[]}(#t64).+(42));
self::use(let final core::int #t65 = 87 in let final dynamic #t66 = super.{self::A::[]}(#t65).+(42) in let final void #t67 = super.{self::A::[]=}(#t65, #t66) in #t66);
- super.m = let final dynamic #t68 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n super.m += 42;\n ^";
- self::use(super.m = let final dynamic #t69 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:223:17: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n use(super.m += 42);\n ^");
- super.{self::A::n} = let final dynamic #t70 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:224:13: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n super.n += 42;\n ^";
- self::use(super.{self::A::n} = let final dynamic #t71 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:225:17: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n use(super.n += 42);\n ^");
+ super.m = let final dynamic #t68 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ super.m += 42;
+ ^";
+ self::use(super.m = let final dynamic #t69 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:223:17: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ use(super.m += 42);
+ ^");
+ super.{self::A::n} = let final dynamic #t70 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:224:13: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ super.n += 42;
+ ^";
+ self::use(super.{self::A::n} = let final dynamic #t71 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:225:17: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ use(super.n += 42);
+ ^");
super.{self::A::a} = super.{self::A::a}.-(42);
self::use(super.{self::A::a} = super.{self::A::a}.-(42));
super.{self::A::b} = super.{self::B::b}.-(42);
@@ -247,13 +295,143 @@
self::use(super.{self::B::i} = super.{self::A::i}.-(42));
let final core::int #t72 = 87 in super.{self::A::[]=}(#t72, super.{self::A::[]}(#t72).-(42));
self::use(let final core::int #t73 = 87 in let final dynamic #t74 = super.{self::A::[]}(#t73).-(42) in let final void #t75 = super.{self::A::[]=}(#t73, #t74) in #t74);
- super.m = let final dynamic #t76 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n super.m -= 42;\n ^";
- self::use(super.m = let final dynamic #t77 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:248:17: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n use(super.m -= 42);\n ^");
- super.{self::A::n} = let final dynamic #t78 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:249:13: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n super.n -= 42;\n ^";
- self::use(super.{self::A::n} = let final dynamic #t79 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:250:17: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n use(super.n -= 42);\n ^");
+ super.m = let final dynamic #t76 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+ super.m -= 42;
+ ^";
+ self::use(super.m = let final dynamic #t77 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:248:17: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+ use(super.m -= 42);
+ ^");
+ super.{self::A::n} = let final dynamic #t78 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:249:13: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+ super.n -= 42;
+ ^";
+ self::use(super.{self::A::n} = let final dynamic #t79 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:250:17: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+ use(super.n -= 42);
+ ^");
}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.\nTry removing '+'.\n +super;\n ^", "pkg/front_end/testcases/rasta/super.dart:43:5: Error: Getter not found: ''.\n +super;\n ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.\nTry removing '+'.\n use(+super);\n ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: Getter not found: ''.\n use(+super);\n ^", "pkg/front_end/testcases/rasta/super.dart:62:11: Error: Superclass has no getter named 'g'.\n super.g;\n ^", "pkg/front_end/testcases/rasta/super.dart:63:15: Error: Superclass has no getter named 'g'.\n use(super.g);\n ^", "pkg/front_end/testcases/rasta/super.dart:83:11: Error: Superclass has no setter named 'e'.\n super.e++;\n ^", "pkg/front_end/testcases/rasta/super.dart:84:15: Error: Superclass has no setter named 'e'.\n use(super.e++);\n ^", "pkg/front_end/testcases/rasta/super.dart:85:11: Error: Superclass has no setter named 'f'.\n super.f++;\n ^", "pkg/front_end/testcases/rasta/super.dart:86:15: Error: Superclass has no setter named 'f'.\n use(super.f++);\n ^", "pkg/front_end/testcases/rasta/super.dart:87:11: Error: Superclass has no getter named 'g'.\n super.g++;\n ^", "pkg/front_end/testcases/rasta/super.dart:88:15: Error: Superclass has no getter named 'g'.\n use(super.g++);\n ^", "pkg/front_end/testcases/rasta/super.dart:95:11: Error: Superclass has no setter named 'm'.\n super.m++;\n ^", "pkg/front_end/testcases/rasta/super.dart:96:15: Error: Superclass has no setter named 'm'.\n use(super.m++);\n ^", "pkg/front_end/testcases/rasta/super.dart:108:13: Error: Superclass has no setter named 'e'.\n ++super.e;\n ^", "pkg/front_end/testcases/rasta/super.dart:109:17: Error: Superclass has no setter named 'e'.\n use(++super.e);\n ^", "pkg/front_end/testcases/rasta/super.dart:110:13: Error: Superclass has no setter named 'f'.\n ++super.f;\n ^", "pkg/front_end/testcases/rasta/super.dart:111:17: Error: Superclass has no setter named 'f'.\n use(++super.f);\n ^", "pkg/front_end/testcases/rasta/super.dart:112:13: Error: Superclass has no getter named 'g'.\n ++super.g;\n ^", "pkg/front_end/testcases/rasta/super.dart:113:17: Error: Superclass has no getter named 'g'.\n use(++super.g);\n ^", "pkg/front_end/testcases/rasta/super.dart:120:13: Error: Superclass has no setter named 'm'.\n ++super.m;\n ^", "pkg/front_end/testcases/rasta/super.dart:121:17: Error: Superclass has no setter named 'm'.\n use(++super.m);\n ^", "pkg/front_end/testcases/rasta/super.dart:137:11: Error: Superclass has no method named 'g'.\n super.g();\n ^", "pkg/front_end/testcases/rasta/super.dart:138:15: Error: Superclass has no method named 'g'.\n use(super.g());\n ^", "pkg/front_end/testcases/rasta/super.dart:160:11: Error: Superclass has no setter named 'e'.\n super.e = 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:161:15: Error: Superclass has no setter named 'e'.\n use(super.e = 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:162:11: Error: Superclass has no setter named 'f'.\n super.f = 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:163:15: Error: Superclass has no setter named 'f'.\n use(super.f = 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:172:11: Error: Superclass has no setter named 'm'.\n super.m = 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:173:15: Error: Superclass has no setter named 'm'.\n use(super.m = 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:185:11: Error: Superclass has no setter named 'e'.\n super.e ??= 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:186:15: Error: Superclass has no setter named 'e'.\n use(super.e ??= 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:187:11: Error: Superclass has no setter named 'f'.\n super.f ??= 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:188:15: Error: Superclass has no setter named 'f'.\n use(super.f ??= 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:189:11: Error: Superclass has no getter named 'g'.\n super.g ??= 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:190:15: Error: Superclass has no getter named 'g'.\n use(super.g ??= 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:197:11: Error: Superclass has no setter named 'm'.\n super.m ??= 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.\n use(super.m ??= 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:210:11: Error: Superclass has no setter named 'e'.\n super.e += 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:211:15: Error: Superclass has no setter named 'e'.\n use(super.e += 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:212:11: Error: Superclass has no setter named 'f'.\n super.f += 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:213:15: Error: Superclass has no setter named 'f'.\n use(super.f += 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:214:11: Error: Superclass has no getter named 'g'.\n super.g += 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:215:15: Error: Superclass has no getter named 'g'.\n use(super.g += 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:222:11: Error: Superclass has no setter named 'm'.\n super.m += 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:223:15: Error: Superclass has no setter named 'm'.\n use(super.m += 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:235:11: Error: Superclass has no setter named 'e'.\n super.e -= 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:236:15: Error: Superclass has no setter named 'e'.\n use(super.e -= 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:237:11: Error: Superclass has no setter named 'f'.\n super.f -= 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:238:15: Error: Superclass has no setter named 'f'.\n use(super.f -= 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:239:11: Error: Superclass has no getter named 'g'.\n super.g -= 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:240:15: Error: Superclass has no getter named 'g'.\n use(super.g -= 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:247:11: Error: Superclass has no setter named 'm'.\n super.m -= 42;\n ^", "pkg/front_end/testcases/rasta/super.dart:248:15: Error: Superclass has no setter named 'm'.\n use(super.m -= 42);\n ^", "pkg/front_end/testcases/rasta/super.dart:147:11: Error: Too many positional arguments to method: 0 allowed, 1 given.\n super.m(87);\n ^", "pkg/front_end/testcases/rasta/super.dart:148:15: Error: Too many positional arguments to method: 0 allowed, 1 given.\n use(super.m(87));\n ^", "pkg/front_end/testcases/rasta/super.dart:149:11: Error: Too many positional arguments to method: 0 allowed, 1 given.\n super.n(87);\n ^", "pkg/front_end/testcases/rasta/super.dart:150:15: Error: Too many positional arguments to method: 0 allowed, 1 given.\n use(super.n(87));\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.
+Try removing '+'.
+ +super;
+ ^", "pkg/front_end/testcases/rasta/super.dart:43:5: Error: Getter not found: ''.
+ +super;
+ ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.
+Try removing '+'.
+ use(+super);
+ ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: Getter not found: ''.
+ use(+super);
+ ^", "pkg/front_end/testcases/rasta/super.dart:62:11: Error: Superclass has no getter named 'g'.
+ super.g;
+ ^", "pkg/front_end/testcases/rasta/super.dart:63:15: Error: Superclass has no getter named 'g'.
+ use(super.g);
+ ^", "pkg/front_end/testcases/rasta/super.dart:83:11: Error: Superclass has no setter named 'e'.
+ super.e++;
+ ^", "pkg/front_end/testcases/rasta/super.dart:84:15: Error: Superclass has no setter named 'e'.
+ use(super.e++);
+ ^", "pkg/front_end/testcases/rasta/super.dart:85:11: Error: Superclass has no setter named 'f'.
+ super.f++;
+ ^", "pkg/front_end/testcases/rasta/super.dart:86:15: Error: Superclass has no setter named 'f'.
+ use(super.f++);
+ ^", "pkg/front_end/testcases/rasta/super.dart:87:11: Error: Superclass has no getter named 'g'.
+ super.g++;
+ ^", "pkg/front_end/testcases/rasta/super.dart:88:15: Error: Superclass has no getter named 'g'.
+ use(super.g++);
+ ^", "pkg/front_end/testcases/rasta/super.dart:95:11: Error: Superclass has no setter named 'm'.
+ super.m++;
+ ^", "pkg/front_end/testcases/rasta/super.dart:96:15: Error: Superclass has no setter named 'm'.
+ use(super.m++);
+ ^", "pkg/front_end/testcases/rasta/super.dart:108:13: Error: Superclass has no setter named 'e'.
+ ++super.e;
+ ^", "pkg/front_end/testcases/rasta/super.dart:109:17: Error: Superclass has no setter named 'e'.
+ use(++super.e);
+ ^", "pkg/front_end/testcases/rasta/super.dart:110:13: Error: Superclass has no setter named 'f'.
+ ++super.f;
+ ^", "pkg/front_end/testcases/rasta/super.dart:111:17: Error: Superclass has no setter named 'f'.
+ use(++super.f);
+ ^", "pkg/front_end/testcases/rasta/super.dart:112:13: Error: Superclass has no getter named 'g'.
+ ++super.g;
+ ^", "pkg/front_end/testcases/rasta/super.dart:113:17: Error: Superclass has no getter named 'g'.
+ use(++super.g);
+ ^", "pkg/front_end/testcases/rasta/super.dart:120:13: Error: Superclass has no setter named 'm'.
+ ++super.m;
+ ^", "pkg/front_end/testcases/rasta/super.dart:121:17: Error: Superclass has no setter named 'm'.
+ use(++super.m);
+ ^", "pkg/front_end/testcases/rasta/super.dart:137:11: Error: Superclass has no method named 'g'.
+ super.g();
+ ^", "pkg/front_end/testcases/rasta/super.dart:138:15: Error: Superclass has no method named 'g'.
+ use(super.g());
+ ^", "pkg/front_end/testcases/rasta/super.dart:160:11: Error: Superclass has no setter named 'e'.
+ super.e = 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:161:15: Error: Superclass has no setter named 'e'.
+ use(super.e = 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:162:11: Error: Superclass has no setter named 'f'.
+ super.f = 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:163:15: Error: Superclass has no setter named 'f'.
+ use(super.f = 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:172:11: Error: Superclass has no setter named 'm'.
+ super.m = 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:173:15: Error: Superclass has no setter named 'm'.
+ use(super.m = 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:185:11: Error: Superclass has no setter named 'e'.
+ super.e ??= 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:186:15: Error: Superclass has no setter named 'e'.
+ use(super.e ??= 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:187:11: Error: Superclass has no setter named 'f'.
+ super.f ??= 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:188:15: Error: Superclass has no setter named 'f'.
+ use(super.f ??= 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:189:11: Error: Superclass has no getter named 'g'.
+ super.g ??= 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:190:15: Error: Superclass has no getter named 'g'.
+ use(super.g ??= 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:197:11: Error: Superclass has no setter named 'm'.
+ super.m ??= 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.
+ use(super.m ??= 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:210:11: Error: Superclass has no setter named 'e'.
+ super.e += 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:211:15: Error: Superclass has no setter named 'e'.
+ use(super.e += 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:212:11: Error: Superclass has no setter named 'f'.
+ super.f += 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:213:15: Error: Superclass has no setter named 'f'.
+ use(super.f += 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:214:11: Error: Superclass has no getter named 'g'.
+ super.g += 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:215:15: Error: Superclass has no getter named 'g'.
+ use(super.g += 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:222:11: Error: Superclass has no setter named 'm'.
+ super.m += 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:223:15: Error: Superclass has no setter named 'm'.
+ use(super.m += 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:235:11: Error: Superclass has no setter named 'e'.
+ super.e -= 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:236:15: Error: Superclass has no setter named 'e'.
+ use(super.e -= 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:237:11: Error: Superclass has no setter named 'f'.
+ super.f -= 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:238:15: Error: Superclass has no setter named 'f'.
+ use(super.f -= 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:239:11: Error: Superclass has no getter named 'g'.
+ super.g -= 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:240:15: Error: Superclass has no getter named 'g'.
+ use(super.g -= 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:247:11: Error: Superclass has no setter named 'm'.
+ super.m -= 42;
+ ^", "pkg/front_end/testcases/rasta/super.dart:248:15: Error: Superclass has no setter named 'm'.
+ use(super.m -= 42);
+ ^", "pkg/front_end/testcases/rasta/super.dart:147:11: Error: Too many positional arguments to method: 0 allowed, 1 given.
+ super.m(87);
+ ^", "pkg/front_end/testcases/rasta/super.dart:148:15: Error: Too many positional arguments to method: 0 allowed, 1 given.
+ use(super.m(87));
+ ^", "pkg/front_end/testcases/rasta/super.dart:149:11: Error: Too many positional arguments to method: 0 allowed, 1 given.
+ super.n(87);
+ ^", "pkg/front_end/testcases/rasta/super.dart:150:15: Error: Too many positional arguments to method: 0 allowed, 1 given.
+ use(super.n(87));
+ ^"]/* from null */;
static method use(dynamic x) → dynamic {
if(x.==(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
throw "Shouldn't happen";
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
index 1f90789..d54f59b 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
@@ -41,7 +41,9 @@
abstract forwarding-stub method g(generic-covariant-impl dynamic a) → dynamic;
abstract forwarding-stub set t(generic-covariant-impl dynamic _) → void;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.\n foo() => super.foo() + f();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
+ foo() => super.foo() + f();
+ ^"]/* from null */;
static method main() → dynamic {
core::print(new self::C::•<dynamic>().{mix::Mixin::foo}());
core::print(new self::C2::•<dynamic>().{mix::Mixin::foo}());
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
index 53f41ea..e48fa10 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
@@ -16,14 +16,18 @@
let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], <dynamic>[#t2].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
core::print(self::Fisk);
}
- for (final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: Expected lvalue, but got Instance of 'PrefixBuilder'\n for (collection in x) {\n ^" in x) {
+ for (final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: Expected lvalue, but got Instance of 'PrefixBuilder'
+ for (collection in x) {
+ ^" in x) {
core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart: Error: A library can't be used as an expression.");
}
for (final dynamic #t4 in x) {
let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], <dynamic>[#t4].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
core::print(() → void);
}
- for (final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Expected lvalue, but got 1\n for (1 in x) {\n ^" in x) {
+ for (final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Expected lvalue, but got 1
+ for (1 in x) {
+ ^" in x) {
core::print(this.key);
}
}
@@ -38,14 +42,18 @@
let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], <dynamic>[#t7].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
core::print(self::Fisk);
}
- for (final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: Expected lvalue, but got Instance of 'PrefixBuilder'\n for (collection in arguments) {\n ^" in arguments) {
+ for (final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: Expected lvalue, but got Instance of 'PrefixBuilder'
+ for (collection in arguments) {
+ ^" in arguments) {
core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart: Error: A library can't be used as an expression.");
}
for (final dynamic #t9 in arguments) {
let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], <dynamic>[#t9].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
core::print(() → void);
}
- for (final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Expected lvalue, but got 1\n for (1 in arguments) {\n ^" in arguments) {
+ for (final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Expected lvalue, but got 1
+ for (1 in arguments) {
+ ^" in arguments) {
core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
}
}
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect
index ff6b4799..d6d0df8 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect
@@ -1,7 +1,9 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.\n [f() {}];\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
+ [f() {}];
+ ^"]/* from null */;
static method main() → dynamic {
<dynamic>[let final () → dynamic f = () → dynamic {} in f];
}
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect
index 15a37b7..8a2672b 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect
@@ -2,7 +2,9 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.\n [f() {}];\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
+ [f() {}];
+ ^"]/* from null */;
static method main() → dynamic {
<() → core::Null>[let final () → core::Null f = () → core::Null {} in f];
}
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
index 0e11a3b..7c3b9a7 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
@@ -2,7 +2,9 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29940.dart:7:3: Error: 'a.b' isn't a type.\n a.b c = null;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29940.dart:7:3: Error: 'a.b' isn't a type.
+ a.b c = null;
+ ^"]/* from null */;
static method main() → dynamic {
core::String a = "";
invalid-type c = null;
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
index 5cfc393..0e9a426 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
@@ -3,6 +3,8 @@
static method bad() → dynamic {
dynamic a = "";
- invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.\n a.\"\";\n ^";
+ invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.
+ a.\"\";
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
index 0be6765..b09dbe3 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
@@ -4,6 +4,8 @@
static method bad() → dynamic {
core::String a = "";
- invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.\n a.\"\";\n ^";
+ invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.
+ a.\"\";
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
index 9f64d07..16847ca 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
@@ -1,7 +1,12 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.\nTry adding {}.\nf() =\n ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.\nh() => null;\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
+Try adding {}.
+f() =
+ ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+h() => null;
+^"]/* from null */;
static method main() → dynamic {}
static method f() → dynamic
return let final () → dynamic h = () → dynamic => null in h;
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
index 2e3e6cd..4087b61 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
@@ -2,7 +2,12 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.\nTry adding {}.\nf() =\n ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.\nh() => null;\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
+Try adding {}.
+f() =
+ ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+h() => null;
+^"]/* from null */;
static method main() → dynamic {}
static method f() → dynamic
return let final () → core::Null h = () → core::Null => null in h;
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
index 974f689..69b4062 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
@@ -2,6 +2,8 @@
import self as self;
static method bad() → dynamic {
- invalid-expression "pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.\n x.(null);\n ^";
+ invalid-expression "pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.
+ x.(null);
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
index 974f689..69b4062 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
@@ -2,6 +2,8 @@
import self as self;
static method bad() → dynamic {
- invalid-expression "pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.\n x.(null);\n ^";
+ invalid-expression "pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.
+ x.(null);
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect
index 6f9c63c..8c99e27 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect
@@ -8,7 +8,9 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.\n var C;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
+ var C;
+ ^"]/* from null */;
static method main() → dynamic {
new self::C::•();
}
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect
index 6f9c63c..8c99e27 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect
@@ -8,7 +8,9 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.\n var C;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
+ var C;
+ ^"]/* from null */;
static method main() → dynamic {
new self::C::•();
}
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
index 538d3be..f428fd7 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
@@ -1,7 +1,9 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29945.dart:6:3: Error: 's.bool' can't be used as a type because 's' isn't defined.\n s.bool x = null;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29945.dart:6:3: Error: 's.bool' can't be used as a type because 's' isn't defined.
+ s.bool x = null;
+ ^"]/* from null */;
static method main() → dynamic {
invalid-type x = null;
}
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
index f9931fb..d2f376d 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
@@ -2,5 +2,7 @@
import self as self;
static method #main() → dynamic {
- throw "pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.\n )\n ^";
+ throw "pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.
+ )
+ ^";
}
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect
index f9931fb..d2f376d 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect
@@ -2,5 +2,7 @@
import self as self;
static method #main() → dynamic {
- throw "pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.\n )\n ^";
+ throw "pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.
+ )
+ ^";
}
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect
index e1d9ee4..3acc695 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect
@@ -1,5 +1,8 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':\n Invalid MIME type.\nimport 'data:async';\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
+ Invalid MIME type.
+import 'data:async';
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect
index e1d9ee4..3acc695 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect
@@ -1,5 +1,8 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':\n Invalid MIME type.\nimport 'data:async';\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
+ Invalid MIME type.
+import 'data:async';
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect
index 4ae0531..cb1a576 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect
@@ -1,7 +1,9 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.\n foo(null, f() {});\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
+ foo(null, f() {});
+ ^"]/* from null */;
static method foo(dynamic a, dynamic b) → dynamic
return null;
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect
index b06de22..88d3285 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect
@@ -2,7 +2,9 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.\n foo(null, f() {});\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
+ foo(null, f() {});
+ ^"]/* from null */;
static method foo(dynamic a, dynamic b) → dynamic
return null;
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect
index 6bf0b15..4a66e4c 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect
@@ -1,7 +1,9 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.\n (f() {})();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
+ (f() {})();
+ ^"]/* from null */;
static method main() → dynamic {
(let final () → dynamic f = () → dynamic {} in f).call();
}
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect
index 217f591..b782e0e 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect
@@ -2,7 +2,9 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.\n (f() {})();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
+ (f() {})();
+ ^"]/* from null */;
static method main() → dynamic {
(let final () → core::Null f = () → core::Null {} in f).call();
}
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
index 80d956e..57e6d91 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
@@ -1,7 +1,9 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29980.dart:6:3: Error: 'x.y' can't be used as a type because 'x' isn't defined.\n x.y z;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29980.dart:6:3: Error: 'x.y' can't be used as a type because 'x' isn't defined.
+ x.y z;
+ ^"]/* from null */;
static method main() → dynamic {
invalid-type z;
}
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
index 3e3c7a4..1aa328a 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
@@ -8,7 +8,9 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: 'C' expects 1 type arguments.\n C<String, String> field;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: 'C' expects 1 type arguments.
+ C<String, String> field;
+ ^"]/* from null */;
static method main() → dynamic {
core::print(new self::C::•<dynamic>());
}
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
index 340ebcf..9c66143 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
@@ -2,10 +2,14 @@
import self as self;
static method f() → dynamic sync* {
- invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.\n return missing;\n ^";
+ invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
+ return missing;
+ ^";
}
static method g() → dynamic sync*
- invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.\ng() sync* => dummy;\n ^";
+ invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
+g() sync* => dummy;
+ ^";
static method h() → dynamic sync* {
(() → dynamic => "return").call();
}
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
index 61cfc01..fce02e6 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
@@ -2,12 +2,20 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.\n return missing;\n ^", "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.\ng() sync* => dummy;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.
+ return missing;
+ ^", "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.
+g() sync* => dummy;
+ ^"]/* from null */;
static method f() → dynamic sync* {
- invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.\n return missing;\n ^";
+ invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
+ return missing;
+ ^";
}
static method g() → dynamic sync*
- invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.\ng() sync* => dummy;\n ^";
+ invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
+g() sync* => dummy;
+ ^";
static method h() → dynamic sync* {
(() → core::String => "return").call();
}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
index 6dd3ecf..f52c009 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
@@ -1,9 +1,13 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.\n for (int i = i;; false) {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.
+ for (int i = i;; false) {}
+ ^"]/* from null */;
static method bad() → dynamic {
- for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.\n for (int i = i;; false) {}\n ^"; ; false) {
+ for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+ for (int i = i;; false) {}
+ ^"; ; false) {
}
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
index ba78c35..95a6e96 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -1,9 +1,15 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.\n for (int i = i;; false) {}\n ^", "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.\n for (int i = i;; false) {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
+ for (int i = i;; false) {}
+ ^", "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.
+ for (int i = i;; false) {}
+ ^"]/* from null */;
static method bad() → dynamic {
- for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.\n for (int i = i;; false) {}\n ^"; ; false) {
+ for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+ for (int i = i;; false) {}
+ ^"; ; false) {
}
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
index 822d218..f758e0f 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
@@ -2,7 +2,12 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.\nTry using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).\n \u55357\u56603\n ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.\n}\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.
+Try using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).
+ \u55357\u56603
+ ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.
+}
+^"]/* from null */;
static method bad() → dynamic {
throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
}
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
index 02c3c1e4..3dab4b4 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
@@ -2,7 +2,14 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.\nTry using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).\n \u55357\u56603\n ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.\n}\n^", "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '\u55357\u56603'.\n \u55357\u56603\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.
+Try using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).
+ \u55357\u56603
+ ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.
+}
+^", "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '\u55357\u56603'.
+ \u55357\u56603
+ ^"]/* from null */;
static method bad() → dynamic {
throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
}
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect
index 91f276a..fc0df85 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect
@@ -1,6 +1,11 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.\nTry adding {}.\nC(this.name);\n ^", "pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: 'this' parameters can only be used on constructors.\nC(this.name);\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
+Try adding {}.
+C(this.name);
+ ^", "pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: 'this' parameters can only be used on constructors.
+C(this.name);
+ ^"]/* from null */;
static method main() → dynamic {}
static abstract method C(dynamic name) → dynamic;
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect
index 91f276a..fc0df85 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect
@@ -1,6 +1,11 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.\nTry adding {}.\nC(this.name);\n ^", "pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: 'this' parameters can only be used on constructors.\nC(this.name);\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
+Try adding {}.
+C(this.name);
+ ^", "pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: 'this' parameters can only be used on constructors.
+C(this.name);
+ ^"]/* from null */;
static method main() → dynamic {}
static abstract method C(dynamic name) → dynamic;
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect
index be28dc6..51e6889 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect
@@ -1,5 +1,8 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':\n Illegal scheme character.\nimport \"dart_:core\";\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
+ Illegal scheme character.
+import \"dart_:core\";
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect
index be28dc6..51e6889 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect
@@ -1,5 +1,8 @@
library;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':\n Illegal scheme character.\nimport \"dart_:core\";\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
+ Illegal scheme character.
+import \"dart_:core\";
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect
index 5fec1e0..e946ea8 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect
@@ -10,7 +10,9 @@
core::print("Actually, I'm a getter, not a constructor.");
}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.\n get A {\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+ get A {
+ ^"]/* from null */;
static method main() → dynamic {
new self::A::•();
}
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect
index 5fec1e0..e946ea8 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect
@@ -10,7 +10,9 @@
core::print("Actually, I'm a getter, not a constructor.");
}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.\n get A {\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+ get A {
+ ^"]/* from null */;
static method main() → dynamic {
new self::A::•();
}
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect
index 2d3588e..a45c042 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect
@@ -1,5 +1,19 @@
library lib;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.\npart '\$foo';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.\npart '\$foo/bar';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.\npart '\$for/bar';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.\npart '\${true}';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.\npart 'the\${1}thing';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.\npart 'part_\$foo\${'a'}.dart';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.\npart 'part_\${'a'}_\$foo.dart';\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
+part '\$foo';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.
+part '\$foo/bar';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.
+part '\$for/bar';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.
+part '\${true}';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.
+part 'the\${1}thing';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.
+part 'part_\$foo\${'a'}.dart';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.
+part 'part_\${'a'}_\$foo.dart';
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect
index 2d3588e..a45c042 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect
@@ -1,5 +1,19 @@
library lib;
import self as self;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.\npart '\$foo';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.\npart '\$foo/bar';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.\npart '\$for/bar';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.\npart '\${true}';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.\npart 'the\${1}thing';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.\npart 'part_\$foo\${'a'}.dart';\n ^", "pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.\npart 'part_\${'a'}_\$foo.dart';\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
+part '\$foo';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.
+part '\$foo/bar';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.
+part '\$for/bar';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.
+part '\${true}';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.
+part 'the\${1}thing';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.
+part 'part_\$foo\${'a'}.dart';
+ ^", "pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.
+part 'part_\${'a'}_\$foo.dart';
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
index 6e85a5c..895f75f 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
@@ -2,6 +2,8 @@
import self as self;
static method bad() → dynamic {
- return invalid-expression "pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.\n return null?.(1);\n ^";
+ return invalid-expression "pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.
+ return null?.(1);
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
index 6e85a5c..895f75f 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
@@ -2,6 +2,8 @@
import self as self;
static method bad() → dynamic {
- return invalid-expression "pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.\n return null?.(1);\n ^";
+ return invalid-expression "pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.
+ return null?.(1);
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
index 2d0fca7..624821f2 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
@@ -2,6 +2,8 @@
import self as self;
static method bad() → dynamic {
- return invalid-expression "pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.\n return null?.[1];\n ^";
+ return invalid-expression "pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.
+ return null?.[1];
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
index 2d0fca7..624821f2 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
@@ -2,6 +2,8 @@
import self as self;
static method bad() → dynamic {
- return invalid-expression "pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.\n return null?.[1];\n ^";
+ return invalid-expression "pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.
+ return null?.[1];
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
index 29c088f..36747ec 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
@@ -10,7 +10,18 @@
operator unary-() → dynamic
return 0;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31183.dart:6:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.\nTry adding the name of the type of the variable or the keyword 'var'.\n operator unary- => 0;\n ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.\n operator unary- => 0;\n ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.\nTry adding the keyword 'operator'.\n operator unary- => 0;\n ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.\nTry adding a parameter list to the method declaration.\n operator unary- => 0;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31183.dart:6:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+Try adding the name of the type of the variable or the keyword 'var'.
+ operator unary- => 0;
+ ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.
+ operator unary- => 0;
+ ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.
+Try adding the keyword 'operator'.
+ operator unary- => 0;
+ ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.
+Try adding a parameter list to the method declaration.
+ operator unary- => 0;
+ ^"]/* from null */;
static method main() → dynamic {
new self::C::•();
}
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
index 29c088f..36747ec 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
@@ -10,7 +10,18 @@
operator unary-() → dynamic
return 0;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31183.dart:6:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.\nTry adding the name of the type of the variable or the keyword 'var'.\n operator unary- => 0;\n ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.\n operator unary- => 0;\n ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.\nTry adding the keyword 'operator'.\n operator unary- => 0;\n ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.\nTry adding a parameter list to the method declaration.\n operator unary- => 0;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31183.dart:6:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+Try adding the name of the type of the variable or the keyword 'var'.
+ operator unary- => 0;
+ ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.
+ operator unary- => 0;
+ ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.
+Try adding the keyword 'operator'.
+ operator unary- => 0;
+ ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.
+Try adding a parameter list to the method declaration.
+ operator unary- => 0;
+ ^"]/* from null */;
static method main() → dynamic {
new self::C::•();
}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
index 8ee7c79..f7b5642 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
@@ -2,9 +2,15 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.\n for (int i = 0, i > 10; i++) {}\n ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.\n for (int i = 0, i > 10; i++) {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.
+ for (int i = 0, i > 10; i++) {}
+ ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.
+ for (int i = 0, i > 10; i++) {}
+ ^"]/* from null */;
static method bad() → dynamic {
- for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.\n for (int i = 0, i > 10; i++) {}\n ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).>(10); i = i.+(1)) {
+ for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.
+ for (int i = 0, i > 10; i++) {}
+ ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).>(10); i = i.+(1)) {
}
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
index f51f3b2..6f23240 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
@@ -2,9 +2,17 @@
import self as self;
import "dart:core" as core;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.\n for (int i = 0, i > 10; i++) {}\n ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.\n for (int i = 0, i > 10; i++) {}\n ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Getter not found: ''.\n for (int i = 0, i > 10; i++) {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.
+ for (int i = 0, i > 10; i++) {}
+ ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.
+ for (int i = 0, i > 10; i++) {}
+ ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Getter not found: ''.
+ for (int i = 0, i > 10; i++) {}
+ ^"]/* from null */;
static method bad() → dynamic {
- for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.\n for (int i = 0, i > 10; i++) {}\n ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).>(10) as{TypeError} core::bool; i = i.{core::num::+}(1)) {
+ for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.
+ for (int i = 0, i > 10; i++) {}
+ ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).>(10) as{TypeError} core::bool; i = i.{core::num::+}(1)) {
}
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
index dc53dd7..d5b19d5 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
@@ -2,6 +2,8 @@
import self as self;
static method bad() → dynamic {
- return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.\n return null?.true;\n ^";
+ return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.
+ return null?.true;
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
index dc53dd7..d5b19d5 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
@@ -2,6 +2,8 @@
import self as self;
static method bad() → dynamic {
- return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.\n return null?.true;\n ^";
+ return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.
+ return null?.true;
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
index 288ffbf..df2ebb4 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
@@ -2,6 +2,8 @@
import self as self;
static method bad() → dynamic {
- return invalid-expression "pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.\n return null?.1;\n ^";
+ return invalid-expression "pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.
+ return null?.1;
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
index 288ffbf..df2ebb4 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
@@ -2,6 +2,8 @@
import self as self;
static method bad() → dynamic {
- return invalid-expression "pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.\n return null?.1;\n ^";
+ return invalid-expression "pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.
+ return null?.1;
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
index bf30fe7..aa56e27 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
@@ -8,5 +8,9 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31190.dart: Error: Can't use type arguments with type variable 'T'.", "pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: 'U' isn't a type.\n T<U> v;\n ^", "pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: 'T' expects 0 type arguments.\n T<U> v;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31190.dart: Error: Can't use type arguments with type variable 'T'.", "pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: 'U' isn't a type.
+ T<U> v;
+ ^", "pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: 'T' expects 0 type arguments.
+ T<U> v;
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
index e92df86..29c3f87 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
@@ -5,7 +5,12 @@
class Increment extends core::Object {
field core::int x = null;
constructor •() → void
- : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: '' isn't an instance field of this class.\n Increment() : x++ {}\n ^" {}
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: '' isn't an instance field of this class.
+ Increment() : x++ {}
+ ^" {}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.\nTo initialize a field, use the syntax 'name = value'.\n Increment() : x++ {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
+To initialize a field, use the syntax 'name = value'.
+ Increment() : x++ {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
index e92df86..29c3f87 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
@@ -5,7 +5,12 @@
class Increment extends core::Object {
field core::int x = null;
constructor •() → void
- : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: '' isn't an instance field of this class.\n Increment() : x++ {}\n ^" {}
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: '' isn't an instance field of this class.
+ Increment() : x++ {}
+ ^" {}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.\nTo initialize a field, use the syntax 'name = value'.\n Increment() : x++ {}\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
+To initialize a field, use the syntax 'name = value'.
+ Increment() : x++ {}
+ ^"]/* from null */;
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
index fb6d550..6421b2c 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
@@ -9,7 +9,10 @@
}
class B extends self::A {
constructor •() → void
- : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n B(): super().foo() {}\n ^".foo() {}
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+ B(): super().foo() {}
+ ^".foo() {}
}
static method bad() → dynamic {
new self::B::•();
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
index fb6d550..6421b2c 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
@@ -9,7 +9,10 @@
}
class B extends self::A {
constructor •() → void
- : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n B(): super().foo() {}\n ^".foo() {}
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+ B(): super().foo() {}
+ ^".foo() {}
}
static method bad() → dynamic {
new self::B::•();
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
index 88fec62..0161677 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
@@ -13,7 +13,11 @@
method foo(core::int a, core::int b) → core::int
return a.+(b.*(this.{self::A::m}));
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31299.dart:10:3: Error: Conflicts with member 'foo'.\n A.foo() : m = 2;\n ^", "pkg/front_end/testcases/regress/issue_31299.dart:11:7: Error: Conflicts with constructor 'A.foo'.\n int foo(int a, int b) => a + b * m;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31299.dart:10:3: Error: Conflicts with member 'foo'.
+ A.foo() : m = 2;
+ ^", "pkg/front_end/testcases/regress/issue_31299.dart:11:7: Error: Conflicts with constructor 'A.foo'.
+ int foo(int a, int b) => a + b * m;
+ ^"]/* from null */;
static method test() → dynamic {
new self::A::•().foo();
new self::A::•().foo(1, 2);
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
index 8f2b5ef..680a6d3 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
@@ -13,7 +13,15 @@
method foo(core::int a, core::int b) → core::int
return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}));
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31299.dart:10:3: Error: Conflicts with member 'foo'.\n A.foo() : m = 2;\n ^", "pkg/front_end/testcases/regress/issue_31299.dart:11:7: Error: Conflicts with constructor 'A.foo'.\n int foo(int a, int b) => a + b * m;\n ^", "pkg/front_end/testcases/regress/issue_31299.dart:18:7: Error: Too many positional arguments to constructor: 0 allowed, 2 given.\n new A.foo(1, 2);\n ^", "pkg/front_end/testcases/regress/issue_31299.dart:15:11: Error: Too few positional arguments to method: 2 required, 0 given.\n new A().foo();\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31299.dart:10:3: Error: Conflicts with member 'foo'.
+ A.foo() : m = 2;
+ ^", "pkg/front_end/testcases/regress/issue_31299.dart:11:7: Error: Conflicts with constructor 'A.foo'.
+ int foo(int a, int b) => a + b * m;
+ ^", "pkg/front_end/testcases/regress/issue_31299.dart:18:7: Error: Too many positional arguments to constructor: 0 allowed, 2 given.
+ new A.foo(1, 2);
+ ^", "pkg/front_end/testcases/regress/issue_31299.dart:15:11: Error: Too few positional arguments to method: 2 required, 0 given.
+ new A().foo();
+ ^"]/* from null */;
static method test() → dynamic {
new self::A::•().{self::A::foo}();
new self::A::•().{self::A::foo}(1, 2);
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
index efdc0dc..cae1a3e 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
@@ -8,7 +8,9 @@
: super core::Object::•()
;
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_32200.dart:8:3: Error: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.\n self.Foo self;\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_32200.dart:8:3: Error: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
+ self.Foo self;
+ ^"]/* from null */;
static method main() → dynamic {
self::Foo instance = new self::Foo::•();
instance.{self::Foo::self} = instance;
diff --git a/pkg/front_end/testcases/reorder_super.dart.direct.expect b/pkg/front_end/testcases/reorder_super.dart.direct.expect
index 66b21ed..4a2f96e 100644
--- a/pkg/front_end/testcases/reorder_super.dart.direct.expect
+++ b/pkg/front_end/testcases/reorder_super.dart.direct.expect
@@ -7,7 +7,8 @@
field core::String y;
constructor •(core::num x, core::String y) → void
: self::B::x = x, self::B::y = y, super core::Object::•() {
- self::events = self::events.+("super(${this.{self::B::x}}, ${this.{self::B::y}})\n");
+ self::events = self::events.+("super(${this.{self::B::x}}, ${this.{self::B::y}})
+");
}
}
class C extends self::B {
@@ -18,16 +19,22 @@
}
static field core::String events = "";
static method f(dynamic x) → core::int {
- self::events = self::events.+("f(${x})\n");
+ self::events = self::events.+("f(${x})
+");
return 0;
}
static method g(dynamic x) → core::String {
- self::events = self::events.+("g(${x})\n");
+ self::events = self::events.+("g(${x})
+");
return "foo";
}
static method main() → dynamic {
new self::C::•();
- if(!self::events.==("f(1)\ng(2)\nf(3)\nsuper(0, foo)\n")) {
+ if(!self::events.==("f(1)
+g(2)
+f(3)
+super(0, foo)
+")) {
throw "Unexpected sequence of events: ${self::events}";
}
}
diff --git a/pkg/front_end/testcases/reorder_super.dart.strong.expect b/pkg/front_end/testcases/reorder_super.dart.strong.expect
index dbd7457..cdd2ae0 100644
--- a/pkg/front_end/testcases/reorder_super.dart.strong.expect
+++ b/pkg/front_end/testcases/reorder_super.dart.strong.expect
@@ -7,7 +7,8 @@
field core::String y;
constructor •(core::num x, core::String y) → void
: self::B::x = x, self::B::y = y, super core::Object::•() {
- self::events = self::events.{core::String::+}("super(${this.{self::B::x}}, ${this.{self::B::y}})\n");
+ self::events = self::events.{core::String::+}("super(${this.{self::B::x}}, ${this.{self::B::y}})
+");
}
}
class C extends self::B {
@@ -18,16 +19,22 @@
}
static field core::String events = "";
static method f(dynamic x) → core::int {
- self::events = self::events.{core::String::+}("f(${x})\n");
+ self::events = self::events.{core::String::+}("f(${x})
+");
return 0;
}
static method g(dynamic x) → core::String {
- self::events = self::events.{core::String::+}("g(${x})\n");
+ self::events = self::events.{core::String::+}("g(${x})
+");
return "foo";
}
static method main() → dynamic {
new self::C::•();
- if(!self::events.{core::String::==}("f(1)\ng(2)\nf(3)\nsuper(0, foo)\n")) {
+ if(!self::events.{core::String::==}("f(1)
+g(2)
+f(3)
+super(0, foo)
+")) {
throw "Unexpected sequence of events: ${self::events}";
}
}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
index e88f16f..2c32b19 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
@@ -8,7 +8,10 @@
;
method f<generic-covariant-impl generic-covariant-interface U extends self::C::T>(self::C::f::U x) → void {}
method g1<generic-covariant-impl generic-covariant-interface U extends self::C::T>() → void {
- this.{self::C::f}<self::C::g1::U>(let final dynamic #t1 = 1.5 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:35: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::C::g1::U'.\n this.f<U> /*@callKind=this*/ (1.5);\n ^");
+ this.{self::C::f}<self::C::g1::U>(let final dynamic #t1 = 1.5 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:35: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::C::g1::U'.
+ this.f<U> /*@callKind=this*/ (1.5);
+ ^");
}
}
static method g2(self::C<core::Object> c) → void {
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
index ef697c2..366750a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
@@ -41,11 +41,17 @@
return 2;
static method main() → void {
self::D d = new self::D::•(new self::C::•<core::num>(self::numToInt));
- let final self::D #t1 = d in #t1.{self::D::value} = let final dynamic #t2 = #t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:50:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.\n d.value /*@checkReturn=(num) -> num*/ += 1;\n ^";
+ let final self::D #t1 = d in #t1.{self::D::value} = let final dynamic #t2 = #t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:50:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
+ d.value /*@checkReturn=(num) -> num*/ += 1;
+ ^";
self::expect(d.{self::D::setValue}(0), 1);
d = new self::D::•(new self::C::•<core::num>(self::numToNum));
self::expectTypeError(() → core::Null {
- let final self::D #t3 = d in #t3.{self::D::value} = let final dynamic #t4 = #t3.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:54:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.\n d.value /*@checkReturn=(num) -> num*/ += 1;\n ^";
+ let final self::D #t3 = d in #t3.{self::D::value} = let final dynamic #t4 = #t3.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:54:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
+ d.value /*@checkReturn=(num) -> num*/ += 1;
+ ^";
});
self::expect(d.{self::D::setValue}, null);
}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
index 93a83ea..df54981 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
@@ -19,9 +19,21 @@
set x(self::B<(self::C::T) → void> value) → void {}
}
static method test(self::C<core::num> c) → void {
- let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t2 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();\n ^");
- self::B<(core::num) → void> y = let final self::C<core::num> #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t4 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();\n ^");
- let final self::C<core::num> #t5 = c in (#t5.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t5.{self::C::x} = let final dynamic #t6 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();\n ^" : null;
- self::B<core::Object> z = let final self::C<core::num> #t7 = c in let final dynamic #t8 = #t7.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t8.{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let final dynamic #t9 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n var z = c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();\n ^" : #t8;
+ let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t2 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
+ c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+ ^");
+ self::B<(core::num) → void> y = let final self::C<core::num> #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t4 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
+ var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+ ^");
+ let final self::C<core::num> #t5 = c in (#t5.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t5.{self::C::x} = let final dynamic #t6 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
+ c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
+ ^" : null;
+ self::B<core::Object> z = let final self::C<core::num> #t7 = c in let final dynamic #t8 = #t7.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t8.{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let final dynamic #t9 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
+ var z = c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
+ ^" : #t8;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/stringliteral.dart.direct.expect b/pkg/front_end/testcases/stringliteral.dart.direct.expect
index 5fce998..ca4c0cb 100644
--- a/pkg/front_end/testcases/stringliteral.dart.direct.expect
+++ b/pkg/front_end/testcases/stringliteral.dart.direct.expect
@@ -3,8 +3,14 @@
static field dynamic color = "brown";
static field dynamic thing = "lazy dog";
-static field dynamic phrase = "The quick ${self::color} fox\njumped over the ${self::thing}.\n";
+static field dynamic phrase = "The quick ${self::color} fox
+jumped over the ${self::thing}.
+";
static field dynamic adjacent = "${self::color}${self::color}${self::color}";
-static field dynamic linebreaks = "${self::color}\n${self::color}\n${self::color}";
-static field dynamic other = "${self::color}\n is \n${self::color}";
+static field dynamic linebreaks = "${self::color}
+${self::color}
+${self::color}";
+static field dynamic other = "${self::color}
+ is
+${self::color}";
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_call.dart.direct.expect b/pkg/front_end/testcases/super_call.dart.direct.expect
index 3a1635a..d97a5e2 100644
--- a/pkg/front_end/testcases/super_call.dart.direct.expect
+++ b/pkg/front_end/testcases/super_call.dart.direct.expect
@@ -16,7 +16,10 @@
method call(core::int x) → core::int
return x.*(3);
method call_super() → core::int {
- return invalid-expression "pkg/front_end/testcases/super_call.dart:14:12: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n return super(5);\n ^";
+ return invalid-expression "pkg/front_end/testcases/super_call.dart:14:12: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+ return super(5);
+ ^";
}
}
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/super_call.dart.strong.expect b/pkg/front_end/testcases/super_call.dart.strong.expect
index bb6aa08..be03ad0 100644
--- a/pkg/front_end/testcases/super_call.dart.strong.expect
+++ b/pkg/front_end/testcases/super_call.dart.strong.expect
@@ -16,7 +16,10 @@
method call(core::int x) → core::int
return x.{core::num::*}(3);
method call_super() → core::int {
- return invalid-expression "pkg/front_end/testcases/super_call.dart:14:12: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n return super(5);\n ^" as{TypeError} core::int;
+ return invalid-expression "pkg/front_end/testcases/super_call.dart:14:12: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+ return super(5);
+ ^" as{TypeError} core::int;
}
}
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
index 94b1e5d..1f6b644 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
@@ -95,8 +95,14 @@
self::use(let final dynamic #t17 = super.{self::A::i} in let final dynamic #t18 = super.{self::B::i} = #t17.+(1) in #t17);
let final core::int #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19).+(1));
self::use(let final core::int #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final void #t22 = super.{self::A::[]=}(#t20, #t21.+(1)) in #t21);
- super.m = let final dynamic #t23 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:91:12: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n super.m++;\n ^";
- self::use(let final () → void #t24 = super.{self::A::m} in let final dynamic #t25 = super.m = let final dynamic #t26 = #t24 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:92:16: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n use(super.m++);\n ^" in #t24);
+ super.m = let final dynamic #t23 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:91:12: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ super.m++;
+ ^";
+ self::use(let final () → void #t24 = super.{self::A::m} in let final dynamic #t25 = super.m = let final dynamic #t26 = #t24 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:92:16: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ use(super.m++);
+ ^" in #t24);
super.{self::A::a} = super.{self::A::a}.+(1);
self::use(super.{self::A::a} = super.{self::A::a}.+(1));
super.{self::A::b} = super.{self::B::b}.+(1);
@@ -117,8 +123,14 @@
self::use(super.{self::B::i} = super.{self::A::i}.+(1));
let final core::int #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27).+(1) in let final void #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
self::use(let final core::int #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30).+(1) in let final void #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
- super.m = let final dynamic #t33 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:114:5: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n ++super.m;\n ^";
- self::use(super.m = let final dynamic #t34 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:115:9: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n use(++super.m);\n ^");
+ super.m = let final dynamic #t33 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:114:5: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ ++super.m;
+ ^";
+ self::use(super.m = let final dynamic #t34 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:115:9: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ use(++super.m);
+ ^");
super.{self::A::a}.call();
self::use(super.{self::A::a}.call());
super.{self::B::b}.call();
@@ -207,8 +219,14 @@
self::use(super.{self::B::i} = super.{self::A::i}.+(42));
let final core::int #t55 = 87 in super.{self::A::[]=}(#t55, super.{self::A::[]}(#t55).+(42));
self::use(let final core::int #t56 = 87 in let final dynamic #t57 = super.{self::A::[]}(#t56).+(42) in let final void #t58 = super.{self::A::[]=}(#t56, #t57) in #t57);
- super.m = let final dynamic #t59 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:208:13: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n super.m += 42;\n ^";
- self::use(super.m = let final dynamic #t60 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:209:17: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n use(super.m += 42);\n ^");
+ super.m = let final dynamic #t59 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:208:13: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ super.m += 42;
+ ^";
+ self::use(super.m = let final dynamic #t60 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:209:17: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+ use(super.m += 42);
+ ^");
super.{self::A::a} = super.{self::A::a}.-(42);
self::use(super.{self::A::a} = super.{self::A::a}.-(42));
super.{self::A::b} = super.{self::B::b}.-(42);
@@ -229,11 +247,121 @@
self::use(super.{self::B::i} = super.{self::A::i}.-(42));
let final core::int #t61 = 87 in super.{self::A::[]=}(#t61, super.{self::A::[]}(#t61).-(42));
self::use(let final core::int #t62 = 87 in let final dynamic #t63 = super.{self::A::[]}(#t62).-(42) in let final void #t64 = super.{self::A::[]=}(#t62, #t63) in #t63);
- super.m = let final dynamic #t65 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:231:13: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n super.m -= 42;\n ^";
- self::use(super.m = let final dynamic #t66 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:232:17: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n use(super.m -= 42);\n ^");
+ super.m = let final dynamic #t65 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:231:13: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+ super.m -= 42;
+ ^";
+ self::use(super.m = let final dynamic #t66 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:232:17: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+ use(super.m -= 42);
+ ^");
}
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/super_rasta_copy.dart:60:11: Error: Superclass has no getter named 'g'.\n super.g;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:61:15: Error: Superclass has no getter named 'g'.\n use(super.g);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:79:11: Error: Superclass has no setter named 'e'.\n super.e++;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:80:15: Error: Superclass has no setter named 'e'.\n use(super.e++);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:81:11: Error: Superclass has no setter named 'f'.\n super.f++;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:82:15: Error: Superclass has no setter named 'f'.\n use(super.f++);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:83:11: Error: Superclass has no getter named 'g'.\n super.g++;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:84:15: Error: Superclass has no getter named 'g'.\n use(super.g++);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:91:11: Error: Superclass has no setter named 'm'.\n super.m++;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:92:15: Error: Superclass has no setter named 'm'.\n use(super.m++);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:102:13: Error: Superclass has no setter named 'e'.\n ++super.e;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:103:17: Error: Superclass has no setter named 'e'.\n use(++super.e);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:104:13: Error: Superclass has no setter named 'f'.\n ++super.f;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:105:17: Error: Superclass has no setter named 'f'.\n use(++super.f);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:106:13: Error: Superclass has no getter named 'g'.\n ++super.g;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:107:17: Error: Superclass has no getter named 'g'.\n use(++super.g);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:114:13: Error: Superclass has no setter named 'm'.\n ++super.m;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:115:17: Error: Superclass has no setter named 'm'.\n use(++super.m);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:129:11: Error: Superclass has no method named 'g'.\n super.g();\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:130:15: Error: Superclass has no method named 'g'.\n use(super.g());\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:150:11: Error: Superclass has no setter named 'e'.\n super.e = 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:151:15: Error: Superclass has no setter named 'e'.\n use(super.e = 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:152:11: Error: Superclass has no setter named 'f'.\n super.f = 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:153:15: Error: Superclass has no setter named 'f'.\n use(super.f = 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:162:11: Error: Superclass has no setter named 'm'.\n super.m = 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:163:15: Error: Superclass has no setter named 'm'.\n use(super.m = 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:173:11: Error: Superclass has no setter named 'e'.\n super.e ??= 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:174:15: Error: Superclass has no setter named 'e'.\n use(super.e ??= 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:175:11: Error: Superclass has no setter named 'f'.\n super.f ??= 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:176:15: Error: Superclass has no setter named 'f'.\n use(super.f ??= 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:177:11: Error: Superclass has no getter named 'g'.\n super.g ??= 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:178:15: Error: Superclass has no getter named 'g'.\n use(super.g ??= 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:185:11: Error: Superclass has no setter named 'm'.\n super.m ??= 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:186:15: Error: Superclass has no setter named 'm'.\n use(super.m ??= 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:196:11: Error: Superclass has no setter named 'e'.\n super.e += 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:197:15: Error: Superclass has no setter named 'e'.\n use(super.e += 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:198:11: Error: Superclass has no setter named 'f'.\n super.f += 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:199:15: Error: Superclass has no setter named 'f'.\n use(super.f += 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:200:11: Error: Superclass has no getter named 'g'.\n super.g += 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:201:15: Error: Superclass has no getter named 'g'.\n use(super.g += 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:208:11: Error: Superclass has no setter named 'm'.\n super.m += 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:209:15: Error: Superclass has no setter named 'm'.\n use(super.m += 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:219:11: Error: Superclass has no setter named 'e'.\n super.e -= 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:220:15: Error: Superclass has no setter named 'e'.\n use(super.e -= 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:221:11: Error: Superclass has no setter named 'f'.\n super.f -= 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:222:15: Error: Superclass has no setter named 'f'.\n use(super.f -= 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:223:11: Error: Superclass has no getter named 'g'.\n super.g -= 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:224:15: Error: Superclass has no getter named 'g'.\n use(super.g -= 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:231:11: Error: Superclass has no setter named 'm'.\n super.m -= 42;\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:232:15: Error: Superclass has no setter named 'm'.\n use(super.m -= 42);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:139:11: Error: Too many positional arguments to method: 0 allowed, 1 given.\n super.m(87);\n ^", "pkg/front_end/testcases/super_rasta_copy.dart:140:15: Error: Too many positional arguments to method: 0 allowed, 1 given.\n use(super.m(87));\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/super_rasta_copy.dart:60:11: Error: Superclass has no getter named 'g'.
+ super.g;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:61:15: Error: Superclass has no getter named 'g'.
+ use(super.g);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:79:11: Error: Superclass has no setter named 'e'.
+ super.e++;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:80:15: Error: Superclass has no setter named 'e'.
+ use(super.e++);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:81:11: Error: Superclass has no setter named 'f'.
+ super.f++;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:82:15: Error: Superclass has no setter named 'f'.
+ use(super.f++);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:83:11: Error: Superclass has no getter named 'g'.
+ super.g++;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:84:15: Error: Superclass has no getter named 'g'.
+ use(super.g++);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:91:11: Error: Superclass has no setter named 'm'.
+ super.m++;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:92:15: Error: Superclass has no setter named 'm'.
+ use(super.m++);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:102:13: Error: Superclass has no setter named 'e'.
+ ++super.e;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:103:17: Error: Superclass has no setter named 'e'.
+ use(++super.e);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:104:13: Error: Superclass has no setter named 'f'.
+ ++super.f;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:105:17: Error: Superclass has no setter named 'f'.
+ use(++super.f);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:106:13: Error: Superclass has no getter named 'g'.
+ ++super.g;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:107:17: Error: Superclass has no getter named 'g'.
+ use(++super.g);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:114:13: Error: Superclass has no setter named 'm'.
+ ++super.m;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:115:17: Error: Superclass has no setter named 'm'.
+ use(++super.m);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:129:11: Error: Superclass has no method named 'g'.
+ super.g();
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:130:15: Error: Superclass has no method named 'g'.
+ use(super.g());
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:150:11: Error: Superclass has no setter named 'e'.
+ super.e = 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:151:15: Error: Superclass has no setter named 'e'.
+ use(super.e = 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:152:11: Error: Superclass has no setter named 'f'.
+ super.f = 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:153:15: Error: Superclass has no setter named 'f'.
+ use(super.f = 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:162:11: Error: Superclass has no setter named 'm'.
+ super.m = 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:163:15: Error: Superclass has no setter named 'm'.
+ use(super.m = 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:173:11: Error: Superclass has no setter named 'e'.
+ super.e ??= 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:174:15: Error: Superclass has no setter named 'e'.
+ use(super.e ??= 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:175:11: Error: Superclass has no setter named 'f'.
+ super.f ??= 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:176:15: Error: Superclass has no setter named 'f'.
+ use(super.f ??= 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:177:11: Error: Superclass has no getter named 'g'.
+ super.g ??= 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:178:15: Error: Superclass has no getter named 'g'.
+ use(super.g ??= 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:185:11: Error: Superclass has no setter named 'm'.
+ super.m ??= 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:186:15: Error: Superclass has no setter named 'm'.
+ use(super.m ??= 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:196:11: Error: Superclass has no setter named 'e'.
+ super.e += 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:197:15: Error: Superclass has no setter named 'e'.
+ use(super.e += 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:198:11: Error: Superclass has no setter named 'f'.
+ super.f += 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:199:15: Error: Superclass has no setter named 'f'.
+ use(super.f += 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:200:11: Error: Superclass has no getter named 'g'.
+ super.g += 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:201:15: Error: Superclass has no getter named 'g'.
+ use(super.g += 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:208:11: Error: Superclass has no setter named 'm'.
+ super.m += 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:209:15: Error: Superclass has no setter named 'm'.
+ use(super.m += 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:219:11: Error: Superclass has no setter named 'e'.
+ super.e -= 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:220:15: Error: Superclass has no setter named 'e'.
+ use(super.e -= 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:221:11: Error: Superclass has no setter named 'f'.
+ super.f -= 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:222:15: Error: Superclass has no setter named 'f'.
+ use(super.f -= 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:223:11: Error: Superclass has no getter named 'g'.
+ super.g -= 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:224:15: Error: Superclass has no getter named 'g'.
+ use(super.g -= 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:231:11: Error: Superclass has no setter named 'm'.
+ super.m -= 42;
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:232:15: Error: Superclass has no setter named 'm'.
+ use(super.m -= 42);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:139:11: Error: Too many positional arguments to method: 0 allowed, 1 given.
+ super.m(87);
+ ^", "pkg/front_end/testcases/super_rasta_copy.dart:140:15: Error: Too many positional arguments to method: 0 allowed, 1 given.
+ use(super.m(87));
+ ^"]/* from null */;
static method use(dynamic x) → dynamic {
if(x.==(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
throw "Shouldn't happen";
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
index 1550e3d..455a17a 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -7,10 +7,18 @@
: super core::Object::•()
;
method method() → invalid-type
- return let final dynamic #t1 = "Hello, World!" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.\nTry changing the type of the left hand side, or casting the right hand side to 'invalid-type'.\n T.String method() => \"Hello, World!\";\n ^";
+ return let final dynamic #t1 = "Hello, World!" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
+Try changing the type of the left hand side, or casting the right hand side to 'invalid-type'.
+ T.String method() => \"Hello, World!\";
+ ^";
}
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: Type 'T.String' not found.\n T.String method() => \"Hello, World!\";\n ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: Type 'T.String' not found.
+ T.String method() => \"Hello, World!\";
+ ^"]/* from null */;
static method main() → dynamic {
- core::String s = let final dynamic #t2 = new self::C::•<dynamic>().{self::C::method}() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n T.String s = new C().method();\n ^";
+ core::String s = let final dynamic #t2 = new self::C::•<dynamic>().{self::C::method}() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+ T.String s = new C().method();
+ ^";
core::print(s);
}
diff --git a/pkg/front_end/testcases/undefined.dart.strong.expect b/pkg/front_end/testcases/undefined.dart.strong.expect
index 28270f8..9ccfc9e 100644
--- a/pkg/front_end/testcases/undefined.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined.dart.strong.expect
@@ -11,10 +11,19 @@
}
static method test(self::C c) → void {
c.{self::C::x};
- let final dynamic #t1 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:14:33: Error: The getter 'y' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'y'.\n c. /*@error=UndefinedGetter*/ y;\n ^";
+ let final dynamic #t1 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:14:33: Error: The getter 'y' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
+ c. /*@error=UndefinedGetter*/ y;
+ ^";
c.{self::C::f}();
- let final dynamic #t2 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:16:33: Error: The method 'g' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing method, or defining a method named 'g'.\n c. /*@error=UndefinedMethod*/ g();\n ^";
+ let final dynamic #t2 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:16:33: Error: The method 'g' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing method, or defining a method named 'g'.
+ c. /*@error=UndefinedMethod*/ g();
+ ^";
c.{self::C::x} = null;
- let final dynamic #t3 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:18:33: Error: The setter 'y' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing setter, or defining a setter or field named 'y'.\n c. /*@error=UndefinedSetter*/ y = null;\n ^";
+ let final dynamic #t3 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:18:33: Error: The setter 'y' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'y'.
+ c. /*@error=UndefinedSetter*/ y = null;
+ ^";
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
index f4b981c..639d3c2 100644
--- a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
@@ -10,7 +10,13 @@
}
static method test(self::C c) → void {
c.{self::C::x} = 1;
- let final self::C #t1 = c in #t1.{self::C::x} = (let final dynamic #t2 = #t1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:13:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'x'.\n c. /*@error=UndefinedGetter*/ x += 1;\n ^").+(1);
- let final self::C #t3 = c in (let final dynamic #t4 = #t3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:14:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'x'.\n c. /*@error=UndefinedGetter*/ x ??= 1;\n ^").==(null) ?{dynamic} #t3.{self::C::x} = 1 : null;
+ let final self::C #t1 = c in #t1.{self::C::x} = (let final dynamic #t2 = #t1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:13:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
+ c. /*@error=UndefinedGetter*/ x += 1;
+ ^").+(1);
+ let final self::C #t3 = c in (let final dynamic #t4 = #t3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:14:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
+ c. /*@error=UndefinedGetter*/ x ??= 1;
+ ^").==(null) ?{dynamic} #t3.{self::C::x} = 1 : null;
}
static method main() → dynamic {}
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 78d03b8..2fa7f84 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -52,7 +52,6 @@
[ $compiler == dart2analyzer ]
dev_compiler/test/options/*: SkipByDesign
-typed_mock/test/typed_mock_test: StaticWarning
[ $compiler != dart2analyzer ]
analyzer/test/src/summary/summarize_fasta_test: RuntimeError, Slow
diff --git a/pkg/typed_mock/LICENSE b/pkg/typed_mock/LICENSE
deleted file mode 100644
index 5c60afe..0000000
--- a/pkg/typed_mock/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2014, the Dart project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of Google Inc. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/typed_mock/README.md b/pkg/typed_mock/README.md
deleted file mode 100644
index 2b24907..0000000
--- a/pkg/typed_mock/README.md
+++ /dev/null
@@ -1,214 +0,0 @@
-A library for mocking classes and verifying expected interaction with mocks.
-
-It is inspired by [Mockito](https://code.google.com/p/mockito/).
-
-Features of this package:
-- Code-completion, static validation, search and refactoring all work properly with mocks.
-- Much better error messages for unit testing.
-- Works with concrete and abstract classes.
-- Does not use mirrors.
-- No dependent packages.
-
-Other Mock libraries for Dart:
-- https://pub.dartlang.org/packages/mockito
-- https://pub.dartlang.org/packages/mock (deprecated)
-
-## Tutorial
-
-Let's take the simple case of making sure that a method is called. The first step is to create a mock of the object, as shown below. One nice feature of Dart is that all classes automatically define interfaces, so you don't need to separately define the interface.
-
-```dart
-import 'package:typed_mock/typed_mock.dart';
-
-class Dog {
- String speak() => "Woof!";
-}
-
-class MockDog extends TypedMock implements Dog {
- noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-```
-
-All of the magic happens because of the noSuchMethod() function. None of the functions for Animal are actually defined because we used `implements` instead of `extends`. Therefore, all calls to this object will end up in `noSuchMethod()`.
-
-#### Verify a function is called
-
-Here's the code to verify that the function is called:
-
-```dart
-
-void main() {
- final dog = new MockDog();
- verifyZeroInteractions(dog);
- dog.speak();
- verify(dog.speak()).once();
- verifyNoMoreInteractions(dog);
-}
-```
-
-One of the interesting features of typed_mock is that it internally tracks all calls to each mock object, then tracks which calls have been matched with a verify() call and which not. Therefore, typed_mock is able to detect unexpected calls, even if those calls are made to methods that didn't exist when the test was written. This can be a good incentive to update your tests whenever you change a class.
-
-After creating the `MockAnimal` object, we call `verifyZeroInteractions()` to make sure that the object starts in a clean state. Next we call the `speak()` method, then prove that the speak function was actually called with `verify().once()`.
-
-There are several other functions for verifying calls that can be used instead of `once()`:
-- `atLeastOnce()` Ensure the function was called one or more times.
-- `times(n)` Ensure the function was called exactly `n` times.
-- `atLeast(n)` Ensure the function was called `n` or more times.
-- `atMost(n)` Ensure the function was called no more than `n` times.
-- `any()` Mark the function call as verified if it was called, but don't fail if it wasn't called.
-- `never()` Ensure the function was never called. It's often better to use `verifyNoMoreInteractions()` instead.
-
-#### Configure the mock to return a value
-
-Here's how to return a value from `speak()`:
-
-```dart
-void main() {
- final dog = new MockDog();
- when(dog.speak()).thenReturn("woof");
- final s = dog.speak();
- print("$s");
- verify(dog.speak()).once();
- verifyNoMoreInteractions(dog);
-}
-```
-
-What if `speak()` took the name of an animal as a parameter? When typed_mock tracks a function call, the call tracking is based on the function name and the parameters. For example:
-
-
-```dart
-import 'package:typed_mock/typed_mock.dart';
-
-abstract class Animal {
- String speak();
-}
-
-class MockAnimal extends TypedMock implements Animal {
- noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-void main() {
- final animal = new MockAnimal();
- when(animal.speak("dog")).thenReturn("woof");
- final s = animal.speak();
- print("$s");
- verify(animal.speak("dog")).once();
-}
-```
-
-Note that you can reset the call and verify tracking using `resetInteractions()`. However, there is no way to reset the `when()` calls. Create a new mock instead.
-
-You can define different results based on the value of the parameter. Notice that the calls to `verify()` explicitly states the parameter value:
-
-```dart
-void main() {
- final animal = new MockAnimal();
- when(animal.speak("cat")).thenReturn("meow");
- when(animal.speak("dog")).thenReturn("woof");
- final s = animal.speak("cat"); // Prints: meow
- verify(animal.speak("cat")).once();
- verify(animal.speak("dog")).never();
-}
-```
-
-#### Match any value for a parameter
-
-Sometimes you don't care about the exact value of the parameter. That's when `anyString` is used, along with its siblings `anyInt`, `anyBool` and `anyObject`.
-
-The value `anyString` is a matcher that matches any String value. For example, here's how to use `anyString` in a call to `when()`:
-
-```dart
-void main() {
- final animal = new MockAnimal();
- when(animal.speak(anyString)).thenReturn("meow");
- final s1 = animal.speak("cat");
- final s2 = animal.speak("dog");
- print("$s1 $s2"); // Prints: meow meow
- verify(animal.speak(anyString)).times(2);
-}
-```
-
-You can also use `anyString` in `verify()` calls, even if the `when()` calls use exact values. For example:
-
-```dart
-void main() {
- final animal = new MockAnimal();
- when(animal.speak("cat")).thenReturn("meow");
- when(animal.speak("dog")).thenReturn("woof");
- var s
- s = animal.speak("cat");
- s = animal.speak("cat");
- s = animal.speak("dog");
- verify(animal.speak(anyString)).times(3);
-}
-```
-
-You can use `anyString` as the parameter for calculated values:
-```dart
- when(animal.speak(anyString)).thenInvoke((String s) => 'The $s speaks!');
-```
-
-In addition to `thenReturn()` and `thenInvoke()`, typed_mock supports `thenReturnList()` and `thenThrow()`. See the link at the end of this document for examples.
-
-#### Mocking operator[] and operator[]=
-
-The typed_mock package is able to track set and get access with operators `[]=` and `[]`, respectively. There's nothing special about these operators - they are just functions with non-alphanumeric names that takes two or one parameters. As with other functions, typed_mock tracks both the index and the value as needed. Note the syntax to verify that a particular array element was assigned a particular value. The act of assigning true is tracked separately from the act of assigning false. The syntax is straightforward.
-
-```dart
-import 'package:typed_mock/typed_mock.dart';
-
-abstract class Tracker {
- operator [](int index);
- operator []=(int index, bool b);
-}
-
-class MockTracker extends TypedMock implements Tracker {
- noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-void main() {
- final tracker = new MockTracker();
- tracker[2] = true;
- when(tracker[3]).thenReturn(false);
- when(tracker[4]).thenReturn(true);
- bool x = tracker[3];
- bool y = tracker[4];
- print("$x $y");
- verify(tracker[1] = true).never();
- verify(tracker[2] = false).never();
- verify(tracker[2] = true).once();
- verify(tracker[3]).once();
- verify(tracker[4]).once();
- verify(tracker[5]).never();
-}
-```
-
-#### Passing mocks as closures
-
-Passing a mock as a function parameter may not behave as you expect because a hidden function is called in the mock to get the closure. The solution is to wrap the call in a separate closure. For example, the call to `verifyNoMoreInteractions()` fails because the reference to `dog.speak` caused a hidden function to be called in `MockDog`.
-
-```dart
-void doSomething(String myfunc()) {}
-
-void main() {
- final dog = new MockDog();
- doSomething(dog.speak);
- verifyNoMoreInteractions(dog);
-}
-```
-
-The solution is as follows:
-
-```dart
-void doSomething(String myfunc()) {}
-
-void main() {
- final dog = new MockDog();
- doSomething(() => dog.speak());
- verifyNoMoreInteractions(dog);
-}
-```
-
-## More Information
-
-For additional examples, see the [unit tests](https://github.com/dart-lang/sdk/blob/master/pkg/typed_mock/test/typed_mock_test.dart).
diff --git a/pkg/typed_mock/lib/typed_mock.dart b/pkg/typed_mock/lib/typed_mock.dart
deleted file mode 100644
index b16420e..0000000
--- a/pkg/typed_mock/lib/typed_mock.dart
+++ /dev/null
@@ -1,426 +0,0 @@
-library typed_mock;
-
-_InvocationMatcher _lastMatcher;
-
-/// Enables stubbing methods.
-///
-/// Use it when you want the mock to return a particular value when a particular
-/// method, getter or setter is called.
-///
-/// when(obj.testProperty).thenReturn(10);
-/// expect(obj.testProperty, 10); // pass
-///
-/// You can specify multiple matchers, which are checked one after another.
-///
-/// when(obj.testMethod(anyInt)).thenReturn('was int');
-/// when(obj.testMethod(anyString)).thenReturn('was String');
-/// expect(obj.testMethod(42), 'was int'); // pass
-/// expect(obj.testMethod('foo'), 'was String'); // pass
-///
-/// You can even provide a function to calculate results.
-/// Function can be also used to capture invocation arguments (if you test some
-/// consumer).
-///
-/// when(obj.testMethod(anyInt)).thenInvoke((int p) => 10 + p);
-/// expect(obj.testMethod(1), 11); // pass
-/// expect(obj.testMethod(5), 15); // pass
-Behavior when(_ignored) {
- try {
- var mock = _lastMatcher._mock;
- mock._removeLastInvocation();
- // set behavior
- var behavior = new Behavior._(_lastMatcher);
- _lastMatcher._behavior = behavior;
- return behavior;
- } finally {
- // clear to prevent memory leak
- _lastMatcher = null;
- }
-}
-
-/// Clears all interactions remembered so far.
-resetInteractions(TypedMock mock) {
- mock._invocations.clear();
- mock._verifiedInvocations.clear();
-}
-
-/// Verifies certain behavior happened a specified number of times.
-Verifier verify(_ignored) {
- try {
- var mock = _lastMatcher._mock;
- mock._removeLastInvocation();
- // set verifier
- return new Verifier._(mock, _lastMatcher);
- } finally {
- // clear to prevent memory leak
- _lastMatcher = null;
- }
-}
-
-/// Verifies that the given mock doesn't have any unverified interaction.
-void verifyNoMoreInteractions(TypedMock mock) {
- var notVerified = mock._computeNotVerifiedInvocations();
- // OK
- if (notVerified.isEmpty) {
- return;
- }
- // fail
- var invocationsString = _getInvocationsString(notVerified);
- throw new VerifyError('Unexpected interactions:\n$invocationsString');
-}
-
-/// Verifies that no interactions happened on the given mock.
-void verifyZeroInteractions(TypedMock mock) {
- var invocations = mock._invocations;
- // OK
- if (invocations.isEmpty) {
- return;
- }
- // fail
- var invocationsString = _getInvocationsString(invocations);
- throw new VerifyError('Unexpected interactions:\n$invocationsString');
-}
-
-/// [VerifyError] is thrown when one of the [verify] checks fails.
-class VerifyError {
- final String message;
- VerifyError(this.message);
- String toString() => 'VerifyError: $message';
-}
-
-String _getInvocationsString(Iterable<Invocation> invocations) {
- var buffer = new StringBuffer();
- invocations.forEach((invocation) {
- var member = invocation.memberName;
- buffer.write(member);
- buffer.write(' ');
- buffer.write(invocation.positionalArguments);
- buffer.write(' ');
- buffer.write(invocation.namedArguments);
- buffer.writeln();
- });
- return buffer.toString();
-}
-
-class _InvocationMatcher {
- final Symbol _member;
- final TypedMock _mock;
- final List<ArgumentMatcher> _matchers = [];
-
- Behavior _behavior;
-
- _InvocationMatcher(this._mock, this._member, Invocation invocation) {
- invocation.positionalArguments.forEach((argument) {
- ArgumentMatcher matcher;
- if (argument is ArgumentMatcher) {
- matcher = argument;
- } else {
- matcher = new _ArgumentMatcher_equals(argument);
- }
- _matchers.add(matcher);
- });
- }
-
- bool match(Invocation invocation) {
- var arguments = invocation.positionalArguments;
- if (arguments.length != _matchers.length) {
- return false;
- }
- for (int i = 0; i < _matchers.length; i++) {
- var matcher = _matchers[i];
- var argument = arguments[i];
- if (!matcher.matches(argument)) {
- return false;
- }
- }
- return true;
- }
-}
-
-class Behavior {
- final _InvocationMatcher _matcher;
-
- Behavior._(this._matcher);
-
- bool _thenFunctionEnabled = false;
- Function _thenFunction;
-
- bool _returnAlwaysEnabled = false;
- var _returnAlways;
-
- bool _returnListEnabled = false;
- List _returnList;
- int _returnListIndex;
-
- bool _throwExceptionEnabled = false;
- var _throwException;
-
- /// Invokes the given [function] with actual arguments and returns its result.
- Behavior thenInvoke(Function function) {
- _reset();
- _thenFunctionEnabled = true;
- _thenFunction = function;
- return this;
- }
-
- /// Returns the specific value.
- Behavior thenReturn(value) {
- _reset();
- _returnAlwaysEnabled = true;
- _returnAlways = value;
- return this;
- }
-
- /// Returns values from the [list] starting from first to the last.
- /// If the end of list is reached a [StateError] is thrown.
- Behavior thenReturnList(List list) {
- _reset();
- _returnListEnabled = true;
- _returnList = list;
- _returnListIndex = 0;
- return this;
- }
-
- /// Throws the specified [exception] object.
- Behavior thenThrow(exception) {
- _reset();
- _throwExceptionEnabled = true;
- _throwException = exception;
- return this;
- }
-
- _reset() {
- _thenFunctionEnabled = false;
- _returnAlwaysEnabled = false;
- _returnListEnabled = false;
- _throwExceptionEnabled = false;
- }
-
- dynamic _getReturnValue(Invocation invocation) {
- // function
- if (_thenFunctionEnabled) {
- return Function.apply(_thenFunction, invocation.positionalArguments,
- invocation.namedArguments);
- }
- // always
- if (_returnAlwaysEnabled) {
- return _returnAlways;
- }
- // list
- if (_returnListEnabled) {
- if (_returnListIndex >= _returnList.length) {
- throw new StateError('All ${_returnList.length} elements for '
- '${_matcher._member} from $_returnList have been exhausted.');
- }
- return _returnList[_returnListIndex++];
- }
- // exception
- if (_throwExceptionEnabled) {
- throw _throwException;
- }
- // no value
- return null;
- }
-}
-
-class Verifier {
- final TypedMock _mock;
- final _InvocationMatcher _matcher;
-
- Verifier._(this._mock, this._matcher);
-
- /// Marks matching interactions as verified and never fails.
- void any() {
- // mark as verified, but don't check the actual count
- _count();
- }
-
- /// Verifies that there was no matching interactions.
- void never() {
- times(0);
- }
-
- /// Verifies that there was exactly one matching interaction.
- void once() {
- times(1);
- }
-
- /// Verifies that there was the specified number of matching interactions.
- void times(int expected) {
- var times = _count();
- if (times != expected) {
- var member = _matcher._member;
- throw new VerifyError('$expected expected, but $times'
- ' invocations of $member recorded.');
- }
- }
-
- /// Verifies that there was at least the specified number of matching
- /// interactions.
- void atLeast(int expected) {
- var times = _count();
- if (times < expected) {
- var member = _matcher._member;
- throw new VerifyError('At least $expected expected, but only $times'
- ' invocations of $member recorded.');
- }
- }
-
- /// Verifies that there was at least one matching interaction.
- void atLeastOnce() {
- var times = _count();
- if (times == 0) {
- var member = _matcher._member;
- throw new VerifyError('At least one expected, but only zero'
- ' invocations of $member recorded.');
- }
- }
-
- /// Verifies that there was at most the specified number of matching
- /// interactions.
- void atMost(int expected) {
- var times = _count();
- if (times > expected) {
- var member = _matcher._member;
- throw new VerifyError('At most $expected expected, but $times'
- ' invocations of $member recorded.');
- }
- }
-
- int _count() {
- var times = 0;
- _mock._invocations.forEach((invocation) {
- if (invocation.memberName != _matcher._member) {
- return;
- }
- if (!_matcher.match(invocation)) {
- return;
- }
- _mock._verifiedInvocations.add(invocation);
- times++;
- });
- return times;
- }
-}
-
-/// A class to extend mocks from.
-/// It supports specifying behavior using [when] and validation of interactions
-/// using [verify].
-///
-/// abstract class Name {
-/// String get firstName;
-/// String get lastName;
-/// }
-/// class NameMock extends TypedMock implements Name {
-/// noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-/// }
-class TypedMock {
- final Map<Symbol, List<_InvocationMatcher>> _matchersMap = {};
-
- final List<Invocation> _invocations = [];
- final Set<Invocation> _verifiedInvocations = new Set<Invocation>();
-
- noSuchMethod(Invocation invocation) {
- _invocations.add(invocation);
- var member = invocation.memberName;
- // prepare invocation matchers
- var matchers = _matchersMap[member];
- if (matchers == null) {
- matchers = [];
- _matchersMap[member] = matchers;
- }
- // check if there is a matcher
- for (var matcher in matchers) {
- if (matcher.match(invocation)) {
- _lastMatcher = matcher;
- // generate value if there is a behavior
- if (matcher._behavior != null) {
- return matcher._behavior._getReturnValue(invocation);
- }
- // probably verification
- return null;
- }
- }
- // add a new matcher
- var matcher = new _InvocationMatcher(this, member, invocation);
- matchers.add(matcher);
- _lastMatcher = matcher;
- }
-
- Iterable<Invocation> _computeNotVerifiedInvocations() {
- notVerified(e) => !_verifiedInvocations.contains(e);
- return _invocations.where(notVerified);
- }
-
- void _removeLastInvocation() {
- _invocations.removeLast();
- }
-}
-
-/// [ArgumentMatcher] checks whether the given argument satisfies some
-/// condition.
-abstract class ArgumentMatcher {
- const ArgumentMatcher();
-
- /// Checks whether this matcher accepts the given argument.
- bool matches(val);
-}
-
-class _ArgumentMatcher_equals extends ArgumentMatcher {
- final expected;
-
- const _ArgumentMatcher_equals(this.expected);
-
- @override
- bool matches(val) {
- return val == expected;
- }
-}
-
-class _ArgumentMatcher_anyBool extends ArgumentMatcher {
- const _ArgumentMatcher_anyBool();
-
- @override
- bool matches(val) {
- return val is bool;
- }
-}
-
-/// Matches any [bool] value.
-final anyBool = const _ArgumentMatcher_anyBool() as dynamic;
-
-class _ArgumentMatcher_anyInt extends ArgumentMatcher {
- const _ArgumentMatcher_anyInt();
-
- @override
- bool matches(val) {
- return val is int;
- }
-}
-
-/// Matches any [int] value.
-final anyInt = const _ArgumentMatcher_anyInt() as dynamic;
-
-class _ArgumentMatcher_anyObject extends ArgumentMatcher {
- const _ArgumentMatcher_anyObject();
-
- @override
- bool matches(val) {
- return true;
- }
-}
-
-/// Matches any [Object] (or subclass) value.
-final anyObject = const _ArgumentMatcher_anyObject() as dynamic;
-
-class _ArgumentMatcher_anyString extends ArgumentMatcher {
- const _ArgumentMatcher_anyString();
-
- @override
- bool matches(val) {
- return val is String;
- }
-}
-
-/// Matches any [String] value.
-final anyString = const _ArgumentMatcher_anyString() as dynamic;
diff --git a/pkg/typed_mock/pubspec.yaml b/pkg/typed_mock/pubspec.yaml
deleted file mode 100644
index 937b128..0000000
--- a/pkg/typed_mock/pubspec.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-name: typed_mock
-version: 0.0.4
-author: Dart Team <misc@dartlang.org>
-description: A library for mocking classes using Mockito-like syntax
-homepage: http://www.dartlang.org
-environment:
- sdk: '>=1.0.0 <2.0.0'
-dev_dependencies:
- unittest: '>=0.10.0 <0.12.0'
diff --git a/pkg/typed_mock/test/typed_mock_test.dart b/pkg/typed_mock/test/typed_mock_test.dart
deleted file mode 100644
index 22bddd9..0000000
--- a/pkg/typed_mock/test/typed_mock_test.dart
+++ /dev/null
@@ -1,391 +0,0 @@
-library test.typed_mock;
-
-import 'package:unittest/unittest.dart';
-
-import 'package:typed_mock/typed_mock.dart';
-
-abstract class TestInterface {
- int get testProperty;
- set testProperty(x);
- int get testPropertyB;
- String testMethod0();
- String testMethod1(a);
- String testMethod2(String a, int b);
- void testMethodVoid(a);
- int operator [](index);
-}
-
-class TestInterfaceMock extends TypedMock implements TestInterface {
- noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-main() {
- // lets make it redable
- groupSep = ' | ';
-
- group('VerifyError', () {
- test('VerifyError', () {
- var error = new VerifyError('msg');
- expect(error.message, 'msg');
- expect(error.toString(), 'VerifyError: msg');
- });
- });
-
- group('Matchers', () {
- test('anyBool', () {
- expect(anyBool.matches(true), true);
- expect(anyBool.matches(false), true);
- expect(anyBool.matches(0), false);
- expect(anyBool.matches('0'), false);
- });
-
- test('anyInt', () {
- expect(anyInt.matches(true), false);
- expect(anyInt.matches(-99), true);
- expect(anyInt.matches(0), true);
- expect(anyInt.matches(42), true);
- expect(anyInt.matches('0'), false);
- });
-
- test('anyObject', () {
- expect(anyObject.matches(true), true);
- expect(anyObject.matches(0), true);
- expect(anyObject.matches('0'), true);
- });
-
- test('anyString', () {
- expect(anyString.matches(true), false);
- expect(anyString.matches(0), false);
- expect(anyString.matches(''), true);
- expect(anyString.matches('0'), true);
- expect(anyString.matches('abc'), true);
- });
- });
-
- group('when', () {
- TestInterface obj;
- setUp(() {
- obj = new TestInterfaceMock();
- });
-
- test('thenInvoke for getter', () {
- when(obj.testProperty).thenInvoke(() => 123);
- expect(obj.testProperty, 123);
- });
-
- test('thenInvoke for method with 1 argument', () {
- when(obj.testMethod1(anyInt)).thenInvoke((int p) => p + 10);
- expect(obj.testMethod1(1), 1 + 10);
- expect(obj.testMethod1(2), 2 + 10);
- expect(obj.testMethod1(10), 10 + 10);
- });
-
- test('thenReturn can replace behavior, getter', () {
- // set a behavior
- when(obj.testProperty).thenReturn(10);
- expect(obj.testProperty, 10);
- // set another behavior
- when(obj.testProperty).thenReturn(20);
- expect(obj.testProperty, 20);
- });
-
- test('thenReturn for getter', () {
- when(obj.testProperty).thenReturn(42);
- expect(obj.testProperty, 42);
- expect(obj.testProperty, 42);
- });
-
- test('thenReturn for []', () {
- when(obj[1]).thenReturn(10);
- when(obj[2]).thenReturn(20);
- when(obj[anyInt]).thenReturn(99);
- expect(obj[1], 10);
- expect(obj[2], 20);
- expect(obj[5], 99);
- });
-
- test('thenReturn for method with 0 arguments', () {
- when(obj.testMethod0()).thenReturn('abc');
- expect(obj.testMethod0(), 'abc');
- expect(obj.testMethod0(), 'abc');
- });
-
- test('thenReturn for method with 1 argument, anyBool', () {
- when(obj.testMethod1(anyBool)).thenReturn('qwerty');
- expect(obj.testMethod1(true), 'qwerty');
- expect(obj.testMethod1(false), 'qwerty');
- });
-
- test('thenReturn for method with 1 argument, anyInt', () {
- when(obj.testMethod1(anyInt)).thenReturn('qwerty');
- expect(obj.testMethod1(2), 'qwerty');
- expect(obj.testMethod1(3), 'qwerty');
- });
-
- test('thenReturn for method with 1 argument, anyObject', () {
- when(obj.testMethod1(anyObject)).thenReturn('qwerty');
- expect(obj.testMethod1([]), 'qwerty');
- expect(obj.testMethod1([1, 2, 3]), 'qwerty');
- });
-
- test('thenReturn for method with 1 argument, argument value', () {
- when(obj.testMethod1(10)).thenReturn('ten');
- when(obj.testMethod1(20)).thenReturn('twenty');
- expect(obj.testMethod1(10), 'ten');
- expect(obj.testMethod1(10), 'ten');
- expect(obj.testMethod1(20), 'twenty');
- expect(obj.testMethod1(20), 'twenty');
- });
-
- test('thenReturn for method with 2 arguments', () {
- when(obj.testMethod2(anyString, 10)).thenReturn('any+10');
- when(obj.testMethod2(anyString, 20)).thenReturn('any+20');
- when(obj.testMethod2(anyString, anyInt)).thenReturn('everything else');
- expect(obj.testMethod2('aaa', 10), 'any+10');
- expect(obj.testMethod2('bbb', 10), 'any+10');
- expect(obj.testMethod2('ccc', 20), 'any+20');
- expect(obj.testMethod2('ddd', 20), 'any+20');
- expect(obj.testMethod2('eee', 99), 'everything else');
- });
-
- test('thenReturnList for getter', () {
- when(obj.testProperty).thenReturnList(['a', 'b', 'c']);
- expect(obj.testProperty, 'a');
- expect(obj.testProperty, 'b');
- expect(obj.testProperty, 'c');
- expect(() => obj.testProperty, throwsA(new isInstanceOf<StateError>()));
- });
-
- test('thenThrow for getter', () {
- Exception e = new Exception();
- when(obj.testProperty).thenThrow(e);
- expect(() => obj.testProperty, throwsA(e));
- });
-
- test('thenThrow for setter, anyInt', () {
- Exception e = new Exception();
- when(obj.testProperty = anyInt).thenThrow(e);
- expect(() => (obj.testProperty = 2), throwsA(e));
- });
-
- test('thenThrow for setter, argument value', () {
- Exception e1 = new Exception('one');
- Exception e2 = new Exception('two');
- when(obj.testProperty = 1).thenThrow(e1);
- when(obj.testProperty = 2).thenThrow(e2);
- expect(() => (obj.testProperty = 1), throwsA(e1));
- expect(() => (obj.testProperty = 1), throwsA(e1));
- expect(() => (obj.testProperty = 2), throwsA(e2));
- expect(() => (obj.testProperty = 2), throwsA(e2));
- });
- });
-
- test('resetInteractions', () {
- TestInterfaceMock obj = new TestInterfaceMock();
- obj.testProperty;
- obj.testMethod0();
- resetInteractions(obj);
- verifyZeroInteractions(obj);
- });
-
- group('verify', () {
- TestInterfaceMock obj;
- setUp(() {
- obj = new TestInterfaceMock();
- });
-
- group('times', () {
- test('OK, getter', () {
- obj.testProperty;
- obj.testProperty;
- verify(obj.testProperty).times(2);
- });
-
- test('OK, 2 getters', () {
- obj.testProperty;
- obj.testPropertyB;
- obj.testProperty;
- verify(obj.testProperty).times(2);
- verify(obj.testPropertyB).times(1);
- });
-
- test('OK, method with 1 argument', () {
- obj.testMethod1(10);
- obj.testMethod1('abc');
- obj.testMethod1(20);
- verify(obj.testMethod1(10)).times(1);
- verify(obj.testMethod1(20)).times(1);
- verify(obj.testMethod1(30)).times(0);
- verify(obj.testMethod1(anyInt)).times(2);
- verify(obj.testMethod1(anyString)).times(1);
- verify(obj.testMethod1(anyBool)).times(0);
- });
-
- test('OK, getter, with thenReturn', () {
- when(obj.testProperty).thenReturn('abc');
- obj.testProperty;
- obj.testProperty;
- verify(obj.testProperty).times(2);
- });
-
- test('OK, void method', () {
- obj.testMethodVoid(10);
- obj.testMethodVoid(20);
- verify(obj.testMethodVoid(anyInt)).times(2);
- });
-
- test('mismatch, getter', () {
- obj.testProperty;
- obj.testProperty;
- obj.testProperty;
- expect(() {
- verify(obj.testProperty).times(2);
- }, throwsA(_isVerifyError));
- });
- });
-
- group('never', () {
- test('OK', () {
- verify(obj.testProperty).never();
- });
- test('mismatch', () {
- obj.testProperty;
- expect(() {
- verify(obj.testProperty).never();
- }, throwsA(_isVerifyError));
- });
- });
-
- group('any', () {
- test('OK, 0', () {
- verify(obj.testProperty).any();
- });
- test('OK, 1', () {
- obj.testProperty;
- verify(obj.testProperty).any();
- });
- });
-
- group('once', () {
- test('OK', () {
- obj.testProperty;
- verify(obj.testProperty).once();
- });
- test('mismatch, actually 0', () {
- expect(() {
- verify(obj.testProperty).once();
- }, throwsA(_isVerifyError));
- });
- test('mismatch, actually 2', () {
- obj.testProperty;
- obj.testProperty;
- expect(() {
- verify(obj.testProperty).once();
- }, throwsA(_isVerifyError));
- });
- });
-
- group('atLeast', () {
- test('OK, 1', () {
- obj.testProperty;
- verify(obj.testProperty).atLeast(1);
- });
- test('OK, 2', () {
- obj.testProperty;
- obj.testProperty;
- verify(obj.testProperty).atLeast(1);
- verify(obj.testProperty).atLeast(2);
- });
- test('mismatch', () {
- obj.testProperty;
- obj.testProperty;
- expect(() {
- verify(obj.testProperty).atLeast(10);
- }, throwsA(_isVerifyError));
- });
- });
-
- group('atLeastOnce', () {
- test('OK, 1', () {
- obj.testProperty;
- verify(obj.testProperty).atLeastOnce();
- });
- test('OK, 2', () {
- obj.testProperty;
- obj.testProperty;
- verify(obj.testProperty).atLeastOnce();
- });
- test('fail', () {
- expect(() {
- verify(obj.testProperty).atLeastOnce();
- }, throwsA(_isVerifyError));
- });
- });
-
- group('atMost', () {
- test('OK, 0', () {
- verify(obj.testProperty).atMost(5);
- verify(obj.testProperty).atMost(0);
- });
- test('OK, 2', () {
- obj.testProperty;
- obj.testProperty;
- verify(obj.testProperty).atMost(5);
- verify(obj.testProperty).atMost(3);
- verify(obj.testProperty).atMost(2);
- });
- test('mismatch', () {
- obj.testProperty;
- obj.testProperty;
- obj.testProperty;
- expect(() {
- verify(obj.testProperty).atMost(2);
- }, throwsA(_isVerifyError));
- });
- });
-
- group('verifyNoMoreInteractions', () {
- test('OK, 0', () {
- verifyNoMoreInteractions(obj);
- });
- test('OK, single method, 1', () {
- obj.testMethod1(10);
- verify(obj.testMethod1(anyInt)).any();
- verifyNoMoreInteractions(obj);
- });
- test('fail, 3', () {
- obj.testMethod1(10);
- obj.testMethod2('foo', 20);
- obj.testMethod1(30);
- expect(() {
- verifyNoMoreInteractions(obj);
- }, throwsA(_isVerifyError));
- });
- });
-
- group('verifyZeroInteractions', () {
- test('OK, 0', () {
- verifyZeroInteractions(obj);
- });
- test('OK, 0, local var', () {
- var obj = new TestInterfaceMock();
- verifyZeroInteractions(obj);
- });
- test('fail, 1, no verify()', () {
- obj.testMethod1(10);
- expect(() {
- verifyZeroInteractions(obj);
- }, throwsA(_isVerifyError));
- });
- test('fail, 1, with verify()', () {
- obj.testMethod1(10);
- verify(obj.testMethod1(anyInt)).any();
- expect(() {
- verifyZeroInteractions(obj);
- }, throwsA(_isVerifyError));
- });
- });
- });
-}
-
-const _isVerifyError = const isInstanceOf<VerifyError>();
diff --git a/runtime/platform/growable_array.h b/runtime/platform/growable_array.h
index 28e04f6..32ffcc4 100644
--- a/runtime/platform/growable_array.h
+++ b/runtime/platform/growable_array.h
@@ -130,6 +130,14 @@
// Sort the array in place.
inline void Sort(int compare(const T*, const T*));
+ void StealBuffer(T** buffer, intptr_t* length) {
+ *buffer = data_;
+ *length = length_;
+ data_ = NULL;
+ length_ = 0;
+ capacity_ = 0;
+ }
+
private:
intptr_t length_;
intptr_t capacity_;
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 0789457..ad2aa9f 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -157,6 +157,7 @@
cc/StackTraceMallocHookLengthTest: Fail # Please triage.
[ $compiler == dartk && $mode == release && $runtime == vm ]
+cc/CorelibIsolateStartup: Timeout, Pass
cc/InjectNativeFields1: Fail
cc/Service_TokenStream: Fail
@@ -311,12 +312,12 @@
cc/IsolateReload_TypeIdentity: Crash
cc/IsolateReload_TypeIdentityGeneric: Crash
cc/IsolateReload_TypeIdentityParameter: Crash
-cc/Profiler_BasicSourcePosition: Fail
-cc/Profiler_CodeTicks: Fail
+cc/Profiler_BasicSourcePosition: Fail, Pass
+cc/Profiler_CodeTicks: Fail, Pass
cc/Profiler_ContextAllocation: Fail, Pass # Flaky on Windows --- sometimes give "profiler_test.cc: 1107: error: expected: !walker.Down()"
-cc/Profiler_FunctionTicks: Fail
-cc/Profiler_ToggleRecordAllocation: Fail
-cc/Profiler_TrivialRecordAllocation: Fail
+cc/Profiler_FunctionTicks: Fail, Pass
+cc/Profiler_ToggleRecordAllocation: Fail, Pass
+cc/Profiler_TrivialRecordAllocation: Fail, Pass
cc/Service_Address: Fail
cc/Service_Code: Fail
@@ -332,7 +333,7 @@
cc/IsolateReload_LibraryImportAdded: Crash # Issue 32190
cc/IsolateReload_LibraryImportRemoved: Fail # Issue 32190
cc/IsolateReload_LibraryLookup: Crash # Issue 32190
-cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Fail # Issue 32190
+cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Fail, Crash # Issue 32190
cc/StackMapGC: Crash # Issue 32190
dart/optimized_stacktrace_line_and_column_test: CompileTimeError # Issue 31586
dart/optimized_stacktrace_line_test: CompileTimeError # Issue 31586
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 41175e8..449e737 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -7880,9 +7880,10 @@
TokenPosition* position) {
if (position != NULL) *position = TokenPosition::kNoSource;
- intptr_t offset = ReaderOffset() - 1; // EvaluateExpression needs the tag.
- SkipStringReference(); // read index into string table.
- return Constant(constant_evaluator_.EvaluateExpression(offset));
+ Double& constant =
+ Double::ZoneHandle(Z, Double::New(H.DartString(ReadStringReference()),
+ Heap::kOld)); // read string reference.
+ return Constant(constant);
}
Fragment StreamingFlowGraphBuilder::BuildBoolLiteral(bool value,
diff --git a/runtime/vm/dart_api_message.cc b/runtime/vm/dart_api_message.cc
index 0951659..f28e915 100644
--- a/runtime/vm/dart_api_message.cc
+++ b/runtime/vm/dart_api_message.cc
@@ -14,12 +14,15 @@
ApiMessageReader::ApiMessageReader(Message* msg)
: BaseReader(msg->IsRaw() ? reinterpret_cast<uint8_t*>(msg->raw_obj())
- : msg->data(),
- msg->len()),
+ : msg->snapshot(),
+ msg->snapshot_length()),
zone_(NULL),
backward_references_(kNumInitialReferences),
vm_isolate_references_(kNumInitialReferences),
- vm_symbol_references_(NULL) {}
+ vm_symbol_references_(NULL),
+ finalizable_data_(msg->finalizable_data()) {}
+
+ApiMessageReader::~ApiMessageReader() {}
void ApiMessageReader::Init() {
// We need to have an enclosing ApiNativeScope.
@@ -672,72 +675,77 @@
#define READ_TYPED_DATA(type, ctype) \
{ \
READ_TYPED_DATA_HEADER(type); \
- if (len > 0) { \
- ctype* p = reinterpret_cast<ctype*>(object->value.as_typed_data.values); \
- for (intptr_t i = 0; i < len; i++) { \
- p[i] = Read<ctype>(); \
- } \
- } \
+ uint8_t* p = \
+ reinterpret_cast<uint8_t*>(object->value.as_typed_data.values); \
+ ReadBytes(p, len * sizeof(ctype)); \
+ return object; \
+ }
+
+#define READ_EXTERNAL_TYPED_DATA(type, ctype) \
+ { \
+ READ_TYPED_DATA_HEADER(type); \
+ uint8_t* p = \
+ reinterpret_cast<uint8_t*>(object->value.as_typed_data.values); \
+ FinalizableData finalizable_data = finalizable_data_->Take(); \
+ memmove(p, finalizable_data.data, len * sizeof(ctype)); \
+ finalizable_data.callback(NULL, NULL, finalizable_data.peer); \
return object; \
}
case kTypedDataInt8ArrayCid:
- case kExternalTypedDataInt8ArrayCid: {
- READ_TYPED_DATA_HEADER(Int8);
- if (len > 0) {
- uint8_t* p =
- reinterpret_cast<uint8_t*>(object->value.as_typed_data.values);
- ReadBytes(p, len);
- }
- return object;
- }
+ READ_TYPED_DATA(Int8, int8_t);
+ case kExternalTypedDataInt8ArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Int8, int8_t);
case kTypedDataUint8ArrayCid:
- case kExternalTypedDataUint8ArrayCid: {
- READ_TYPED_DATA_HEADER(Uint8);
- if (len > 0) {
- uint8_t* p =
- reinterpret_cast<uint8_t*>(object->value.as_typed_data.values);
- ReadBytes(p, len);
- }
- return object;
- }
+ READ_TYPED_DATA(Uint8, uint8_t);
+ case kExternalTypedDataUint8ArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Uint8, uint8_t);
case kTypedDataUint8ClampedArrayCid:
- case kExternalTypedDataUint8ClampedArrayCid:
READ_TYPED_DATA(Uint8Clamped, uint8_t);
+ case kExternalTypedDataUint8ClampedArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Uint8Clamped, uint8_t);
case kTypedDataInt16ArrayCid:
- case kExternalTypedDataInt16ArrayCid:
READ_TYPED_DATA(Int16, int16_t);
+ case kExternalTypedDataInt16ArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Int16, int16_t);
case kTypedDataUint16ArrayCid:
- case kExternalTypedDataUint16ArrayCid:
READ_TYPED_DATA(Uint16, uint16_t);
+ case kExternalTypedDataUint16ArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Uint16, uint16_t);
case kTypedDataInt32ArrayCid:
- case kExternalTypedDataInt32ArrayCid:
READ_TYPED_DATA(Int32, int32_t);
+ case kExternalTypedDataInt32ArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Int32, int32_t);
case kTypedDataUint32ArrayCid:
- case kExternalTypedDataUint32ArrayCid:
READ_TYPED_DATA(Uint32, uint32_t);
+ case kExternalTypedDataUint32ArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Uint32, uint32_t);
case kTypedDataInt64ArrayCid:
- case kExternalTypedDataInt64ArrayCid:
READ_TYPED_DATA(Int64, int64_t);
+ case kExternalTypedDataInt64ArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Int64, int64_t);
case kTypedDataUint64ArrayCid:
- case kExternalTypedDataUint64ArrayCid:
READ_TYPED_DATA(Uint64, uint64_t);
+ case kExternalTypedDataUint64ArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Uint64, uint64_t);
case kTypedDataFloat32ArrayCid:
- case kExternalTypedDataFloat32ArrayCid:
READ_TYPED_DATA(Float32, float);
+ case kExternalTypedDataFloat32ArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Float32, float);
case kTypedDataFloat64ArrayCid:
- case kExternalTypedDataFloat64ArrayCid:
READ_TYPED_DATA(Float64, double);
+ case kExternalTypedDataFloat64ArrayCid:
+ READ_EXTERNAL_TYPED_DATA(Float64, double);
case kGrowableObjectArrayCid: {
// A GrowableObjectArray is serialized as its type arguments and
@@ -862,12 +870,14 @@
object_id_(0),
forward_list_(NULL),
forward_list_length_(0),
- forward_id_(0) {
+ forward_id_(0),
+ finalizable_data_(new MessageFinalizableData()) {
ASSERT(kDartCObjectTypeMask >= Dart_CObject_kNumberOfTypes - 1);
}
ApiMessageWriter::~ApiMessageWriter() {
::free(forward_list_);
+ delete finalizable_data_;
}
void ApiMessageWriter::MarkCObject(Dart_CObject* object, intptr_t object_id) {
@@ -1180,17 +1190,12 @@
case kTypedDataInt8ArrayCid:
case kTypedDataUint8ArrayCid: {
uint8_t* bytes = object->value.as_typed_data.values;
- for (intptr_t i = 0; i < len; i++) {
- Write<uint8_t>(bytes[i]);
- }
+ WriteBytes(bytes, len);
break;
}
case kTypedDataUint32ArrayCid: {
- uint32_t* words =
- reinterpret_cast<uint32_t*>(object->value.as_typed_data.values);
- for (intptr_t i = 0; i < len; i++) {
- Write<uint32_t>(words[i]);
- }
+ uint8_t* bytes = object->value.as_typed_data.values;
+ WriteBytes(bytes, len * sizeof(uint32_t));
break;
}
default:
@@ -1219,9 +1224,8 @@
Dart_WeakPersistentHandleFinalizer callback =
object->value.as_external_typed_data.callback;
WriteSmi(length);
- WriteRawPointerValue(reinterpret_cast<intptr_t>(data));
- WriteRawPointerValue(reinterpret_cast<intptr_t>(peer));
- WriteRawPointerValue(reinterpret_cast<intptr_t>(callback));
+ finalizable_data_->Put(length, reinterpret_cast<void*>(data), peer,
+ callback);
break;
}
case Dart_CObject_kSendPort: {
@@ -1255,6 +1259,7 @@
free(buffer());
return NULL;
}
+
// Write out all objects that were added to the forward list and have
// not been serialized yet. These would typically be fields of arrays.
// NOTE: The forward list might grow as we process the list.
@@ -1266,8 +1271,12 @@
return NULL;
}
}
+
UnmarkAllCObjects(object);
- return new Message(dest_port, buffer(), BytesWritten(), priority);
+ MessageFinalizableData* finalizable_data = finalizable_data_;
+ finalizable_data_ = NULL;
+ return new Message(dest_port, buffer(), BytesWritten(), finalizable_data,
+ priority);
}
} // namespace dart
diff --git a/runtime/vm/dart_api_message.h b/runtime/vm/dart_api_message.h
index 349ab5f..9c9a3ab 100644
--- a/runtime/vm/dart_api_message.h
+++ b/runtime/vm/dart_api_message.h
@@ -48,7 +48,7 @@
// Allocation of all C Heap objects is done in the zone associated with
// the enclosing ApiNativeScope.
explicit ApiMessageReader(Message* message);
- ~ApiMessageReader() {}
+ ~ApiMessageReader();
Dart_CObject* ReadMessage();
@@ -148,6 +148,9 @@
Dart_CObject type_arguments_marker;
Dart_CObject dynamic_type_marker;
+
+ MessageFinalizableData* finalizable_data_;
+
static _Dart_CObject* singleton_uint32_typed_data_;
};
@@ -190,6 +193,7 @@
Dart_CObject** forward_list_;
intptr_t forward_list_length_;
intptr_t forward_id_;
+ MessageFinalizableData* finalizable_data_;
DISALLOW_COPY_AND_ASSIGN(ApiMessageWriter);
};
diff --git a/runtime/vm/finalizable_data.h b/runtime/vm/finalizable_data.h
new file mode 100644
index 0000000..f4ae01a
--- /dev/null
+++ b/runtime/vm/finalizable_data.h
@@ -0,0 +1,59 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef RUNTIME_VM_FINALIZABLE_DATA_H_
+#define RUNTIME_VM_FINALIZABLE_DATA_H_
+
+#include "include/dart_api.h"
+#include "platform/growable_array.h"
+#include "vm/globals.h"
+
+namespace dart {
+
+struct FinalizableData {
+ void* data;
+ void* peer;
+ Dart_WeakPersistentHandleFinalizer callback;
+};
+
+class MessageFinalizableData {
+ public:
+ MessageFinalizableData() : records_(0), position_(0), external_size_(0) {}
+
+ ~MessageFinalizableData() {
+ for (intptr_t i = position_; i < records_.length(); i++) {
+ records_[i].callback(NULL, NULL, records_[i].peer);
+ }
+ }
+
+ void Put(intptr_t external_size,
+ void* data,
+ void* peer,
+ Dart_WeakPersistentHandleFinalizer callback) {
+ FinalizableData finalizable_data;
+ finalizable_data.data = data;
+ finalizable_data.peer = peer;
+ finalizable_data.callback = callback;
+ records_.Add(finalizable_data);
+ external_size_ += external_size;
+ }
+
+ FinalizableData Take() {
+ ASSERT(position_ < records_.length());
+ return records_[position_++];
+ }
+
+ intptr_t external_size() const { return external_size_; }
+
+ private:
+ MallocGrowableArray<FinalizableData> records_;
+ intptr_t position_;
+ intptr_t external_size_;
+
+ DISALLOW_COPY_AND_ASSIGN(MessageFinalizableData);
+};
+
+} // namespace dart
+
+#endif // RUNTIME_VM_FINALIZABLE_DATA_H_
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 0e1f65a2..3dbb929 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -117,7 +117,6 @@
};
#endif
-// TODO(zra): Allocation of Message objects should be centralized.
static Message* SerializeMessage(Dart_Port dest_port, const Instance& obj) {
if (ApiObjectConverter::CanConvert(obj.raw())) {
return new Message(dest_port, obj.raw(), Message::kNormalPriority);
@@ -127,6 +126,21 @@
}
}
+static RawInstance* DeserializeMessage(Thread* thread, Message* message) {
+ if (message == NULL) {
+ return Instance::null();
+ }
+ Zone* zone = thread->zone();
+ if (message->IsRaw()) {
+ return Instance::RawCast(message->raw_obj());
+ } else {
+ MessageSnapshotReader reader(message, thread);
+ const Object& obj = Object::Handle(zone, reader.ReadObject());
+ ASSERT(!obj.IsError());
+ return Instance::RawCast(obj.raw());
+ }
+}
+
bool IsolateVisitor::IsVMInternalIsolate(Isolate* isolate) const {
return Isolate::IsVMInternalIsolate(isolate);
}
@@ -2771,19 +2785,6 @@
thread_registry()->ReturnThreadLocked(is_mutator, thread);
}
-static RawInstance* DeserializeObject(Thread* thread, Message* message) {
- if (message == NULL) {
- return Instance::null();
- }
- MessageSnapshotReader reader(message, thread);
- Zone* zone = thread->zone();
- const Object& obj = Object::Handle(zone, reader.ReadObject());
- ASSERT(!obj.IsError());
- Instance& instance = Instance::Handle(zone);
- instance ^= obj.raw(); // Can't use Instance::Cast because may be null.
- return instance.raw();
-}
-
static const char* NewConstChar(const char* chars) {
size_t len = strlen(chars);
char* mem = new char[len + 1];
@@ -2969,11 +2970,11 @@
}
RawInstance* IsolateSpawnState::BuildArgs(Thread* thread) {
- return DeserializeObject(thread, serialized_args_);
+ return DeserializeMessage(thread, serialized_args_);
}
RawInstance* IsolateSpawnState::BuildMessage(Thread* thread) {
- return DeserializeObject(thread, serialized_message_);
+ return DeserializeMessage(thread, serialized_message_);
}
void IsolateSpawnState::DecrementSpawnCount() {
diff --git a/runtime/vm/message.cc b/runtime/vm/message.cc
index 6fa77d8..82816de 100644
--- a/runtime/vm/message.cc
+++ b/runtime/vm/message.cc
@@ -12,18 +12,21 @@
namespace dart {
Message::Message(Dart_Port dest_port,
- uint8_t* data,
- intptr_t len,
+ uint8_t* snapshot,
+ intptr_t snapshot_length,
+ MessageFinalizableData* finalizable_data,
Priority priority,
Dart_Port delivery_failure_port)
: next_(NULL),
dest_port_(dest_port),
delivery_failure_port_(delivery_failure_port),
- data_(data),
- len_(len),
+ snapshot_(snapshot),
+ snapshot_length_(snapshot_length),
+ finalizable_data_(finalizable_data),
priority_(priority) {
ASSERT((priority == kNormalPriority) ||
(delivery_failure_port == kIllegalPort));
+ ASSERT(!IsRaw());
}
Message::Message(Dart_Port dest_port,
@@ -33,19 +36,22 @@
: next_(NULL),
dest_port_(dest_port),
delivery_failure_port_(delivery_failure_port),
- data_(reinterpret_cast<uint8_t*>(raw_obj)),
- len_(0),
+ snapshot_(reinterpret_cast<uint8_t*>(raw_obj)),
+ snapshot_length_(0),
+ finalizable_data_(NULL),
priority_(priority) {
ASSERT(!raw_obj->IsHeapObject() || raw_obj->IsVMHeapObject());
ASSERT((priority == kNormalPriority) ||
(delivery_failure_port == kIllegalPort));
+ ASSERT(IsRaw());
}
Message::~Message() {
ASSERT(delivery_failure_port_ == kIllegalPort);
- if (len_ > 0) {
- free(data_);
+ if (!IsRaw()) {
+ free(snapshot_);
}
+ delete finalizable_data_;
}
bool Message::RedirectToDeliveryFailurePort() {
@@ -221,7 +227,7 @@
message.AddProperty("type", "Message");
message.AddPropertyF("name", "Isolate Message (%" Px ")", current->Id());
message.AddPropertyF("messageObjectId", "messages/%" Px "", current->Id());
- message.AddProperty("size", current->len());
+ message.AddProperty("size", current->Size());
message.AddProperty("index", depth++);
message.AddPropertyF("_destinationPort", "%" Pd64 "",
static_cast<int64_t>(current->dest_port()));
diff --git a/runtime/vm/message.h b/runtime/vm/message.h
index db46955..51ff2551 100644
--- a/runtime/vm/message.h
+++ b/runtime/vm/message.h
@@ -7,6 +7,7 @@
#include "platform/assert.h"
#include "vm/allocation.h"
+#include "vm/finalizable_data.h"
#include "vm/globals.h"
// Duplicated from dart_api.h to avoid including the whole header.
@@ -45,8 +46,9 @@
// message will be disposed by calling free() once the message object is
// being destructed (after delivery or when the receiving port is closed).
Message(Dart_Port dest_port,
- uint8_t* data,
- intptr_t len,
+ uint8_t* snapshot,
+ intptr_t snapshot_length,
+ MessageFinalizableData* finalizable_data,
Priority priority,
Dart_Port delivery_failure_port = kIllegalPort);
@@ -56,22 +58,35 @@
RawObject* raw_obj,
Priority priority,
Dart_Port delivery_failure_port = kIllegalPort);
+
~Message();
Dart_Port dest_port() const { return dest_port_; }
- uint8_t* data() const {
- ASSERT(len_ > 0);
- return data_;
+
+ uint8_t* snapshot() const {
+ ASSERT(!IsRaw());
+ return snapshot_;
}
- intptr_t len() const { return len_; }
+ intptr_t snapshot_length() const { return snapshot_length_; }
+
+ MessageFinalizableData* finalizable_data() { return finalizable_data_; }
+
+ intptr_t Size() const {
+ intptr_t size = snapshot_length_;
+ if (finalizable_data_ != NULL) {
+ size += finalizable_data_->external_size();
+ }
+ return size;
+ }
+
RawObject* raw_obj() const {
- ASSERT(len_ == 0);
- return reinterpret_cast<RawObject*>(data_);
+ ASSERT(IsRaw());
+ return reinterpret_cast<RawObject*>(snapshot_);
}
Priority priority() const { return priority_; }
bool IsOOB() const { return priority_ == Message::kOOBPriority; }
- bool IsRaw() const { return len_ == 0; }
+ bool IsRaw() const { return snapshot_length_ == 0; }
bool RedirectToDeliveryFailurePort();
@@ -85,8 +100,9 @@
Message* next_;
Dart_Port dest_port_;
Dart_Port delivery_failure_port_;
- uint8_t* data_;
- intptr_t len_;
+ uint8_t* snapshot_;
+ intptr_t snapshot_length_;
+ MessageFinalizableData* finalizable_data_;
Priority priority_;
DISALLOW_COPY_AND_ASSIGN(Message);
diff --git a/runtime/vm/message_handler.cc b/runtime/vm/message_handler.cc
index 238e6f3..eb14377 100644
--- a/runtime/vm/message_handler.cc
+++ b/runtime/vm/message_handler.cc
@@ -135,7 +135,7 @@
"\tlen: %" Pd "\n\tsource: (%" Pd64
") %s\n\tdest: %s\n"
"\tdest_port: %" Pd64 "\n",
- message->len(), static_cast<int64_t>(source_isolate->main_port()),
+ message->Size(), static_cast<int64_t>(source_isolate->main_port()),
source_isolate->name(), name(), message->dest_port());
} else {
OS::Print(
@@ -144,7 +144,7 @@
"\n\tsource: <native code>\n"
"\tdest: %s\n"
"\tdest_port: %" Pd64 "\n",
- message->len(), name(), message->dest_port());
+ message->Size(), name(), message->dest_port());
}
}
@@ -212,7 +212,7 @@
: Message::kOOBPriority);
Message* message = DequeueMessage(min_priority);
while (message != NULL) {
- intptr_t message_len = message->len();
+ intptr_t message_len = message->Size();
if (FLAG_trace_isolates) {
OS::Print(
"[<] Handling message:\n"
diff --git a/runtime/vm/message_handler_test.cc b/runtime/vm/message_handler_test.cc
index 183453b..75e0077 100644
--- a/runtime/vm/message_handler_test.cc
+++ b/runtime/vm/message_handler_test.cc
@@ -113,13 +113,18 @@
return (reinterpret_cast<TestMessageHandler*>(data))->End();
}
+static Message* BlankMessage(Dart_Port dest, Message::Priority priority) {
+ return new Message(dest, reinterpret_cast<uint8_t*>(malloc(1)), 1, NULL,
+ priority);
+}
+
VM_UNIT_TEST_CASE(MessageHandler_PostMessage) {
TestMessageHandler handler;
MessageHandlerTestPeer handler_peer(&handler);
EXPECT_EQ(0, handler.notify_count());
// Post a message.
- Message* message = new Message(1, NULL, 0, Message::kNormalPriority);
+ Message* message = BlankMessage(1, Message::kNormalPriority);
handler_peer.PostMessage(message);
// The notify callback is called.
@@ -131,7 +136,7 @@
delete message;
// Post an oob message.
- message = new Message(1, NULL, 0, Message::kOOBPriority);
+ message = BlankMessage(1, Message::kOOBPriority);
handler_peer.PostMessage(message);
// The notify callback is called.
@@ -150,7 +155,7 @@
EXPECT(!handler.HasOOBMessages());
// Post a normal message.
- Message* message = new Message(1, NULL, 0, Message::kNormalPriority);
+ Message* message = BlankMessage(1, Message::kNormalPriority);
handler_peer.PostMessage(message);
EXPECT(!handler.HasOOBMessages());
{
@@ -160,7 +165,7 @@
}
// Post an oob message.
- message = new Message(1, NULL, 0, Message::kOOBPriority);
+ message = BlankMessage(1, Message::kOOBPriority);
handler_peer.PostMessage(message);
EXPECT(handler.HasOOBMessages());
{
@@ -178,9 +183,9 @@
VM_UNIT_TEST_CASE(MessageHandler_ClosePort) {
TestMessageHandler handler;
MessageHandlerTestPeer handler_peer(&handler);
- Message* message1 = new Message(1, NULL, 0, Message::kNormalPriority);
+ Message* message1 = BlankMessage(1, Message::kNormalPriority);
handler_peer.PostMessage(message1);
- Message* message2 = new Message(2, NULL, 0, Message::kNormalPriority);
+ Message* message2 = BlankMessage(2, Message::kNormalPriority);
handler_peer.PostMessage(message2);
handler_peer.ClosePort(1);
@@ -195,9 +200,9 @@
VM_UNIT_TEST_CASE(MessageHandler_CloseAllPorts) {
TestMessageHandler handler;
MessageHandlerTestPeer handler_peer(&handler);
- Message* message1 = new Message(1, NULL, 0, Message::kNormalPriority);
+ Message* message1 = BlankMessage(1, Message::kNormalPriority);
handler_peer.PostMessage(message1);
- Message* message2 = new Message(2, NULL, 0, Message::kNormalPriority);
+ Message* message2 = BlankMessage(2, Message::kNormalPriority);
handler_peer.PostMessage(message2);
handler_peer.CloseAllPorts();
@@ -212,13 +217,13 @@
Dart_Port port1 = PortMap::CreatePort(&handler);
Dart_Port port2 = PortMap::CreatePort(&handler);
Dart_Port port3 = PortMap::CreatePort(&handler);
- Message* message1 = new Message(port1, NULL, 0, Message::kNormalPriority);
+ Message* message1 = BlankMessage(port1, Message::kNormalPriority);
handler_peer.PostMessage(message1);
- Message* oob_message1 = new Message(port2, NULL, 0, Message::kOOBPriority);
+ Message* oob_message1 = BlankMessage(port2, Message::kOOBPriority);
handler_peer.PostMessage(oob_message1);
- Message* message2 = new Message(port2, NULL, 0, Message::kNormalPriority);
+ Message* message2 = BlankMessage(port2, Message::kNormalPriority);
handler_peer.PostMessage(message2);
- Message* oob_message2 = new Message(port3, NULL, 0, Message::kOOBPriority);
+ Message* oob_message2 = BlankMessage(port3, Message::kOOBPriority);
handler_peer.PostMessage(oob_message2);
// We handle both oob messages and a single normal message.
@@ -243,11 +248,11 @@
Dart_Port port1 = PortMap::CreatePort(&handler);
Dart_Port port2 = PortMap::CreatePort(&handler);
Dart_Port port3 = PortMap::CreatePort(&handler);
- Message* message1 = new Message(port1, NULL, 0, Message::kNormalPriority);
+ Message* message1 = BlankMessage(port1, Message::kNormalPriority);
handler_peer.PostMessage(message1);
- Message* oob_message1 = new Message(port2, NULL, 0, Message::kOOBPriority);
+ Message* oob_message1 = BlankMessage(port2, Message::kOOBPriority);
handler_peer.PostMessage(oob_message1);
- Message* oob_message2 = new Message(port3, NULL, 0, Message::kOOBPriority);
+ Message* oob_message2 = BlankMessage(port3, Message::kOOBPriority);
handler_peer.PostMessage(oob_message2);
// When we get an error, we continue processing oob messages but
@@ -274,13 +279,13 @@
Dart_Port port2 = PortMap::CreatePort(&handler);
Dart_Port port3 = PortMap::CreatePort(&handler);
Dart_Port port4 = PortMap::CreatePort(&handler);
- Message* message1 = new Message(port1, NULL, 0, Message::kNormalPriority);
+ Message* message1 = BlankMessage(port1, Message::kNormalPriority);
handler_peer.PostMessage(message1);
- Message* oob_message1 = new Message(port2, NULL, 0, Message::kOOBPriority);
+ Message* oob_message1 = BlankMessage(port2, Message::kOOBPriority);
handler_peer.PostMessage(oob_message1);
- Message* oob_message2 = new Message(port3, NULL, 0, Message::kOOBPriority);
+ Message* oob_message2 = BlankMessage(port3, Message::kOOBPriority);
handler_peer.PostMessage(oob_message2);
- Message* oob_message3 = new Message(port4, NULL, 0, Message::kOOBPriority);
+ Message* oob_message3 = BlankMessage(port4, Message::kOOBPriority);
handler_peer.PostMessage(oob_message3);
// When we get a shutdown message, we stop processing all messages.
@@ -304,13 +309,13 @@
Dart_Port port2 = PortMap::CreatePort(&handler);
Dart_Port port3 = PortMap::CreatePort(&handler);
Dart_Port port4 = PortMap::CreatePort(&handler);
- Message* message1 = new Message(port1, NULL, 0, Message::kNormalPriority);
+ Message* message1 = BlankMessage(port1, Message::kNormalPriority);
handler_peer.PostMessage(message1);
- Message* message2 = new Message(port2, NULL, 0, Message::kNormalPriority);
+ Message* message2 = BlankMessage(port2, Message::kNormalPriority);
handler_peer.PostMessage(message2);
- Message* oob_message1 = new Message(port3, NULL, 0, Message::kOOBPriority);
+ Message* oob_message1 = BlankMessage(port3, Message::kOOBPriority);
handler_peer.PostMessage(oob_message1);
- Message* oob_message2 = new Message(port4, NULL, 0, Message::kOOBPriority);
+ Message* oob_message2 = BlankMessage(port4, Message::kOOBPriority);
handler_peer.PostMessage(oob_message2);
// We handle both oob messages but no normal messages.
@@ -333,8 +338,7 @@
MessageHandler* handler = info->handler;
MessageHandlerTestPeer handler_peer(handler);
for (int i = 0; i < info->count; i++) {
- Message* message =
- new Message(info->ports[i], NULL, 0, Message::kNormalPriority);
+ Message* message = BlankMessage(info->ports[i], Message::kNormalPriority);
handler_peer.PostMessage(message);
}
}
@@ -352,7 +356,7 @@
handler.Run(&pool, TestStartFunction, TestEndFunction,
reinterpret_cast<uword>(&handler));
Dart_Port port = PortMap::CreatePort(&handler);
- Message* message = new Message(port, NULL, 0, Message::kNormalPriority);
+ Message* message = BlankMessage(port, Message::kNormalPriority);
handler_peer.PostMessage(message);
// Wait for the first message to be handled.
diff --git a/runtime/vm/message_test.cc b/runtime/vm/message_test.cc
index 24375fd..c07f78c 100644
--- a/runtime/vm/message_test.cc
+++ b/runtime/vm/message_test.cc
@@ -29,7 +29,7 @@
const char* str6 = "msg6";
// Add two messages.
- Message* msg1 = new Message(port, AllocMsg(str1), strlen(str1) + 1,
+ Message* msg1 = new Message(port, AllocMsg(str1), strlen(str1) + 1, NULL,
Message::kNormalPriority);
queue.Enqueue(msg1, false);
EXPECT(queue.Length() == 1);
@@ -39,7 +39,7 @@
EXPECT(it.Next() == msg1);
EXPECT(!it.HasNext());
- Message* msg2 = new Message(port, AllocMsg(str2), strlen(str2) + 1,
+ Message* msg2 = new Message(port, AllocMsg(str2), strlen(str2) + 1, NULL,
Message::kNormalPriority);
queue.Enqueue(msg2, false);
EXPECT(queue.Length() == 2);
@@ -61,7 +61,7 @@
// Remove message 1
Message* msg = queue.Dequeue();
EXPECT(msg != NULL);
- EXPECT_STREQ(str1, reinterpret_cast<char*>(msg->data()));
+ EXPECT_STREQ(str1, reinterpret_cast<char*>(msg->snapshot()));
EXPECT(!queue.IsEmpty());
it.Reset(&queue);
@@ -71,47 +71,47 @@
// Remove message 2
msg = queue.Dequeue();
EXPECT(msg != NULL);
- EXPECT_STREQ(str2, reinterpret_cast<char*>(msg->data()));
+ EXPECT_STREQ(str2, reinterpret_cast<char*>(msg->snapshot()));
EXPECT(queue.IsEmpty());
Message* msg3 = new Message(Message::kIllegalPort, AllocMsg(str3),
- strlen(str3) + 1, Message::kNormalPriority);
+ strlen(str3) + 1, NULL, Message::kNormalPriority);
queue.Enqueue(msg3, true);
EXPECT(!queue.IsEmpty());
Message* msg4 = new Message(Message::kIllegalPort, AllocMsg(str4),
- strlen(str4) + 1, Message::kNormalPriority);
+ strlen(str4) + 1, NULL, Message::kNormalPriority);
queue.Enqueue(msg4, true);
EXPECT(!queue.IsEmpty());
- Message* msg5 = new Message(port, AllocMsg(str5), strlen(str5) + 1,
+ Message* msg5 = new Message(port, AllocMsg(str5), strlen(str5) + 1, NULL,
Message::kNormalPriority);
queue.Enqueue(msg5, false);
EXPECT(!queue.IsEmpty());
Message* msg6 = new Message(Message::kIllegalPort, AllocMsg(str6),
- strlen(str6) + 1, Message::kNormalPriority);
+ strlen(str6) + 1, NULL, Message::kNormalPriority);
queue.Enqueue(msg6, true);
EXPECT(!queue.IsEmpty());
msg = queue.Dequeue();
EXPECT(msg != NULL);
- EXPECT_STREQ(str3, reinterpret_cast<char*>(msg->data()));
+ EXPECT_STREQ(str3, reinterpret_cast<char*>(msg->snapshot()));
EXPECT(!queue.IsEmpty());
msg = queue.Dequeue();
EXPECT(msg != NULL);
- EXPECT_STREQ(str4, reinterpret_cast<char*>(msg->data()));
+ EXPECT_STREQ(str4, reinterpret_cast<char*>(msg->snapshot()));
EXPECT(!queue.IsEmpty());
msg = queue.Dequeue();
EXPECT(msg != NULL);
- EXPECT_STREQ(str6, reinterpret_cast<char*>(msg->data()));
+ EXPECT_STREQ(str6, reinterpret_cast<char*>(msg->snapshot()));
EXPECT(!queue.IsEmpty());
msg = queue.Dequeue();
EXPECT(msg != NULL);
- EXPECT_STREQ(str5, reinterpret_cast<char*>(msg->data()));
+ EXPECT_STREQ(str5, reinterpret_cast<char*>(msg->snapshot()));
EXPECT(queue.IsEmpty());
delete msg1;
@@ -131,10 +131,10 @@
const char* str2 = "msg2";
// Add two messages.
- Message* msg1 = new Message(port1, AllocMsg(str1), strlen(str1) + 1,
+ Message* msg1 = new Message(port1, AllocMsg(str1), strlen(str1) + 1, NULL,
Message::kNormalPriority);
queue.Enqueue(msg1, false);
- Message* msg2 = new Message(port2, AllocMsg(str2), strlen(str2) + 1,
+ Message* msg2 = new Message(port2, AllocMsg(str2), strlen(str2) + 1, NULL,
Message::kNormalPriority);
queue.Enqueue(msg2, false);
diff --git a/runtime/vm/port_test.cc b/runtime/vm/port_test.cc
index 68fdb63..ac65fd9 100644
--- a/runtime/vm/port_test.cc
+++ b/runtime/vm/port_test.cc
@@ -134,7 +134,7 @@
EXPECT(PortMap::PostMessage(
new Message(port, reinterpret_cast<uint8_t*>(strdup(message)),
- message_len, Message::kNormalPriority)));
+ message_len, NULL, Message::kNormalPriority)));
// Check that the message notify callback was called.
EXPECT_EQ(1, handler.notify_count);
@@ -178,7 +178,7 @@
EXPECT(!PortMap::PostMessage(
new Message(port, reinterpret_cast<uint8_t*>(strdup(message)),
- message_len, Message::kNormalPriority)));
+ message_len, NULL, Message::kNormalPriority)));
}
} // namespace dart
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index a18a345..3c0f7a5 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -2,6 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+#include "vm/message.h"
#include "vm/native_entry.h"
#include "vm/object.h"
#include "vm/object_store.h"
@@ -2544,11 +2545,6 @@
writer->Write<double>(ptr()->value_[1]);
}
-#define TYPED_DATA_READ(setter, type, element_size) \
- for (intptr_t i = 0; i < length_in_bytes; i += element_size) { \
- result.Set##setter(i, reader->Read<type>()); \
- }
-
RawTypedData* TypedData::ReadFrom(SnapshotReader* reader,
intptr_t object_id,
intptr_t tags,
@@ -2565,51 +2561,10 @@
// Setup the array elements.
intptr_t element_size = ElementSizeInBytes(cid);
intptr_t length_in_bytes = len * element_size;
- switch (cid) {
- case kTypedDataInt8ArrayCid:
- case kTypedDataUint8ArrayCid:
- case kTypedDataUint8ClampedArrayCid: {
- NoSafepointScope no_safepoint;
- uint8_t* data = reinterpret_cast<uint8_t*>(result.DataAddr(0));
- reader->ReadBytes(data, length_in_bytes);
- break;
- }
- case kTypedDataInt16ArrayCid:
- TYPED_DATA_READ(Int16, int16_t, element_size);
- break;
- case kTypedDataUint16ArrayCid:
- TYPED_DATA_READ(Uint16, uint16_t, element_size);
- break;
- case kTypedDataInt32ArrayCid:
- TYPED_DATA_READ(Int32, int32_t, element_size);
- break;
- case kTypedDataUint32ArrayCid:
- TYPED_DATA_READ(Uint32, uint32_t, element_size);
- break;
- case kTypedDataInt64ArrayCid:
- TYPED_DATA_READ(Int64, int64_t, element_size);
- break;
- case kTypedDataUint64ArrayCid:
- TYPED_DATA_READ(Uint64, uint64_t, element_size);
- break;
- case kTypedDataFloat32ArrayCid:
- TYPED_DATA_READ(Float32, float, element_size);
- break;
- case kTypedDataFloat64ArrayCid:
- TYPED_DATA_READ(Float64, double, element_size);
- break;
- case kTypedDataInt32x4ArrayCid:
- TYPED_DATA_READ(Int32, int32_t, sizeof(int32_t));
- break;
- case kTypedDataFloat32x4ArrayCid:
- TYPED_DATA_READ(Float32, float, sizeof(float));
- break;
- case kTypedDataFloat64x2ArrayCid:
- TYPED_DATA_READ(Float64, double, sizeof(double));
- break;
- default:
- UNREACHABLE();
- }
+ NoSafepointScope no_safepoint;
+ uint8_t* data = reinterpret_cast<uint8_t*>(result.DataAddr(0));
+ reader->ReadBytes(data, length_in_bytes);
+
// If it is a canonical constant make it one.
// When reading a full snapshot we don't need to canonicalize the object
// as it would already be a canonical object.
@@ -2622,7 +2577,6 @@
}
return result.raw();
}
-#undef TYPED_DATA_READ
RawExternalTypedData* ExternalTypedData::ReadFrom(SnapshotReader* reader,
intptr_t object_id,
@@ -2632,26 +2586,27 @@
ASSERT(!Snapshot::IsFull(kind));
intptr_t cid = RawObject::ClassIdTag::decode(tags);
intptr_t length = reader->ReadSmiValue();
- uint8_t* data = reinterpret_cast<uint8_t*>(reader->ReadRawPointerValue());
+
+ FinalizableData finalizable_data =
+ static_cast<MessageSnapshotReader*>(reader)->finalizable_data()->Take();
+ uint8_t* data = reinterpret_cast<uint8_t*>(finalizable_data.data);
ExternalTypedData& obj =
ExternalTypedData::ZoneHandle(ExternalTypedData::New(cid, data, length));
reader->AddBackRef(object_id, &obj, kIsDeserialized);
- void* peer = reinterpret_cast<void*>(reader->ReadRawPointerValue());
- Dart_WeakPersistentHandleFinalizer callback =
- reinterpret_cast<Dart_WeakPersistentHandleFinalizer>(
- reader->ReadRawPointerValue());
intptr_t external_size = obj.LengthInBytes();
- obj.AddFinalizer(peer, callback, external_size);
+ obj.AddFinalizer(finalizable_data.peer, finalizable_data.callback,
+ external_size);
return obj.raw();
}
-#define TYPED_DATA_WRITE(type, len) \
- { \
- type* data = reinterpret_cast<type*>(ptr()->data()); \
- for (intptr_t i = 0; i < (len); i++) { \
- writer->Write(data[i]); \
- } \
- }
+// This function's name can appear in Observatory.
+static void IsolateMessageTypedDataFinalizer(void* isolate_callback_data,
+ Dart_WeakPersistentHandle handle,
+ void* buffer) {
+ free(buffer);
+}
+
+static const intptr_t kExternalizeTypedDataThreshold = 4 * KB;
void RawTypedData::WriteTo(SnapshotWriter* writer,
intptr_t object_id,
@@ -2659,139 +2614,203 @@
bool as_reference) {
ASSERT(writer != NULL);
intptr_t cid = this->GetClassId();
- intptr_t len = Smi::Value(ptr()->length_);
+ intptr_t length = Smi::Value(ptr()->length_); // In elements.
+ intptr_t external_cid;
+ intptr_t bytes;
+ switch (cid) {
+ case kTypedDataInt8ArrayCid:
+ external_cid = kExternalTypedDataInt8ArrayCid;
+ bytes = length * sizeof(int8_t);
+ break;
+ case kTypedDataUint8ArrayCid:
+ external_cid = kExternalTypedDataUint8ArrayCid;
+ bytes = length * sizeof(uint8_t);
+ break;
+ case kTypedDataUint8ClampedArrayCid:
+ external_cid = kExternalTypedDataUint8ClampedArrayCid;
+ bytes = length * sizeof(uint8_t);
+ break;
+ case kTypedDataInt16ArrayCid:
+ external_cid = kExternalTypedDataInt16ArrayCid;
+ bytes = length * sizeof(int16_t);
+ break;
+ case kTypedDataUint16ArrayCid:
+ external_cid = kExternalTypedDataUint16ArrayCid;
+ bytes = length * sizeof(uint16_t);
+ break;
+ case kTypedDataInt32ArrayCid:
+ external_cid = kExternalTypedDataInt32ArrayCid;
+ bytes = length * sizeof(int32_t);
+ break;
+ case kTypedDataUint32ArrayCid:
+ external_cid = kExternalTypedDataUint32ArrayCid;
+ bytes = length * sizeof(uint32_t);
+ break;
+ case kTypedDataInt64ArrayCid:
+ external_cid = kExternalTypedDataInt64ArrayCid;
+ bytes = length * sizeof(int64_t);
+ break;
+ case kTypedDataUint64ArrayCid:
+ external_cid = kExternalTypedDataUint64ArrayCid;
+ bytes = length * sizeof(uint64_t);
+ break;
+ case kTypedDataFloat32ArrayCid:
+ external_cid = kExternalTypedDataFloat32ArrayCid;
+ bytes = length * sizeof(float);
+ break;
+ case kTypedDataFloat64ArrayCid:
+ external_cid = kExternalTypedDataFloat64ArrayCid;
+ bytes = length * sizeof(double);
+ break;
+ case kTypedDataInt32x4ArrayCid:
+ external_cid = kExternalTypedDataInt32x4ArrayCid;
+ bytes = length * sizeof(int32_t) * 4;
+ break;
+ case kTypedDataFloat32x4ArrayCid:
+ external_cid = kExternalTypedDataFloat32x4ArrayCid;
+ bytes = length * sizeof(float) * 4;
+ break;
+ case kTypedDataFloat64x2ArrayCid:
+ external_cid = kExternalTypedDataFloat64x2ArrayCid;
+ bytes = length * sizeof(double) * 2;
+ break;
+ default:
+ external_cid = kIllegalCid;
+ bytes = 0;
+ UNREACHABLE();
+ }
// Write out the serialization header value for this object.
writer->WriteInlinedObjectHeader(object_id);
- // Write out the class and tags information.
- writer->WriteIndexedObject(cid);
- writer->WriteTags(writer->GetObjectTags(this));
-
- // Write out the length field.
- writer->Write<RawObject*>(ptr()->length_);
-
- // Write out the array elements.
- switch (cid) {
- case kTypedDataInt8ArrayCid:
- case kTypedDataUint8ArrayCid:
- case kTypedDataUint8ClampedArrayCid: {
- uint8_t* data = reinterpret_cast<uint8_t*>(ptr()->data());
- writer->WriteBytes(data, len);
- break;
+ if ((kind == Snapshot::kMessage) &&
+ (bytes >= kExternalizeTypedDataThreshold)) {
+ // Write as external.
+ writer->WriteIndexedObject(external_cid);
+ writer->WriteTags(writer->GetObjectTags(this));
+ writer->Write<RawObject*>(ptr()->length_);
+ uint8_t* data = reinterpret_cast<uint8_t*>(ptr()->data());
+ void* passed_data = malloc(bytes);
+ if (passed_data == NULL) {
+ OUT_OF_MEMORY();
}
- case kTypedDataInt16ArrayCid:
- TYPED_DATA_WRITE(int16_t, len);
- break;
- case kTypedDataUint16ArrayCid:
- TYPED_DATA_WRITE(uint16_t, len);
- break;
- case kTypedDataInt32ArrayCid:
- TYPED_DATA_WRITE(int32_t, len);
- break;
- case kTypedDataUint32ArrayCid:
- TYPED_DATA_WRITE(uint32_t, len);
- break;
- case kTypedDataInt64ArrayCid:
- TYPED_DATA_WRITE(int64_t, len);
- break;
- case kTypedDataUint64ArrayCid:
- TYPED_DATA_WRITE(uint64_t, len);
- break;
- case kTypedDataFloat32ArrayCid:
- TYPED_DATA_WRITE(float, len); // NOLINT.
- break;
- case kTypedDataFloat64ArrayCid:
- TYPED_DATA_WRITE(double, len); // NOLINT.
- break;
- case kTypedDataInt32x4ArrayCid:
- TYPED_DATA_WRITE(int32_t, len * 4); // NOLINT.
- break;
- case kTypedDataFloat32x4ArrayCid:
- TYPED_DATA_WRITE(float, len * 4); // NOLINT.
- break;
- case kTypedDataFloat64x2ArrayCid:
- TYPED_DATA_WRITE(double, len * 2); // NOLINT.
- break;
- default:
- UNREACHABLE();
+ memmove(passed_data, data, bytes);
+ static_cast<MessageWriter*>(writer)->finalizable_data()->Put(
+ bytes,
+ passed_data, // data
+ passed_data, // peer,
+ IsolateMessageTypedDataFinalizer);
+ } else {
+ // Write as internal.
+ writer->WriteIndexedObject(cid);
+ writer->WriteTags(writer->GetObjectTags(this));
+ writer->Write<RawObject*>(ptr()->length_);
+ uint8_t* data = reinterpret_cast<uint8_t*>(ptr()->data());
+ writer->WriteBytes(data, bytes);
}
}
-#define TYPED_EXT_DATA_WRITE(type, len) \
- { \
- type* data = reinterpret_cast<type*>(ptr()->data_); \
- for (intptr_t i = 0; i < (len); i++) { \
- writer->Write(data[i]); \
- } \
- }
-
-#define EXT_TYPED_DATA_WRITE(cid, type, len) \
- writer->WriteIndexedObject(cid); \
- writer->WriteTags(writer->GetObjectTags(this)); \
- writer->Write<RawObject*>(ptr()->length_); \
- TYPED_EXT_DATA_WRITE(type, len)
-
void RawExternalTypedData::WriteTo(SnapshotWriter* writer,
intptr_t object_id,
Snapshot::Kind kind,
bool as_reference) {
ASSERT(writer != NULL);
intptr_t cid = this->GetClassId();
- intptr_t len = Smi::Value(ptr()->length_);
+ intptr_t length = Smi::Value(ptr()->length_); // In elements.
+ intptr_t internal_cid;
+ intptr_t bytes;
+ switch (cid) {
+ case kExternalTypedDataInt8ArrayCid:
+ internal_cid = kTypedDataInt8ArrayCid;
+ bytes = length * sizeof(int8_t);
+ break;
+ case kExternalTypedDataUint8ArrayCid:
+ internal_cid = kTypedDataUint8ArrayCid;
+ bytes = length * sizeof(uint8_t);
+ break;
+ case kExternalTypedDataUint8ClampedArrayCid:
+ internal_cid = kTypedDataUint8ClampedArrayCid;
+ bytes = length * sizeof(uint8_t);
+ break;
+ case kExternalTypedDataInt16ArrayCid:
+ internal_cid = kTypedDataInt16ArrayCid;
+ bytes = length * sizeof(int16_t);
+ break;
+ case kExternalTypedDataUint16ArrayCid:
+ internal_cid = kTypedDataUint16ArrayCid;
+ bytes = length * sizeof(uint16_t);
+ break;
+ case kExternalTypedDataInt32ArrayCid:
+ internal_cid = kTypedDataInt32ArrayCid;
+ bytes = length * sizeof(int32_t);
+ break;
+ case kExternalTypedDataUint32ArrayCid:
+ internal_cid = kTypedDataUint32ArrayCid;
+ bytes = length * sizeof(uint32_t);
+ break;
+ case kExternalTypedDataInt64ArrayCid:
+ internal_cid = kTypedDataInt64ArrayCid;
+ bytes = length * sizeof(int64_t);
+ break;
+ case kExternalTypedDataUint64ArrayCid:
+ internal_cid = kTypedDataUint64ArrayCid;
+ bytes = length * sizeof(uint64_t);
+ break;
+ case kExternalTypedDataFloat32ArrayCid:
+ internal_cid = kTypedDataFloat32ArrayCid;
+ bytes = length * sizeof(float); // NOLINT.
+ break;
+ case kExternalTypedDataFloat64ArrayCid:
+ internal_cid = kTypedDataFloat64ArrayCid,
+ bytes = length * sizeof(double); // NOLINT.
+ break;
+ case kExternalTypedDataInt32x4ArrayCid:
+ internal_cid = kTypedDataInt32x4ArrayCid;
+ bytes = length * sizeof(int32_t) * 4;
+ break;
+ case kExternalTypedDataFloat32x4ArrayCid:
+ internal_cid = kTypedDataFloat32x4ArrayCid;
+ bytes = length * sizeof(float) * 4;
+ break;
+ case kExternalTypedDataFloat64x2ArrayCid:
+ internal_cid = kTypedDataFloat64x2ArrayCid;
+ bytes = length * sizeof(double) * 2;
+ break;
+ default:
+ internal_cid = kIllegalCid;
+ bytes = 0;
+ UNREACHABLE();
+ }
// Write out the serialization header value for this object.
writer->WriteInlinedObjectHeader(object_id);
- switch (cid) {
- case kExternalTypedDataInt8ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataInt8ArrayCid, int8_t, len);
- break;
- case kExternalTypedDataUint8ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataUint8ArrayCid, uint8_t, len);
- break;
- case kExternalTypedDataUint8ClampedArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataUint8ClampedArrayCid, uint8_t, len);
- break;
- case kExternalTypedDataInt16ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataInt16ArrayCid, int16_t, len);
- break;
- case kExternalTypedDataUint16ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataUint16ArrayCid, uint16_t, len);
- break;
- case kExternalTypedDataInt32ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataInt32ArrayCid, int32_t, len);
- break;
- case kExternalTypedDataUint32ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataUint32ArrayCid, uint32_t, len);
- break;
- case kExternalTypedDataInt64ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataInt64ArrayCid, int64_t, len);
- break;
- case kExternalTypedDataUint64ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataUint64ArrayCid, uint64_t, len);
- break;
- case kExternalTypedDataFloat32ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataFloat32ArrayCid, float, len); // NOLINT.
- break;
- case kExternalTypedDataFloat64ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataFloat64ArrayCid, double, len); // NOLINT.
- break;
- case kExternalTypedDataInt32x4ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataInt32x4ArrayCid, int32_t, len * 4);
- break;
- case kExternalTypedDataFloat32x4ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataFloat32x4ArrayCid, float, len * 4);
- break;
- case kExternalTypedDataFloat64x2ArrayCid:
- EXT_TYPED_DATA_WRITE(kTypedDataFloat64x2ArrayCid, double, len * 2);
- break;
- default:
- UNREACHABLE();
+ if ((kind == Snapshot::kMessage) &&
+ (bytes >= kExternalizeTypedDataThreshold)) {
+ // Write as external.
+ writer->WriteIndexedObject(cid);
+ writer->WriteTags(writer->GetObjectTags(this));
+ writer->Write<RawObject*>(ptr()->length_);
+ uint8_t* data = reinterpret_cast<uint8_t*>(ptr()->data_);
+ void* passed_data = malloc(bytes);
+ if (passed_data == NULL) {
+ OUT_OF_MEMORY();
+ }
+ memmove(passed_data, data, bytes);
+ static_cast<MessageWriter*>(writer)->finalizable_data()->Put(
+ bytes,
+ passed_data, // data
+ passed_data, // peer,
+ IsolateMessageTypedDataFinalizer);
+ } else {
+ // Write as internal.
+ writer->WriteIndexedObject(internal_cid);
+ writer->WriteTags(writer->GetObjectTags(this));
+ writer->Write<RawObject*>(ptr()->length_);
+ uint8_t* data = reinterpret_cast<uint8_t*>(ptr()->data_);
+ writer->WriteBytes(data, bytes);
}
}
-#undef TYPED_DATA_WRITE
-#undef EXT_TYPED_DATA_WRITE
RawCapability* Capability::ReadFrom(SnapshotReader* reader,
intptr_t object_id,
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 82fef8b..3e9e015 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -1829,11 +1829,11 @@
// The user may try to load an expired message.
return Object::sentinel().raw();
}
- if (message->len() > 0) {
+ if (message->IsRaw()) {
+ return message->raw_obj();
+ } else {
MessageSnapshotReader reader(message, thread);
return reader.ReadObject();
- } else {
- return message->raw_obj();
}
}
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 5c0f36ed..a03d79f 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -11,6 +11,7 @@
#include "vm/exceptions.h"
#include "vm/heap.h"
#include "vm/longjump.h"
+#include "vm/message.h"
#include "vm/object.h"
#include "vm/object_store.h"
#include "vm/snapshot_ids.h"
@@ -919,11 +920,12 @@
}
MessageSnapshotReader::MessageSnapshotReader(Message* message, Thread* thread)
- : SnapshotReader(message->data(),
- message->len(),
+ : SnapshotReader(message->snapshot(),
+ message->snapshot_length(),
Snapshot::kMessage,
new ZoneGrowableArray<BackRefNode>(kNumInitialReferences),
- thread) {}
+ thread),
+ finalizable_data_(message->finalizable_data()) {}
MessageSnapshotReader::~MessageSnapshotReader() {
ResetBackwardReferenceTable();
@@ -1612,7 +1614,12 @@
kInitialSize,
&forward_list_,
can_send_any_object),
- forward_list_(thread(), kMaxPredefinedObjectIds) {}
+ forward_list_(thread(), kMaxPredefinedObjectIds),
+ finalizable_data_(new MessageFinalizableData()) {}
+
+MessageWriter::~MessageWriter() {
+ delete finalizable_data_;
+}
Message* MessageWriter::WriteMessage(const Object& obj,
Dart_Port dest_port,
@@ -1631,7 +1638,10 @@
ThrowException(exception_type(), exception_msg());
}
- return new Message(dest_port, buffer(), BytesWritten(), priority);
+ MessageFinalizableData* finalizable_data = finalizable_data_;
+ finalizable_data_ = NULL;
+ return new Message(dest_port, buffer(), BytesWritten(), finalizable_data,
+ priority);
}
} // namespace dart
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 576b501..5db9e24 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -9,6 +9,7 @@
#include "vm/allocation.h"
#include "vm/bitfield.h"
#include "vm/datastream.h"
+#include "vm/finalizable_data.h"
#include "vm/globals.h"
#include "vm/growable_array.h"
#include "vm/isolate.h"
@@ -212,11 +213,6 @@
return ReadStream::Raw<sizeof(T), T>::Read(&stream_);
}
- intptr_t ReadRawPointerValue() {
- int64_t value = Read<int64_t>();
- return static_cast<intptr_t>(value);
- }
-
classid_t ReadClassIDValue() {
uint32_t value = Read<uint32_t>();
return static_cast<classid_t>(value);
@@ -493,7 +489,11 @@
MessageSnapshotReader(Message* message, Thread* thread);
~MessageSnapshotReader();
+ MessageFinalizableData* finalizable_data() const { return finalizable_data_; }
+
private:
+ MessageFinalizableData* finalizable_data_;
+
DISALLOW_COPY_AND_ASSIGN(MessageSnapshotReader);
};
@@ -509,8 +509,6 @@
WriteStream::Raw<sizeof(T), T>::Write(&stream_, value);
}
- void WriteRawPointerValue(intptr_t value) { Write<int64_t>(value); }
-
void WriteClassIDValue(classid_t value) { Write<uint32_t>(value); }
COMPILE_ASSERT(sizeof(uint32_t) >= sizeof(classid_t));
@@ -800,14 +798,17 @@
public:
static const intptr_t kInitialSize = 512;
explicit MessageWriter(bool can_send_any_object);
- ~MessageWriter() {}
+ ~MessageWriter();
Message* WriteMessage(const Object& obj,
Dart_Port dest_port,
Message::Priority priority);
+ MessageFinalizableData* finalizable_data() const { return finalizable_data_; }
+
private:
ForwardList forward_list_;
+ MessageFinalizableData* finalizable_data_;
DISALLOW_COPY_AND_ASSIGN(MessageWriter);
};
diff --git a/runtime/vm/vm_sources.gni b/runtime/vm/vm_sources.gni
index c9b6306..220bfa8 100644
--- a/runtime/vm/vm_sources.gni
+++ b/runtime/vm/vm_sources.gni
@@ -98,6 +98,7 @@
"dwarf.h",
"exceptions.cc",
"exceptions.h",
+ "finalizable_data.h",
"fixed_cache.h",
"flag_list.h",
"flags.cc",
diff --git a/sdk/lib/_internal/js_runtime/lib/core_patch.dart b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
index e670cc1..ce9b3e0 100644
--- a/sdk/lib/_internal/js_runtime/lib/core_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
@@ -1085,7 +1085,7 @@
/// Finds the amount significant digits in the provided [digits] array.
static int _normalize(int used, Uint16List digits) {
while (used > 0 && digits[used - 1] == 0) used--;
- return used;
+ return 0 + used; // force inferred result to be non-null.
}
/// Factory returning an instance initialized with the given field values.
@@ -2614,7 +2614,15 @@
return (this & (signMask - one)) - (this & signMask);
}
- bool get isValidInt => this == new _BigIntImpl._fromInt(toInt());
+ // Maximum number of digits that always fit in mantissa.
+ static const _simpleValidIntDigits = 53 ~/ _digitBits;
+
+ bool get isValidInt {
+ if (_used <= _simpleValidIntDigits) return true;
+ var asInt = toInt();
+ if (!asInt.toDouble().isFinite) return false;
+ return this == new _BigIntImpl._fromInt(asInt);
+ }
int toInt() {
var result = 0;
diff --git a/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart b/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
index f309a9c..1be380f 100644
--- a/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
+++ b/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
@@ -31,8 +31,9 @@
codegenWorldBuilder.compiledConstants
.forEach(addConstantWithDependendencies);
for (String stringValue in ["cA", "cB", "cC"]) {
- ConstantValue constant = allConstants.firstWhere((dynamic constant) {
- return constant.isString && constant.primitiveValue == stringValue;
+ StringConstantValue constant =
+ allConstants.firstWhere((dynamic constant) {
+ return constant.isString && constant.stringValue == stringValue;
});
Expect.notEquals(null, outputUnitForConstant(constant),
"Constant value ${constant.toStructuredText()} has no output unit.");
diff --git a/tests/compiler/dart2js/old_frontend/metadata_test.dart b/tests/compiler/dart2js/old_frontend/metadata_test.dart
index 9130973..f24dcf22 100644
--- a/tests/compiler/dart2js/old_frontend/metadata_test.dart
+++ b/tests/compiler/dart2js/old_frontend/metadata_test.dart
@@ -3,7 +3,8 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/constants/values.dart' show PrimitiveConstantValue;
+import 'package:compiler/src/constants/values.dart'
+ show ConstantValue, StringConstantValue;
import 'package:expect/expect.dart';
import '../compiler_helper.dart';
import 'package:compiler/src/parser/partial_elements.dart'
@@ -39,9 +40,10 @@
1, element.metadata.length, 'Unexpected metadata count on $element.');
PartialMetadataAnnotation annotation = element.metadata.first;
annotation.ensureResolved(compiler.resolution);
- PrimitiveConstantValue value =
+ ConstantValue value =
compiler.constants.getConstantValue(annotation.constant);
- Expect.stringEquals('xyz', value.primitiveValue);
+ Expect.isTrue(value is StringConstantValue);
+ Expect.stringEquals('xyz', (value as StringConstantValue).stringValue);
checkPosition(
annotation, annotation.cachedNode, source1, compiler.reporter);
@@ -64,13 +66,15 @@
Expect.isFalse(
identical(annotation1, annotation2), 'expected unique instances');
Expect.notEquals(annotation1, annotation2, 'expected unequal instances');
- PrimitiveConstantValue value1 =
+ ConstantValue value1 =
compiler.constants.getConstantValue(annotation1.constant);
- PrimitiveConstantValue value2 =
+ ConstantValue value2 =
compiler.constants.getConstantValue(annotation2.constant);
Expect.identical(value1, value2, 'expected same compile-time constant');
- Expect.stringEquals('xyz', value1.primitiveValue);
- Expect.stringEquals('xyz', value2.primitiveValue);
+ Expect.isTrue(value1 is StringConstantValue);
+ Expect.isTrue(value2 is StringConstantValue);
+ Expect.stringEquals('xyz', (value1 as StringConstantValue).stringValue);
+ Expect.stringEquals('xyz', (value2 as StringConstantValue).stringValue);
checkPosition(
annotation1, annotation1.cachedNode, source2, compiler.reporter);
@@ -98,9 +102,10 @@
Expect.equals(1, element.metadata.length);
PartialMetadataAnnotation annotation = element.metadata.first;
annotation.ensureResolved(compiler.resolution);
- PrimitiveConstantValue value =
+ ConstantValue value =
compiler.constants.getConstantValue(annotation.constant);
- Expect.stringEquals('xyz', value.primitiveValue);
+ Expect.isTrue(value is StringConstantValue);
+ Expect.stringEquals('xyz', (value as StringConstantValue).stringValue);
checkPosition(
annotation, annotation.cachedNode, source3, compiler.reporter);
@@ -129,13 +134,15 @@
Expect.isFalse(
identical(annotation1, annotation2), 'expected unique instances');
Expect.notEquals(annotation1, annotation2, 'expected unequal instances');
- PrimitiveConstantValue value1 =
+ ConstantValue value1 =
compiler.constants.getConstantValue(annotation1.constant);
- PrimitiveConstantValue value2 =
+ ConstantValue value2 =
compiler.constants.getConstantValue(annotation2.constant);
Expect.identical(value1, value2, 'expected same compile-time constant');
- Expect.stringEquals('xyz', value1.primitiveValue);
- Expect.stringEquals('xyz', value2.primitiveValue);
+ Expect.isTrue(value1 is StringConstantValue);
+ Expect.isTrue(value2 is StringConstantValue);
+ Expect.stringEquals('xyz', (value1 as StringConstantValue).stringValue);
+ Expect.stringEquals('xyz', (value2 as StringConstantValue).stringValue);
checkPosition(
annotation1, annotation1.cachedNode, source4, compiler.reporter);
@@ -182,9 +189,11 @@
PartialMetadataAnnotation annotation = metadata.first;
annotation.ensureResolved(compiler.resolution);
- PrimitiveConstantValue value =
+ ConstantValue value =
compiler.constants.getConstantValue(annotation.constant);
- Expect.stringEquals('xyz', value.primitiveValue);
+ Expect.isTrue(value is StringConstantValue);
+ Expect.stringEquals(
+ 'xyz', (value as StringConstantValue).stringValue);
checkPosition(
annotation, annotation.cachedNode, source, compiler.reporter);
diff --git a/tests/corelib_2/bigint_js_test.dart b/tests/corelib_2/bigint_js_test.dart
new file mode 100644
index 0000000..7b982b7
--- /dev/null
+++ b/tests/corelib_2/bigint_js_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test for JavaScript specific BigInt behaviour. Any JavaScript number (double)
+// that is an integral value is a Dart 'int' value, so any BigInt that has a
+// value that is exactly a double integral value should return `true` for
+// [BigInt.isValidInt].
+
+import "package:expect/expect.dart";
+
+int intPow(int a, int p) {
+ int result = 1;
+ for (int i = 0; i < p; i++) result *= a;
+ return result;
+}
+
+int pow2_53 = intPow(2, 53);
+
+test(int n1, int n2, int shift, [bool expectedIsValidInt = true]) {
+ var n = (new BigInt.from(n1) * new BigInt.from(n2)) << shift;
+ Expect.equals(expectedIsValidInt, n.isValidInt, '${n}.isValidInt');
+ if (n >= new BigInt.from(pow2_53)) {
+ var nplus1 = n + BigInt.one;
+ Expect.isFalse(nplus1.isValidInt, '${nplus1}.isValidInt');
+ }
+}
+
+main() {
+ test(13, 19, 1);
+ test(19997, 19993, 100);
+ test(19997, pow2_53 ~/ 19997, 0);
+ test(19997, pow2_53 ~/ 19997, 1);
+ test(19997, pow2_53 ~/ 19997, 100);
+ test(1, 1, 100);
+ test(1, 1, 10000, false);
+
+ // More than 53 bits in product,
+ test(pow2_53 ~/ 3, pow2_53 ~/ 5, 0, false);
+}
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 6e20711..5e4efa2 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -113,6 +113,9 @@
[ $compiler == dart2analyzer && !$strong ]
symbol_reserved_word_test/05: MissingCompileTimeError # Issue 30245
+[ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk ]
+bigint_js_test: SkipByDesign # JavaScript-specific test
+
# All static_tests have expected compile-time errors.
[ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $strong ]
core_runtime_types_static_test: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 80dfdb1..f257594 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -941,16 +941,14 @@
call_method_is_check_test/03: RuntimeError
call_method_is_check_test/04: RuntimeError
call_method_is_check_test/05: RuntimeError
+call_method_must_not_be_field_test/03: RuntimeError # Issue 32155
+call_method_must_not_be_getter_test/03: RuntimeError # Issue 32155
call_with_no_such_method_test: RuntimeError
callable_test/none: RuntimeError
checked_setter2_test: RuntimeError # Issue 31128
checked_setter_test: RuntimeError # Issue 31128
extract_type_arguments_test: Crash # Issue 31371
function_propagation_test: RuntimeError
-function_type_call_getter2_test/00: MissingCompileTimeError
-function_type_call_getter2_test/01: MissingCompileTimeError
-function_type_call_getter2_test/02: MissingCompileTimeError
-function_type_call_getter2_test/03: MissingCompileTimeError
function_type_call_getter2_test/none: RuntimeError
generic_test/01: MissingCompileTimeError # front end does not validate `extends`
implicit_downcast_during_constructor_invocation_test: RuntimeError
diff --git a/tests/lib_2/isolate/large_byte_data_leak_test.dart b/tests/lib_2/isolate/large_byte_data_leak_test.dart
new file mode 100644
index 0000000..b55172e
--- /dev/null
+++ b/tests/lib_2/isolate/large_byte_data_leak_test.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "dart:developer" show UserTag;
+import "dart:isolate" show Isolate, ReceivePort;
+import "dart:typed_data" show ByteData;
+import "package:expect/expect.dart";
+
+const large = 2 * 1024 * 1024;
+
+void child(replyPort) {
+ print("Child start");
+
+ Expect.throws(() {
+ replyPort.send([
+ new ByteData(large),
+ new UserTag("User tags are not allowed in isolate messages"),
+ new ByteData(large),
+ ]);
+ replyPort.send("Not reached");
+ }, (e) {
+ return e.toString().contains("Illegal argument in isolate message");
+ });
+
+ replyPort.send("Done");
+
+ print("Child done");
+}
+
+Future<void> main(List<String> args) async {
+ print("Parent start");
+
+ ReceivePort port = new ReceivePort();
+ Isolate.spawn(child, port.sendPort);
+
+ Expect.equals("Done", await port.first);
+
+ print("Parent done");
+}
diff --git a/tests/lib_2/isolate/large_byte_data_test.dart b/tests/lib_2/isolate/large_byte_data_test.dart
new file mode 100644
index 0000000..d9e3d24
--- /dev/null
+++ b/tests/lib_2/isolate/large_byte_data_test.dart
@@ -0,0 +1,171 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "dart:isolate";
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+const large = 2 * 1024 * 1024;
+
+void child(replyPort) {
+ print("Child start");
+
+ print("Child ByteData");
+ dynamic x = new ByteData(large);
+ for (int i = 0; i < 4; i++) {
+ x.setInt8(i, i);
+ }
+ replyPort.send(x);
+
+ print("Child Uint8List");
+ x = new Uint8List(large);
+ for (int i = 0; i < 4; i++) {
+ x[i] = i;
+ }
+ replyPort.send(x);
+
+ print("Child Int8List");
+ x = new Int8List(large);
+ for (int i = 0; i < 4; i++) {
+ x[i] = i;
+ }
+ replyPort.send(x);
+
+ print("Child Uint16List");
+ x = new Uint16List(large);
+ for (int i = 0; i < 4; i++) {
+ x[i] = i;
+ }
+ replyPort.send(x);
+
+ print("Child Int16List");
+ x = new Int16List(large);
+ for (int i = 0; i < 4; i++) {
+ x[i] = i;
+ }
+ replyPort.send(x);
+
+ print("Child Uint32List");
+ x = new Uint32List(large);
+ for (int i = 0; i < 4; i++) {
+ x[i] = i;
+ }
+ replyPort.send(x);
+
+ print("Child Int32List");
+ x = new Int32List(large);
+ for (int i = 0; i < 4; i++) {
+ x[i] = i;
+ }
+ replyPort.send(x);
+
+ print("Child Uint64List");
+ x = new Uint64List(large);
+ for (int i = 0; i < 4; i++) {
+ x[i] = i;
+ }
+ replyPort.send(x);
+
+ print("Child Int64List");
+ x = new Int64List(large);
+ for (int i = 0; i < 4; i++) {
+ x[i] = i;
+ }
+ replyPort.send(x);
+
+ print("Child done");
+}
+
+Future<void> main(List<String> args) async {
+ print("Parent start");
+
+ ReceivePort port = new ReceivePort();
+ Isolate.spawn(child, port.sendPort);
+ StreamIterator<dynamic> incoming = new StreamIterator<dynamic>(port);
+
+ print("Parent ByteData");
+ Expect.isTrue(await incoming.moveNext());
+ dynamic x = incoming.current;
+ Expect.isTrue(x is ByteData);
+ Expect.equals(large, x.lengthInBytes);
+ for (int i = 0; i < 4; i++) {
+ Expect.equals(i, x.getUint8(i));
+ }
+
+ print("Parent Uint8");
+ Expect.isTrue(await incoming.moveNext());
+ x = incoming.current;
+ Expect.isTrue(x is Uint8List);
+ Expect.equals(large, x.length);
+ for (int i = 0; i < 4; i++) {
+ Expect.equals(i, x[i]);
+ }
+
+ print("Parent Int8");
+ Expect.isTrue(await incoming.moveNext());
+ x = incoming.current;
+ Expect.isTrue(x is Int8List);
+ Expect.equals(large, x.length);
+ for (int i = 0; i < 4; i++) {
+ Expect.equals(i, x[i]);
+ }
+
+ print("Parent Uint16");
+ Expect.isTrue(await incoming.moveNext());
+ x = incoming.current;
+ Expect.isTrue(x is Uint16List);
+ Expect.equals(large, x.length);
+ for (int i = 0; i < 4; i++) {
+ Expect.equals(i, x[i]);
+ }
+
+ print("Parent Int16");
+ Expect.isTrue(await incoming.moveNext());
+ x = incoming.current;
+ Expect.isTrue(x is Int16List);
+ Expect.equals(large, x.length);
+ for (int i = 0; i < 4; i++) {
+ Expect.equals(i, x[i]);
+ }
+
+ print("Parent Uint32");
+ Expect.isTrue(await incoming.moveNext());
+ x = incoming.current;
+ Expect.isTrue(x is Uint32List);
+ Expect.equals(large, x.length);
+ for (int i = 0; i < 4; i++) {
+ Expect.equals(i, x[i]);
+ }
+
+ print("Parent Int32");
+ Expect.isTrue(await incoming.moveNext());
+ x = incoming.current;
+ Expect.isTrue(x is Int32List);
+ Expect.equals(large, x.length);
+ for (int i = 0; i < 4; i++) {
+ Expect.equals(i, x[i]);
+ }
+
+ print("Parent Uint64");
+ Expect.isTrue(await incoming.moveNext());
+ x = incoming.current;
+ Expect.isTrue(x is Uint64List);
+ Expect.equals(large, x.length);
+ for (int i = 0; i < 4; i++) {
+ Expect.equals(i, x[i]);
+ }
+
+ print("Parent Int64");
+ Expect.isTrue(await incoming.moveNext());
+ x = incoming.current;
+ Expect.isTrue(x is Int64List);
+ Expect.equals(large, x.length);
+ for (int i = 0; i < 4; i++) {
+ Expect.equals(i, x[i]);
+ }
+
+ port.close();
+ print("Parent done");
+}
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index 8e0728a..2d31eaa 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -763,6 +763,7 @@
[ $compiler == dart2js && ($runtime == d8 || $runtime == jsshell) ]
isolate/browser/issue_12474_test: RuntimeError # packageRoot not implemented.
+isolate/large_byte_data_leak_test: RuntimeError
[ $compiler == dart2js && ($runtime == ff || $runtime == safari || $ie) ]
html/custom/attribute_changed_callback_test/unsupported_on_polyfill: Fail # Polyfill does not support
diff --git a/tools/VERSION b/tools/VERSION
index 91379c8..d08b1b6 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 0
PATCH 0
-PRERELEASE 29
+PRERELEASE 30
PRERELEASE_PATCH 0
diff --git a/tools/gardening/lib/src/shard_data.dart b/tools/gardening/lib/src/shard_data.dart
index 1d1f6f4..ad781d8 100644
--- a/tools/gardening/lib/src/shard_data.dart
+++ b/tools/gardening/lib/src/shard_data.dart
@@ -52,12 +52,10 @@
'vm-kernel-precomp-linux-debug-x64-8-8-be',
],
'vm-misc': const <String>[
- 'vm-win-debug-ia32-russian-be',
'cross-arm64-vm-linux-release-be',
- 'vm-linux-release-ia32-asan-be',
- 'vm-linux-release-x64-asan-be',
'vm-linux-release-ia32-optcounter-threshold-be',
'vm-linux-release-x64-optcounter-threshold-be',
+ 'vm-linux-release-x64-asan-be',
'target-arm64-vm-linux-release-be',
],
'vm-precomp': const <String>[
@@ -133,9 +131,7 @@
'dart2js-linux-chromeff-4-4-be',
],
'chrome': const <String>[
- 'dart2js-linux-drt-1-2-be',
- 'dart2js-linux-drt-2-2-be',
- 'dart2js-linux-drt-csp-minified-be',
+ 'dart2js-linux-chrome-csp-minified-be',
'dart2js-mac10.11-chrome-be',
],
'safari': const <String>[
@@ -211,12 +207,10 @@
'vm-kernel-precomp-linux-debug-x64-8-8-dev',
],
'vm-misc-dev': const <String>[
- 'vm-win-debug-ia32-russian-dev',
'cross-arm64-vm-linux-release-dev',
- 'vm-linux-release-ia32-asan-dev',
- 'vm-linux-release-x64-asan-dev',
'vm-linux-release-ia32-optcounter-threshold-dev',
'vm-linux-release-x64-optcounter-threshold-dev',
+ 'vm-linux-release-x64-asan-dev',
'target-arm64-vm-linux-release-dev',
],
'vm-precomp-dev': const <String>[
@@ -292,9 +286,7 @@
'dart2js-linux-chromeff-4-4-dev',
],
'chrome-dev': const <String>[
- 'dart2js-linux-drt-1-2-dev',
- 'dart2js-linux-drt-2-2-dev',
- 'dart2js-linux-drt-csp-minified-dev',
+ 'dart2js-linux-chrome-csp-minified-dev',
'dart2js-mac10.11-chrome-dev',
],
'safari-dev': const <String>[
@@ -351,12 +343,10 @@
'vm-kernel-precomp-linux-debug-x64-8-8-stable',
],
'vm-misc-stable': const <String>[
- 'vm-win-debug-ia32-russian-stable',
'cross-arm64-vm-linux-release-stable',
- 'vm-linux-release-ia32-asan-stable',
- 'vm-linux-release-x64-asan-stable',
'vm-linux-release-ia32-optcounter-threshold-stable',
'vm-linux-release-x64-optcounter-threshold-stable',
+ 'vm-linux-release-x64-asan-stable',
'target-arm64-vm-linux-release-stable',
],
'vm-precomp-stable': const <String>[
@@ -451,9 +441,7 @@
'dart2js-linux-chromeff-4-4-stable',
],
'chrome-stable': const <String>[
- 'dart2js-linux-drt-1-2-stable',
- 'dart2js-linux-drt-2-2-stable',
- 'dart2js-linux-drt-csp-minified-stable',
+ 'dart2js-linux-chrome-csp-minified-stable',
'dart2js-mac10.11-chrome-stable',
],
'safari-stable': const <String>[