Version 2.0.0-dev.16.0
Merge commit 'f454e8bb35a6be02c58831a6017c16deb10a929b' into dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4a385e7..087bbe5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -85,8 +85,6 @@
* 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 `waitForEventSync`, which suspends execution until an asynchronous
- event oocurs.
* `dart:isolate`
* Rename `IMMEDIATE` and `BEFORE_NEXT_EVENT` on `Isolate` to `immediate` and
@@ -114,14 +112,24 @@
* Analyzer
-The analyzer will no longer issue a warning when a generic type parameter is
-used as the type in an instance check. For example:
+ * The analyzer will no longer issue a warning when a generic type parameter
+ is used as the type in an instance check. For example:
+
```dart
test<T>() {
print(3 is T); // No warning
}
```
+ * New static checking of `@visibleForTesting` elements. Accessing a method,
+ function, class, etc. annotated with `@visibleForTesting` from a file _not_
+ in a `test/` directory will result in a new hint ([issue 28273]).
+ * Static analysis now respects functions annotated with `@alwaysThrows`
+ ([issue 31384]).
+
+[issue 28273]: https://github.com/dart-lang/sdk/issues/28273
+[issue 31384]: https://github.com/dart-lang/sdk/issues/31384
+
#### Pub
##### SDK Constraints
@@ -234,7 +242,7 @@
* Fix for constructing a new SecurityContext that contains the built-in
certificate authority roots
- (https://github.com/dart-lang/sdk/issues/24693).
+ ([issue 24693](https://github.com/dart-lang/sdk/issues/24693)).
### Core library changes
@@ -248,9 +256,9 @@
* Fixes for debugging in Dartium.
* Fix DevConsole crash with JS
- (https://github.com/dart-lang/sdk/issues/29873).
+ ([issue 29873](https://github.com/dart-lang/sdk/issues/29873)).
* Fix debugging in WebStorm, NULL returned for JS objects
- (https://github.com/dart-lang/sdk/issues/29854).
+ ([issue 29854](https://github.com/dart-lang/sdk/issues/29854)).
## 1.24.1 - 14-06-2017
@@ -264,7 +272,7 @@
* Fixed a Safari issue during bootstrapping (note that Safari is still not
officially supported but does work for trivial examples).
* Fix for a Dartium issue where there was no sound in checked mode
- (https://github.com/dart-lang/sdk/issues/29810).
+ ([issue 29810](https://github.com/dart-lang/sdk/issues/29810)).
## 1.24.0 - 12-06-2017
diff --git a/DEPS b/DEPS
index 6f4f5f2..28211bb 100644
--- a/DEPS
+++ b/DEPS
@@ -14,29 +14,27 @@
# We use mirrors of all github repos to guarantee reproducibility and
# consistency between what users see and what the bots see.
# We need the mirrors to not have 100+ bots pulling github constantly.
- # We mirror our github repos on chromium git servers.
+ # We mirror our github repos on Dart's git servers.
# DO NOT use this var if you don't see a mirror here:
- # https://chromium.googlesource.com/
- # named like:
- # external/github.com/dart-lang/NAME
- "github_mirror":
- "https://chromium.googlesource.com/external/github.com/dart-lang/",
+ # https://dart.googlesource.com/
+ "dart_git":
+ "https://dart.googlesource.com/",
+ # If the repo you want to use is at github.com/dart-lang, but not at
+ # dart.googlesource.com, please file an issue
+ # on github and add the label 'area-infrastructure'.
+ # When the repo is mirrored, you can add it to this DEPS file.
# Chromium git
"chromium_git": "https://chromium.googlesource.com",
"fuchsia_git": "https://fuchsia.googlesource.com",
- # IMPORTANT:
- # This should only be used for local testing. Before adding a new package,
- # request a mirror of the package you need. To request a mirror, file an issue
- # on github and add the label 'area-infrastructure'.
- # "github_dartlang": "https://github.com/dart-lang/%s.git",
-
"co19_rev": "@dec2b67aaab3bb7339b9764049707e71e601da3d",
- # Revisions of GN related dependencies. This should match the revision
- # pulled by Flutter.
- "buildtools_revision": "@057ef89874e3c622248cf99259434fdc683c4e30",
+ # As Flutter does, we pull buildtools, including the clang toolchain, from
+ # Fuchsia. This revision should be kept up to date with the revision pulled
+ # by the Flutter engine. If there are problems with the toolchain, contact
+ # fuchsia-toolchain@.
+ "buildtools_revision": "@de2d6da936fa0be8bcb0bacd096fe124efff2854",
# Scripts that make 'git cl format' work.
"clang_format_scripts_rev": "@c09c8deeac31f05bd801995c475e7c8070f9ecda",
@@ -45,7 +43,7 @@
# Revisions of /third_party/* dependencies.
"args_tag": "@0.13.7",
- "async_tag": "@2.0.0",
+ "async_tag": "@2.0.2",
"barback-0.13.0_rev": "@34853",
"barback-0.14.0_rev": "@36398",
"barback-0.14.1_rev": "@38525",
@@ -57,7 +55,7 @@
"charcode_tag": "@v1.1.1",
"chrome_rev" : "@19997",
"cli_util_tag" : "@0.1.2+1",
- "collection_tag": "@1.14.3",
+ "collection_tag": "@1.14.5",
"convert_tag": "@2.0.1",
"crypto_tag" : "@2.0.2+1",
"csslib_tag" : "@0.14.1",
@@ -81,7 +79,7 @@
"fixnum_tag": "@0.10.5",
"func_rev": "@25eec48146a58967d75330075ab376b3838b18a8",
"glob_tag": "@1.1.5",
- "html_tag" : "@0.13.2",
+ "html_tag" : "@0.13.2+1",
"http_multi_server_tag" : "@2.0.4",
"http_parser_tag" : "@3.1.1",
"http_retry_tag": "@0.1.0",
@@ -106,11 +104,11 @@
"path_tag": "@1.4.2",
"plugin_tag": "@0.2.0+2",
"ply_rev": "@604b32590ffad5cbb82e4afef1d305512d06ae93",
- "pool_tag": "@1.3.3",
+ "pool_tag": "@1.3.4",
"protobuf_tag": "@0.5.4",
"pub_rev": "@667281eef93b4be648cceca400e954e000edba38",
"pub_semver_tag": "@1.3.2",
- "quiver_tag": "@0.25.0",
+ "quiver_tag": "@0.27.0",
"resource_rev":"@af5a5bf65511943398146cf146e466e5f0b95cb9",
"root_certificates_rev": "@a4c7c6f23a664a37bc1b6f15a819e3f2a292791a",
"scheduled_test_tag": "@0.12.11+1",
@@ -149,20 +147,20 @@
Var("clang_format_scripts_rev"),
Var("dart_root") + "/tests/co19/src":
- Var("github_mirror") + "co19.git" + Var("co19_rev"),
+ Var("dart_git") + "co19.git" + Var("co19_rev"),
Var("dart_root") + "/third_party/zlib":
Var("chromium_git") + "/chromium/src/third_party/zlib.git" +
Var("zlib_rev"),
Var("dart_root") + "/third_party/boringssl":
- Var("github_mirror") + "boringssl_gen.git" + Var("boringssl_gen_rev"),
+ Var("dart_git") + "boringssl_gen.git" + Var("boringssl_gen_rev"),
Var("dart_root") + "/third_party/boringssl/src":
"https://boringssl.googlesource.com/boringssl.git" +
Var("boringssl_rev"),
Var("dart_root") + "/third_party/root_certificates":
- Var("github_mirror") + "root_certificates.git" +
+ Var("dart_git") + "root_certificates.git" +
Var("root_certificates_rev"),
Var("dart_root") + "/third_party/jinja2":
@@ -178,165 +176,166 @@
Var("idl_parser_rev"),
Var("dart_root") + "/third_party/WebCore":
- Var("github_mirror") + "webcore.git" + Var("WebCore_rev"),
+ Var("dart_git") + "webcore.git" + Var("WebCore_rev"),
Var("dart_root") + "/third_party/tcmalloc/gperftools":
Var('chromium_git') + '/external/github.com/gperftools/gperftools.git' +
Var("gperftools_revision"),
Var("dart_root") + "/third_party/pkg/args":
- Var("github_mirror") + "args.git" + Var("args_tag"),
+ Var("dart_git") + "args.git" + Var("args_tag"),
Var("dart_root") + "/third_party/pkg/async":
- Var("github_mirror") + "async.git" + Var("async_tag"),
+ Var("dart_git") + "async.git" + Var("async_tag"),
Var("dart_root") + "/third_party/pkg/barback":
- Var("github_mirror") + "barback.git" + Var("barback_tag"),
+ Var("dart_git") + "barback.git" + Var("barback_tag"),
Var("dart_root") + "/third_party/pkg/bazel_worker":
- Var("github_mirror") + "bazel_worker.git" + Var("bazel_worker_tag"),
+ Var("dart_git") + "bazel_worker.git" + Var("bazel_worker_tag"),
Var("dart_root") + "/third_party/pkg/boolean_selector":
- Var("github_mirror") + "boolean_selector.git" +
+ Var("dart_git") + "boolean_selector.git" +
Var("boolean_selector_tag"),
Var("dart_root") + "/third_party/pkg/charcode":
- Var("github_mirror") + "charcode.git" + Var("charcode_tag"),
+ Var("dart_git") + "charcode.git" + Var("charcode_tag"),
Var("dart_root") + "/third_party/pkg/cli_util":
- Var("github_mirror") + "cli_util.git" + Var("cli_util_tag"),
+ Var("dart_git") + "cli_util.git" + Var("cli_util_tag"),
Var("dart_root") + "/third_party/pkg/collection":
- Var("github_mirror") + "collection.git" + Var("collection_tag"),
+ Var("dart_git") + "collection.git" + Var("collection_tag"),
Var("dart_root") + "/third_party/pkg/convert":
- Var("github_mirror") + "convert.git" + Var("convert_tag"),
+ Var("dart_git") + "convert.git" + Var("convert_tag"),
Var("dart_root") + "/third_party/pkg/crypto":
- Var("github_mirror") + "crypto.git" + Var("crypto_tag"),
+ Var("dart_git") + "crypto.git" + Var("crypto_tag"),
Var("dart_root") + "/third_party/pkg/csslib":
- Var("github_mirror") + "csslib.git" + Var("csslib_tag"),
+ Var("dart_git") + "csslib.git" + Var("csslib_tag"),
Var("dart_root") + "/third_party/pkg_tested/dart_style":
- Var("github_mirror") + "dart_style.git" + Var("dart_style_tag"),
+ Var("dart_git") + "dart_style.git" + Var("dart_style_tag"),
Var("dart_root") + "/third_party/pkg/dart2js_info":
- Var("github_mirror") + "dart2js_info.git" + Var("dart2js_info_tag"),
+ Var("dart_git") + "dart2js_info.git" + Var("dart2js_info_tag"),
Var("dart_root") + "/third_party/pkg/dartdoc":
- Var("github_mirror") + "dartdoc.git" + Var("dartdoc_tag"),
+ Var("dart_git") + "dartdoc.git" + Var("dartdoc_tag"),
Var("dart_root") + "/third_party/pkg/fixnum":
- Var("github_mirror") + "fixnum.git" + Var("fixnum_tag"),
+ Var("dart_git") + "fixnum.git" + Var("fixnum_tag"),
Var("dart_root") + "/third_party/pkg/func":
- Var("github_mirror") + "func.git" + Var("func_rev"),
+ Var("dart_git") + "func.git" + Var("func_rev"),
Var("dart_root") + "/third_party/pkg/glob":
- Var("github_mirror") + "glob.git" + Var("glob_tag"),
+ Var("dart_git") + "glob.git" + Var("glob_tag"),
Var("dart_root") + "/third_party/pkg/html":
- Var("github_mirror") + "html.git" + Var("html_tag"),
+ Var("dart_git") + "html.git" + Var("html_tag"),
Var("dart_root") + "/third_party/pkg/http":
- Var("github_mirror") + "http.git" + Var("http_tag"),
+ Var("dart_git") + "http.git" + Var("http_tag"),
Var("dart_root") + "/third_party/pkg/http_multi_server":
- Var("github_mirror") + "http_multi_server.git" +
+ Var("dart_git") + "http_multi_server.git" +
Var("http_multi_server_tag"),
Var("dart_root") + "/third_party/pkg/http_parser":
- Var("github_mirror") + "http_parser.git" + Var("http_parser_tag"),
+ Var("dart_git") + "http_parser.git" + Var("http_parser_tag"),
Var("dart_root") + "/third_party/pkg/http_retry":
- Var("github_mirror") + "http_retry.git" +
+ Var("dart_git") + "http_retry.git" +
Var("http_retry_tag"),
Var("dart_root") + "/third_party/pkg/http_throttle":
- Var("github_mirror") + "http_throttle.git" +
+ Var("dart_git") + "http_throttle.git" +
Var("http_throttle_tag"),
Var("dart_root") + "/third_party/pkg/intl":
- Var("github_mirror") + "intl.git" + Var("intl_tag"),
+ Var("dart_git") + "intl.git" + Var("intl_tag"),
Var("dart_root") + "/third_party/pkg/isolate":
- Var("github_mirror") + "isolate.git" + Var("isolate_tag"),
+ Var("dart_git") + "isolate.git" + Var("isolate_tag"),
Var("dart_root") + "/third_party/pkg/json_rpc_2":
- Var("github_mirror") + "json_rpc_2.git" + Var("json_rpc_2_tag"),
+ Var("dart_git") + "json_rpc_2.git" + Var("json_rpc_2_tag"),
Var("dart_root") + "/third_party/pkg/linter":
- Var("github_mirror") + "linter.git" + Var("linter_tag"),
+ Var("dart_git") + "linter.git" + Var("linter_tag"),
Var("dart_root") + "/third_party/pkg/logging":
- Var("github_mirror") + "logging.git" + Var("logging_tag"),
+ Var("dart_git") + "logging.git" + Var("logging_tag"),
Var("dart_root") + "/third_party/pkg/markdown":
- Var("github_mirror") + "markdown.git" + Var("markdown_tag"),
+ Var("dart_git") + "markdown.git" + Var("markdown_tag"),
Var("dart_root") + "/third_party/pkg/matcher":
- Var("github_mirror") + "matcher.git" + Var("matcher_tag"),
+ Var("dart_git") + "matcher.git" + Var("matcher_tag"),
Var("dart_root") + "/third_party/pkg/mime":
- Var("github_mirror") + "mime.git" + Var("mime_tag"),
+ Var("dart_git") + "mime.git" + Var("mime_tag"),
Var("dart_root") + "/third_party/pkg/mockito":
- Var("github_mirror") + "mockito.git" + Var("mockito_tag"),
+ Var("dart_git") + "mockito.git" + Var("mockito_tag"),
Var("dart_root") + "/third_party/pkg/mustache4dart":
Var("chromium_git")
+ "/external/github.com/valotas/mustache4dart.git"
+ Var("mustache4dart_tag"),
Var("dart_root") + "/third_party/pkg/oauth2":
- Var("github_mirror") + "oauth2.git" + Var("oauth2_tag"),
+ Var("dart_git") + "oauth2.git" + Var("oauth2_tag"),
Var("dart_root") + "/third_party/observatory_pub_packages":
- Var("github_mirror") + "observatory_pub_packages.git"
+ Var("dart_git") + "observatory_pub_packages.git"
+ Var("observatory_pub_packages_rev"),
Var("dart_root") + "/third_party/pkg_tested/package_config":
- Var("github_mirror") + "package_config.git" +
+ Var("dart_git") + "package_config.git" +
Var("package_config_tag"),
Var("dart_root") + "/third_party/pkg_tested/package_resolver":
- Var("github_mirror") + "package_resolver.git"
+ Var("dart_git") + "package_resolver.git"
+ Var("package_resolver_tag"),
Var("dart_root") + "/third_party/pkg/path":
- Var("github_mirror") + "path.git" + Var("path_tag"),
+ Var("dart_git") + "path.git" + Var("path_tag"),
Var("dart_root") + "/third_party/pkg/plugin":
- Var("github_mirror") + "plugin.git" + Var("plugin_tag"),
+ Var("dart_git") + "plugin.git" + Var("plugin_tag"),
Var("dart_root") + "/third_party/pkg/pool":
- Var("github_mirror") + "pool.git" + Var("pool_tag"),
+ Var("dart_git") + "pool.git" + Var("pool_tag"),
Var("dart_root") + "/third_party/pkg/protobuf":
- Var("github_mirror") + "protobuf.git" + Var("protobuf_tag"),
+ Var("dart_git") + "protobuf.git" + Var("protobuf_tag"),
Var("dart_root") + "/third_party/pkg/pub_semver":
- Var("github_mirror") + "pub_semver.git" + Var("pub_semver_tag"),
+ Var("dart_git") + "pub_semver.git" + Var("pub_semver_tag"),
Var("dart_root") + "/third_party/pkg/pub":
- Var("github_mirror") + "pub.git" + Var("pub_rev"),
+ Var("dart_git") + "pub.git" + Var("pub_rev"),
Var("dart_root") + "/third_party/pkg/quiver":
Var("chromium_git")
+ "/external/github.com/google/quiver-dart.git"
+ Var("quiver_tag"),
Var("dart_root") + "/third_party/pkg/resource":
- Var("github_mirror") + "resource.git" + Var("resource_rev"),
+ Var("dart_git") + "resource.git" + Var("resource_rev"),
Var("dart_root") + "/third_party/pkg/scheduled_test":
- Var("github_mirror") + "scheduled_test.git" + Var("scheduled_test_tag"),
+ Var("dart_git") + "scheduled_test.git" + Var("scheduled_test_tag"),
Var("dart_root") + "/third_party/pkg/shelf":
- Var("github_mirror") + "shelf.git" + Var("shelf_tag"),
+ Var("dart_git") + "shelf.git" + Var("shelf_tag"),
Var("dart_root") + "/third_party/pkg/shelf_packages_handler":
- Var("github_mirror") + "shelf_packages_handler.git"
+ Var("dart_git") + "shelf_packages_handler.git"
+ Var("shelf_packages_handler_tag"),
Var("dart_root") + "/third_party/pkg/shelf_static":
- Var("github_mirror") + "shelf_static.git" + Var("shelf_static_rev"),
+ Var("dart_git") + "shelf_static.git" + Var("shelf_static_rev"),
Var("dart_root") + "/third_party/pkg/shelf_web_socket":
- Var("github_mirror") + "shelf_web_socket.git" +
+ Var("dart_git") + "shelf_web_socket.git" +
Var("shelf_web_socket_tag"),
Var("dart_root") + "/third_party/pkg/source_maps":
- Var("github_mirror") + "source_maps.git" + Var("source_maps_tag"),
+ Var("dart_git") + "source_maps.git" + Var("source_maps_tag"),
Var("dart_root") + "/third_party/pkg/source_span":
- Var("github_mirror") + "source_span.git" + Var("source_span_tag"),
+ Var("dart_git") + "source_span.git" + Var("source_span_tag"),
Var("dart_root") + "/third_party/pkg/source_map_stack_trace":
- Var("github_mirror") + "source_map_stack_trace.git" +
+ Var("dart_git") + "source_map_stack_trace.git" +
Var("source_map_stack_trace_tag"),
Var("dart_root") + "/third_party/pkg/stack_trace":
- Var("github_mirror") + "stack_trace.git" + Var("stack_trace_tag"),
+ Var("dart_git") + "stack_trace.git" + Var("stack_trace_tag"),
Var("dart_root") + "/third_party/pkg/stream_channel":
- Var("github_mirror") + "stream_channel.git" +
+ Var("dart_git") + "stream_channel.git" +
Var("stream_channel_tag"),
Var("dart_root") + "/third_party/pkg/string_scanner":
- Var("github_mirror") + "string_scanner.git" +
+ Var("dart_git") + "string_scanner.git" +
Var("string_scanner_tag"),
Var("dart_root") + "/third_party/sunflower":
- Var("github_mirror") + "sample-sunflower.git" +
+ Var("chromium_git") +
+ "/external/github.com/dart-lang/sample-sunflower.git" +
Var("sunflower_rev"),
Var("dart_root") + "/third_party/pkg/term_glyph":
- Var("github_mirror") + "term_glyph.git" + Var("term_glyph_tag"),
+ Var("dart_git") + "term_glyph.git" + Var("term_glyph_tag"),
Var("dart_root") + "/third_party/pkg/test":
- Var("github_mirror") + "test.git" + Var("test_tag"),
+ Var("dart_git") + "test.git" + Var("test_tag"),
Var("dart_root") + "/third_party/pkg/test_reflective_loader":
- Var("github_mirror") + "test_reflective_loader.git" +
+ Var("dart_git") + "test_reflective_loader.git" +
Var("test_reflective_loader_tag"),
Var("dart_root") + "/third_party/pkg/tuple":
- Var("github_mirror") + "tuple.git" + Var("tuple_tag"),
+ Var("dart_git") + "tuple.git" + Var("tuple_tag"),
Var("dart_root") + "/third_party/pkg/typed_data":
- Var("github_mirror") + "typed_data.git" + Var("typed_data_tag"),
+ Var("dart_git") + "typed_data.git" + Var("typed_data_tag"),
Var("dart_root") + "/third_party/pkg/usage":
- Var("github_mirror") + "usage.git" + Var("usage_tag"),
+ Var("dart_git") + "usage.git" + Var("usage_tag"),
Var("dart_root") + "/third_party/pkg/utf":
- Var("github_mirror") + "utf.git" + Var("utf_tag"),
+ Var("dart_git") + "utf.git" + Var("utf_tag"),
Var("dart_root") + "/third_party/pkg/watcher":
- Var("github_mirror") + "watcher.git" + Var("watcher_tag"),
+ Var("dart_git") + "watcher.git" + Var("watcher_tag"),
Var("dart_root") + "/third_party/pkg/web_socket_channel":
- Var("github_mirror") + "web_socket_channel.git" +
+ Var("dart_git") + "web_socket_channel.git" +
Var("web_socket_channel_tag"),
Var("dart_root") + "/third_party/pkg/yaml":
- Var("github_mirror") + "yaml.git" + Var("yaml_tag"),
+ Var("dart_git") + "yaml.git" + Var("yaml_tag"),
}
deps_os = {
diff --git a/WATCHLISTS b/WATCHLISTS
index b1cc720..fb38b83 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -21,8 +21,11 @@
'front_end': {
'filepath': '^pkg/front_end',
},
+ 'http': {
+ 'filepath': '^sdk/lib/_http',
+ },
'kernel': {
- 'filepath': '^pkg/kernel'
+ 'filepath': '^pkg/kernel',
},
'messages_review': {
'filepath': (
@@ -58,6 +61,7 @@
'WATCHLISTS': {
'build': [ 'zra@google.com', 'keertip@google.com' ],
'front_end': [ 'dart-fe-team+reviews@google.com' ],
+ 'http': [ 'zra@google.com' ],
'kernel': [ 'karlklose@google.com', 'jensj@google.com', 'kmillikin@google.com' ],
'messages_review': [ 'dart-uxr+reviews@google.com' ],
'mirrors' : [ 'rmacnak@google.com' ],
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 12dca5d..0c8bbea 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -341,9 +341,9 @@
# define into the compile line.
if (is_clang && (is_linux || is_mac)) {
if (is_linux) {
- toolchain_stamp_file = "//buildtools/linux64/toolchain.stamp"
+ toolchain_stamp_file = "//buildtools/linux64/clang.stamp"
} else {
- toolchain_stamp_file = "//buildtools/mac/toolchain.stamp"
+ toolchain_stamp_file = "//buildtools/mac/clang.stamp"
}
toolchain_version = read_file(toolchain_stamp_file, "trim string")
defines = [ "TOOLCHAIN_VERSION=$toolchain_version" ]
@@ -503,6 +503,10 @@
"-Wno-unused-parameter", # Unused function parameters.
]
+ if (is_clang) {
+ default_warning_flags += [ "-Wno-tautological-constant-compare" ]
+ }
+
if (is_mac) {
# TODO(abarth): Re-enable once https://github.com/domokit/mojo/issues/728
# is fixed.
diff --git a/build/toolchain/android/BUILD.gn b/build/toolchain/android/BUILD.gn
index 38f95b9..8568ef7 100644
--- a/build/toolchain/android/BUILD.gn
+++ b/build/toolchain/android/BUILD.gn
@@ -46,17 +46,8 @@
is_clang = invoker.is_clang
if (is_clang) {
- host_suffix = ""
- if (host_os == "linux") {
- host_suffix = "x86_64-linux"
- } else if (host_os == "mac") {
- host_suffix = "x86_64-darwin"
- } else {
- assert(false, "Unknown host")
- }
-
- prefix = rebase_path("//buildtools/toolchain/clang+llvm-$host_suffix/bin",
- root_build_dir)
+ prefix =
+ rebase_path("//buildtools/${host_os}-x64/clang/bin", root_build_dir)
cc = compiler_prefix + prefix + "/clang"
cxx = compiler_prefix + prefix + "/clang++"
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni
index 08dd417..b21a7d1 100644
--- a/build/toolchain/gcc_toolchain.gni
+++ b/build/toolchain/gcc_toolchain.gni
@@ -40,6 +40,9 @@
# Location of the strip executable. When specified, strip will be run on
# all executables as they are built. The stripped artifacts will be put in
# exe.stripped/.
+# - llvm_objcopy
+# Location of the llvm-objcopy executable. Used as strip instead of strip
+# when specified.
template("gcc_toolchain") {
toolchain(target_name) {
assert(defined(invoker.cc), "gcc_toolchain() must specify a \"cc\" value")
@@ -193,7 +196,7 @@
outfile = "{{root_out_dir}}/$exename"
rspfile = "$outfile.rsp"
- if (defined(invoker.strip)) {
+ if (defined(invoker.strip) || defined(invoker.llvm_objcopy)) {
stripped_outfile = "{{root_out_dir}}/exe.stripped/$exename"
}
@@ -203,6 +206,11 @@
strip_command =
"${strip} --strip-unneeded -o $stripped_outfile $outfile"
command += " && " + strip_command
+ } else if (defined(invoker.llvm_objcopy)) {
+ strip = invoker.llvm_objcopy
+ strip_command =
+ "${strip} --strip-all $outfile $stripped_outfile"
+ command += " && " + strip_command
}
if (defined(invoker.postlink)) {
command += " && " + invoker.postlink
@@ -212,7 +220,7 @@
outputs = [
outfile,
]
- if (defined(invoker.strip)) {
+ if (defined(invoker.strip) || defined(invoker.llvm_objcopy)) {
outputs += [ stripped_outfile ]
}
if (defined(invoker.link_outputs)) {
diff --git a/build/toolchain/linux/BUILD.gn b/build/toolchain/linux/BUILD.gn
index 7a3d2df..313deba 100644
--- a/build/toolchain/linux/BUILD.gn
+++ b/build/toolchain/linux/BUILD.gn
@@ -46,11 +46,12 @@
root_build_dir)
cc = "${compiler_prefix}${prefix}/clang"
cxx = "${compiler_prefix}${prefix}/clang++"
- readelf = "readelf"
+
+ readelf = "${prefix}/llvm-readelf"
nm = "${prefix}/llvm-nm"
ar = "${prefix}/llvm-ar"
ld = cxx
- strip = "${prefix}/strip"
+ llvm_objcopy = "${prefix}/llvm-objcopy"
toolchain_cpu = "arm"
toolchain_os = "linux"
@@ -78,8 +79,7 @@
}
gcc_toolchain("clang_arm64") {
- prefix = rebase_path("//buildtools/toolchain/clang+llvm-x86_64-linux/bin",
- root_build_dir)
+ prefix = rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
cc = "${compiler_prefix}${prefix}/clang"
cxx = "${compiler_prefix}${prefix}/clang++"
@@ -87,7 +87,7 @@
nm = "${prefix}/llvm-nm"
ar = "${prefix}/llvm-ar"
ld = cxx
- strip = "${prefix}/strip"
+ llvm_objcopy = "${prefix}/llvm-objcopy"
toolchain_cpu = "arm64"
toolchain_os = "linux"
@@ -95,15 +95,15 @@
}
gcc_toolchain("clang_x86") {
- prefix = rebase_path("//buildtools/toolchain/clang+llvm-x86_64-linux/bin",
- root_build_dir)
+ prefix = rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
cc = "${compiler_prefix}${prefix}/clang"
cxx = "${compiler_prefix}${prefix}/clang++"
- readelf = "readelf"
+
+ readelf = "${prefix}/llvm-readelf"
nm = "${prefix}/llvm-nm"
ar = "${prefix}/llvm-ar"
ld = cxx
- strip = "${prefix}/strip"
+ llvm_objcopy = "${prefix}/llvm-objcopy"
toolchain_cpu = "x86"
toolchain_os = "linux"
@@ -127,16 +127,15 @@
}
gcc_toolchain("clang_x64") {
- prefix = rebase_path("//buildtools/toolchain/clang+llvm-x86_64-linux/bin",
- root_build_dir)
+ prefix = rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
cc = "${compiler_prefix}${prefix}/clang"
cxx = "${compiler_prefix}${prefix}/clang++"
- readelf = "readelf"
+ readelf = "${prefix}/llvm-readelf"
nm = "${prefix}/llvm-nm"
ar = "${prefix}/llvm-ar"
ld = cxx
- strip = "${prefix}/strip"
+ llvm_objcopy = "${prefix}/llvm-objcopy"
toolchain_cpu = "x64"
toolchain_os = "linux"
diff --git a/build/toolchain/mac/BUILD.gn b/build/toolchain/mac/BUILD.gn
index 4ccc69b..4ed409a 100644
--- a/build/toolchain/mac/BUILD.gn
+++ b/build/toolchain/mac/BUILD.gn
@@ -222,8 +222,7 @@
mac_toolchain("clang_x64") {
toolchain_cpu = "x64"
toolchain_os = "mac"
- prefix = rebase_path("//buildtools/toolchain/clang+llvm-x86_64-darwin/bin",
- root_build_dir)
+ prefix = rebase_path("//buildtools/mac-x64/clang/bin", root_build_dir)
cc = "${goma_prefix}$prefix/clang"
cxx = "${goma_prefix}$prefix/clang++"
ar = "${prefix}/llvm-ar"
@@ -237,8 +236,7 @@
mac_toolchain("clang_x86") {
toolchain_cpu = "i386"
toolchain_os = "mac"
- prefix = rebase_path("//buildtools/toolchain/clang+llvm-x86_64-darwin/bin",
- root_build_dir)
+ prefix = rebase_path("//buildtools/mac-x64/clang/bin", root_build_dir)
cc = "${goma_prefix}$prefix/clang"
cxx = "${goma_prefix}$prefix/clang++"
ar = "${prefix}/llvm-ar"
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index c49b17a4..9b18275 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -541,7 +541,9 @@
@override
Object visitInstanceCreationExpression(InstanceCreationExpression node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ if (node.keyword != null) {
+ computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ }
return super.visitInstanceCreationExpression(node);
}
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights2.dart b/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
index 103d641..90cc3ba 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
@@ -632,7 +632,9 @@
@override
Object visitInstanceCreationExpression(InstanceCreationExpression node) {
- computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ if (node.keyword != null) {
+ computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+ }
return super.visitInstanceCreationExpression(node);
}
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index 2e80f58..d29210f 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -15,6 +15,7 @@
const ASYNC_STAR = 'async*';
const DEFERRED_AS = 'deferred as';
+const DEFAULT_COLON = 'default:';
const EXPORT_STATEMENT = "export '';";
const IMPORT_STATEMENT = "import '';";
const PART_STATEMENT = "part '';";
@@ -482,17 +483,21 @@
_addExpressionKeywords(node);
} else if (entity == node.rightBracket) {
if (node.members.isEmpty) {
- _addSuggestions([Keyword.CASE, Keyword.DEFAULT], DART_RELEVANCE_HIGH);
+ _addSuggestion(Keyword.CASE, DART_RELEVANCE_HIGH);
+ _addSuggestion2(DEFAULT_COLON, relevance: DART_RELEVANCE_HIGH);
} else {
- _addSuggestions([Keyword.CASE, Keyword.DEFAULT]);
+ _addSuggestion(Keyword.CASE);
+ _addSuggestion2(DEFAULT_COLON);
_addStatementKeywords(node);
}
}
if (node.members.contains(entity)) {
if (entity == node.members.first) {
- _addSuggestions([Keyword.CASE, Keyword.DEFAULT], DART_RELEVANCE_HIGH);
+ _addSuggestion(Keyword.CASE, DART_RELEVANCE_HIGH);
+ _addSuggestion2(DEFAULT_COLON, relevance: DART_RELEVANCE_HIGH);
} else {
- _addSuggestions([Keyword.CASE, Keyword.DEFAULT]);
+ _addSuggestion(Keyword.CASE);
+ _addSuggestion2(DEFAULT_COLON);
_addStatementKeywords(node);
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 4ca94bf..16e29bf 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -704,7 +704,7 @@
builder.write('async ');
}
builder.write('{$eol$prefix$indent');
- if (!returnValueType.isVoid) {
+ if (!returnValueType.isVoid && !returnValueType.isBottom) {
builder.write('return ');
}
builder.write(returnValueCode);
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 4877120..853962e 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -2244,8 +2244,13 @@
var instanceCreation = coveredNode as InstanceCreationExpression;
DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
- builder.addSimpleReplacement(
- range.token(instanceCreation.keyword), 'const');
+ if (instanceCreation.keyword == null) {
+ builder.addSimpleInsertion(
+ instanceCreation.constructorName.offset, 'const');
+ } else {
+ builder.addSimpleReplacement(
+ range.token(instanceCreation.keyword), 'const');
+ }
});
_addFixFromBuilder(changeBuilder, DartFixKind.USE_CONST);
}
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 18b897d..934dc07 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -9,7 +9,6 @@
import 'package:analyzer/dart/element/visitor.dart';
import 'package:analyzer/exception/exception.dart';
import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/source/package_map_resolver.dart';
import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/dart/analysis/file_state.dart';
@@ -17,6 +16,7 @@
import 'package:analyzer/src/generated/engine.dart' as engine;
import 'package:analyzer/src/generated/sdk.dart';
import 'package:analyzer/src/generated/source_io.dart';
+import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
import 'package:front_end/src/api_prototype/byte_store.dart';
import 'package:front_end/src/base/performance_logger.dart';
@@ -44,8 +44,7 @@
*/
typedef void _ElementVisitorFunction(Element element);
-class AbstractContextTest {
- MemoryResourceProvider provider;
+class AbstractContextTest extends Object with ResourceProviderMixin {
DartSdk sdk;
Map<String, List<Folder>> packageMap;
UriResolver resourceResolver;
@@ -68,16 +67,14 @@
''');
Source addPackageSource(String packageName, String filePath, String content) {
- packageMap[packageName] = [(newFolder('/pubcache/$packageName/lib'))];
- File file = newFile('/pubcache/$packageName/lib/$filePath', content);
+ packageMap[packageName] = [newFolder('/pubcache/$packageName/lib')];
+ File file =
+ newFile('/pubcache/$packageName/lib/$filePath', content: content);
return file.createSource();
}
Source addSource(String path, String content, [Uri uri]) {
- if (path.startsWith('/')) {
- path = provider.convertPath(path);
- }
- File file = newFile(path, content);
+ File file = newFile(path, content: content);
Source source = file.createSource(uri);
driver.addFile(path);
driver.changeFile(path);
@@ -85,12 +82,6 @@
return source;
}
- File newFile(String path, [String content]) =>
- provider.newFile(provider.convertPath(path), content ?? '');
-
- Folder newFolder(String path) =>
- provider.newFolder(provider.convertPath(path));
-
void processRequiredPlugins() {
AnalysisEngine.instance.processRequiredPlugins();
}
@@ -102,11 +93,11 @@
void setUp() {
processRequiredPlugins();
setupResourceProvider();
- sdk = new MockSdk(resourceProvider: provider);
- resourceResolver = new ResourceUriResolver(provider);
+ sdk = new MockSdk(resourceProvider: resourceProvider);
+ resourceResolver = new ResourceUriResolver(resourceProvider);
packageMap = new Map<String, List<Folder>>();
PackageMapUriResolver packageResolver =
- new PackageMapUriResolver(provider, packageMap);
+ new PackageMapUriResolver(resourceProvider, packageMap);
SourceFactory sourceFactory = new SourceFactory(
[new DartUriResolver(sdk), packageResolver, resourceResolver]);
PerformanceLog log = new PerformanceLog(_logBuffer);
@@ -114,7 +105,7 @@
_driver = new AnalysisDriver(
scheduler,
log,
- provider,
+ resourceProvider,
new MemoryByteStore(),
_fileContentOverlay,
null,
@@ -124,12 +115,9 @@
AnalysisEngine.instance.logger = PrintLogger.instance;
}
- void setupResourceProvider() {
- provider = new MemoryResourceProvider();
- }
+ void setupResourceProvider() {}
void tearDown() {
- provider = null;
AnalysisEngine.instance.clearCaches();
AnalysisEngine.instance.logger = null;
}
diff --git a/pkg/analysis_server/test/completion_test.dart b/pkg/analysis_server/test/completion_test.dart
index e6201b5..af77043 100644
--- a/pkg/analysis_server/test/completion_test.dart
+++ b/pkg/analysis_server/test/completion_test.dart
@@ -2153,7 +2153,7 @@
"6+for",
"7+switch",
"8+case",
- "9+default",
+ "9+default:",
"A+try",
"B+on",
"C+catch",
diff --git a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
index 3019f6e..345c5cf 100644
--- a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
@@ -42,6 +42,11 @@
for (SourceEdit edit in change.edits.first.edits) {
text = text.replaceRange(edit.offset, edit.end, edit.replacement);
}
+ expect(text, r'''
+void bar() { foo(); } // missing semi-colon
+
+void foo() { }''');
+
await sendAnalysisUpdateContent({pathname: new AddContentOverlay(text)});
await analysisFinished;
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 2e3f899..f368461 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
@@ -463,7 +463,7 @@
testSource = analysisResult.unit.element.source;
CompletionRequestImpl baseRequest = new CompletionRequestImpl(
analysisResult,
- provider,
+ resourceProvider,
testSource,
completionOffset,
new CompletionPerformance());
@@ -503,11 +503,11 @@
*/
void configureFlutterPkg(Map<String, String> pathToCode) {
pathToCode.forEach((path, code) {
- provider.newFile('$flutterPkgLibPath/$path', code);
+ newFile('$flutterPkgLibPath/$path', content: code);
});
// configure SourceFactory
- Folder myPkgFolder = provider.getResource(flutterPkgLibPath);
- UriResolver pkgResolver = new PackageMapUriResolver(provider, {
+ Folder myPkgFolder = getFolder(flutterPkgLibPath);
+ UriResolver pkgResolver = new PackageMapUriResolver(resourceProvider, {
'flutter': [myPkgFolder]
});
SourceFactory sourceFactory = new SourceFactory(
@@ -586,7 +586,7 @@
@override
void setUp() {
super.setUp();
- testFile = provider.convertPath('/completionTest.dart');
+ testFile = resourceProvider.convertPath('/completionTest.dart');
contributor = createContributor();
}
}
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
index 462d787..17b1d2f 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
@@ -48,7 +48,7 @@
// Build the request
CompletionRequestImpl baseRequest = new CompletionRequestImpl(
await driver.getResult(testFile),
- provider,
+ resourceProvider,
testSource,
completionOffset,
new CompletionPerformance());
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 11847a6..7678669 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
@@ -3310,7 +3310,7 @@
new SourceFactory([new DartUriResolver(sdk), resourceResolver]);
String content2 = 'class ClassFromAnotherContext { }';
Source source2 =
- provider.newFile('/context2/foo.dart', content2).createSource();
+ newFile('/context2/foo.dart', content: content2).createSource();
ChangeSet changeSet = new ChangeSet();
changeSet.addedSource(source2);
context2.applyChanges(changeSet);
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index da2dc8a..f4265da 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -217,13 +217,15 @@
Set<String> expectedCompletions = new Set<String>();
Map<String, int> expectedOffsets = <String, int>{};
Set<String> actualCompletions = new Set<String>();
- expectedCompletions.addAll(expectedKeywords.map((k) => k.lexeme));
- ['import', 'export', 'part'].forEach((s) {
- if (expectedCompletions.contains(s)) {
- expectedCompletions.remove(s);
- expectedCompletions.add('$s \'\';');
+ expectedCompletions.addAll(expectedKeywords.map((keyword) {
+ String text = keyword.lexeme;
+ if (['import', 'export', 'part'].contains(text)) {
+ return '$text \'\';';
+ } else if (text == 'default') {
+ return '$text:';
}
- });
+ return text;
+ }));
expectedCompletions.addAll(pseudoKeywords);
for (CompletionSuggestion s in suggestions) {
diff --git a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
index a47714c..4204f28 100644
--- a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
@@ -1088,7 +1088,7 @@
addPackageSource('myBar', 'bar.dart', 'class Foo2 { Foo2() { } }');
addSource(
'/proj/testAB.dart', 'import "package:myBar/bar.dart"; class Foo { }');
- testFile = provider.convertPath('/proj/completionTest.dart');
+ testFile = resourceProvider.convertPath('/proj/completionTest.dart');
addTestSource('class C {foo(){F^}}');
await computeSuggestions();
expect(replacementOffset, completionOffset - 1);
diff --git a/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
index df1164a..7d66b12 100644
--- a/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
@@ -272,15 +272,6 @@
assertSuggest('../blat.dart', csKind: CompletionSuggestionKind.IMPORT);
}
- test_import_only_dart_files() async {
- testFile = '/proj/completion.dart';
- addSource('/proj/other.dart', 'library other;');
- newFile('/proj/analysis_options.yaml', '# analysis options');
- addTestSource('import "package:^";');
- await computeSuggestions();
- assertNotSuggested('analysis_options.yaml');
- }
-
test_import_no_dot_folders() async {
testFile = '/proj/completion.dart';
addSource('/proj/other.dart', 'library other;');
@@ -290,6 +281,15 @@
assertNotSuggested('.fooFolder/');
}
+ test_import_only_dart_files() async {
+ testFile = '/proj/completion.dart';
+ addSource('/proj/other.dart', 'library other;');
+ newFile('/proj/analysis_options.yaml', content: '# analysis options');
+ addTestSource('import "package:^";');
+ await computeSuggestions();
+ assertNotSuggested('analysis_options.yaml');
+ }
+
test_import_package() async {
addPackageSource('foo', 'foo.dart', 'library foo;');
addPackageSource('foo', 'baz/too.dart', 'library too;');
@@ -357,7 +357,7 @@
test_import_package_missing_lib() async {
var pkgSrc = addPackageSource('bar', 'bar.dart', 'library bar;');
- provider.deleteFolder(dirname(pkgSrc.fullName));
+ deleteFolder(dirname(pkgSrc.fullName));
addTestSource('import "p^" class');
await computeSuggestions();
expect(replacementOffset, completionOffset - 1);
@@ -537,7 +537,7 @@
@override
void setupResourceProvider() {
- provider = new _TestWinResourceProvider();
+ resourceProvider = new MemoryResourceProvider(context: windows);
}
test_import_file() async {
@@ -693,8 +693,3 @@
assertSuggest('../blat.dart', csKind: CompletionSuggestionKind.IMPORT);
}
}
-
-class _TestWinResourceProvider extends MemoryResourceProvider {
- @override
- Context get pathContext => windows;
-}
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index 350a11d..a307b98 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -1038,7 +1038,7 @@
library foo;
part 'src/bar.dart';
''');
- testFile = provider.convertPath('/pkg/lib/src/bar.dart');
+ testFile = resourceProvider.convertPath('/pkg/lib/src/bar.dart');
await resolveTestUnit('''
part of foo;
''');
@@ -1052,7 +1052,7 @@
library foo;
part 'bar.dart';
''');
- testFile = provider.convertPath('/pkg/bar.dart');
+ testFile = resourceProvider.convertPath('/pkg/bar.dart');
await resolveTestUnit('''
part of foo;
''');
@@ -1199,6 +1199,21 @@
''');
}
+ test_convertToBlockBody_OK_throw() async {
+ await resolveTestUnit('''
+class A {
+ mmm() => throw 'error';
+}
+''');
+ await assertHasAssistAt('mmm()', DartAssistKind.CONVERT_INTO_BLOCK_BODY, '''
+class A {
+ mmm() {
+ throw 'error';
+ }
+}
+''');
+ }
+
test_convertToExpressionBody_BAD_already() async {
await resolveTestUnit('''
fff() => 42;
@@ -4381,11 +4396,11 @@
*/
void _configureFlutterPkg(Map<String, String> pathToCode) {
pathToCode.forEach((path, code) {
- provider.newFile('$flutterPkgLibPath/$path', code);
+ newFile('$flutterPkgLibPath/$path', content: code);
});
// configure SourceFactory
- Folder myPkgFolder = provider.getResource(flutterPkgLibPath);
- UriResolver pkgResolver = new PackageMapUriResolver(provider, {
+ Folder myPkgFolder = getFolder(flutterPkgLibPath);
+ UriResolver pkgResolver = new PackageMapUriResolver(resourceProvider, {
'flutter': [myPkgFolder]
});
SourceFactory sourceFactory = new SourceFactory(
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index b4c7c4d..c8a1dae 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -88,7 +88,7 @@
String fileContent = testCode;
if (target != null) {
expect(target, fileEdits.first.file);
- fileContent = provider.getFile(target).readAsStringSync();
+ fileContent = getFile(target).readAsStringSync();
}
resultCode = SourceEdit.applySequence(fileContent, change.edits[0].edits);
@@ -161,8 +161,8 @@
* Computes fixes for the given [error] in [testUnit].
*/
Future<List<Fix>> _computeFixes(AnalysisError error) async {
- DartFixContext fixContext = new _DartFixContextImpl(
- provider, driver, new AstProviderForDriver(driver), testUnit, error);
+ DartFixContext fixContext = new _DartFixContextImpl(resourceProvider,
+ driver, new AstProviderForDriver(driver), testUnit, error);
return await new DefaultFixContributor().internalComputeFixes(fixContext);
}
@@ -172,11 +172,11 @@
*/
void _configureMyPkg(Map<String, String> pathToCode) {
pathToCode.forEach((path, code) {
- provider.newFile('$myPkgLibPath/$path', code);
+ newFile('$myPkgLibPath/$path', content: code);
});
// configure SourceFactory
- Folder myPkgFolder = provider.getResource(myPkgLibPath);
- UriResolver pkgResolver = new PackageMapUriResolver(provider, {
+ Folder myPkgFolder = getFolder(myPkgLibPath);
+ UriResolver pkgResolver = new PackageMapUriResolver(resourceProvider, {
'my_pkg': [myPkgFolder]
});
SourceFactory sourceFactory = new SourceFactory(
@@ -2060,7 +2060,7 @@
}
test_createFile_forImport_BAD_inPackage_lib_justLib() async {
- provider.newFile('/projects/my_package/pubspec.yaml', 'name: my_package');
+ newFile('/projects/my_package/pubspec.yaml', content: 'name: my_package');
testFile = '/projects/my_package/test.dart';
await resolveTestUnit('''
import 'lib';
@@ -2077,9 +2077,9 @@
}
test_createFile_forImport_inPackage_lib() async {
- provider.newFile('/projects/my_package/pubspec.yaml', 'name: my_package');
+ newFile('/projects/my_package/pubspec.yaml', content: 'name: my_package');
testFile = '/projects/my_package/lib/test.dart';
- provider.newFolder('/projects/my_package/lib');
+ newFolder('/projects/my_package/lib');
await resolveTestUnit('''
import 'a/bb/c_cc/my_lib.dart';
''');
@@ -2098,7 +2098,7 @@
}
test_createFile_forImport_inPackage_test() async {
- provider.newFile('/projects/my_package/pubspec.yaml', 'name: my_package');
+ newFile('/projects/my_package/pubspec.yaml', content: 'name: my_package');
testFile = '/projects/my_package/test/misc/test_all.dart';
await resolveTestUnit('''
import 'a/bb/my_lib.dart';
@@ -2137,7 +2137,7 @@
}
test_createFile_forPart_inPackageLib() async {
- provider.newFile('/my/pubspec.yaml', r'''
+ newFile('/my/pubspec.yaml', content: r'''
name: my_test
''');
testFile = '/my/lib/test.dart';
@@ -2146,8 +2146,8 @@
part 'my_part.dart';
''', Uri.parse('package:my/test.dart'));
// configure SourceFactory
- UriResolver pkgResolver = new PackageMapUriResolver(provider, {
- 'my': <Folder>[provider.getResource('/my/lib')],
+ UriResolver pkgResolver = new PackageMapUriResolver(resourceProvider, {
+ 'my': <Folder>[getFolder('/my/lib')],
});
SourceFactory sourceFactory = new SourceFactory(
[new DartUriResolver(sdk), pkgResolver, resourceResolver]);
@@ -3498,8 +3498,8 @@
test_importLibraryProject_BAD_notInLib_BUILD() async {
testFile = '/aaa/bin/test.dart';
- provider.newFile('/aaa/BUILD', '');
- provider.newFile('/bbb/BUILD', '');
+ newFile('/aaa/BUILD');
+ newFile('/bbb/BUILD');
addSource('/bbb/test/lib.dart', 'class Test {}');
await resolveTestUnit('''
main() {
@@ -3511,8 +3511,8 @@
test_importLibraryProject_BAD_notInLib_pubspec() async {
testFile = '/aaa/bin/test.dart';
- provider.newFile('/aaa/pubspec.yaml', 'name: aaa');
- provider.newFile('/bbb/pubspec.yaml', 'name: bbb');
+ newFile('/aaa/pubspec.yaml', content: 'name: aaa');
+ newFile('/bbb/pubspec.yaml', content: 'name: bbb');
addSource('/bbb/test/lib.dart', 'class Test {}');
await resolveTestUnit('''
main() {
@@ -4268,7 +4268,7 @@
''');
}
- test_replaceWithConstInstanceCreation() async {
+ test_replaceWithConstInstanceCreation_explicitNew() async {
await resolveTestUnit('''
class A {
const A();
@@ -4283,6 +4283,23 @@
''');
}
+ @failingTest
+ test_replaceWithConstInstanceCreation_implicitNew() async {
+ // This test fails because the implicit `new` isn't yet recognized.
+ await resolveTestUnit('''
+class A {
+ const A();
+}
+const a = A();
+''');
+ await assertHasFix(DartFixKind.USE_CONST, '''
+class A {
+ const A();
+}
+const a = const A();
+''');
+ }
+
test_undefinedClass_useSimilar_BAD_prefixed() async {
await resolveTestUnit('''
import 'dart:async' as c;
@@ -5584,11 +5601,11 @@
*/
void _configureFlutterPkg(Map<String, String> pathToCode) {
pathToCode.forEach((path, code) {
- provider.newFile('$flutterPkgLibPath/$path', code);
+ newFile('$flutterPkgLibPath/$path', content: code);
});
// configure SourceFactory
- Folder myPkgFolder = provider.getResource(flutterPkgLibPath);
- UriResolver pkgResolver = new PackageMapUriResolver(provider, {
+ Folder myPkgFolder = getFolder(flutterPkgLibPath);
+ UriResolver pkgResolver = new PackageMapUriResolver(resourceProvider, {
'flutter': [myPkgFolder]
});
SourceFactory sourceFactory = new SourceFactory(
diff --git a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
index afdd053..090e1ea 100644
--- a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
+++ b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
@@ -59,7 +59,7 @@
SourceFileEdit fileEdit = refactoringChange.getFileEdit(path);
expect(fileEdit, isNotNull, reason: 'No file edit for $path');
// validate resulting code
- File file = provider.getResource(path);
+ File file = getFile(path);
String ini = file.readAsStringSync();
String actualCode = SourceEdit.applySequence(ini, fileEdit.edits);
expect(actualCode, expectedCode);
diff --git a/pkg/analysis_server/test/src/computer/closingLabels_computer_test.dart b/pkg/analysis_server/test/src/computer/closingLabels_computer_test.dart
index aaf6879..1c5ec8d 100644
--- a/pkg/analysis_server/test/src/computer/closingLabels_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/closingLabels_computer_test.dart
@@ -24,7 +24,7 @@
setUp() {
super.setUp();
- sourcePath = provider.convertPath('/p/lib/source.dart');
+ sourcePath = resourceProvider.convertPath('/p/lib/source.dart');
}
test_adjacentLinesExcluded() async {
@@ -76,46 +76,6 @@
_compareLabels(labels, content, expectedLabelCount: 0);
}
- test_noLabelsForOneElement() async {
- String content = """
-Widget build(BuildContext context) {
- return new Row(
- );
-}
-""";
-
- var labels = await _computeElements(content);
- _compareLabels(labels, content, expectedLabelCount: 0);
- }
-
- test_labelsShownForMultipleElements() async {
- String content = """
-Widget build(BuildContext context) {
- return /*1*/new Row(
- child: new RaisedButton(),
- )/*1:Row*/;
-}
-""";
-
- var labels = await _computeElements(content);
- _compareLabels(labels, content, expectedLabelCount: 1);
- }
-
- test_labelsShownForMultipleElements_2() async {
- String content = """
-Widget build(BuildContext context) {
- return /*1*/new Row(
- child: /*2*/new RaisedButton(
- onPressed: increment,
- )/*2:RaisedButton*/,
- )/*1:Row*/;
-}
-""";
-
- var labels = await _computeElements(content);
- _compareLabels(labels, content, expectedLabelCount: 2);
- }
-
test_constConstructor() async {
String content = """
void myMethod() {
@@ -177,6 +137,34 @@
await _computeElements(content);
}
+ test_labelsShownForMultipleElements() async {
+ String content = """
+Widget build(BuildContext context) {
+ return /*1*/new Row(
+ child: new RaisedButton(),
+ )/*1:Row*/;
+}
+""";
+
+ var labels = await _computeElements(content);
+ _compareLabels(labels, content, expectedLabelCount: 1);
+ }
+
+ test_labelsShownForMultipleElements_2() async {
+ String content = """
+Widget build(BuildContext context) {
+ return /*1*/new Row(
+ child: /*2*/new RaisedButton(
+ onPressed: increment,
+ )/*2:RaisedButton*/,
+ )/*1:Row*/;
+}
+""";
+
+ var labels = await _computeElements(content);
+ _compareLabels(labels, content, expectedLabelCount: 2);
+ }
+
test_listLiterals() async {
String content = """
void myMethod() {
@@ -269,6 +257,18 @@
_compareLabels(labels, content, expectedLabelCount: 2);
}
+ test_noLabelsForOneElement() async {
+ String content = """
+Widget build(BuildContext context) {
+ return new Row(
+ );
+}
+""";
+
+ var labels = await _computeElements(content);
+ _compareLabels(labels, content, expectedLabelCount: 0);
+ }
+
test_NoLabelsFromInterpolatedStrings() async {
String content = """
void main(HighlightRegionType type, int offset, int length) {
@@ -399,7 +399,7 @@
}
Future<List<ClosingLabel>> _computeElements(String sourceContent) async {
- provider.newFile(sourcePath, sourceContent);
+ newFile(sourcePath, content: sourceContent);
ResolveResult result = await driver.getResult(sourcePath);
DartUnitClosingLabelsComputer computer =
new DartUnitClosingLabelsComputer(result.lineInfo, result.unit);
diff --git a/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart b/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
index 63d5432..bbe6367 100644
--- a/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
@@ -48,14 +48,14 @@
Future<Null> createBuilder(String content) async {
originalContent = content;
- provider.newFile(path, content);
+ newFile(path, content: content);
AnalysisResult result = await driver.getResult(path);
- computer = new ImportElementsComputer(provider, result);
+ computer = new ImportElementsComputer(resourceProvider, result);
}
void setUp() {
super.setUp();
- path = provider.convertPath('/test.dart');
+ path = resourceProvider.convertPath('/test.dart');
}
test_createEdits_addImport_noDirectives() async {
diff --git a/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart b/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
index adcf5f1..f66cf97 100644
--- a/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
@@ -24,7 +24,7 @@
setUp() {
super.setUp();
- sourcePath = provider.convertPath('/p/lib/source.dart');
+ sourcePath = resourceProvider.convertPath('/p/lib/source.dart');
}
test_dartAsync_noPrefix() async {
@@ -391,7 +391,7 @@
Future<List<ImportedElements>> _computeElements(
String sourceContent, int offset, int length) async {
- provider.newFile(sourcePath, sourceContent);
+ newFile(sourcePath, content: sourceContent);
ResolveResult result = await driver.getResult(sourcePath);
ImportedElementsComputer computer =
new ImportedElementsComputer(result.unit, offset, length);
diff --git a/pkg/analysis_server/test/src/computer/outline_computer_test.dart b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
index 2b88704..8395805 100644
--- a/pkg/analysis_server/test/src/computer/outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
@@ -29,12 +29,12 @@
@override
void setUp() {
super.setUp();
- testPath = provider.convertPath('/test.dart');
+ testPath = resourceProvider.convertPath('/test.dart');
}
Future<Outline> _computeOutline(String code) async {
testCode = code;
- provider.newFile(testPath, code);
+ newFile(testPath, content: code);
AnalysisResult analysisResult = await driver.getResult(testPath);
return new DartUnitOutlineComputer(
testPath, analysisResult.lineInfo, analysisResult.unit)
@@ -47,7 +47,7 @@
@override
void setUp() {
super.setUp();
- Folder libFolder = configureFlutterPackage(provider);
+ Folder libFolder = configureFlutterPackage(resourceProvider);
packageMap['flutter'] = [libFolder];
}
diff --git a/pkg/analysis_server/test/src/utilities/flutter_test.dart b/pkg/analysis_server/test/src/utilities/flutter_test.dart
index 26e38eb..f6ef78c6 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_test.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_test.dart
@@ -22,7 +22,7 @@
@override
void setUp() {
super.setUp();
- Folder libFolder = configureFlutterPackage(provider);
+ Folder libFolder = configureFlutterPackage(resourceProvider);
packageMap['flutter'] = [libFolder];
}
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 3d6cd28..ba811b3d 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -4229,7 +4229,7 @@
/**
* Return the 'new' or 'const' keyword used to indicate how an object should
- * be created.
+ * be created, or `null` if the keyword was not explicitly provided.
*/
Token get keyword;
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 1bf15ab..588c842 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -94,7 +94,7 @@
/**
* The version of data format, should be incremented on every format change.
*/
- static const int DATA_VERSION = 47;
+ static const int DATA_VERSION = 48;
/**
* The number of exception contexts allowed to write. Once this field is
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index b06f3f7..8c3fe08 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -212,14 +212,13 @@
// Invalid part URIs can result in an element with a null source
if (unit.element.source != null) {
- final errorListener = new FastaErrorReporter(
- new ErrorReporter(_getErrorListener(file), unit.element.source));
+ final reporter = new FastaErrorReporter(_getErrorReporter(file));
final libraryKernelResult = kernelResult.results
.expand((r) => r.libraryResults)
.where((r) => r.library.importUri == unit.element.source.uri)
.firstWhere((_) => true, orElse: () => null);
- libraryKernelResult?.errors?.forEach((kernelError) =>
- errorListener.reportCompilationMessage(kernelError));
+ libraryKernelResult?.errors?.forEach(
+ (kernelError) => reporter.reportCompilationMessage(kernelError));
}
});
@@ -514,7 +513,9 @@
* Return a new parsed unresolved [CompilationUnit].
*/
CompilationUnit _parse(FileState file) {
- RecordingErrorListener errorListener = _getErrorListener(file);
+ AnalysisErrorListener errorListener = _previewDart2
+ ? AnalysisErrorListener.NULL_LISTENER
+ : _getErrorListener(file);
String content = file.content;
CompilationUnit unit = file.parse(errorListener);
@@ -742,9 +743,12 @@
if (redirectName != null) {
var redirectedConstructor = context.redirectedConstructor;
redirectName.staticElement = redirectedConstructor;
+ // TODO(scheglov) Support for import prefix?
ResolutionApplier.applyConstructorElement(
- redirectedConstructor.returnType,
+ _libraryElement,
+ null,
redirectedConstructor,
+ redirectedConstructor.returnType,
redirectName);
// TODO(scheglov) Add support for type parameterized redirects.
} else {
@@ -792,6 +796,8 @@
applier.checkDone();
} else if (declaration is FunctionTypeAlias) {
// No bodies to resolve.
+ } else if (declaration is GenericTypeAlias) {
+ // No bodies to resolve.
} else if (declaration is TopLevelVariableDeclaration) {
List<VariableDeclaration> variables = declaration.variables.variables;
var context = variables[0].element as ElementImpl;
@@ -1133,6 +1139,7 @@
}
applier = new ValidatingResolutionApplier(
+ libraryElement,
this,
declaredElements,
referencedElements,
@@ -1224,10 +1231,6 @@
DartType translateType(kernel.DartType kernelType) {
if (kernelType is kernel.NullType) {
return null;
- } else if (kernelType is kernel.FunctionReferenceDartType) {
- kernel.VariableDeclaration variable = kernelType.function.variable;
- FunctionElement element = declarationToElement[variable];
- return element.type;
} else if (kernelType is kernel.IndexAssignNullFunctionType) {
return null;
} else if (kernelType is kernel.TypeArgumentsDartType) {
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 59d970d..fbc951e 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -6373,7 +6373,7 @@
implements InstanceCreationExpression {
/**
* The 'new' or 'const' keyword used to indicate how an object should be
- * created.
+ * created, or `null` if the keyword is implicit.
*/
@override
Token keyword;
@@ -6414,7 +6414,7 @@
}
@override
- Token get beginToken => keyword;
+ Token get beginToken => keyword ?? _constructorName.beginToken;
@override
Iterable<SyntacticEntity> get childEntities => new ChildEntities()
@@ -6499,6 +6499,69 @@
void visitChildren(AstVisitor visitor) {
// There are no children to visit.
}
+
+ /**
+ * Return `true` if the given [lexeme] is a valid lexeme for an integer
+ * literal. The flag [isNegative] should be `true` if the lexeme is preceded
+ * by a unary negation operator.
+ */
+ static bool isValidLiteral(String lexeme, bool isNegative) {
+ if (lexeme.startsWith('0x') || lexeme.startsWith('0X')) {
+ return _isValidHexadecimalLiteral(lexeme, isNegative);
+ }
+ return _isValidDecimalLiteral(lexeme, isNegative);
+ }
+
+ /**
+ * Return `true` if the given [lexeme] is a valid lexeme for a decimal integer
+ * literal. The flag [isNegative] should be `true` if the lexeme is preceded
+ * by a minus operator.
+ */
+ static bool _isValidDecimalLiteral(String lexeme, bool isNegative) {
+ int length = lexeme.length;
+ int index = 0;
+ while (length > 0 && lexeme.substring(index, index + 1) == '0') {
+ length--;
+ index++;
+ }
+ if (length < 19) {
+ return true;
+ } else if (length > 19) {
+ return false;
+ }
+ if (int.parse(lexeme.substring(index, index + 1)) < 9) {
+ return true;
+ }
+ int bound;
+ if (isNegative) {
+ bound = 223372036854775808;
+ } else {
+ bound = 223372036854775807;
+ }
+ return int.parse(lexeme.substring(index + 1)) <= bound;
+ }
+
+ /**
+ * Return `true` if the given [lexeme] is a valid lexeme for a hexadecimal
+ * integer literal. The lexeme is expected to start with either `0x` or `0X`.
+ */
+ static bool _isValidHexadecimalLiteral(String lexeme, bool isNegative) {
+ int length = lexeme.length - 2;
+ int index = 2;
+ while (length > 0 && lexeme.substring(index, index + 1) == '0') {
+ length--;
+ index++;
+ }
+ if (length < 16) {
+ return true;
+ } else if (length > 16) {
+ return false;
+ }
+ if (!isNegative) {
+ return true;
+ }
+ return int.parse(lexeme.substring(index, index + 1), radix: 16) <= 7;
+ }
}
/**
diff --git a/pkg/analyzer/lib/src/dart/element/builder.dart b/pkg/analyzer/lib/src/dart/element/builder.dart
index 09ccd9f..19eee60 100644
--- a/pkg/analyzer/lib/src/dart/element/builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/builder.dart
@@ -1159,6 +1159,10 @@
element.isFinal = node.isFinal;
if (node.type == null) {
element.hasImplicitType = true;
+ } else {
+ // Note: this is a noop most of the time, however, not for
+ // [GenericFunctionType] and perhaps others in the future.
+ node.type.accept(this);
}
_currentHolder.addLocalVariable(element);
variableName.staticElement = element;
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 61f5a19..41ef5e3 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -1123,7 +1123,7 @@
Token rightDelimiter;
for (Object raw in rawParameters) {
if (raw is _OptionalFormalParameters) {
- parameters.addAll(raw.parameters);
+ parameters.addAll(raw.parameters ?? const <FormalParameter>[]);
leftDelimiter = raw.leftDelimiter;
rightDelimiter = raw.rightDelimiter;
} else {
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index 0976bb8..d0fe70f 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -294,6 +294,10 @@
errorReporter?.reportErrorForOffset(
StrongModeCode.INVALID_CAST_NEW_EXPR, offset, length);
return;
+ case "INVALID_METHOD_OVERRIDE":
+ errorReporter?.reportErrorForOffset(
+ StrongModeCode.INVALID_METHOD_OVERRIDE, offset, length);
+ return;
case "INVALID_MODIFIER_ON_SETTER":
_reportByCode(CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER, message,
offset, length);
@@ -517,26 +521,14 @@
}
void reportCompilationMessage(CompilationMessage message) {
- // TODO(mfairhurst) Disable this once the codes are already analyzer
- // format (#31644)
- final analyzerCode =
- message.code.runes.fold<List<String>>(<String>[], (words, charcode) {
- final char = new String.fromCharCode(charcode);
- if (char.toUpperCase() == char) {
- words.add(char);
- } else {
- words[words.length - 1] = words.last + char.toUpperCase();
- }
- return words;
- }).join('_');
-
- final code = errorCodeByUniqueName(analyzerCode);
- if (code != null) {
+ String errorCodeStr = message.analyzerCode;
+ ErrorCode errorCode = _getErrorCode(errorCodeStr);
+ if (errorCode != null) {
errorReporter.reportError(new AnalysisError.forValues(
errorReporter.source,
message.span.start.offset,
message.span.length,
- code,
+ errorCode,
message.message,
message.tip));
} else {
@@ -564,4 +556,22 @@
null));
}
}
+
+ /// Return the [ErrorCode] for the given [shortName], or `null` if not found.
+ static ErrorCode _getErrorCode(String shortName) {
+ const prefixes = const {
+ CompileTimeErrorCode: 'CompileTimeErrorCode',
+ ParserErrorCode: 'ParserErrorCode',
+ StaticTypeWarningCode: 'StaticTypeWarningCode',
+ StaticWarningCode: 'StaticWarningCode'
+ };
+ for (var prefix in prefixes.values) {
+ var uniqueName = '$prefix.$shortName';
+ var errorCode = errorCodeByUniqueName(uniqueName);
+ if (errorCode != null) {
+ return errorCode;
+ }
+ }
+ return null;
+ }
}
diff --git a/pkg/analyzer/lib/src/fasta/resolution_applier.dart b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
index 99dcdc7..dd0090f 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_applier.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
@@ -18,6 +18,7 @@
/// Visitor that applies resolution data from the front end (obtained via
/// [ResolutionStorer]) to an analyzer AST.
class ResolutionApplier extends GeneralizingAstVisitor {
+ final LibraryElement _enclosingLibraryElement;
final TypeContext _typeContext;
final List<Element> _declaredElements;
@@ -35,8 +36,8 @@
/// with corresponding getters.
bool _inAnnotation = false;
- ResolutionApplier(this._typeContext, this._declaredElements,
- this._referencedElements, this._types);
+ ResolutionApplier(this._enclosingLibraryElement, this._typeContext,
+ this._declaredElements, this._referencedElements, this._types);
/// Apply resolution to annotations of the given [node].
void applyToAnnotations(AnnotatedNode node) {
@@ -70,7 +71,8 @@
@override
void visitAsExpression(AsExpression node) {
node.expression.accept(this);
- applyToTypeAnnotation(_getTypeFor(node.asOperator), node.type);
+ applyToTypeAnnotation(
+ _enclosingLibraryElement, _getTypeFor(node.asOperator), node.type);
node.staticType = _getTypeFor(node.asOperator);
}
@@ -93,7 +95,8 @@
operatorType != TokenType.AMPERSAND_AMPERSAND &&
operatorType != TokenType.BAR_BAR) {
node.staticElement = _getReferenceFor(node.operator);
- _getTypeFor(node.operator); // function type of the operator
+ _getTypeFor(node.operator); // callee type
+ _getTypeFor(node.operator); // invocation type
_getTypeFor(node.operator); // type arguments
}
@@ -118,7 +121,8 @@
void visitCatchClause(CatchClause node) {
DartType guardType = _getTypeFor(node.onKeyword ?? node.catchKeyword);
if (node.exceptionType != null) {
- applyToTypeAnnotation(guardType, node.exceptionType);
+ applyToTypeAnnotation(
+ _enclosingLibraryElement, guardType, node.exceptionType);
}
SimpleIdentifier exception = node.exceptionParameter;
@@ -175,7 +179,8 @@
identifier.staticType = type;
if (loopVariable.type != null) {
- applyToTypeAnnotation(type, loopVariable.type);
+ applyToTypeAnnotation(
+ _enclosingLibraryElement, type, loopVariable.type);
}
VariableElementImpl element = _getDeclarationFor(identifier);
@@ -218,7 +223,8 @@
_typeContext.enterLocalFunction(element);
if (node.returnType != null && element != null) {
- applyToTypeAnnotation(element.returnType, node.returnType);
+ applyToTypeAnnotation(
+ _enclosingLibraryElement, element.returnType, node.returnType);
}
// Associate the elements with the nodes.
@@ -239,7 +245,8 @@
}
}
- applyParameters(element.parameters, parameterList);
+ applyParameters(
+ _enclosingLibraryElement, element.parameters, parameterList);
}
functionExpression.body?.accept(this);
@@ -257,7 +264,8 @@
if (element != null) {
node.element = element;
node.staticType = element.type;
- applyParameters(element.parameters, parameterList);
+ applyParameters(
+ _enclosingLibraryElement, element.parameters, parameterList);
}
// Apply resolution to default values.
@@ -270,9 +278,21 @@
@override
void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
node.function.accept(this);
- // TODO(brianwilkerson) Visit node.typeArguments.
+
+ DartType invokeType = _getTypeFor(node.argumentList);
+ node.staticInvokeType = invokeType;
+
+ DartType typeArgumentsDartType = _getTypeFor(node.argumentList);
+ if (node.typeArguments != null &&
+ typeArgumentsDartType is TypeArgumentsDartType) {
+ _applyTypeArgumentsToList(_enclosingLibraryElement, typeArgumentsDartType,
+ node.typeArguments.arguments);
+ }
+
+ DartType resultType = _getTypeFor(node.argumentList);
+ node.staticType = resultType;
+
node.argumentList.accept(this);
- node.staticElement = _getReferenceFor(node);
}
@override
@@ -288,8 +308,8 @@
node.staticElement = member;
}
- // We cannot use the detached FunctionType of `[]` or `[]=`.
- _getTypeFor(node.leftBracket);
+ _getTypeFor(node.leftBracket); // callee type
+ _getTypeFor(node.leftBracket); // invoke type
_getTypeFor(node.leftBracket); // type arguments
node.staticType = _getTypeFor(node.leftBracket);
@@ -301,24 +321,81 @@
void visitInstanceCreationExpression(InstanceCreationExpression node) {
ConstructorName constructorName = node.constructorName;
- DartType type = _getTypeFor(constructorName);
- ConstructorElement element = _getReferenceFor(constructorName);
+ // Peek forward and check if the next element is a PrefixElement.
+ PrefixElement prefix;
+ AstNode constructorEntity = constructorName;
+ if (_referencedElements[_referencedElementIndex] is PrefixElement) {
+ PrefixedIdentifier typeIdentifier = constructorName.type.name;
+ prefix = _getReferenceFor(typeIdentifier.prefix);
+ _getTypeFor(typeIdentifier.prefix); // prefix type
+ constructorEntity = typeIdentifier.identifier;
+ }
- constructorName.staticElement = element;
+ ConstructorElement constructor = _getReferenceFor(constructorEntity);
+ DartType type = _getTypeFor(constructorEntity);
- node.staticElement = element;
+ applyConstructorElement(
+ _enclosingLibraryElement, prefix, constructor, type, constructorName);
+
+ node.staticElement = constructor;
node.staticType = type;
- applyConstructorElement(type, element, constructorName);
-
ArgumentList argumentList = node.argumentList;
_applyResolutionToArguments(argumentList);
+ _resolveNamedArguments(argumentList, constructor?.parameters);
+ }
+
+ @override
+ void visitAnnotation(Annotation node) {
+ SimpleIdentifier constructorName = node.constructorName;
+
+ // Peek forward and check if the next element is a PrefixElement.
+ SimpleIdentifier topEntity;
+ if (_referencedElements[_referencedElementIndex] is PrefixElement) {
+ PrefixedIdentifier prefixedIdentifier = node.name;
+
+ SimpleIdentifier prefix = prefixedIdentifier.prefix;
+ PrefixElement prefixElement = _getReferenceFor(prefix);
+ _getTypeFor(prefix); // prefix type
+ prefix.staticElement = prefixElement;
+
+ topEntity = prefixedIdentifier.identifier;
+ } else {
+ topEntity = node.name;
+ }
+
+ Element element = _getReferenceFor(topEntity);
+ DartType type = _getTypeFor(topEntity);
+ node.element = element;
+
+ if (element is ConstructorElement) {
+ topEntity.staticElement = element.enclosingElement;
+
+ if (constructorName != null) {
+ constructorName.staticElement = element;
+ constructorName.staticType = element.type;
+ }
+
+ ArgumentList argumentList = node.arguments;
+ if (argumentList != null) {
+ _applyResolutionToArguments(argumentList);
+ _resolveNamedArguments(argumentList, element.parameters);
+ }
+ } else {
+ topEntity.staticElement = element;
+ topEntity.staticType = type;
+ if (constructorName != null) {
+ constructorName.accept(this);
+ node.element = constructorName.staticElement;
+ }
+ }
}
@override
void visitIsExpression(IsExpression node) {
node.expression.accept(this);
- applyToTypeAnnotation(_getTypeFor(node.isOperator), node.type);
+ applyToTypeAnnotation(
+ _enclosingLibraryElement, _getTypeFor(node.isOperator), node.type);
node.staticType = _getTypeFor(node.isOperator);
}
@@ -328,7 +405,8 @@
DartType type = _getTypeFor(node.constKeyword ?? node.leftBracket);
node.staticType = type;
if (node.typeArguments != null) {
- _applyTypeArgumentsToList(type, node.typeArguments.arguments);
+ _applyTypeArgumentsToList(
+ _enclosingLibraryElement, type, node.typeArguments.arguments);
}
}
@@ -338,7 +416,8 @@
DartType type = _getTypeFor(node.constKeyword ?? node.leftBracket);
node.staticType = type;
if (node.typeArguments != null) {
- _applyTypeArgumentsToList(type, node.typeArguments.arguments);
+ _applyTypeArgumentsToList(
+ _enclosingLibraryElement, type, node.typeArguments.arguments);
}
}
@@ -349,7 +428,8 @@
ArgumentList argumentList = node.argumentList;
Element invokeElement = _getReferenceFor(node.methodName);
- DartType invokeType = _getTypeFor(node.methodName);
+ _getTypeFor(node.methodName); // static element type
+ DartType invokeType = _getTypeFor(argumentList);
DartType typeArgumentsDartType = _getTypeFor(argumentList);
DartType resultType = _getTypeFor(argumentList);
@@ -366,12 +446,24 @@
if (invokeType is FunctionType) {
if (node.typeArguments != null &&
typeArgumentsDartType is TypeArgumentsDartType) {
- _applyTypeArgumentsToList(
+ _applyTypeArgumentsToList(_enclosingLibraryElement,
typeArgumentsDartType, node.typeArguments.arguments);
}
}
_applyResolutionToArguments(argumentList);
+
+ {
+ var elementForParameters = invokeElement;
+ if (elementForParameters is PropertyAccessorElement) {
+ PropertyAccessorElement accessor = elementForParameters;
+ elementForParameters = accessor.returnType.element;
+ }
+ if (elementForParameters is FunctionTypedElement) {
+ List<ParameterElement> parameters = elementForParameters.parameters;
+ _resolveNamedArguments(argumentList, parameters);
+ }
+ }
}
@override
@@ -418,7 +510,8 @@
// This is a method invocation, it is associated with the operator.
SyntacticEntity entity = node.operator;
node.staticElement = _getReferenceFor(entity);
- _getTypeFor(entity); // The function type of the operator.
+ _getTypeFor(entity); // The static function type of the operator.
+ _getTypeFor(entity); // The invoke function type of the operator.
_getTypeFor(entity); // The type arguments (empty).
node.staticType = _getTypeFor(entity);
}
@@ -442,6 +535,7 @@
ArgumentList argumentList = node.argumentList;
_applyResolutionToArguments(argumentList);
+ _resolveNamedArguments(argumentList, element?.parameters);
}
@override
@@ -468,16 +562,19 @@
void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
SimpleIdentifier constructorName = node.constructorName;
var superElement = _typeContext.enclosingClassElement.supertype.element;
+ ConstructorElement element;
if (constructorName == null) {
- node.staticElement = superElement.unnamedConstructor;
+ element = superElement.unnamedConstructor;
} else {
String name = constructorName.name;
- var superConstructor = superElement.getNamedConstructor(name);
- node.staticElement = superConstructor;
- constructorName.staticElement = superConstructor;
+ element = superElement.getNamedConstructor(name);
+ constructorName.staticElement = element;
}
+ node.staticElement = element;
- node.argumentList.accept(this);
+ ArgumentList argumentList = node.argumentList;
+ _applyResolutionToArguments(argumentList);
+ _resolveNamedArguments(argumentList, element?.parameters);
}
@override
@@ -492,7 +589,7 @@
@override
void visitTypeAnnotation(TypeAnnotation node) {
- applyToTypeAnnotation(_getTypeFor(node), node);
+ applyToTypeAnnotation(_enclosingLibraryElement, _getTypeFor(node), node);
}
@override
@@ -530,7 +627,7 @@
DartType type = node.variables[0].name.staticType;
// TODO(brianwilkerson) Understand why the type is sometimes `null`.
if (type != null) {
- applyToTypeAnnotation(type, node.type);
+ applyToTypeAnnotation(_enclosingLibraryElement, type, node.type);
}
}
}
@@ -591,39 +688,67 @@
return _typeContext.translateType(kernelType);
}
+ /// Apply resolution to named arguments of the [argumentList].
+ void _resolveNamedArguments(
+ ArgumentList argumentList, List<ParameterElement> parameters) {
+ if (parameters != null) {
+ for (var argument in argumentList.arguments) {
+ if (argument is NamedExpression) {
+ SimpleIdentifier identifier = argument.name.label;
+ for (var parameter in parameters) {
+ if (parameter.name == identifier.name) {
+ identifier.staticElement = parameter;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
/// Apply the [type] that is created by the [constructorName] and the
/// [constructorElement] it references.
- static void applyConstructorElement(DartType type,
- ConstructorElement constructorElement, ConstructorName constructorName) {
+ static void applyConstructorElement(
+ LibraryElement enclosingLibraryElement,
+ PrefixElement prefixElement,
+ ConstructorElement constructorElement,
+ DartType type,
+ ConstructorName constructorName) {
+ constructorName.staticElement = constructorElement;
+
ClassElement classElement = constructorElement?.enclosingElement;
Identifier typeIdentifier = constructorName.type.name;
- if (typeIdentifier is SimpleIdentifier) {
- applyToTypeAnnotation(type, constructorName.type);
- if (constructorName.name != null) {
- constructorName.name.staticElement = constructorElement;
- }
- } else if (typeIdentifier is PrefixedIdentifier) {
- // TODO(scheglov) Rewrite AST using knowledge about prefixes.
- // TODO(scheglov) Add support for `new prefix.Type()`.
- // TODO(scheglov) Add support for `new prefix.Type.name()`.
- assert(constructorName.name == null);
- constructorName.period = typeIdentifier.period;
- constructorName.name = typeIdentifier.identifier;
+ if (prefixElement != null) {
+ PrefixedIdentifier prefixedTypeIdentifier = typeIdentifier;
+ prefixedTypeIdentifier.staticType = type;
- SimpleIdentifier classNode = typeIdentifier.prefix;
+ prefixedTypeIdentifier.prefix.staticElement = prefixElement;
+
+ SimpleIdentifier classNode = prefixedTypeIdentifier.identifier;
classNode.staticElement = classElement;
classNode.staticType = type;
-
- constructorName.type = astFactory.typeName(classNode, null);
- constructorName.type.type = type;
- constructorName.name.staticElement = constructorElement;
+ } else {
+ if (typeIdentifier is SimpleIdentifier) {
+ typeIdentifier.staticElement = classElement;
+ typeIdentifier.staticType = type;
+ } else if (typeIdentifier is PrefixedIdentifier) {
+ constructorName.type = astFactory.typeName(typeIdentifier.prefix, null);
+ constructorName.period = typeIdentifier.period;
+ constructorName.name = typeIdentifier.identifier;
+ }
}
+
+ constructorName.name?.staticElement = constructorElement;
+
+ applyToTypeAnnotation(enclosingLibraryElement, type, constructorName.type);
}
/// Apply the types of the [parameterElements] to the [parameterList] that
/// have an explicit type annotation.
- static void applyParameters(List<ParameterElement> parameterElements,
+ static void applyParameters(
+ LibraryElement enclosingLibraryElement,
+ List<ParameterElement> parameterElements,
FormalParameterList parameterList) {
List<FormalParameter> parameters = parameterList.parameters;
@@ -657,13 +782,15 @@
TypeAnnotation functionReturnType;
FormalParameterList functionParameterList;
if (normalParameter is SimpleFormalParameter) {
- applyToTypeAnnotation(element.type, normalParameter.type);
+ applyToTypeAnnotation(
+ enclosingLibraryElement, element.type, normalParameter.type);
} else if (normalParameter is FunctionTypedFormalParameter) {
functionReturnType = normalParameter.returnType;
functionParameterList = normalParameter.parameters;
} else if (normalParameter is FieldFormalParameter) {
if (normalParameter.parameters == null) {
- applyToTypeAnnotation(element.type, normalParameter.type);
+ applyToTypeAnnotation(
+ enclosingLibraryElement, element.type, normalParameter.type);
} else {
functionReturnType = normalParameter.type;
functionParameterList = normalParameter.parameters;
@@ -673,9 +800,11 @@
if (functionParameterList != null) {
FunctionType elementType = element.type;
if (functionReturnType != null) {
- applyToTypeAnnotation(elementType.returnType, functionReturnType);
+ applyToTypeAnnotation(enclosingLibraryElement, elementType.returnType,
+ functionReturnType);
}
- applyParameters(elementType.parameters, functionParameterList);
+ applyParameters(enclosingLibraryElement, elementType.parameters,
+ functionParameterList);
}
}
}
@@ -684,19 +813,8 @@
/// [typeAnnotation] to the [type] and recursively applying each of the type
/// arguments of the [type] to the corresponding type arguments of the
/// [typeAnnotation].
- static void applyToTypeAnnotation(
+ static void applyToTypeAnnotation(LibraryElement enclosingLibraryElement,
DartType type, TypeAnnotation typeAnnotation) {
- SimpleIdentifier nameForElement(Identifier identifier) {
- if (identifier is SimpleIdentifier) {
- return identifier;
- } else if (identifier is PrefixedIdentifier) {
- return identifier.identifier;
- } else {
- throw new UnimplementedError(
- 'Unhandled class of identifier: ${identifier.runtimeType}');
- }
- }
-
if (typeAnnotation is GenericFunctionTypeImpl) {
if (type is! FunctionType) {
throw new StateError('Non-function type ($type) '
@@ -704,36 +822,55 @@
}
FunctionType functionType = type;
typeAnnotation.type = type;
- applyToTypeAnnotation(functionType.returnType, typeAnnotation.returnType);
- applyParameters(functionType.parameters, typeAnnotation.parameters);
+ applyToTypeAnnotation(enclosingLibraryElement, functionType.returnType,
+ typeAnnotation.returnType);
+ applyParameters(enclosingLibraryElement, functionType.parameters,
+ typeAnnotation.parameters);
} else if (typeAnnotation is TypeNameImpl) {
typeAnnotation.type = type;
- SimpleIdentifier name = nameForElement(typeAnnotation.name);
+
+ Identifier typeIdentifier = typeAnnotation.name;
+ SimpleIdentifier typeName;
+ if (typeIdentifier is PrefixedIdentifier) {
+ if (enclosingLibraryElement != null) {
+ String prefixName = typeIdentifier.prefix.name;
+ for (var import in enclosingLibraryElement.imports) {
+ if (import.prefix?.name == prefixName) {
+ typeIdentifier.prefix.staticElement = import.prefix;
+ break;
+ }
+ }
+ }
+ typeName = typeIdentifier.identifier;
+ } else {
+ typeName = typeIdentifier;
+ }
Element typeElement = type.element;
if (typeElement is GenericFunctionTypeElement &&
typeElement.enclosingElement is GenericTypeAliasElement) {
typeElement = typeElement.enclosingElement;
}
- name.staticElement = typeElement;
- name.staticType = type;
+ typeName.staticElement = typeElement;
+ typeName.staticType = type;
}
if (typeAnnotation is NamedType) {
TypeArgumentList typeArguments = typeAnnotation.typeArguments;
if (typeArguments != null) {
- _applyTypeArgumentsToList(type, typeArguments.arguments);
+ _applyTypeArgumentsToList(
+ enclosingLibraryElement, type, typeArguments.arguments);
}
}
}
/// Recursively apply each of the type arguments of the [type] to the
/// corresponding type arguments of the [typeArguments].
- static void _applyTypeArgumentsToList(
+ static void _applyTypeArgumentsToList(LibraryElement enclosingLibraryElement,
DartType type, List<TypeAnnotation> typeArguments) {
if (type != null && type.isUndefined) {
for (TypeAnnotation argument in typeArguments) {
- applyToTypeAnnotation(type, argument);
+ applyToTypeAnnotation(enclosingLibraryElement, type, argument);
}
} else if (type is ParameterizedType) {
List<DartType> argumentTypes = type.typeArguments;
@@ -743,7 +880,8 @@
'for ${typeArguments.length} type arguments');
}
for (int i = 0; i < argumentCount; i++) {
- applyToTypeAnnotation(argumentTypes[i], typeArguments[i]);
+ applyToTypeAnnotation(
+ enclosingLibraryElement, argumentTypes[i], typeArguments[i]);
}
} else {
throw new StateError('Attempting to apply a non-parameterized type '
@@ -809,6 +947,7 @@
final List<int> _typeOffsets;
ValidatingResolutionApplier(
+ LibraryElement enclosingLibraryElement,
TypeContext typeContext,
List<Element> declaredElements,
List<Element> referencedElements,
@@ -816,7 +955,8 @@
this._declaredElementOffsets,
this._referencedElementOffsets,
this._typeOffsets)
- : super(typeContext, declaredElements, referencedElements, types);
+ : super(enclosingLibraryElement, typeContext, declaredElements,
+ referencedElements, types);
@override
void checkDone() {
diff --git a/pkg/analyzer/lib/src/fasta/resolution_storer.dart b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
index e059b8b..4e7d136e 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_storer.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
@@ -9,21 +9,6 @@
import 'package:kernel/ast.dart';
import 'package:kernel/type_algebra.dart';
-/// TODO(scheglov) document
-class FunctionReferenceDartType implements DartType {
- final FunctionDeclaration function;
- final DartType type;
-
- FunctionReferenceDartType(this.function, this.type);
-
- noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-
- @override
- String toString() {
- return '(${function.variable}, $type)';
- }
-}
-
/// The reference to the import prefix with the [name].
class ImportPrefixNode implements TreeNode {
final String name;
@@ -257,8 +242,9 @@
}
@override
- bool constructorInvocationEnter(
- InvocationExpression expression, DartType typeContext) {
+ bool constructorInvocationEnter(InvocationExpression expression,
+ String prefixName, DartType typeContext) {
+ _recordImportPrefix(prefixName);
_deferReference(expression.fileOffset);
_deferType(expression.fileOffset);
return true;
@@ -366,6 +352,7 @@
void indexAssignAfterReceiver(Expression write, DartType typeContext) {
_deferReference(write.fileOffset);
_recordType(const IndexAssignNullFunctionType(), write.fileOffset);
+ _recordType(const IndexAssignNullFunctionType(), write.fileOffset);
_recordType(new TypeArgumentsDartType(<DartType>[]), write.fileOffset);
_deferType(write.fileOffset);
}
@@ -410,21 +397,11 @@
// before arguments. To ensure this order for method invocations, we
// first record `null`, and then replace it on exit.
_deferReference(expression.fileOffset);
- // We are visiting a method invocation like: a.f(args). We have visited a
- // but we haven't visited the args yet.
- //
- // The analyzer AST will expect a type for f at this point. (It can't
- // wait until later, because for all it knows, a.f might be a property
- // access, in which case the appropriate time for the type is now). But
- // the type isn't known yet (because it may depend on type inference based
- // on arguments).
- //
- // So we add a `null` to our list of types; we'll update it with the
- // actual type later.
- _deferType(expression.fileOffset);
+ _deferType(expression.fileOffset); // callee type
}
- _deferType(expression.fileOffset);
- _deferType(expression.fileOffset);
+ _deferType(expression.fileOffset); // invoke type
+ _deferType(expression.fileOffset); // type arguments
+ _deferType(expression.fileOffset); // result type
super.methodInvocationBeforeArgs(expression, isImplicitCall);
}
@@ -442,27 +419,41 @@
: expression.fileOffset;
_replaceType(inferredType, resultOffset);
_replaceType(new TypeArgumentsDartType(arguments.types), resultOffset);
+
+ FunctionType invokeType = substitution == null
+ ? calleeType
+ : substitution.substituteType(calleeType.withoutTypeParameters);
+ _replaceType(invokeType, resultOffset);
+
if (!isImplicitCall) {
if (interfaceMember is ForwardingStub) {
interfaceMember = ForwardingStub.getInterfaceTarget(interfaceMember);
}
_replaceReference(interfaceMember);
- FunctionType invokeType = substitution == null
- ? calleeType
- : substitution.substituteType(calleeType.withoutTypeParameters);
- _replaceType(invokeType);
+ _replaceType(calleeType);
}
super.genericExpressionExit("methodInvocation", expression, inferredType);
}
@override
- void methodInvocationExitCall(Expression expression, Arguments arguments,
- bool isImplicitCall, DartType inferredType) {
+ void methodInvocationExitCall(
+ Expression expression,
+ Arguments arguments,
+ bool isImplicitCall,
+ FunctionType calleeType,
+ Substitution substitution,
+ DartType inferredType) {
int resultOffset = arguments.fileOffset != -1
? arguments.fileOffset
: expression.fileOffset;
_replaceType(inferredType, resultOffset);
_replaceType(new TypeArgumentsDartType(arguments.types), resultOffset);
+
+ FunctionType invokeType = substitution == null
+ ? calleeType
+ : substitution.substituteType(calleeType.withoutTypeParameters);
+ _replaceType(invokeType, resultOffset);
+
if (!isImplicitCall) {
throw new UnimplementedError(); // TODO(scheglov): handle this case
}
@@ -522,10 +513,7 @@
Expression write,
DartType typeContext) {
// if there was an import prefix, record it.
- if (prefixName != null) {
- _recordReference(new ImportPrefixNode(prefixName), UNKNOWN_OFFSET);
- _recordType(const NullType(), UNKNOWN_OFFSET);
- }
+ _recordImportPrefix(prefixName);
// If the static target is explicit (and is a class), record it.
if (targetClass != null) {
_recordReference(targetClass, targetOffset);
@@ -557,10 +545,7 @@
bool staticGetEnter(StaticGet expression, String prefixName, int targetOffset,
Class targetClass, DartType typeContext) {
// if there was an import prefix, record it.
- if (prefixName != null) {
- _recordReference(new ImportPrefixNode(prefixName), UNKNOWN_OFFSET);
- _recordType(const NullType(), UNKNOWN_OFFSET);
- }
+ _recordImportPrefix(prefixName);
// If the static target is explicit (and is a class), record it.
if (targetClass != null) {
_recordReference(targetClass, targetOffset);
@@ -581,10 +566,7 @@
bool staticInvocationEnter(StaticInvocation expression, String prefixName,
int targetOffset, Class targetClass, DartType typeContext) {
// if there was an import prefix, record it.
- if (prefixName != null) {
- _recordReference(new ImportPrefixNode(prefixName), UNKNOWN_OFFSET);
- _recordType(const NullType(), UNKNOWN_OFFSET);
- }
+ _recordImportPrefix(prefixName);
// If the static target is explicit (and is a class), record it.
if (targetClass != null) {
_recordReference(targetClass, targetOffset);
@@ -605,9 +587,10 @@
//
// So we add a `null` to our list of types; we'll update it with the actual
// type later.
- _deferType(expression.fileOffset);
- _deferType(expression.arguments.fileOffset);
- _deferType(expression.arguments.fileOffset);
+ _deferType(expression.fileOffset); // callee type
+ _deferType(expression.arguments.fileOffset); // invoke type
+ _deferType(expression.arguments.fileOffset); // type arguments
+ _deferType(expression.arguments.fileOffset); // result type
return super.staticInvocationEnter(
expression, prefixName, targetOffset, targetClass, typeContext);
}
@@ -625,6 +608,7 @@
? calleeType
: substitution.substituteType(calleeType.withoutTypeParameters);
_replaceType(invokeType);
+ _replaceType(calleeType);
super.genericExpressionExit("staticInvocation", expression, inferredType);
}
@@ -641,10 +625,7 @@
bool typeLiteralEnter(@override TypeLiteral expression, String prefixName,
DartType typeContext) {
// if there was an import prefix, record it.
- if (prefixName != null) {
- _recordReference(new ImportPrefixNode(prefixName), UNKNOWN_OFFSET);
- _recordType(const NullType(), UNKNOWN_OFFSET);
- }
+ _recordImportPrefix(prefixName);
return super.typeLiteralEnter(expression, prefixName, typeContext);
}
@@ -707,14 +688,7 @@
return;
}
_recordReference(variable, expression.fileOffset);
-
- TreeNode function = variable.parent;
- if (function is FunctionDeclaration) {
- _recordType(new FunctionReferenceDartType(function, inferredType),
- expression.fileOffset);
- } else {
- _recordType(inferredType, expression.fileOffset);
- }
+ _recordType(inferredType, expression.fileOffset);
}
/// Record `null` as the reference at the given [offset], and put the current
@@ -735,6 +709,14 @@
_declarations.add(declaration);
}
+ /// If the [prefixName] is not `null` record the reference to it.
+ void _recordImportPrefix(String prefixName) {
+ if (prefixName != null) {
+ _recordReference(new ImportPrefixNode(prefixName), UNKNOWN_OFFSET);
+ _recordType(const NullType(), UNKNOWN_OFFSET);
+ }
+ }
+
int _recordReference(Node target, int offset) {
int slot = _references.length;
_references.add(target);
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index dc46ac2..6dee157 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -36,6 +36,11 @@
CompilationUnitElementImpl _enclosingUnit;
/**
+ * The library element containing the compilation unit.
+ */
+ LibraryElement _enclosingLibrary;
+
+ /**
* The type provider used to access the known types.
*/
TypeProvider _typeProvider;
@@ -57,6 +62,7 @@
* if the element model and compilation unit do not match each other.
*/
void resolve(CompilationUnit unit, CompilationUnitElement element) {
+ _enclosingLibrary = element.enclosingElement;
_enclosingUnit = element;
_typeProvider = _enclosingUnit.context?.typeProvider;
_walker = new ElementWalker.forCompilationUnit(element);
@@ -107,8 +113,7 @@
if (_applyKernelTypes) {
node.name.staticType = _typeProvider.typeType;
if (node.extendsClause != null) {
- ResolutionApplier.applyToTypeAnnotation(
- element.supertype, node.extendsClause.superclass);
+ _applyType(element.supertype, node.extendsClause.superclass);
}
if (node.withClause != null) {
_applyTypeList(node.withClause.mixinTypes, element.mixins);
@@ -129,8 +134,7 @@
ClassElement element = _match(node.name, _walker.getClass());
if (_applyKernelTypes) {
node.name.staticType = _typeProvider.typeType;
- ResolutionApplier.applyToTypeAnnotation(
- element.supertype, node.superclass);
+ _applyType(element.supertype, node.superclass);
if (node.withClause != null) {
_applyTypeList(node.withClause.mixinTypes, element.mixins);
}
@@ -177,8 +181,7 @@
normalParameter.element = element;
if (_applyKernelTypes) {
if (normalParameter.type != null) {
- ResolutionApplier.applyToTypeAnnotation(
- element.type, normalParameter.type);
+ _applyType(element.type, normalParameter.type);
}
node.identifier?.staticType = element.type;
}
@@ -265,8 +268,7 @@
FieldElement firstFieldElement = node.fields.variables[0].element;
if (_applyKernelTypes) {
if (node.fields.type != null) {
- ResolutionApplier.applyToTypeAnnotation(
- firstFieldElement.type, node.fields.type);
+ _applyType(firstFieldElement.type, node.fields.type);
}
}
_resolveMetadata(node, node.metadata, firstFieldElement);
@@ -293,7 +295,8 @@
@override
Object visitFormalParameterList(FormalParameterList node) {
if (_applyKernelTypes) {
- ResolutionApplier.applyParameters(_walker._parameters, node);
+ ResolutionApplier.applyParameters(
+ _enclosingLibrary, _walker._parameters, node);
_walker.consumeParameters();
return null;
} else {
@@ -321,8 +324,7 @@
}
if (_applyKernelTypes) {
if (node.returnType != null) {
- ResolutionApplier.applyToTypeAnnotation(
- element.returnType, node.returnType);
+ _applyType(element.returnType, node.returnType);
}
if (node.isGetter) {
node.name.staticType = element.returnType;
@@ -357,8 +359,7 @@
FunctionTypeAliasElement element = _match(node.name, _walker.getTypedef());
if (_applyKernelTypes) {
if (node.returnType != null) {
- ResolutionApplier.applyToTypeAnnotation(
- element.returnType, node.returnType);
+ _applyType(element.returnType, node.returnType);
}
}
_walk(new ElementWalker.forTypedef(element), () {
@@ -392,6 +393,11 @@
if (type != null) {
Element element = type.element;
if (element is GenericFunctionTypeElement) {
+ if (_applyKernelTypes) {
+ if (node.returnType != null) {
+ _applyType(element.returnType, node.returnType);
+ }
+ }
_setGenericFunctionType(node.returnType, element.returnType);
_walk(new ElementWalker.forGenericFunctionType(element), () {
super.visitGenericFunctionType(node);
@@ -476,8 +482,7 @@
}
if (_applyKernelTypes) {
if (node.returnType != null) {
- ResolutionApplier.applyToTypeAnnotation(
- element.returnType, node.returnType);
+ _applyType(element.returnType, node.returnType);
}
if (node.isGetter) {
node.name.staticType = element.returnType;
@@ -526,7 +531,7 @@
(node as SimpleFormalParameterImpl).element = element;
if (_applyKernelTypes) {
if (node.type != null) {
- ResolutionApplier.applyToTypeAnnotation(element.type, node.type);
+ _applyType(element.type, node.type);
}
node.identifier?.staticType = element.type;
}
@@ -560,7 +565,7 @@
if (_applyKernelTypes) {
TypeAnnotation type = node.variables.type;
if (type != null) {
- ResolutionApplier.applyToTypeAnnotation(firstElement.type, type);
+ _applyType(firstElement.type, type);
}
}
_resolveMetadata(node, node.metadata, firstElement);
@@ -582,7 +587,7 @@
_match(node.name, _walker.getTypeParameter());
if (_applyKernelTypes) {
if (node.bound != null) {
- ResolutionApplier.applyToTypeAnnotation(element.bound, node.bound);
+ _applyType(element.bound, node.bound);
}
}
super.visitTypeParameter(node);
@@ -627,6 +632,25 @@
}
}
+ /// Apply [type] to the [typeAnnotation].
+ void _applyType(DartType type, TypeAnnotation typeAnnotation) {
+ ResolutionApplier.applyToTypeAnnotation(
+ _enclosingLibrary, type, typeAnnotation);
+ }
+
+ /**
+ * Apply [types] to [nodes].
+ * Both lists must have the same length.
+ */
+ void _applyTypeList(List<TypeName> nodes, List<InterfaceType> types) {
+ if (nodes.length != types.length) {
+ throw new StateError('$nodes != $types');
+ }
+ for (int i = 0; i < nodes.length; i++) {
+ _applyType(types[i], nodes[i]);
+ }
+ }
+
/// TODO(scheglov) Replace with the implementation from ResolutionApplier.
void _applyTypeToIdentifier(Identifier identifier, DartType type) {
if (type is InterfaceType) {
@@ -744,19 +768,6 @@
_walker = outerWalker;
}
- /**
- * Apply [types] to [nodes].
- * Both lists must have the same length.
- */
- static void _applyTypeList(List<TypeName> nodes, List<InterfaceType> types) {
- if (nodes.length != types.length) {
- throw new StateError('$nodes != $types');
- }
- for (int i = 0; i < nodes.length; i++) {
- ResolutionApplier.applyToTypeAnnotation(types[i], nodes[i]);
- }
- }
-
static bool _isBodyToCreateElementsFor(FunctionBody node) {
AstNode parent = node.parent;
return parent is ConstructorDeclaration ||
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index ae5a2b3..b28b557 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -3270,7 +3270,7 @@
if (type.element.isAbstract) {
ConstructorElement element = expression.staticElement;
if (element != null && !element.isFactory) {
- if (expression.keyword.keyword == Keyword.CONST) {
+ if (expression.isConst) {
_errorReporter.reportErrorForNode(
StaticWarningCode.CONST_WITH_ABSTRACT_CLASS, typeName);
} else {
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index f4c4590..d03c13e 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -541,7 +541,9 @@
*/
bool isInitializedVariableDeclaration() {
Keyword keyword = _currentToken.keyword;
- if (keyword == Keyword.FINAL || keyword == Keyword.VAR) {
+ if (keyword == Keyword.FINAL ||
+ keyword == Keyword.VAR ||
+ keyword == Keyword.VOID) {
// An expression cannot start with a keyword other than 'const',
// 'rethrow', or 'throw'.
return true;
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 770a02e..6bfaf4d 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -448,24 +448,22 @@
!_currentLibrary.context.analysisOptions.enableSuperMixins) {
Element element = name.staticElement;
if (element is ExecutableElement && element.isAbstract) {
- if (!_enclosingClass.hasNoSuchMethod) {
- ExecutableElement concrete = null;
- if (element.kind == ElementKind.METHOD) {
- concrete = _enclosingClass.lookUpInheritedConcreteMethod(
- element.displayName, _currentLibrary);
- } else if (element.kind == ElementKind.GETTER) {
- concrete = _enclosingClass.lookUpInheritedConcreteGetter(
- element.displayName, _currentLibrary);
- } else if (element.kind == ElementKind.SETTER) {
- concrete = _enclosingClass.lookUpInheritedConcreteSetter(
- element.displayName, _currentLibrary);
- }
- if (concrete == null) {
- _errorReporter.reportTypeErrorForNode(
- HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE,
- name,
- [element.kind.displayName, name.name]);
- }
+ ExecutableElement concrete = null;
+ if (element.kind == ElementKind.METHOD) {
+ concrete = _enclosingClass.lookUpInheritedConcreteMethod(
+ element.displayName, _currentLibrary);
+ } else if (element.kind == ElementKind.GETTER) {
+ concrete = _enclosingClass.lookUpInheritedConcreteGetter(
+ element.displayName, _currentLibrary);
+ } else if (element.kind == ElementKind.SETTER) {
+ concrete = _enclosingClass.lookUpInheritedConcreteSetter(
+ element.displayName, _currentLibrary);
+ }
+ if (concrete == null) {
+ _errorReporter.reportTypeErrorForNode(
+ HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE,
+ name,
+ [element.kind.displayName, name.name]);
}
}
}
@@ -830,81 +828,6 @@
}
}
- /**
- * This verifies that the passed left hand side and right hand side represent a valid assignment.
- *
- * This method corresponds to ErrorVerifier.checkForInvalidAssignment.
- *
- * @param lhs the left hand side expression
- * @param rhs the right hand side expression
- * @return `true` if and only if an error code is generated on the passed node
- * See [HintCode.INVALID_ASSIGNMENT].
- */
- bool _checkForInvalidAssignment(Expression lhs, Expression rhs) {
- if (lhs == null || rhs == null) {
- return false;
- }
- VariableElement leftVariableElement = ErrorVerifier.getVariableElement(lhs);
- DartType leftType = (leftVariableElement == null)
- ? ErrorVerifier.getStaticType(lhs)
- : leftVariableElement.type;
- DartType staticRightType = ErrorVerifier.getStaticType(rhs);
- if (!_typeSystem.isAssignableTo(staticRightType, leftType,
- isDeclarationCast: true)) {
- // The warning was generated on this rhs
- return false;
- }
- // Test for, and then generate the hint
- DartType bestRightType = rhs.bestType;
- if (leftType != null && bestRightType != null) {
- if (!_typeSystem.isAssignableTo(bestRightType, leftType,
- isDeclarationCast: true)) {
- _errorReporter.reportTypeErrorForNode(
- HintCode.INVALID_ASSIGNMENT, rhs, [bestRightType, leftType]);
- return true;
- }
- }
- return false;
- }
-
- void _checkForInvalidFactory(MethodDeclaration decl) {
- // Check declaration.
- // Note that null return types are expected to be flagged by other analyses.
- DartType returnType = decl.returnType?.type;
- if (returnType is VoidType) {
- _errorReporter.reportErrorForNode(HintCode.INVALID_FACTORY_METHOD_DECL,
- decl.name, [decl.name.toString()]);
- return;
- }
-
- // Check implementation.
-
- FunctionBody body = decl.body;
- if (body is EmptyFunctionBody) {
- // Abstract methods are OK.
- return;
- }
-
- // `new Foo()` or `null`.
- bool factoryExpression(Expression expression) =>
- expression is InstanceCreationExpression || expression is NullLiteral;
-
- if (body is ExpressionFunctionBody && factoryExpression(body.expression)) {
- return;
- } else if (body is BlockFunctionBody) {
- NodeList<Statement> statements = body.block.statements;
- if (statements.isNotEmpty) {
- Statement last = statements.last;
- if (last is ReturnStatement && factoryExpression(last.expression)) {
- return;
- }
- }
- }
-
- _errorReporter.reportErrorForNode(HintCode.INVALID_FACTORY_METHOD_IMPL,
- decl.name, [decl.name.toString()]);
- }
-
/// Produces a hint if [identifier] is accessed from an invalid location. In
/// particular:
///
@@ -991,6 +914,81 @@
}
/**
+ * This verifies that the passed left hand side and right hand side represent a valid assignment.
+ *
+ * This method corresponds to ErrorVerifier.checkForInvalidAssignment.
+ *
+ * @param lhs the left hand side expression
+ * @param rhs the right hand side expression
+ * @return `true` if and only if an error code is generated on the passed node
+ * See [HintCode.INVALID_ASSIGNMENT].
+ */
+ bool _checkForInvalidAssignment(Expression lhs, Expression rhs) {
+ if (lhs == null || rhs == null) {
+ return false;
+ }
+ VariableElement leftVariableElement = ErrorVerifier.getVariableElement(lhs);
+ DartType leftType = (leftVariableElement == null)
+ ? ErrorVerifier.getStaticType(lhs)
+ : leftVariableElement.type;
+ DartType staticRightType = ErrorVerifier.getStaticType(rhs);
+ if (!_typeSystem.isAssignableTo(staticRightType, leftType,
+ isDeclarationCast: true)) {
+ // The warning was generated on this rhs
+ return false;
+ }
+ // Test for, and then generate the hint
+ DartType bestRightType = rhs.bestType;
+ if (leftType != null && bestRightType != null) {
+ if (!_typeSystem.isAssignableTo(bestRightType, leftType,
+ isDeclarationCast: true)) {
+ _errorReporter.reportTypeErrorForNode(
+ HintCode.INVALID_ASSIGNMENT, rhs, [bestRightType, leftType]);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void _checkForInvalidFactory(MethodDeclaration decl) {
+ // Check declaration.
+ // Note that null return types are expected to be flagged by other analyses.
+ DartType returnType = decl.returnType?.type;
+ if (returnType is VoidType) {
+ _errorReporter.reportErrorForNode(HintCode.INVALID_FACTORY_METHOD_DECL,
+ decl.name, [decl.name.toString()]);
+ return;
+ }
+
+ // Check implementation.
+
+ FunctionBody body = decl.body;
+ if (body is EmptyFunctionBody) {
+ // Abstract methods are OK.
+ return;
+ }
+
+ // `new Foo()` or `null`.
+ bool factoryExpression(Expression expression) =>
+ expression is InstanceCreationExpression || expression is NullLiteral;
+
+ if (body is ExpressionFunctionBody && factoryExpression(body.expression)) {
+ return;
+ } else if (body is BlockFunctionBody) {
+ NodeList<Statement> statements = body.block.statements;
+ if (statements.isNotEmpty) {
+ Statement last = statements.last;
+ if (last is ReturnStatement && factoryExpression(last.expression)) {
+ return;
+ }
+ }
+ }
+
+ _errorReporter.reportErrorForNode(HintCode.INVALID_FACTORY_METHOD_IMPL,
+ decl.name, [decl.name.toString()]);
+ }
+
+ /**
* Check that the imported library does not define a loadLibrary function. The import has already
* been determined to be deferred when this is called.
*
diff --git a/pkg/analyzer/lib/src/kernel/ast_from_analyzer.dart b/pkg/analyzer/lib/src/kernel/ast_from_analyzer.dart
index 648db17..9582f50 100644
--- a/pkg/analyzer/lib/src/kernel/ast_from_analyzer.dart
+++ b/pkg/analyzer/lib/src/kernel/ast_from_analyzer.dart
@@ -821,17 +821,17 @@
if (annotation.arguments == null) {
var target = resolveConcreteGet(element, null);
return target == null
- ? new ast.InvalidExpression()
+ ? new ast.InvalidExpression(null)
: new ast.StaticGet(target);
} else if (element is ConstructorElement && element.isConst) {
var target = resolveConstructor(element);
return target == null
- ? new ast.InvalidExpression()
+ ? new ast.InvalidExpression(null)
: new ast.ConstructorInvocation(
target, _expressionBuilder.buildArguments(annotation.arguments),
isConst: true);
} else {
- return new ast.InvalidExpression();
+ return new ast.InvalidExpression(null);
}
}
@@ -2440,6 +2440,12 @@
}
}
+/// A utility to build a function with a static error in its body.
+ast.FunctionNode _brokenFunction() {
+ return new ast.FunctionNode(
+ new ast.ExpressionStatement(new ast.InvalidExpression(null)));
+}
+
/// Brings a class from hierarchy level to body level.
//
// TODO(asgerf): Error recovery during class construction is currently handled
@@ -2474,9 +2480,8 @@
void buildBrokenClass() {
currentClass.name = element.name;
currentClass.supertype = scope.getRootClassReference().asRawSupertype;
- currentClass.constructors.add(
- new ast.Constructor(new ast.FunctionNode(new ast.InvalidStatement()))
- ..fileOffset = element.nameOffset);
+ currentClass.constructors.add(new ast.Constructor(_brokenFunction())
+ ..fileOffset = element.nameOffset);
}
void addAnnotations(List<Annotation> annotations) {
@@ -2747,11 +2752,9 @@
var member = currentMember;
member.name = new ast.Name(element.name, scope.currentLibrary);
if (member is ast.Procedure) {
- member.function = new ast.FunctionNode(new ast.InvalidStatement())
- ..parent = member;
+ member.function = _brokenFunction()..parent = member;
} else if (member is ast.Constructor) {
- member.function = new ast.FunctionNode(new ast.InvalidStatement())
- ..parent = member;
+ member.function = _brokenFunction()..parent = member;
}
}
@@ -2896,7 +2899,7 @@
assert(target != null);
expression = new ast.Let(
new ast.VariableDeclaration.forValue(new ast.StaticGet(target)),
- new ast.InvalidExpression());
+ new ast.InvalidExpression(null));
ast.Name constructors =
new ast.Name("_redirecting#", scope.currentLibrary);
ast.Field constructorsField;
diff --git a/pkg/analyzer/lib/src/kernel/resynthesize.dart b/pkg/analyzer/lib/src/kernel/resynthesize.dart
index 0b13b05..435f026 100644
--- a/pkg/analyzer/lib/src/kernel/resynthesize.dart
+++ b/pkg/analyzer/lib/src/kernel/resynthesize.dart
@@ -331,7 +331,9 @@
getElementFromCanonicalName(typedef.canonicalName);
GenericFunctionTypeElementImpl functionElement = typedefElement.function;
- var kernelTypeParameters = typedef.typeParameters;
+ kernel.FunctionType typedefType = typedef.type;
+ var kernelTypeParameters = typedef.typeParameters.toList();
+ kernelTypeParameters.addAll(typedefType.typeParameters);
// If no type parameters, the raw type of the element will do.
FunctionTypeImpl rawType = functionElement.type;
@@ -340,11 +342,12 @@
}
// Compute type arguments for kernel type parameters.
- var kernelMap = kernel.unifyTypes(
- typedef.type, kernelType, kernelTypeParameters.toSet());
+ var kernelMap = kernel.unifyTypes(typedefType.withoutTypeParameters,
+ kernelType.withoutTypeParameters, kernelTypeParameters.toSet());
// Prepare Analyzer type parameters, in the same order as kernel ones.
- var astTypeParameters = typedefElement.typeParameters;
+ var astTypeParameters = typedefElement.typeParameters.toList();
+ astTypeParameters.addAll(functionElement.typeParameters);
// Convert kernel type arguments into Analyzer types.
int length = astTypeParameters.length;
@@ -353,11 +356,15 @@
for (var i = 0; i < length; i++) {
var kernelParameter = kernelTypeParameters[i];
var kernelArgument = kernelMap[kernelParameter];
- if (kernelArgument != null) {
- DartType astArgument = getType(context, kernelArgument);
- usedTypeParameters.add(astTypeParameters[i]);
- usedTypeArguments.add(astArgument);
+ if (kernelArgument == null ||
+ kernelArgument is kernel.TypeParameterType &&
+ kernelArgument.parameter.parent == null) {
+ continue;
}
+ TypeParameterElement astParameter = astTypeParameters[i];
+ DartType astArgument = getType(context, kernelArgument);
+ usedTypeParameters.add(astParameter);
+ usedTypeArguments.add(astArgument);
}
if (usedTypeParameters.isEmpty) {
@@ -500,7 +507,10 @@
return invocation;
}
- // TODO(scheglov) Support other kernel initializer types.
+ if (k is kernel.ShadowInvalidInitializer) {
+ return null;
+ }
+
throw new UnimplementedError('For ${k.runtimeType}');
}
@@ -561,14 +571,14 @@
// Invalid annotations are represented as Let.
if (expr is kernel.Let) {
kernel.Let let = expr;
- if (_isConstantExpressionErrorThrow(let.variable.initializer) ||
- _isConstantExpressionErrorThrow(let.body)) {
+ if (_isStaticError(let.variable.initializer) ||
+ _isStaticError(let.body)) {
throw const _CompilationErrorFound();
}
}
// Stop if there is an error.
- if (_isConstantExpressionErrorThrow(expr)) {
+ if (_isStaticError(expr)) {
throw const _CompilationErrorFound();
}
@@ -741,21 +751,14 @@
}
TypeAnnotation _buildType(DartType type) {
- if (type is InterfaceType) {
- var name = AstTestFactory.identifier3(type.element.name)
- ..staticElement = type.element
- ..staticType = type;
- List<TypeAnnotation> arguments = _buildTypeArguments(type.typeArguments);
- return AstTestFactory.typeName3(name, arguments)..type = type;
+ List<TypeAnnotation> argumentNodes;
+ if (type is ParameterizedType) {
+ argumentNodes = _buildTypeArguments(type.typeArguments);
}
- if (type is DynamicTypeImpl || type is TypeParameterType) {
- var identifier = AstTestFactory.identifier3(type.name)
- ..staticElement = type.element
- ..staticType = type;
- return AstTestFactory.typeName3(identifier)..type = type;
- }
- // TODO(scheglov) Implement for other types.
- throw new UnimplementedError('type: (${type.runtimeType}) $type');
+ TypeName node = AstTestFactory.typeName4(type.name, argumentNodes);
+ node.type = type;
+ (node.name as SimpleIdentifier).staticElement = type.element;
+ return node;
}
TypeArgumentList _buildTypeArgumentList(List<kernel.DartType> kernels) {
@@ -834,18 +837,8 @@
* Return `true` if the given [expr] throws an instance of
* `_ConstantExpressionError` defined in `dart:core`.
*/
- static bool _isConstantExpressionErrorThrow(kernel.Expression expr) {
- if (expr is kernel.MethodInvocation) {
- if (expr.name.name == '_throw') {
- var receiver = expr.receiver;
- if (receiver is kernel.ConstructorInvocation) {
- kernel.Class targetClass = receiver.target.enclosingClass;
- return targetClass.name == '_ConstantExpressionError' &&
- targetClass.enclosingLibrary.importUri.toString() == 'dart:core';
- }
- }
- }
- return false;
+ static bool _isStaticError(kernel.Expression expr) {
+ return expr is kernel.InvalidExpression;
}
}
diff --git a/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart b/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
index 3753998..414933d 100644
--- a/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
@@ -131,14 +131,18 @@
if (entryValue is YamlScalar) {
Object entry = entryValue.value;
if (entry is String) {
- String normalizedEntry = context.joinAll(path.posix.split(entry));
- String assetPath = context.join(packageRoot, normalizedEntry);
- if (!provider.getFile(assetPath).exists) {
- _reportErrorForNode(
- reporter,
- entryValue,
- PubspecWarningCode.ASSET_DOES_NOT_EXIST,
- [entryValue.value]);
+ if (!entry.startsWith('packages/')) {
+ // TODO(brianwilkerson) Add validation of package references.
+ String normalizedEntry =
+ context.joinAll(path.posix.split(entry));
+ String assetPath = context.join(packageRoot, normalizedEntry);
+ if (!provider.getFile(assetPath).exists) {
+ _reportErrorForNode(
+ reporter,
+ entryValue,
+ PubspecWarningCode.ASSET_DOES_NOT_EXIST,
+ [entryValue.value]);
+ }
}
} else {
_reportErrorForNode(
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 a85b628..051b47d 100644
--- a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
+++ b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
@@ -11,7 +11,7 @@
* path and convert it as appropriate for the actual platform.
*/
class ResourceProviderMixin {
- final MemoryResourceProvider resourceProvider = new MemoryResourceProvider();
+ MemoryResourceProvider resourceProvider = new MemoryResourceProvider();
void deleteFile(String path) {
String convertedPath = resourceProvider.convertPath(path);
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 5fcef73..0d6afa0 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
@@ -75,13 +75,6 @@
@override
@failingTest
- test_async_used_as_identifier_in_prefix() async {
- // 'package:analyzer/src/fasta/resolution_applier.dart': Failed assertion: line 632 pos 14: 'constructorName.name == null': is not true.
- await super.test_async_used_as_identifier_in_prefix();
- }
-
- @override
- @failingTest
test_async_used_as_identifier_in_statement_label() async {
// Bad state: Expected element reference for analyzer offset 14; got one for kernel offset 21
await super.test_async_used_as_identifier_in_statement_label();
@@ -3334,20 +3327,6 @@
@override
@failingTest
@FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
- test_wrongNumberOfParametersForSetter_function_named() async {
- return super.test_wrongNumberOfParametersForSetter_function_named();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
- test_wrongNumberOfParametersForSetter_function_optional() async {
- return super.test_wrongNumberOfParametersForSetter_function_optional();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
test_wrongNumberOfParametersForSetter_function_tooFew() async {
return super.test_wrongNumberOfParametersForSetter_function_tooFew();
}
@@ -3362,20 +3341,6 @@
@override
@failingTest
@FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
- test_wrongNumberOfParametersForSetter_method_named() async {
- return super.test_wrongNumberOfParametersForSetter_method_named();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
- test_wrongNumberOfParametersForSetter_method_optional() async {
- return super.test_wrongNumberOfParametersForSetter_method_optional();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
test_wrongNumberOfParametersForSetter_method_tooFew() async {
return super.test_wrongNumberOfParametersForSetter_method_tooFew();
}
diff --git a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
index eefd86c..3e7843c 100644
--- a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
+++ b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
@@ -51,20 +51,6 @@
@override
@failingTest
- test_ignore_second() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_ignore_second();
- }
-
- @override
- @failingTest
- test_ignore_second_trailing() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_ignore_second_trailing();
- }
-
- @override
- @failingTest
test_invalid_error_code() async {
// Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0;
// 1 errors of type CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE, found 0
@@ -80,20 +66,6 @@
@override
@failingTest
- test_missing_metadata_suffix() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_missing_metadata_suffix();
- }
-
- @override
- @failingTest
- test_multiple_comments() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_multiple_comments();
- }
-
- @override
- @failingTest
test_multiple_ignores() async {
// UnimplementedError: kernel: (Let) let final dynamic #t2 = #lib2::x in let ...
await super.test_multiple_ignores();
@@ -134,11 +106,4 @@
// 1 errors of type CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE, found 0
await super.test_no_ignores();
}
-
- @override
- @failingTest
- test_trailing_not_above() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_trailing_not_above();
- }
}
diff --git a/pkg/analyzer/test/generated/hint_code_kernel_test.dart b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
index ef9fde2..7854a5c 100644
--- a/pkg/analyzer/test/generated/hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
@@ -43,6 +43,13 @@
@failingTest
@override
+ test_abstractSuperMemberReference_superHasNoSuchMethod() async {
+ // Expected 1 errors of type HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE, found 0
+ return super.test_abstractSuperMemberReference_superHasNoSuchMethod();
+ }
+
+ @failingTest
+ @override
test_argumentTypeNotAssignable_functionType() async {
// Expected 1 errors of type HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, found 0
return super.test_argumentTypeNotAssignable_functionType();
@@ -92,6 +99,13 @@
@failingTest
@override
+ test_deprecatedAnnotationUse_call() async {
+ // Expected 1 errors of type HintCode.DEPRECATED_MEMBER_USE, found 0
+ return super.test_deprecatedAnnotationUse_call();
+ }
+
+ @failingTest
+ @override
test_deprecatedAnnotationUse_Deprecated() async {
// Expected 1 errors of type HintCode.DEPRECATED_MEMBER_USE, found 0
return super.test_deprecatedAnnotationUse_Deprecated();
@@ -157,13 +171,6 @@
@failingTest
@override
- test_duplicateImport3() async {
- // Expected 0 errors of type HintCode.UNUSED_IMPORT, found 2 (18, 57)
- return super.test_duplicateImport3();
- }
-
- @failingTest
- @override
test_invalidAssignment_instanceVariable() async {
// Expected 1 errors of type HintCode.INVALID_ASSIGNMENT, found 0
return super.test_invalidAssignment_instanceVariable();
@@ -430,15 +437,6 @@
@failingTest
@override
- test_unusedImport_as() async {
- // Failed to resolve 2 nodes:
- // one (/test.dart : 53)
- // one (/test.dart : 58)
- return super.test_unusedImport_as();
- }
-
- @failingTest
- @override
test_unusedImport_inComment_libraryDirective() async {
// Expected 0 errors of type HintCode.UNUSED_IMPORT, found 1 (42)
return super.test_unusedImport_inComment_libraryDirective();
diff --git a/pkg/analyzer/test/generated/hint_code_test.dart b/pkg/analyzer/test/generated/hint_code_test.dart
index 9a12693..a767ae0 100644
--- a/pkg/analyzer/test/generated/hint_code_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_test.dart
@@ -145,6 +145,22 @@
verify([source]);
}
+ test_abstractSuperMemberReference_superHasNoSuchMethod() async {
+ Source source = addSource('''
+abstract class A {
+ int m();
+ noSuchMethod(_) => 42;
+}
+
+class B extends A {
+ int m() => super.m();
+}
+''');
+ await computeAnalysisResult(source);
+ assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
+ verify([source]);
+ }
+
test_argumentTypeNotAssignable_functionType() async {
Source source = addSource(r'''
m() {
@@ -506,6 +522,68 @@
verify([source]);
}
+ test_deadCode_statementAfterAlwaysThrowsFunction() async {
+ Source source = addSource(r'''
+import 'package:meta/meta.dart';
+
+@alwaysThrows
+void a() {
+ throw 'msg';
+}
+
+f() {
+ var one = 1;
+ a();
+ var two = 2;
+}''');
+ await computeAnalysisResult(source);
+ assertErrors(source, [HintCode.DEAD_CODE]);
+ verify([source]);
+ }
+
+ @failingTest
+ test_deadCode_statementAfterAlwaysThrowsGetter() async {
+ Source source = addSource(r'''
+import 'package:meta/meta.dart';
+
+class C {
+ @alwaysThrows
+ int get a {
+ throw 'msg';
+ }
+}
+
+f() {
+ var one = 1;
+ new C().a;
+ var two = 2;
+}''');
+ await computeAnalysisResult(source);
+ assertErrors(source, [HintCode.DEAD_CODE]);
+ verify([source]);
+ }
+
+ test_deadCode_statementAfterAlwaysThrowsMethod() async {
+ Source source = addSource(r'''
+import 'package:meta/meta.dart';
+
+class C {
+ @alwaysThrows
+ void a() {
+ throw 'msg';
+ }
+}
+
+f() {
+ var one = 1;
+ new C().a();
+ var two = 2;
+}''');
+ await computeAnalysisResult(source);
+ assertErrors(source, [HintCode.DEAD_CODE]);
+ verify([source]);
+ }
+
test_deadCode_statementAfterBreak_inDefaultCase() async {
Source source = addSource(r'''
f(v) {
@@ -723,68 +801,6 @@
verify([source]);
}
- test_deadCode_statementAfterAlwaysThrowsFunction() async {
- Source source = addSource(r'''
-import 'package:meta/meta.dart';
-
-@alwaysThrows
-void a() {
- throw 'msg';
-}
-
-f() {
- var one = 1;
- a();
- var two = 2;
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.DEAD_CODE]);
- verify([source]);
- }
-
- test_deadCode_statementAfterAlwaysThrowsMethod() async {
- Source source = addSource(r'''
-import 'package:meta/meta.dart';
-
-class C {
- @alwaysThrows
- void a() {
- throw 'msg';
- }
-}
-
-f() {
- var one = 1;
- new C().a();
- var two = 2;
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.DEAD_CODE]);
- verify([source]);
- }
-
- @failingTest
- test_deadCode_statementAfterAlwaysThrowsGetter() async {
- Source source = addSource(r'''
-import 'package:meta/meta.dart';
-
-class C {
- @alwaysThrows
- int get a {
- throw 'msg';
- }
-}
-
-f() {
- var one = 1;
- new C().a;
- var two = 2;
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.DEAD_CODE]);
- verify([source]);
- }
-
test_deprecatedAnnotationUse_assignment() async {
Source source = addSource(r'''
class A {
@@ -1923,6 +1939,29 @@
verify([source]);
}
+ test_invalidUseOfVisibleForTestingMember_constructor() async {
+ Source source = addNamedSource('/lib1.dart', r'''
+import 'package:meta/meta.dart';
+class A {
+ int _x;
+
+ @visibleForTesting
+ A.forTesting(this._x);
+}
+''');
+ Source source2 = addNamedSource('/lib2.dart', r'''
+import 'lib1.dart';
+
+void main() {
+ new A.forTesting(0);
+}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertErrors(source2, [HintCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER]);
+ verify([source, source2]);
+ }
+
test_invalidUseOfVisibleForTestingMember_method() async {
Source source = addNamedSource('/lib1.dart', r'''
import 'package:meta/meta.dart';
@@ -1965,28 +2004,6 @@
verify([source, source2]);
}
- test_invalidUseProtectedAndForTesting_method_OK() async {
- Source source = addNamedSource('/lib1.dart', r'''
-import 'package:meta/meta.dart';
-class A {
- @protected
- @visibleForTesting
- void a(){ }
-}
-''');
- Source source2 = addNamedSource('/lib2.dart', r'''
-import 'lib1.dart';
-
-class B extends A {
- void b() => new A().a();
-}
-''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertNoErrors(source2);
- verify([source, source2]);
- }
-
test_invalidUseOfVisibleForTestingMember_propertyAccess() async {
Source source = addNamedSource('/lib1.dart', r'''
import 'package:meta/meta.dart';
@@ -2015,29 +2032,6 @@
verify([source, source2]);
}
- test_invalidUseOfVisibleForTestingMember_constructor() async {
- Source source = addNamedSource('/lib1.dart', r'''
-import 'package:meta/meta.dart';
-class A {
- int _x;
-
- @visibleForTesting
- A.forTesting(this._x);
-}
-''');
- Source source2 = addNamedSource('/lib2.dart', r'''
-import 'lib1.dart';
-
-void main() {
- new A.forTesting(0);
-}
-''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertErrors(source2, [HintCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER]);
- verify([source, source2]);
- }
-
test_invalidUseOfVisibleForTestingMember_topLevelFunction() async {
Source source = addNamedSource('/lib1.dart', r'''
import 'package:meta/meta.dart';
@@ -2058,6 +2052,28 @@
verify([source, source2]);
}
+ test_invalidUseProtectedAndForTesting_method_OK() async {
+ Source source = addNamedSource('/lib1.dart', r'''
+import 'package:meta/meta.dart';
+class A {
+ @protected
+ @visibleForTesting
+ void a(){ }
+}
+''');
+ Source source2 = addNamedSource('/lib2.dart', r'''
+import 'lib1.dart';
+
+class B extends A {
+ void b() => new A().a();
+}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertNoErrors(source2);
+ verify([source, source2]);
+ }
+
test_isDouble() async {
AnalysisOptionsImpl options = new AnalysisOptionsImpl();
options.dart2jsHint = true;
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 7532ea0..54da903 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
@@ -12,6 +12,11 @@
});
}
+/// Tests marked with this annotation fail because they test features that
+/// were implemented in Analyzer, but are intentionally not included into
+/// the Dart 2.0 plan, or disabled for Dart 2.0 altogether.
+const notForDart2 = const Object();
+
/// Tests marked with this annotations fail because we either have not triaged
/// them, or know that this is an analyzer problem.
const potentialAnalyzerProblem = const Object();
@@ -31,17 +36,24 @@
@override
@failingTest
- @potentialAnalyzerProblem
- test_abstractSuperMemberReference_superHasNoSuchMethod() async {
- // super.m() is not resolved by front-end
- return super.test_abstractSuperMemberReference_superHasNoSuchMethod();
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31625')
+ test_ambiguousImport_showCombinator() async {
+ return super.test_ambiguousImport_showCombinator();
}
@override
@failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/31625')
- test_ambiguousImport_showCombinator() async {
- return super.test_ambiguousImport_showCombinator();
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31758')
+ test_argumentTypeNotAssignable_classWithCall_Function() async {
+ return super.test_argumentTypeNotAssignable_classWithCall_Function();
+ }
+
+ @override
+ @failingTest
+ @notForDart2
+ test_async_return_flattens_futures() async {
+ // Only FutureOr is flattened.
+ return super.test_async_return_flattens_futures();
}
@override
@@ -130,13 +142,6 @@
@override
@failingTest
- @potentialAnalyzerProblem
- test_constDeferredClass_new() async {
- return super.test_constDeferredClass_new();
- }
-
- @override
- @failingTest
@FastaProblem('https://github.com/dart-lang/sdk/issues/28434')
test_constructorDeclaration_scope_signature() async {
return super.test_constructorDeclaration_scope_signature();
@@ -173,63 +178,12 @@
@override
@failingTest
@potentialAnalyzerProblem
- test_genericTypeAlias_castsAndTypeChecks_hasTypeParameters() async {
- return super.test_genericTypeAlias_castsAndTypeChecks_hasTypeParameters();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
- test_genericTypeAlias_castsAndTypeChecks_noTypeParameters() async {
- return super.test_genericTypeAlias_castsAndTypeChecks_noTypeParameters();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
- test_genericTypeAlias_fieldAndReturnType_noTypeParameters() async {
- return super.test_genericTypeAlias_fieldAndReturnType_noTypeParameters();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
- test_genericTypeAlias_fieldAndReturnType_typeParameters_arguments() async {
- return super
- .test_genericTypeAlias_fieldAndReturnType_typeParameters_arguments();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
- test_genericTypeAlias_fieldAndReturnType_typeParameters_noArguments() async {
- return super
- .test_genericTypeAlias_fieldAndReturnType_typeParameters_noArguments();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
test_genericTypeAlias_invalidGenericFunctionType() async {
return super.test_genericTypeAlias_invalidGenericFunctionType();
}
@override
@failingTest
- @potentialAnalyzerProblem
- test_genericTypeAlias_noTypeParameters() async {
- return super.test_genericTypeAlias_noTypeParameters();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
- test_genericTypeAlias_typeParameters() async {
- return super.test_genericTypeAlias_typeParameters();
- }
-
- @override
- @failingTest
@FastaProblem('https://github.com/dart-lang/sdk/issues/31641')
test_invalidAnnotation_constantVariable_field() async {
return super.test_invalidAnnotation_constantVariable_field();
@@ -237,33 +191,37 @@
@override
@failingTest
- @potentialAnalyzerProblem
- test_invalidAnnotation_constantVariable_field_importWithPrefix() async {
- return super
- .test_invalidAnnotation_constantVariable_field_importWithPrefix();
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31758')
+ test_invalidAssignment_implicitlyImplementFunctionViaCall_1() async {
+ return super.test_invalidAssignment_implicitlyImplementFunctionViaCall_1();
}
@override
@failingTest
- @potentialAnalyzerProblem
- test_invalidAnnotation_constantVariable_topLevel_importWithPrefix() async {
- return super
- .test_invalidAnnotation_constantVariable_topLevel_importWithPrefix();
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31758')
+ test_invalidAssignment_implicitlyImplementFunctionViaCall_2() async {
+ return super.test_invalidAssignment_implicitlyImplementFunctionViaCall_2();
}
@override
@failingTest
- @potentialAnalyzerProblem
- test_invalidAnnotation_constConstructor_importWithPrefix() async {
- return super.test_invalidAnnotation_constConstructor_importWithPrefix();
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31758')
+ test_invalidAssignment_implicitlyImplementFunctionViaCall_3() async {
+ return super.test_invalidAssignment_implicitlyImplementFunctionViaCall_3();
}
@override
@failingTest
- @potentialAnalyzerProblem
- test_invalidAnnotation_constConstructor_named_importWithPrefix() async {
- return super
- .test_invalidAnnotation_constConstructor_named_importWithPrefix();
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31758')
+ test_invalidAssignment_implicitlyImplementFunctionViaCall_4() async {
+ return super.test_invalidAssignment_implicitlyImplementFunctionViaCall_4();
+ }
+
+ @override
+ @failingTest
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31758')
+ test_invocationOfNonFunction_Object() async {
+ return super.test_invocationOfNonFunction_Object();
}
@override
@@ -290,8 +248,8 @@
@override
@failingTest
@potentialAnalyzerProblem
- test_nonConstantValueInInitializer_namedArgument() async {
- return super.test_nonConstantValueInInitializer_namedArgument();
+ test_nonBoolExpression_functionType() async {
+ return super.test_nonBoolExpression_functionType();
}
@override
@@ -310,9 +268,16 @@
@override
@failingTest
- @potentialAnalyzerProblem
- test_prefixCollidesWithTopLevelMembers() async {
- return super.test_prefixCollidesWithTopLevelMembers();
+ @notForDart2
+ test_null_callMethod() async {
+ return super.test_null_callMethod();
+ }
+
+ @override
+ @failingTest
+ @notForDart2
+ test_null_callOperator() async {
+ return super.test_null_callOperator();
}
@override
@@ -353,7 +318,7 @@
@override
@failingTest
@potentialAnalyzerProblem
- test_undefinedMethod_functionExpression_directCall() async {
- return super.test_undefinedMethod_functionExpression_directCall();
+ test_forEach_genericFunctionType() async {
+ return super.test_forEach_genericFunctionType();
}
}
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index d95692e..cec534b 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -369,22 +369,6 @@
verify([source]);
}
- test_abstractSuperMemberReference_superHasNoSuchMethod() async {
- Source source = addSource('''
-abstract class A {
- int m();
- noSuchMethod(_) => 42;
-}
-
-class B extends A {
- int m() => super.m();
-}
-''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
test_abstractSuperMemberReference_superSuperHasConcrete_getter() async {
Source source = addSource('''
abstract class A {
@@ -1182,6 +1166,18 @@
verify([source]);
}
+ test_forEach_genericFunctionType() async {
+ Source source = addSource(r'''
+main() {
+ for (Null Function<T>(T, Null) e in []) {
+ e;
+ }
+}''');
+ await computeAnalysisResult(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
test_caseBlockNotTerminated() async {
Source source = addSource(r'''
f(int p) {
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 85e8b1c..c61a040 100644
--- a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
@@ -15,6 +15,11 @@
});
}
+/// Tests marked with this annotation fail because they test features that
+/// were implemented in Analyzer, but are intentionally not included into
+/// the Dart 2.0 plan, or disabled for Dart 2.0 altogether.
+const notForDart2 = const Object();
+
/// Tests marked with this annotations fail because we either have not triaged
/// them, or know that this is an analyzer problem.
const potentialAnalyzerProblem = const Object();
@@ -35,27 +40,59 @@
@failingTest
@override
@potentialAnalyzerProblem
- test_deadCode_deadBlock_if_debugConst_propertyAccessor() async {
- // Appears to be an issue with resolution of import prefixes.
- await super.test_deadCode_deadBlock_if_debugConst_propertyAccessor();
- }
-
- @failingTest
- @override
- @potentialAnalyzerProblem
test_deprecatedMemberUse_inDeprecatedLibrary() async {
// LibraryAnalyzer is not applying resolution data to annotations on
// directives.
await super.test_deprecatedMemberUse_inDeprecatedLibrary();
}
- @failingTest
@override
- @potentialAnalyzerProblem
- test_duplicateImport_as() async {
- // Expected 0 errors of type HintCode.UNUSED_IMPORT, found 1 (38)
- // Appears to be an issue with resolution of import prefixes.
- await super.test_duplicateImport_as();
+ @failingTest
+ @notForDart2
+ test_undefinedGetter_inSubtype() async {
+ await super.test_undefinedGetter_inSubtype();
+ }
+
+ @override
+ @failingTest
+ @notForDart2
+ test_undefinedMethod_inSubtype() async {
+ await super.test_undefinedMethod_inSubtype();
+ }
+
+ @override
+ @failingTest
+ @notForDart2
+ test_undefinedOperator_binaryExpression_inSubtype() async {
+ await super.test_undefinedOperator_binaryExpression_inSubtype();
+ }
+
+ @override
+ @failingTest
+ @notForDart2
+ test_undefinedOperator_indexBoth_inSubtype() async {
+ await super.test_undefinedOperator_indexBoth_inSubtype();
+ }
+
+ @override
+ @failingTest
+ @notForDart2
+ test_undefinedOperator_indexGetter_inSubtype() async {
+ await super.test_undefinedOperator_indexGetter_inSubtype();
+ }
+
+ @override
+ @failingTest
+ @notForDart2
+ test_undefinedOperator_indexSetter_inSubtype() async {
+ await super.test_undefinedOperator_indexSetter_inSubtype();
+ }
+
+ @override
+ @failingTest
+ @notForDart2
+ test_undefinedSetter_inSubtype() async {
+ await super.test_undefinedSetter_inSubtype();
}
@override
@@ -86,13 +123,6 @@
@failingTest
@override
@potentialAnalyzerProblem
- test_unusedImport_as_equalPrefixes() async {
- await super.test_unusedImport_as_equalPrefixes();
- }
-
- @failingTest
- @override
- @potentialAnalyzerProblem
test_unusedImport_metadata() async {
await super.test_unusedImport_metadata();
}
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index 07cccf8..7a0139a 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -1117,7 +1117,7 @@
@override
void handleInvalidTopLevelDeclaration(Token endToken) {
- expectIn('CompilationUnit');
+ end('TopLevelMember');
listener.handleInvalidTopLevelDeclaration(endToken);
}
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index eef6b16..8d6d88d 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -248,32 +248,6 @@
@override
@failingTest
- void test_expectedExecutable_topLevel_afterType() {
- // TODO(brianwilkerson) Does not recover.
- // Expected CompilationUnit, but found [CompilationUnit, TopLevelMember]
- // package:test fail
- // test/generated/parser_fasta_listener.dart 50:7 ForwardingTestListener.expectIn
- // test/generated/parser_fasta_listener.dart 1030:5 ForwardingTestListener.endTopLevelDeclaration
- // package:front_end/src/fasta/parser/parser.dart 264:14 Parser.parseTopLevelDeclaration
- // test/generated/parser_fasta_test.dart 2815:22 ParserProxy.parseTopLevelDeclaration
- super.test_expectedExecutable_topLevel_afterType();
- }
-
- @override
- @failingTest
- void test_expectedExecutable_topLevel_afterVoid() {
- // TODO(brianwilkerson) Does not recover.
- // Expected CompilationUnit, but found [CompilationUnit, TopLevelMember]
- // package:test fail
- // test/generated/parser_fasta_listener.dart 50:7 ForwardingTestListener.expectIn
- // test/generated/parser_fasta_listener.dart 1030:5 ForwardingTestListener.endTopLevelDeclaration
- // package:front_end/src/fasta/parser/parser.dart 264:14 Parser.parseTopLevelDeclaration
- // test/generated/parser_fasta_test.dart 2815:22 ParserProxy.parseTopLevelDeclaration
- super.test_expectedExecutable_topLevel_afterVoid();
- }
-
- @override
- @failingTest
void test_expectedExecutable_topLevel_beforeType() {
// TODO(brianwilkerson) Does not recover.
// Expected: true
@@ -2948,48 +2922,4 @@
allowNativeClause = false;
test_parseClassDeclaration_native();
}
-
- @override
- void test_parseCompilationUnit_builtIn_asFunctionName_withTypeParameter() {
- // Fasta correctly parses these, while analyzer does not.
- super.test_parseCompilationUnit_builtIn_asFunctionName_withTypeParameter();
- }
-
- @override
- @failingTest
- void test_parseCompilationUnit_exportAsPrefix() {
- // TODO(paulberry): As of commit 5de9108 this syntax is invalid.
- super.test_parseCompilationUnit_exportAsPrefix();
- }
-
- @override
- @failingTest
- void test_parseCompilationUnit_exportAsPrefix_parameterized() {
- // TODO(paulberry): As of commit 5de9108 this syntax is invalid.
- super.test_parseCompilationUnit_exportAsPrefix_parameterized();
- }
-
- @override
- @failingTest
- void test_parseCompilationUnitMember_abstractAsPrefix() {
- // TODO(danrubel): built-in "abstract" cannot be used as a prefix
- super.test_parseCompilationUnitMember_abstractAsPrefix();
- }
-
- @failingTest
- void test_parseCompilationUnitMember_abstractAsPrefix2() {
- // TODO(danrubel): should not be generating an error
- super.test_parseCompilationUnitMember_abstractAsPrefix();
- assertNoErrors();
- }
-
- @override
- void test_parseFunctionDeclaration_functionWithTypeParameters_comment() {
- // Ignored: Fasta does not support the generic comment syntax.
- }
-
- @override
- void test_parseFunctionDeclaration_getter_generic_comment_returnType() {
- // Ignored: Fasta does not support the generic comment syntax.
- }
}
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 809fa22..9b18b50 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -2917,19 +2917,39 @@
}
void test_expectedExecutable_topLevel_afterType() {
- createParser('heart 2 heart');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertErrors(
- [expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 5)]);
+ CompilationUnit unit = parseCompilationUnit('heart 2 heart',
+ errors: usingFastaParser
+ ? [
+ expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 5),
+ expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 6, 1),
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 13, 0),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 13, 0)
+ ]
+ : [
+ expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 6, 1),
+ expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 6, 1),
+ expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 6, 1),
+ expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 8, 5)
+ ]);
+ expect(unit, isNotNull);
}
void test_expectedExecutable_topLevel_afterVoid() {
- createParser('void 2 void');
- CompilationUnitMember member = parseFullCompilationUnitMember();
- expectNotNullIfNoErrors(member);
- listener.assertErrors(
- [expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 5, 1)]);
+ CompilationUnit unit = parseCompilationUnit('void 2 void',
+ errors: usingFastaParser
+ ? [
+ expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 4),
+ expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 5, 1),
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 11, 0),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 0)
+ ]
+ : [
+ expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 6, 1),
+ expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 6, 1),
+ expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 6, 1),
+ expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 8, 5)
+ ]);
+ expect(unit, isNotNull);
}
void test_expectedExecutable_topLevel_beforeType() {
@@ -4140,6 +4160,29 @@
[expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1)]);
}
+ void test_missingIdentifier_inParameterGroupNamed() {
+ createParser('(a, {})');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
+ listener.assertErrors(
+ [expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 1)]);
+ }
+
+ void test_missingIdentifier_inParameterGroupOptional() {
+ createParser('(a, [])');
+ FormalParameterList list = parser.parseFormalParameterList();
+ expectNotNullIfNoErrors(list);
+ if (usingFastaParser) {
+ listener.assertErrors(
+ [expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 1)]);
+ } else {
+ listener.assertErrors([
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 1),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 5, 1)
+ ]);
+ }
+ }
+
void test_missingIdentifier_inSymbol_afterPeriod() {
SymbolLiteral literal = parseSymbolLiteral('#a.');
expectNotNullIfNoErrors(literal);
@@ -13861,6 +13904,22 @@
expect(forStatement.body, isNotNull);
}
+ void test_parseForStatement_each_genericFunctionType() {
+ var forStatement =
+ parseStatement('for (void Function<T>(T) element in list) {}')
+ as ForEachStatement;
+ assertNoErrors();
+ expect(forStatement.awaitKeyword, isNull);
+ expect(forStatement.forKeyword, isNotNull);
+ expect(forStatement.leftParenthesis, isNotNull);
+ expect(forStatement.loopVariable, isNotNull);
+ expect(forStatement.identifier, isNull);
+ expect(forStatement.inKeyword, isNotNull);
+ expect(forStatement.iterable, isNotNull);
+ expect(forStatement.rightParenthesis, isNotNull);
+ expect(forStatement.body, isNotNull);
+ }
+
void test_parseForStatement_loop_c() {
var forStatement = parseStatement('for (; i < count;) {}') as ForStatement;
assertNoErrors();
@@ -15183,12 +15242,14 @@
}
}
- @failingTest
void test_parseCompilationUnit_builtIn_asFunctionName_withTypeParameter() {
- for (Keyword keyword in Keyword.values) {
- if (keyword.isBuiltIn) {
- String lexeme = keyword.lexeme;
- parseCompilationUnit('$lexeme<T>(x) => 0;');
+ // Fasta correctly parses these, while analyzer does not.
+ if (usingFastaParser) {
+ for (Keyword keyword in Keyword.values) {
+ if (keyword.isBuiltIn) {
+ String lexeme = keyword.lexeme;
+ parseCompilationUnit('$lexeme<T>(x) => 0;');
+ }
}
}
}
@@ -15240,7 +15301,13 @@
createParser('export<dynamic> _export = new export.A();');
CompilationUnit unit = parser.parseCompilationUnit2();
expect(unit, isNotNull);
- assertNoErrors();
+ if (usingFastaParser) {
+ // This used to be deferred to later in the pipeline, but is now being
+ // reported by the parser.
+ assertErrorsWithCodes([CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
+ } else {
+ assertNoErrors();
+ }
expect(unit.scriptTag, isNull);
expect(unit.directives, hasLength(0));
expect(unit.declarations, hasLength(1));
@@ -15300,13 +15367,7 @@
createParser('typedef.A _typedef = new typedef.A();');
CompilationUnit unit = parser.parseCompilationUnit2();
expect(unit, isNotNull);
- if (usingFastaParser) {
- // This used to be deferred to later in the pipeline, but is now being
- // reported by the parser.
- assertErrorsWithCodes([CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
- } else {
- assertNoErrors();
- }
+ assertNoErrors();
expect(unit.scriptTag, isNull);
expect(unit.directives, hasLength(0));
expect(unit.declarations, hasLength(1));
@@ -16116,6 +16177,10 @@
}
void test_parseFunctionDeclaration_functionWithTypeParameters_comment() {
+ if (usingFastaParser) {
+ // Ignored: Fasta does not support the generic comment syntax.
+ return;
+ }
enableGenericMethodComments = true;
createParser('/// Doc\nT f/*<E>*/() {}');
FunctionDeclaration declaration = parseFullCompilationUnitMember();
@@ -16153,6 +16218,10 @@
}
void test_parseFunctionDeclaration_getter_generic_comment_returnType() {
+ if (usingFastaParser) {
+ // Ignored: Fasta does not support the generic comment syntax.
+ return;
+ }
enableGenericMethodComments = true;
createParser('/*=T*/ f/*<S, T>*/(/*=S*/ s) => null;');
var member = parseFullCompilationUnitMember();
diff --git a/pkg/analyzer/test/generated/resolver_kernel_test.dart b/pkg/analyzer/test/generated/resolver_kernel_test.dart
index fd664dc..ef8abbb 100644
--- a/pkg/analyzer/test/generated/resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/resolver_kernel_test.dart
@@ -9,7 +9,6 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(StrictModeTest_Kernel);
- defineReflectiveTests(TypePropagationTest_Kernel);
});
}
@@ -77,317 +76,3 @@
await super.test_localVar();
}
}
-
-@reflectiveTest
-class TypePropagationTest_Kernel extends TypePropagationTest_Driver {
- @override
- bool get enableKernelDriver => true;
-
- @override
- bool get previewDart2 => true;
-
- @override
- @failingTest
- test_as() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_as();
- }
-
- @override
- @failingTest
- test_assert() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_assert();
- }
-
- @override
- @failingTest
- test_assignment() async {
- // Expected: InterfaceTypeImpl:<int>
- await super.test_assignment();
- }
-
- @override
- @failingTest
- test_assignment_afterInitializer() async {
- // Expected: InterfaceTypeImpl:<double>
- await super.test_assignment_afterInitializer();
- }
-
- @override
- @failingTest
- test_assignment_throwExpression() async {
- // Bad state: Expected element reference for analyzer offset 25; got one for kernel offset 21
- await super.test_assignment_throwExpression();
- }
-
- @override
- @failingTest
- test_CanvasElement_getContext() async {
- // NoSuchMethodError: The getter 'name' was called on null.
- await super.test_CanvasElement_getContext();
- }
-
- @override
- @failingTest
- test_forEach() async {
- // Expected: InterfaceTypeImpl:<String>
- await super.test_forEach();
- }
-
- @override
- @failingTest
- test_forEach_async() async {
- // Expected: InterfaceTypeImpl:<String>
- await super.test_forEach_async();
- }
-
- @override
- @failingTest
- test_forEach_async_inheritedStream() async {
- // Expected: InterfaceTypeImpl:<List<String>>
- await super.test_forEach_async_inheritedStream();
- }
-
- @override
- @failingTest
- test_functionExpression_asInvocationArgument() async {
- // Expected: InterfaceTypeImpl:<int>
- await super.test_functionExpression_asInvocationArgument();
- }
-
- @override
- @failingTest
- test_functionExpression_asInvocationArgument_fromInferredInvocation() async {
- // Expected: InterfaceTypeImpl:<int>
- await super
- .test_functionExpression_asInvocationArgument_fromInferredInvocation();
- }
-
- @override
- @failingTest
- test_functionExpression_asInvocationArgument_functionExpressionInvocation() async {
- // Bad state: Expected a type for v at 43; got one for kernel offset 32
- await super
- .test_functionExpression_asInvocationArgument_functionExpressionInvocation();
- }
-
- @override
- @failingTest
- test_functionExpression_asInvocationArgument_notSubtypeOfStaticType() async {
- // Expected 1 errors of type StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, found 0
- await super
- .test_functionExpression_asInvocationArgument_notSubtypeOfStaticType();
- }
-
- @override
- @failingTest
- test_functionExpression_asInvocationArgument_replaceIfMoreSpecific() async {
- // Expected: InterfaceTypeImpl:<String>
- await super
- .test_functionExpression_asInvocationArgument_replaceIfMoreSpecific();
- }
-
- @override
- @failingTest
- test_Future_then() async {
- // Expected: InterfaceTypeImpl:<int>
- await super.test_Future_then();
- }
-
- @override
- @failingTest
- test_initializer() async {
- // Expected: DynamicTypeImpl:<dynamic>
- await super.test_initializer();
- }
-
- @override
- @failingTest
- test_initializer_dereference() async {
- // Expected: InterfaceTypeImpl:<String>
- await super.test_initializer_dereference();
- }
-
- @override
- @failingTest
- test_is_conditional() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_is_conditional();
- }
-
- @override
- @failingTest
- test_is_if() async {
- // type 'ParenthesizedExpressionImpl' is not a subtype of type 'IsExpression' of 'isExpression' where
- await super.test_is_if();
- }
-
- @override
- @failingTest
- test_is_if_logicalAnd() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_is_if_logicalAnd();
- }
-
- @override
- @failingTest
- test_is_postConditional() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_is_postConditional();
- }
-
- @override
- @failingTest
- test_is_postIf() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_is_postIf();
- }
-
- @override
- @failingTest
- test_is_while() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_is_while();
- }
-
- @override
- @failingTest
- test_isNot_conditional() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_isNot_conditional();
- }
-
- @override
- @failingTest
- test_isNot_if() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_isNot_if();
- }
-
- @override
- @failingTest
- test_isNot_if_logicalOr() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_isNot_if_logicalOr();
- }
-
- @override
- @failingTest
- test_isNot_postConditional() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_isNot_postConditional();
- }
-
- @override
- @failingTest
- test_isNot_postIf() async {
- // Expected: same instance as InterfaceTypeImpl:<A>
- await super.test_isNot_postIf();
- }
-
- @override
- @failingTest
- test_listLiteral_same() async {
- // NoSuchMethodError: The getter 'element' was called on null.
- await super.test_listLiteral_same();
- }
-
- @override
- @failingTest
- test_mapLiteral_different() async {
- // NoSuchMethodError: The getter 'element' was called on null.
- await super.test_mapLiteral_different();
- }
-
- @override
- @failingTest
- test_mapLiteral_same() async {
- // NoSuchMethodError: The getter 'element' was called on null.
- await super.test_mapLiteral_same();
- }
-
- @override
- @failingTest
- test_mergePropagatedTypes_afterIfThen_different() async {
- // Expected: InterfaceTypeImpl:<String>
- await super.test_mergePropagatedTypes_afterIfThen_different();
- }
-
- @override
- @failingTest
- test_mergePropagatedTypes_afterIfThen_same() async {
- // Expected: InterfaceTypeImpl:<int>
- await super.test_mergePropagatedTypes_afterIfThen_same();
- }
-
- @override
- @failingTest
- test_mergePropagatedTypes_afterIfThenElse_same() async {
- // Expected: InterfaceTypeImpl:<int>
- await super.test_mergePropagatedTypes_afterIfThenElse_same();
- }
-
- @override
- @failingTest
- test_mergePropagatedTypesAtJoinPoint_4() async {
- // Expected: InterfaceTypeImpl:<int>
- await super.test_mergePropagatedTypesAtJoinPoint_4();
- }
-
- @override
- @failingTest
- test_objectAccessInference_enabled_for_cascades() async {
- // Expected: DynamicTypeImpl:<dynamic>
- await super.test_objectAccessInference_enabled_for_cascades();
- }
-
- @override
- @failingTest
- test_objectMethodInference_enabled_for_cascades() async {
- // Expected: DynamicTypeImpl:<dynamic>
- await super.test_objectMethodInference_enabled_for_cascades();
- }
-
- @override
- @failingTest
- test_objectMethodOnDynamicExpression_doubleEquals() async {
- // Expected: InterfaceTypeImpl:<bool>
- await super.test_objectMethodOnDynamicExpression_doubleEquals();
- }
-
- @override
- @failingTest
- test_objectMethodOnDynamicExpression_hashCode() async {
- // Expected: InterfaceTypeImpl:<int>
- await super.test_objectMethodOnDynamicExpression_hashCode();
- }
-
- @override
- @failingTest
- test_objectMethodOnDynamicExpression_runtimeType() async {
- // Expected: InterfaceTypeImpl:<Type>
- await super.test_objectMethodOnDynamicExpression_runtimeType();
- }
-
- @override
- @failingTest
- test_objectMethodOnDynamicExpression_toString() async {
- // Expected: InterfaceTypeImpl:<String>
- await super.test_objectMethodOnDynamicExpression_toString();
- }
-
- @override
- @failingTest
- test_propagatedReturnType_localFunction() async {
- // Expected: DynamicTypeImpl:<dynamic>
- await super.test_propagatedReturnType_localFunction();
- }
-
- @override
- @failingTest
- test_query() async {
- // NoSuchMethodError: The getter 'name' was called on null.
- await super.test_query();
- }
-}
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 5d997c0..34e8ad9 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
@@ -29,20 +29,6 @@
@override
@failingTest
- test_FunctionExpressionInvocation_curried() async {
- // Bad state: No reference information for f()() at 53
- await super.test_FunctionExpressionInvocation_curried();
- }
-
- @override
- @failingTest
- test_FunctionExpressionInvocation_expression() async {
- // Bad state: No reference information for (() => 1)() at 21
- await super.test_FunctionExpressionInvocation_expression();
- }
-
- @override
- @failingTest
test_MethodInvocation_nameType_parameter_propagatedType() async {
// Expected: DynamicTypeImpl:<dynamic>
await super.test_MethodInvocation_nameType_parameter_propagatedType();
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 7260957..3f1eb5a 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
@@ -43,20 +43,6 @@
@override
@failingTest
- test_await_flattened() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_await_flattened();
- }
-
- @override
- @failingTest
- test_await_simple() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_await_simple();
- }
-
- @override
- @failingTest
test_awaitForIn_declaredVariableWrongType() async {
// Expected 1 errors of type StaticTypeWarningCode.FOR_IN_OF_INVALID_ELEMENT_TYPE, found 0
await super.test_awaitForIn_declaredVariableWrongType();
@@ -78,13 +64,6 @@
@override
@failingTest
- test_bug21912() async {
- // Expected 2 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_bug21912();
- }
-
- @override
- @failingTest
test_expectedOneListTypeArgument() async {
// Bad state: Found 1 argument types for 2 type arguments
await super.test_expectedOneListTypeArgument();
@@ -275,13 +254,6 @@
@override
@failingTest
- test_invalidAssignment_compoundAssignment() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_invalidAssignment_compoundAssignment();
- }
-
- @override
- @failingTest
test_invalidAssignment_defaultValue_named() async {
// UnimplementedError: kernel: (Let) let final dynamic #t1 = 0 in let ...
await super.test_invalidAssignment_defaultValue_named();
@@ -303,69 +275,6 @@
@override
@failingTest
- test_invalidAssignment_functionExpressionInvocation() async {
- // Bad state: No reference information for (() => 5)() at 22
- await super.test_invalidAssignment_functionExpressionInvocation();
- }
-
- @override
- @failingTest
- test_invalidAssignment_ifNullAssignment() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_invalidAssignment_ifNullAssignment();
- }
-
- @override
- @failingTest
- test_invalidAssignment_instanceVariable() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_invalidAssignment_instanceVariable();
- }
-
- @override
- @failingTest
- test_invalidAssignment_localVariable() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_invalidAssignment_localVariable();
- }
-
- @override
- @failingTest
- test_invalidAssignment_regressionInIssue18468Fix() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_invalidAssignment_regressionInIssue18468Fix();
- }
-
- @override
- @failingTest
- test_invalidAssignment_staticVariable() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_invalidAssignment_staticVariable();
- }
-
- @override
- @failingTest
- test_invalidAssignment_topLevelVariableDeclaration() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_invalidAssignment_topLevelVariableDeclaration();
- }
-
- @override
- @failingTest
- test_invalidAssignment_typeParameter() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_invalidAssignment_typeParameter();
- }
-
- @override
- @failingTest
- test_invalidAssignment_variableDeclaration() async {
- // Expected 1 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 0
- await super.test_invalidAssignment_variableDeclaration();
- }
-
- @override
- @failingTest
test_invocationOfNonFunction_class() async {
// Expected 1 errors of type StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION, found 0
await super.test_invocationOfNonFunction_class();
@@ -758,14 +667,6 @@
@override
@failingTest
- test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_mutated() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super
- .test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_mutated();
- }
-
- @override
- @failingTest
test_typePromotion_booleanAnd_useInRight_mutatedInLeft() async {
// Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
await super.test_typePromotion_booleanAnd_useInRight_mutatedInLeft();
@@ -773,43 +674,6 @@
@override
@failingTest
- test_typePromotion_booleanAnd_useInRight_mutatedInRight() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_booleanAnd_useInRight_mutatedInRight();
- }
-
- @override
- @failingTest
- test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super
- .test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_after();
- }
-
- @override
- @failingTest
- test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_before() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super
- .test_typePromotion_conditional_useInThen_accessedInClosure_hasAssignment_before();
- }
-
- @override
- @failingTest
- test_typePromotion_conditional_useInThen_hasAssignment() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_conditional_useInThen_hasAssignment();
- }
-
- @override
- @failingTest
- test_typePromotion_if_accessedInClosure_hasAssignment() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_if_accessedInClosure_hasAssignment();
- }
-
- @override
- @failingTest
test_typePromotion_if_and_right_hasAssignment() async {
// Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
await super.test_typePromotion_if_and_right_hasAssignment();
@@ -817,78 +681,6 @@
@override
@failingTest
- test_typePromotion_if_extends_notMoreSpecific_dynamic() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_if_extends_notMoreSpecific_dynamic();
- }
-
- @override
- @failingTest
- test_typePromotion_if_extends_notMoreSpecific_notMoreSpecificTypeArg() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super
- .test_typePromotion_if_extends_notMoreSpecific_notMoreSpecificTypeArg();
- }
-
- @override
- @failingTest
- test_typePromotion_if_hasAssignment_after() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_if_hasAssignment_after();
- }
-
- @override
- @failingTest
- test_typePromotion_if_hasAssignment_before() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_if_hasAssignment_before();
- }
-
- @override
- @failingTest
- test_typePromotion_if_hasAssignment_inClosure_anonymous_after() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_if_hasAssignment_inClosure_anonymous_after();
- }
-
- @override
- @failingTest
- test_typePromotion_if_hasAssignment_inClosure_anonymous_before() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super
- .test_typePromotion_if_hasAssignment_inClosure_anonymous_before();
- }
-
- @override
- @failingTest
- test_typePromotion_if_hasAssignment_inClosure_function_after() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_if_hasAssignment_inClosure_function_after();
- }
-
- @override
- @failingTest
- test_typePromotion_if_hasAssignment_inClosure_function_before() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_if_hasAssignment_inClosure_function_before();
- }
-
- @override
- @failingTest
- test_typePromotion_if_implements_notMoreSpecific_dynamic() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_if_implements_notMoreSpecific_dynamic();
- }
-
- @override
- @failingTest
- test_typePromotion_if_with_notMoreSpecific_dynamic() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_typePromotion_if_with_notMoreSpecific_dynamic();
- }
-
- @override
- @failingTest
test_undefinedFunction() async {
// Bad state: No reference information for g at 13
await super.test_undefinedFunction();
@@ -910,13 +702,6 @@
@override
@failingTest
- test_undefinedGetter() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_undefinedGetter();
- }
-
- @override
- @failingTest
test_undefinedGetter_generic_function_call() async {
// Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
await super.test_undefinedGetter_generic_function_call();
@@ -924,20 +709,6 @@
@override
@failingTest
- test_undefinedGetter_object_call() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_undefinedGetter_object_call();
- }
-
- @override
- @failingTest
- test_undefinedGetter_proxy_annotation_fakeProxy() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_undefinedGetter_proxy_annotation_fakeProxy();
- }
-
- @override
- @failingTest
test_undefinedGetter_static() async {
// Bad state: No reference information for A at 19
await super.test_undefinedGetter_static();
@@ -945,13 +716,6 @@
@override
@failingTest
- test_undefinedGetter_typeLiteral_cascadeTarget() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_undefinedGetter_typeLiteral_cascadeTarget();
- }
-
- @override
- @failingTest
test_undefinedGetter_typeLiteral_conditionalAccess() async {
// Bad state: No reference information for A at 18
await super.test_undefinedGetter_typeLiteral_conditionalAccess();
@@ -959,13 +723,6 @@
@override
@failingTest
- test_undefinedGetter_void() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_GETTER, found 0
- await super.test_undefinedGetter_void();
- }
-
- @override
- @failingTest
test_undefinedGetter_wrongNumberOfTypeArguments_tooLittle() async {
// AnalysisException: Element mismatch in /test.dart at main(A<dynamic, dynamic> a) → dynamic
await super.test_undefinedGetter_wrongNumberOfTypeArguments_tooLittle();
@@ -987,20 +744,6 @@
@override
@failingTest
- test_undefinedMethod() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_METHOD, found 0
- await super.test_undefinedMethod();
- }
-
- @override
- @failingTest
- test_undefinedMethod_assignmentExpression() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_METHOD, found 0
- await super.test_undefinedMethod_assignmentExpression();
- }
-
- @override
- @failingTest
test_undefinedMethod_generic_function_call() async {
// Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_METHOD, found 0
await super.test_undefinedMethod_generic_function_call();
@@ -1036,13 +779,6 @@
@override
@failingTest
- test_undefinedMethod_private() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_METHOD, found 0
- await super.test_undefinedMethod_private();
- }
-
- @override
- @failingTest
test_undefinedMethod_proxy_annotation_fakeProxy() async {
// Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_METHOD, found 0
await super.test_undefinedMethod_proxy_annotation_fakeProxy();
@@ -1113,13 +849,6 @@
@override
@failingTest
- test_undefinedSetter() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_SETTER, found 0
- await super.test_undefinedSetter();
- }
-
- @override
- @failingTest
test_undefinedSetter_static() async {
// Bad state: No reference information for A at 17
await super.test_undefinedSetter_static();
@@ -1127,20 +856,6 @@
@override
@failingTest
- test_undefinedSetter_typeLiteral_cascadeTarget() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_SETTER, found 0
- await super.test_undefinedSetter_typeLiteral_cascadeTarget();
- }
-
- @override
- @failingTest
- test_undefinedSetter_void() async {
- // Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_SETTER, found 0
- await super.test_undefinedSetter_void();
- }
-
- @override
- @failingTest
test_undefinedSuperGetter() async {
// Expected 1 errors of type StaticTypeWarningCode.UNDEFINED_SUPER_GETTER, found 0
await super.test_undefinedSuperGetter();
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 aa9081d..a6292e4 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -12,13 +12,13 @@
});
}
+const potentialAnalyzerProblem = const Object();
+
/// Tests marked with this annotation fail because of a Fasta problem.
class FastaProblem {
const FastaProblem(String issueUri);
}
-const potentialAnalyzerProblem = const Object();
-
@reflectiveTest
class StaticWarningCodeTest_Kernel extends StaticWarningCodeTest_Driver {
@override
@@ -29,34 +29,6 @@
@override
@failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/31073')
- test_finalNotInitialized_inConstructor_1() async {
- return super.test_finalNotInitialized_inConstructor_1();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/31073')
- test_finalNotInitialized_inConstructor_2() async {
- return super.test_finalNotInitialized_inConstructor_2();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/31073')
- test_finalNotInitialized_inConstructor_3() async {
- return super.test_finalNotInitialized_inConstructor_3();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
- test_importOfNonLibrary() async {
- return super.test_importOfNonLibrary();
- }
-
- @override
- @failingTest
@potentialAnalyzerProblem
test_ambiguousImport_as() async {
return super.test_ambiguousImport_as();
@@ -743,6 +715,27 @@
@override
@failingTest
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31073')
+ test_finalNotInitialized_inConstructor_1() async {
+ return super.test_finalNotInitialized_inConstructor_1();
+ }
+
+ @override
+ @failingTest
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31073')
+ test_finalNotInitialized_inConstructor_2() async {
+ return super.test_finalNotInitialized_inConstructor_2();
+ }
+
+ @override
+ @failingTest
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31073')
+ test_finalNotInitialized_inConstructor_3() async {
+ return super.test_finalNotInitialized_inConstructor_3();
+ }
+
+ @override
+ @failingTest
@potentialAnalyzerProblem
test_finalNotInitialized_instanceField_final() async {
return super.test_finalNotInitialized_instanceField_final();
@@ -827,6 +820,13 @@
@override
@failingTest
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
+ test_importOfNonLibrary() async {
+ return super.test_importOfNonLibrary();
+ }
+
+ @override
+ @failingTest
@potentialAnalyzerProblem
test_inconsistentMethodInheritanceGetterAndMethod() async {
return super.test_inconsistentMethodInheritanceGetterAndMethod();
@@ -1499,13 +1499,6 @@
@override
@failingTest
@potentialAnalyzerProblem
- test_notAType() async {
- return super.test_notAType();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
test_notEnoughRequiredArguments() async {
return super.test_notEnoughRequiredArguments();
}
diff --git a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
index 9439e01..b03f69f 100644
--- a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
@@ -65,13 +65,6 @@
@override
@failingTest
- test_constrainedByBounds4() async {
- // Bad state: Expected a type for 4 at 119; got one for kernel offset 118
- await super.test_constrainedByBounds4();
- }
-
- @override
- @failingTest
test_constrainedByBounds5() async {
// Bad state: Expected a type for 4 at 119; got one for kernel offset 118
await super.test_constrainedByBounds5();
@@ -277,6 +270,14 @@
@override
@failingTest
+ @FastaProblem('https://github.com/dart-lang/sdk/issues/31759')
+ test_inference_simplePolymorphicRecursion_function() async {
+ // Expected 0 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 2 (114, 99)
+ await super.test_inference_simplePolymorphicRecursion_function();
+ }
+
+ @override
+ @failingTest
test_inferGenericInstantiation2() async {
// Expected 1 errors of type StrongModeCode.STRONG_MODE_COULD_NOT_INFER, found 0;
// 1 errors of type StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, found 0
@@ -320,6 +321,8 @@
test_redirectingConstructor_propagation() async {
// AnalysisException: Element mismatch in /test.dart at class A
await super.test_redirectingConstructor_propagation();
+ // TODO(brianwilkerson) Figure out why this test is flaky.
+ fail('Flaky test');
}
}
@@ -434,13 +437,6 @@
@override
@failingTest
- test_genericMethod_then_prefixed() async {
- // Expected 0 errors of type HintCode.UNUSED_IMPORT, found 1 (7)
- await super.test_genericMethod_then_prefixed();
- }
-
- @override
- @failingTest
test_implicitBounds() async {
// Expected: 'B<num>'
await super.test_implicitBounds();
@@ -455,62 +451,6 @@
@override
@failingTest
- @potentialAnalyzerProblem
- test_instantiateToBounds_class_error_recursion_self() async {
- return super.test_instantiateToBounds_class_error_recursion_self();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
- test_instantiateToBounds_class_error_recursion_self2() async {
- return super.test_instantiateToBounds_class_error_recursion_self2();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
- test_instantiateToBounds_class_error_typedef() async {
- return super.test_instantiateToBounds_class_error_typedef();
- }
-
- @override
- @failingTest
- @potentialAnalyzerProblem
- test_instantiateToBounds_class_ok_implicitDynamic_multi() async {
- return super.test_instantiateToBounds_class_ok_implicitDynamic_multi();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/30724')
- test_instantiateToBounds_class_ok_referenceOther_after() async {
- return super.test_instantiateToBounds_class_ok_referenceOther_after();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/30724')
- test_instantiateToBounds_class_ok_referenceOther_after2() async {
- return super.test_instantiateToBounds_class_ok_referenceOther_after2();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/30724')
- test_instantiateToBounds_class_ok_referenceOther_before() async {
- return super.test_instantiateToBounds_class_ok_referenceOther_before();
- }
-
- @override
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/30724')
- test_instantiateToBounds_class_ok_referenceOther_multi() async {
- return super.test_instantiateToBounds_class_ok_referenceOther_multi();
- }
-
- @override
- @failingTest
test_instantiateToBounds_class_ok_simpleBounds() async {
// Expected: 'B<num>'
await super.test_instantiateToBounds_class_ok_simpleBounds();
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 7331a7d..3bbf4dd 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -186,13 +186,8 @@
var atD = AstFinder.getTopLevelFunction(result.unit, 'f').metadata[0];
InstanceCreationExpression constC = atD.arguments.arguments[0];
- if (previewDart2) {
- expect(atD.name.staticElement, constructorD);
- expect(atD.element, constructorD);
- } else {
- expect(atD.name.staticElement, elementD);
- expect(atD.element, constructorD);
- }
+ expect(atD.name.staticElement, elementD);
+ expect(atD.element, constructorD);
expect(constC.staticElement, constructorC);
expect(constC.staticType, elementC.type);
@@ -241,6 +236,168 @@
expect(identifier_2.staticType, typeProvider.intType);
}
+ test_annotation_prefixed_classConstructor() async {
+ var a = _p('/test/lib/a.dart');
+ provider.newFile(a, r'''
+class A {
+ const A(int a, {int b});
+}
+''');
+ addTestFile(r'''
+import 'a.dart' as p;
+
+@p.A(1, b: 2)
+main() {}
+''');
+ AnalysisResult result = await driver.getResult(testFile);
+ CompilationUnit unit = result.unit;
+
+ ImportElement aImport = unit.element.library.imports[0];
+ PrefixElement aPrefix = aImport.prefix;
+ LibraryElement aLibrary = aImport.importedLibrary;
+
+ CompilationUnitElement aUnitElement = aLibrary.definingCompilationUnit;
+ ClassElement aClass = aUnitElement.getType('A');
+ ConstructorElement constructor = aClass.unnamedConstructor;
+
+ Annotation annotation = unit.declarations[0].metadata.single;
+ expect(annotation.element, same(constructor));
+ PrefixedIdentifier prefixed = annotation.name;
+
+ expect(prefixed.prefix.staticElement, same(aPrefix));
+ expect(prefixed.prefix.staticType, isNull);
+
+ expect(prefixed.identifier.staticElement, same(aClass));
+ expect(prefixed.prefix.staticType, isNull);
+
+ expect(annotation.constructorName, isNull);
+
+ var arguments = annotation.arguments.arguments;
+ var parameters = constructor.parameters;
+ _assertArgumentToParameter(arguments[0], parameters[0]);
+ _assertArgumentToParameter(arguments[1], parameters[1]);
+ }
+
+ test_annotation_prefixed_classConstructorNamed() async {
+ var a = _p('/test/lib/a.dart');
+ provider.newFile(a, r'''
+class A {
+ const A.named(int a, {int b});
+}
+''');
+ addTestFile(r'''
+import 'a.dart' as p;
+
+@p.A.named(1, b: 2)
+main() {}
+''');
+ AnalysisResult result = await driver.getResult(testFile);
+ CompilationUnit unit = result.unit;
+
+ ImportElement aImport = unit.element.library.imports[0];
+ PrefixElement aPrefix = aImport.prefix;
+ LibraryElement aLibrary = aImport.importedLibrary;
+
+ CompilationUnitElement aUnitElement = aLibrary.definingCompilationUnit;
+ ClassElement aClass = aUnitElement.getType('A');
+ ConstructorElement constructor = aClass.getNamedConstructor('named');
+
+ Annotation annotation = unit.declarations[0].metadata.single;
+ expect(annotation.element, same(constructor));
+ PrefixedIdentifier prefixed = annotation.name;
+
+ expect(prefixed.prefix.staticElement, same(aPrefix));
+ expect(prefixed.prefix.staticType, isNull);
+
+ expect(prefixed.identifier.staticElement, same(aClass));
+ expect(prefixed.prefix.staticType, isNull);
+
+ SimpleIdentifier constructorName = annotation.constructorName;
+ expect(constructorName.staticElement, same(constructor));
+ expect(constructorName.staticType.toString(), '(int, {b: int}) → A');
+
+ var arguments = annotation.arguments.arguments;
+ var parameters = constructor.parameters;
+ _assertArgumentToParameter(arguments[0], parameters[0]);
+ _assertArgumentToParameter(arguments[1], parameters[1]);
+ }
+
+ test_annotation_prefixed_classField() async {
+ var a = _p('/test/lib/a.dart');
+ provider.newFile(a, r'''
+class A {
+ static const a = 1;
+}
+''');
+ addTestFile(r'''
+import 'a.dart' as p;
+
+@p.A.a
+main() {}
+''');
+ AnalysisResult result = await driver.getResult(testFile);
+ CompilationUnit unit = result.unit;
+ var typeProvider = unit.element.context.typeProvider;
+
+ ImportElement aImport = unit.element.library.imports[0];
+ PrefixElement aPrefix = aImport.prefix;
+ LibraryElement aLibrary = aImport.importedLibrary;
+
+ CompilationUnitElement aUnitElement = aLibrary.definingCompilationUnit;
+ ClassElement aClass = aUnitElement.getType('A');
+ var aGetter = aClass.getField('a').getter;
+
+ Annotation annotation = unit.declarations[0].metadata.single;
+ expect(annotation.element, same(aGetter));
+ PrefixedIdentifier prefixed = annotation.name;
+
+ expect(prefixed.prefix.staticElement, same(aPrefix));
+ expect(prefixed.prefix.staticType, isNull);
+
+ expect(prefixed.identifier.staticElement, same(aClass));
+ expect(prefixed.prefix.staticType, isNull);
+
+ expect(annotation.constructorName.staticElement, aGetter);
+ expect(annotation.constructorName.staticType, typeProvider.intType);
+
+ expect(annotation.arguments, isNull);
+ }
+
+ test_annotation_prefixed_topLevelVariable() async {
+ var a = _p('/test/lib/a.dart');
+ provider.newFile(a, r'''
+const topAnnotation = 1;
+''');
+ addTestFile(r'''
+import 'a.dart' as p;
+
+@p.topAnnotation
+main() {}
+''');
+ AnalysisResult result = await driver.getResult(testFile);
+ CompilationUnit unit = result.unit;
+
+ ImportElement aImport = unit.element.library.imports[0];
+ PrefixElement aPrefix = aImport.prefix;
+ LibraryElement aLibrary = aImport.importedLibrary;
+
+ CompilationUnitElement aUnitElement = aLibrary.definingCompilationUnit;
+ var topAnnotation = aUnitElement.topLevelVariables[0].getter;
+
+ Annotation annotation = unit.declarations[0].metadata.single;
+ expect(annotation.element, same(topAnnotation));
+ PrefixedIdentifier prefixed = annotation.name;
+
+ expect(prefixed.prefix.staticElement, same(aPrefix));
+ expect(prefixed.prefix.staticType, isNull);
+
+ expect(prefixed.identifier.staticElement, same(topAnnotation));
+ expect(prefixed.prefix.staticType, isNull);
+
+ expect(annotation.constructorName, isNull);
+ expect(annotation.arguments, isNull);
+ }
+
test_asExpression() async {
String content = r'''
void main() {
@@ -1304,11 +1461,11 @@
addTestFile(r'''
class A {
A(int a);
- A.named(int a);
+ A.named(int a, {int b});
}
class B extends A {
- B.one(int b) : super(b + 1);
- B.two(int b) : super.named(b + 1);
+ B.one(int p) : super(p + 1);
+ B.two(int p) : super.named(p + 1, b: p + 2);
}
''');
AnalysisResult result = await driver.getResult(testFile);
@@ -1335,6 +1492,10 @@
var constructorName = initializer.constructorName;
expect(constructorName.staticElement, same(namedConstructor));
expect(constructorName.staticType, isNull);
+
+ List<Expression> arguments = initializer.argumentList.arguments;
+ _assertArgumentToParameter(arguments[0], namedConstructor.parameters[0]);
+ _assertArgumentToParameter(arguments[1], namedConstructor.parameters[1]);
}
}
@@ -1702,6 +1863,30 @@
expect(parameterNode.identifier.staticType, typeProvider.intType);
}
+ test_functionExpressionInvocation() async {
+ addTestFile(r'''
+typedef Foo<S> = S Function<T>(T x);
+void main(f) {
+ (f as Foo<int>)<String>('hello');
+}
+''');
+ AnalysisResult result = await driver.getResult(testFile);
+ var typeProvider = result.unit.element.context.typeProvider;
+
+ List<Statement> statements = _getMainStatements(result);
+
+ ExpressionStatement statement = statements[0];
+ FunctionExpressionInvocation invocation = statement.expression;
+
+ expect(invocation.staticElement, isNull);
+ expect(invocation.staticInvokeType.toString(), '(String) → int');
+ expect(invocation.staticType, typeProvider.intType);
+
+ List<TypeAnnotation> typeArguments = invocation.typeArguments.arguments;
+ expect(typeArguments, hasLength(1));
+ _assertTypeNameSimple(typeArguments[0], typeProvider.stringType);
+ }
+
test_indexExpression() async {
String content = r'''
main() {
@@ -1896,6 +2081,126 @@
}
}
+ test_instanceCreation_prefixed() async {
+ var a = _p('/test/lib/a.dart');
+ provider.newFile(a, r'''
+class C<T> {
+ C(T p);
+ C.named(T p);
+}
+''');
+ addTestFile(r'''
+import 'a.dart' as p;
+main() {
+ new p.C(0);
+ new p.C.named(1.2);
+ new p.C<bool>.named(false);
+}
+''');
+ AnalysisResult result = await driver.getResult(testFile);
+ CompilationUnit unit = result.unit;
+ var typeProvider = unit.element.context.typeProvider;
+
+ ImportElement aImport = unit.element.library.imports[0];
+ LibraryElement aLibrary = aImport.importedLibrary;
+
+ ClassElement cElement = aLibrary.getType('C');
+ ConstructorElement defaultConstructor = cElement.constructors[0];
+ ConstructorElement namedConstructor = cElement.constructors[1];
+ InterfaceType cType = cElement.type;
+ var cTypeDynamic = cType.instantiate([DynamicTypeImpl.instance]);
+
+ var statements = _getMainStatements(result);
+ {
+ var cTypeInt = cType.instantiate([typeProvider.intType]);
+
+ ExpressionStatement statement = statements[0];
+ InstanceCreationExpression creation = statement.expression;
+ expect(creation.staticElement, defaultConstructor);
+ expect(creation.staticType, cTypeInt);
+
+ TypeName typeName = creation.constructorName.type;
+ expect(typeName.typeArguments, isNull);
+
+ PrefixedIdentifier typeIdentifier = typeName.name;
+ expect(typeIdentifier.staticElement, same(cElement));
+ if (previewDart2) {
+ expect(typeIdentifier.staticType, cTypeInt);
+ } else {
+ expect(typeIdentifier.staticType, cTypeDynamic);
+ }
+
+ SimpleIdentifier typePrefix = typeIdentifier.prefix;
+ expect(typePrefix.name, 'p');
+ expect(typePrefix.staticElement, same(aImport.prefix));
+ expect(typePrefix.staticType, isNull);
+
+ expect(typeIdentifier.identifier.staticElement, same(cElement));
+
+ expect(creation.constructorName.name, isNull);
+ }
+
+ {
+ var cTypeDouble = cType.instantiate([typeProvider.doubleType]);
+
+ ExpressionStatement statement = statements[1];
+ InstanceCreationExpression creation = statement.expression;
+ expect(creation.staticElement, namedConstructor);
+ expect(creation.staticType, cTypeDouble);
+
+ TypeName typeName = creation.constructorName.type;
+ expect(typeName.typeArguments, isNull);
+
+ PrefixedIdentifier typeIdentifier = typeName.name;
+ expect(typeIdentifier.staticElement, cElement);
+ if (previewDart2) {
+ expect(typeIdentifier.staticType, cTypeDouble);
+ } else {
+ expect(typeIdentifier.staticType, cTypeDynamic);
+ }
+
+ SimpleIdentifier typePrefix = typeIdentifier.prefix;
+ expect(typePrefix.name, 'p');
+ expect(typePrefix.staticElement, same(aImport.prefix));
+ expect(typePrefix.staticType, isNull);
+
+ expect(typeIdentifier.identifier.staticElement, same(cElement));
+
+ SimpleIdentifier constructorName = creation.constructorName.name;
+ expect(constructorName.staticElement, namedConstructor);
+ expect(constructorName.staticType, isNull);
+ }
+
+ {
+ var cTypeBool = cType.instantiate([typeProvider.boolType]);
+
+ ExpressionStatement statement = statements[2];
+ InstanceCreationExpression creation = statement.expression;
+ expect(creation.staticElement, namedConstructor);
+ expect(creation.staticType, cTypeBool);
+
+ TypeName typeName = creation.constructorName.type;
+ expect(typeName.typeArguments.arguments, hasLength(1));
+ _assertTypeNameSimple(
+ typeName.typeArguments.arguments[0], typeProvider.boolType);
+
+ PrefixedIdentifier typeIdentifier = typeName.name;
+ expect(typeIdentifier.staticElement, cElement);
+ expect(typeIdentifier.staticType, cTypeBool);
+
+ SimpleIdentifier typePrefix = typeIdentifier.prefix;
+ expect(typePrefix.name, 'p');
+ expect(typePrefix.staticElement, same(aImport.prefix));
+ expect(typePrefix.staticType, isNull);
+
+ expect(typeIdentifier.identifier.staticElement, same(cElement));
+
+ SimpleIdentifier constructorName = creation.constructorName.name;
+ expect(constructorName.staticElement, namedConstructor);
+ expect(constructorName.staticType, isNull);
+ }
+ }
+
test_instanceCreation_withTypeArguments() async {
String content = r'''
class C<K, V> {
@@ -3080,6 +3385,42 @@
expect(argument.staticParameterElement, isNull);
}
+ test_methodInvocation_notFunction_getter_typedef() async {
+ addTestFile(r'''
+typedef String Fun(int a, {int b});
+class C {
+ Fun get f => null;
+ foo() {
+ f(1, b: 2);
+ }
+}
+''');
+ AnalysisResult result = await driver.getResult(testFile);
+ var typeProvider = result.unit.element.context.typeProvider;
+
+ FunctionTypeAlias funDeclaration = result.unit.declarations[0];
+ FunctionTypeAliasElement funElement = funDeclaration.element;
+
+ ClassDeclaration cDeclaration = result.unit.declarations[1];
+
+ MethodDeclaration fDeclaration = cDeclaration.members[0];
+ PropertyAccessorElement fElement = fDeclaration.element;
+
+ MethodDeclaration fooDeclaration = cDeclaration.members[1];
+ BlockFunctionBody fooBody = fooDeclaration.body;
+ List<Statement> fooStatements = fooBody.block.statements;
+
+ ExpressionStatement statement = fooStatements[0];
+ MethodInvocation invocation = statement.expression;
+ expect(invocation.methodName.staticElement, same(fElement));
+ expect(invocation.staticInvokeType.toString(), '(int, {b: int}) → String');
+ expect(invocation.staticType, typeProvider.stringType);
+
+ List<Expression> arguments = invocation.argumentList.arguments;
+ _assertArgumentToParameter(arguments[0], funElement.parameters[0]);
+ _assertArgumentToParameter(arguments[1], funElement.parameters[1]);
+ }
+
test_methodInvocation_notFunction_local_dynamic() async {
addTestFile(r'''
main(f) {
@@ -3098,7 +3439,7 @@
ExpressionStatement statement = mainStatements[0];
MethodInvocation invocation = statement.expression;
expect(invocation.methodName.staticElement, same(fElement));
- expect(invocation.staticInvokeType, DynamicTypeImpl.instance);
+ _assertDynamicFunctionType(invocation.staticInvokeType);
expect(invocation.staticType, DynamicTypeImpl.instance);
List<Expression> arguments = invocation.argumentList.arguments;
@@ -3152,7 +3493,7 @@
ExpressionStatement statement = mainStatements[0];
MethodInvocation invocation = statement.expression;
expect(invocation.methodName.staticElement, same(fElement.getter));
- expect(invocation.staticInvokeType, DynamicTypeImpl.instance);
+ _assertDynamicFunctionType(invocation.staticInvokeType);
expect(invocation.staticType, DynamicTypeImpl.instance);
List<Expression> arguments = invocation.argumentList.arguments;
@@ -5028,6 +5369,56 @@
_assertTypeNameSimple(typeArguments[0], typeProvider.intType);
}
+ test_typeAnnotation_prefixed() async {
+ var a = _p('/test/lib/a.dart');
+ var b = _p('/test/lib/b.dart');
+ var c = _p('/test/lib/c.dart');
+ provider.newFile(a, 'class A {}');
+ provider.newFile(b, "export 'a.dart';");
+ provider.newFile(c, "export 'a.dart';");
+ addTestFile(r'''
+import 'b.dart' as b;
+import 'c.dart' as c;
+b.A a1;
+c.A a2;
+''');
+ AnalysisResult result = await driver.getResult(testFile);
+ CompilationUnit unit = result.unit;
+
+ ImportElement bImport = unit.element.library.imports[0];
+ ImportElement cImport = unit.element.library.imports[1];
+
+ LibraryElement bLibrary = bImport.importedLibrary;
+ LibraryElement aLibrary = bLibrary.exports[0].exportedLibrary;
+ ClassElement aClass = aLibrary.getType('A');
+
+ {
+ TopLevelVariableDeclaration declaration = unit.declarations[0];
+ TypeName typeName = declaration.variables.type;
+
+ PrefixedIdentifier typeIdentifier = typeName.name;
+ expect(typeIdentifier.staticElement, aClass);
+
+ expect(typeIdentifier.prefix.name, 'b');
+ expect(typeIdentifier.prefix.staticElement, same(bImport.prefix));
+
+ expect(typeIdentifier.identifier.staticElement, aClass);
+ }
+
+ {
+ TopLevelVariableDeclaration declaration = unit.declarations[1];
+ TypeName typeName = declaration.variables.type;
+
+ PrefixedIdentifier typeIdentifier = typeName.name;
+ expect(typeIdentifier.staticElement, aClass);
+
+ expect(typeIdentifier.prefix.name, 'c');
+ expect(typeIdentifier.prefix.staticElement, same(cImport.prefix));
+
+ expect(typeIdentifier.identifier.staticElement, aClass);
+ }
+ }
+
test_typeLiteral() async {
addTestFile(r'''
void main() {
@@ -5069,6 +5460,10 @@
ParameterElement actualParameter = argument.staticParameterElement;
if (previewDart2) {
expect(actualParameter, isNull);
+ if (argument is NamedExpression) {
+ SimpleIdentifier name = argument.name.label;
+ expect(name.staticElement, same(expectedParameter));
+ }
} else {
ParameterElement baseActualParameter;
if (actualParameter is ParameterMember) {
@@ -5086,9 +5481,9 @@
baseActualParameter = actualParameter;
}
expect(baseActualParameter, same(expectedParameter));
- // TODO(scheglov) Make this work for previewDart2 too.
if (argument is NamedExpression) {
- expect(argument.name.label.staticElement, same(expectedParameter));
+ SimpleIdentifier name = argument.name.label;
+ expect(name.staticElement, same(actualParameter));
}
}
}
@@ -5103,9 +5498,12 @@
}
/// Assert that the [type] is a function type `() -> dynamic`.
- void _assertDynamicFunctionType(FunctionType type) {
- expect(type.parameters, isEmpty);
- expect(type.returnType, DynamicTypeImpl.instance);
+ void _assertDynamicFunctionType(DartType type) {
+ if (previewDart2) {
+ expect(type.toString(), '() → dynamic');
+ } else {
+ expect(type, DynamicTypeImpl.instance);
+ }
}
void _assertParameterElement(ParameterElement element,
diff --git a/pkg/analyzer/test/src/dart/ast/ast_test.dart b/pkg/analyzer/test/src/dart/ast/ast_test.dart
new file mode 100644
index 0000000..d2b842a
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/ast/ast_test.dart
@@ -0,0 +1,188 @@
+// 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 file.
+
+import 'package:analyzer/src/dart/ast/ast.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(IntegerLiteralImplTest);
+ });
+}
+
+@reflectiveTest
+class IntegerLiteralImplTest {
+ test_isValidLiteral_dec_negative_equalMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('9223372036854775808', true), true);
+ }
+
+ test_isValidLiteral_dec_negative_fewDigits() async {
+ expect(IntegerLiteralImpl.isValidLiteral('24', true), true);
+ }
+
+ test_isValidLiteral_dec_negative_leadingZeros_overMax() async {
+ expect(IntegerLiteralImpl.isValidLiteral('009923372036854775807', true),
+ false);
+ }
+
+ test_isValidLiteral_dec_negative_leadingZeros_underMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('004223372036854775807', true), true);
+ }
+
+ test_isValidLiteral_dec_negative_oneOverMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('9223372036854775809', true), false);
+ }
+
+ test_isValidLiteral_dec_negative_tooManyDigits() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('10223372036854775808', true), false);
+ }
+
+ test_isValidLiteral_dec_positive_equalMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('9223372036854775807', false), true);
+ }
+
+ test_isValidLiteral_dec_positive_fewDigits() async {
+ expect(IntegerLiteralImpl.isValidLiteral('42', false), true);
+ }
+
+ test_isValidLiteral_dec_positive_leadingZeros_overMax() async {
+ expect(IntegerLiteralImpl.isValidLiteral('009923372036854775807', false),
+ false);
+ }
+
+ test_isValidLiteral_dec_positive_leadingZeros_underMax() async {
+ expect(IntegerLiteralImpl.isValidLiteral('004223372036854775807', false),
+ true);
+ }
+
+ test_isValidLiteral_dec_positive_oneOverMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('9223372036854775808', false), false);
+ }
+
+ test_isValidLiteral_dec_positive_tooManyDigits() async {
+ expect(IntegerLiteralImpl.isValidLiteral('10223372036854775808', false),
+ false);
+ }
+
+ test_isValidLiteral_hex_negative_equalMax() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0x7FFFFFFFFFFFFFFF', true), true);
+ }
+
+ test_isValidLiteral_heX_negative_equalMax() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0X7FFFFFFFFFFFFFFF', true), true);
+ }
+
+ test_isValidLiteral_hex_negative_fewDigits() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0xFF', true), true);
+ }
+
+ test_isValidLiteral_heX_negative_fewDigits() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0XFF', true), true);
+ }
+
+ test_isValidLiteral_hex_negative_leadingZeros_overMax() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0x00FFFFFFFFFFFFFFFFF', true),
+ false);
+ }
+
+ test_isValidLiteral_heX_negative_leadingZeros_overMax() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0X00FFFFFFFFFFFFFFFFF', true),
+ false);
+ }
+
+ test_isValidLiteral_hex_negative_leadingZeros_underMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0x007FFFFFFFFFFFFFFF', true), true);
+ }
+
+ test_isValidLiteral_heX_negative_leadingZeros_underMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0X007FFFFFFFFFFFFFFF', true), true);
+ }
+
+ test_isValidLiteral_hex_negative_oneOverMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0x8000000000000000', true), false);
+ }
+
+ test_isValidLiteral_heX_negative_oneOverMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0X8000000000000000', true), false);
+ }
+
+ test_isValidLiteral_hex_negative_tooManyDigits() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0x10000000000000000', true), false);
+ }
+
+ test_isValidLiteral_heX_negative_tooManyDigits() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0X10000000000000000', true), false);
+ }
+
+ test_isValidLiteral_hex_positive_equalMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0x7FFFFFFFFFFFFFFF', false), true);
+ }
+
+ test_isValidLiteral_heX_positive_equalMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0X7FFFFFFFFFFFFFFF', false), true);
+ }
+
+ test_isValidLiteral_hex_positive_fewDigits() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0xFF', false), true);
+ }
+
+ test_isValidLiteral_heX_positive_fewDigits() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0XFF', false), true);
+ }
+
+ test_isValidLiteral_hex_positive_leadingZeros_overMax() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0x00FFFFFFFFFFFFFFFFF', false),
+ false);
+ }
+
+ test_isValidLiteral_heX_positive_leadingZeros_overMax() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0X00FFFFFFFFFFFFFFFFF', false),
+ false);
+ }
+
+ test_isValidLiteral_hex_positive_leadingZeros_underMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0x007FFFFFFFFFFFFFFF', false), true);
+ }
+
+ test_isValidLiteral_heX_positive_leadingZeros_underMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0X007FFFFFFFFFFFFFFF', false), true);
+ }
+
+ test_isValidLiteral_hex_positive_oneOverMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0x10000000000000000', false), false);
+ }
+
+ test_isValidLiteral_heX_positive_oneOverMax() async {
+ expect(
+ IntegerLiteralImpl.isValidLiteral('0X10000000000000000', false), false);
+ }
+
+ test_isValidLiteral_hex_positive_tooManyDigits() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0xFF0000000000000000', false),
+ false);
+ }
+
+ test_isValidLiteral_heX_positive_tooManyDigits() async {
+ expect(IntegerLiteralImpl.isValidLiteral('0XFF0000000000000000', false),
+ false);
+ }
+}
diff --git a/pkg/analyzer/test/src/dart/ast/test_all.dart b/pkg/analyzer/test/src/dart/ast/test_all.dart
index da75f77..2330fd9 100644
--- a/pkg/analyzer/test/src/dart/ast/test_all.dart
+++ b/pkg/analyzer/test/src/dart/ast/test_all.dart
@@ -2,15 +2,14 @@
// 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.
-library analyzer.test.src.dart.ast.test_all;
-
import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'ast_test.dart' as ast;
import 'utilities_test.dart' as utilities;
-/// Utility for manually running all tests.
main() {
defineReflectiveSuite(() {
+ ast.main();
utilities.main();
}, name: 'ast');
}
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_test.dart
index 24dc9d9..7c584c8 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_test.dart
@@ -49,6 +49,14 @@
],
"$keyword A.b()"),
new TestDescriptor(
+ '${keyword}_name_dot',
+ '$keyword A.',
+ [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.EXPECTED_TOKEN,
+ ],
+ "$keyword A._s_()"),
+ new TestDescriptor(
'${keyword}_leftParen_unnamed',
'$keyword A(',
[
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart
index 6fc5af9..d104bcf 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart
@@ -39,6 +39,24 @@
new TestDescriptor('noType_params', 'm(b, c)',
[ParserErrorCode.EXPECTED_TOKEN], "m(b, c);",
allFailing: true),
+ new TestDescriptor(
+ 'noType_emptyOptional',
+ 'm(B b, [])',
+ [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_FUNCTION_BODY
+ ],
+ "m(B b, [_s_]){}",
+ failing: ['fieldConst']),
+ new TestDescriptor(
+ 'noType_emptyNamed',
+ 'm(B b, {})',
+ [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_FUNCTION_BODY
+ ],
+ "m(B b, {_s_}){}",
+ failing: ['fieldConst']),
new TestDescriptor('type_leftParen', 'A m(',
[ParserErrorCode.EXPECTED_TOKEN], "A m();",
allFailing: true),
@@ -63,6 +81,24 @@
new TestDescriptor('type_params', 'A m(b, c)',
[ParserErrorCode.EXPECTED_TOKEN], "A m(b, c);",
allFailing: true),
+ new TestDescriptor(
+ 'type_emptyOptional',
+ 'A m(B b, [])',
+ [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_FUNCTION_BODY
+ ],
+ "A m(B b, [_s_]){}",
+ failing: ['fieldConst']),
+ new TestDescriptor(
+ 'type_emptyNamed',
+ 'A m(B b, {})',
+ [
+ ParserErrorCode.MISSING_IDENTIFIER,
+ ParserErrorCode.MISSING_FUNCTION_BODY
+ ],
+ "A m(B b, {_s_}){}",
+ failing: ['fieldConst']),
],
PartialCodeTest.classMemberSuffixes,
head: 'class C { ',
diff --git a/pkg/analyzer/test/src/fasta/resolution_applier_test.dart b/pkg/analyzer/test/src/fasta/resolution_applier_test.dart
index bdd7051..1b1a23b 100644
--- a/pkg/analyzer/test/src/fasta/resolution_applier_test.dart
+++ b/pkg/analyzer/test/src/fasta/resolution_applier_test.dart
@@ -43,6 +43,7 @@
FunctionDeclaration function = unit.declarations[0];
FunctionBody body = function.functionExpression.body;
ResolutionApplier applier = new ResolutionApplier(
+ null,
new _TestTypeContext(),
declaredElements,
referencedElements,
@@ -74,6 +75,7 @@
], <DartType>[
typeProvider.stringType,
new FunctionTypeImpl(new FunctionElementImpl('+', -1)),
+ new FunctionTypeImpl(new FunctionElementImpl('+', -1)),
new TypeArgumentsDartType([]),
typeProvider.intType,
typeProvider.stringType,
@@ -92,9 +94,11 @@
], <DartType>[
typeProvider.objectType,
typeProvider.objectType,
+ typeProvider.objectType,
new TypeArgumentsDartType([]),
typeProvider.objectType,
typeProvider.objectType,
+ typeProvider.objectType,
new TypeArgumentsDartType([]),
typeProvider.objectType
]);
@@ -250,6 +254,8 @@
}
void test_methodInvocation_method() {
+ var substringType =
+ new FunctionTypeImpl(new FunctionElementImpl('substring', -1));
applyTypes(r'''
f(String s) {
return s.substring(3, 7);
@@ -259,7 +265,8 @@
new MethodElementImpl('length', -1)
], <DartType>[
typeProvider.stringType,
- typeProvider.intType,
+ substringType,
+ substringType,
new TypeArgumentsDartType([]),
typeProvider.intType,
typeProvider.stringType,
diff --git a/pkg/analyzer/test/src/pubspec/pubspec_validator_test.dart b/pkg/analyzer/test/src/pubspec/pubspec_validator_test.dart
index c2e11d0..84c9688 100644
--- a/pkg/analyzer/test/src/pubspec/pubspec_validator_test.dart
+++ b/pkg/analyzer/test/src/pubspec/pubspec_validator_test.dart
@@ -53,7 +53,7 @@
validator = new PubspecValidator(resourceProvider, source);
}
- test_assetDoesNotExist_error() {
+ test_assetDoesNotExist_path_error() {
assertErrors('''
name: sample
flutter:
@@ -62,7 +62,7 @@
''', [PubspecWarningCode.ASSET_DOES_NOT_EXIST]);
}
- test_assetDoesNotExist_noError() {
+ test_assetDoesNotExist_path_noError() {
newFile('/sample/assets/my_icon.png');
assertNoErrors('''
name: sample
@@ -72,6 +72,27 @@
''');
}
+ @failingTest
+ test_assetDoesNotExist_uri_error() {
+ assertErrors('''
+name: sample
+flutter:
+ assets:
+ - packages/icons/my_icon.png
+''', [PubspecWarningCode.ASSET_DOES_NOT_EXIST]);
+ }
+
+ test_assetDoesNotExist_uri_noError() {
+ // TODO(brianwilkerson) Create a package named `icons` that contains the
+ // referenced file, and a `.packages` file that references that package.
+ assertNoErrors('''
+name: sample
+flutter:
+ assets:
+ - packages/icons/my_icon.png
+''');
+ }
+
test_assetFieldNotList_error_empty() {
assertErrors('''
name: sample
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 46cf716..903fd18 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -328,8 +328,10 @@
} else if (e is DoubleLiteral) {
buffer.write(e.value);
} else if (e is InstanceCreationExpression) {
- buffer.write(e.keyword.lexeme);
- buffer.write(' ');
+ if (e.keyword != null) {
+ buffer.write(e.keyword.lexeme);
+ buffer.write(' ');
+ }
writeExpression(e.constructorName);
writeList('(', ')', e.argumentList.arguments, ', ', writeExpression,
includeEmpty: true);
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
index 13d060c..c821b21 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
@@ -64,6 +64,12 @@
@override
@failingTest
+ test_instantiateToBounds_functionTypeAlias_simple() async {
+ await super.test_instantiateToBounds_functionTypeAlias_simple();
+ }
+
+ @override
+ @failingTest
test_syntheticFunctionType_genericClosure() async {
await super.test_syntheticFunctionType_genericClosure();
}
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 14ef322d..c6cd476 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -2263,6 +2263,15 @@
}
}
+ test_class_setter_invalid_named_parameter() async {
+ var library = await checkLibrary('class C { void set x({a}) {} }');
+ checkElementText(library, r'''
+class C {
+ void set x({dynamic a}) {}
+}
+''');
+ }
+
test_class_setter_invalid_no_parameter() async {
var library = await checkLibrary('class C { void set x() {} }');
checkElementText(library, r'''
@@ -2272,15 +2281,6 @@
''');
}
- test_class_setter_invalid_too_many_parameters() async {
- var library = await checkLibrary('class C { void set x(a, b) {} }');
- checkElementText(library, r'''
-class C {
- void set x(dynamic a, dynamic b) {}
-}
-''');
- }
-
test_class_setter_invalid_optional_parameter() async {
var library = await checkLibrary('class C { void set x([a]) {} }');
checkElementText(library, r'''
@@ -2290,11 +2290,11 @@
''');
}
- test_class_setter_invalid_named_parameter() async {
- var library = await checkLibrary('class C { void set x({a}) {} }');
+ test_class_setter_invalid_too_many_parameters() async {
+ var library = await checkLibrary('class C { void set x(a, b) {} }');
checkElementText(library, r'''
class C {
- void set x({dynamic a}) {}
+ void set x(dynamic a, dynamic b) {}
}
''');
}
@@ -4076,6 +4076,7 @@
}
}
+ @failingTest // https://github.com/dart-lang/sdk/issues/31768
test_const_topLevel_literal() async {
var library = await checkLibrary(r'''
const vNull = null;
@@ -4277,6 +4278,27 @@
}
}
+ test_const_topLevel_typedList_typedefArgument() async {
+ shouldCompareLibraryElements = false;
+ var library = await checkLibrary(r'''
+typedef int F(String id);
+const v = const <F>[];
+''');
+ if (isStrongMode) {
+ checkElementText(library, r'''
+typedef F = int Function(String id);
+const List<(String) → int> v = const <
+ null/*location: test.dart;F;-*/>[];
+''');
+ } else {
+ checkElementText(library, r'''
+typedef F = int Function(String id);
+const dynamic v = const <
+ null/*location: test.dart;F;-*/>[];
+''');
+ }
+ }
+
test_const_topLevel_typedMap() async {
var library = await checkLibrary(r'''
const vDynamic1 = const <dynamic, int>{};
@@ -7175,7 +7197,7 @@
if (isStrongMode) {
checkElementText(library, r'''
typedef F<T extends num> = dynamic Function(T p);
-(dynamic) → dynamic f;
+(num) → dynamic f;
''');
} else {
checkElementText(library, r'''
diff --git a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
index 40060b1..651b216 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
@@ -268,22 +268,10 @@
@failingTest
@FastaProblem('https://github.com/dart-lang/sdk/issues/30724')
- test_instantiateToBounds_boundRefersToItself() async {
- await super.test_instantiateToBounds_boundRefersToItself();
- }
-
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/30724')
test_instantiateToBounds_boundRefersToLaterTypeArgument() async {
await super.test_instantiateToBounds_boundRefersToLaterTypeArgument();
}
- @failingTest
- @FastaProblem('https://github.com/dart-lang/sdk/issues/30724')
- test_instantiateToBounds_simple() async {
- await super.test_instantiateToBounds_simple();
- }
-
@override
@failingTest
test_invalid_annotation_prefixed_constructor() {
@@ -396,6 +384,16 @@
}
@failingTest
+ test_typedef_type_parameters_bound_recursive() async {
+ await super.test_typedef_type_parameters_bound_recursive();
+ }
+
+ @failingTest
+ test_typedef_type_parameters_bound_recursive2() async {
+ await super.test_typedef_type_parameters_bound_recursive2();
+ }
+
+ @failingTest
@FastaProblem('https://github.com/dart-lang/sdk/issues/30267')
test_unresolved_annotation_instanceCreation_argument_super() async {
await super.test_unresolved_annotation_instanceCreation_argument_super();
diff --git a/pkg/analyzer/test/src/summary/summary_common.dart b/pkg/analyzer/test/src/summary/summary_common.dart
index 9e853e2..7ec895f 100644
--- a/pkg/analyzer/test/src/summary/summary_common.dart
+++ b/pkg/analyzer/test/src/summary/summary_common.dart
@@ -18,6 +18,7 @@
as public_namespace;
import 'package:path/path.dart' show posix;
import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../context/mock_sdk.dart';
@@ -2808,6 +2809,7 @@
]);
}
+ @failingTest // https://github.com/dart-lang/sdk/issues/31768
test_constExpr_pushLongInt() {
UnlinkedVariable variable =
serializeVariableText('const v = 0xA123456789ABCDEF012345678;');
@@ -2827,6 +2829,7 @@
]);
}
+ @failingTest // https://github.com/dart-lang/sdk/issues/31768
test_constExpr_pushLongInt_min3() {
UnlinkedVariable variable =
serializeVariableText('const v = 0x10000000000000000;');
diff --git a/pkg/compiler/lib/src/common_elements.dart b/pkg/compiler/lib/src/common_elements.dart
index 4f06012..7163d40 100644
--- a/pkg/compiler/lib/src/common_elements.dart
+++ b/pkg/compiler/lib/src/common_elements.dart
@@ -1401,6 +1401,9 @@
/// Returns the type of [function].
FunctionType getFunctionType(FunctionEntity function);
+ /// Returns the function type variables defined on [function].
+ List<TypeVariableType> getFunctionTypeVariables(FunctionEntity function);
+
/// Returns the type of [field].
DartType getFieldType(FieldEntity field);
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index d05ba4b..50a5ebb 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -926,6 +926,7 @@
/// If [assumeInUserCode] is `true`, [element] is assumed to be in user code
/// if no entrypoints have been set.
bool inUserCode(Entity element, {bool assumeInUserCode: false}) {
+ if (element == null) return assumeInUserCode;
Uri libraryUri = _uriFromElement(element);
if (libraryUri == null) return false;
Iterable<CodeLocation> userCodeLocations =
diff --git a/pkg/compiler/lib/src/diagnostics/messages.dart b/pkg/compiler/lib/src/diagnostics/messages.dart
index c803871..c19fefb 100644
--- a/pkg/compiler/lib/src/diagnostics/messages.dart
+++ b/pkg/compiler/lib/src/diagnostics/messages.dart
@@ -3841,7 +3841,7 @@
assert(() {
computeMessage();
return true;
- });
+ }());
}
MessageKind get kind => template.kind;
diff --git a/pkg/compiler/lib/src/frontend_strategy.dart b/pkg/compiler/lib/src/frontend_strategy.dart
index 1e58614..e06ed4f 100644
--- a/pkg/compiler/lib/src/frontend_strategy.dart
+++ b/pkg/compiler/lib/src/frontend_strategy.dart
@@ -75,6 +75,9 @@
/// this strategy.
NoSuchMethodResolver createNoSuchMethodResolver();
+ /// Returns the [RuntimeTypesNeedBuilder] used by this frontend strategy.
+ RuntimeTypesNeedBuilder get runtimeTypesNeedBuilderForTesting;
+
/// Creates the [ResolutionWorldBuilder] corresponding to the element model
/// used in this strategy.
ResolutionWorldBuilder createResolutionWorldBuilder(
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 51e274e..492087c 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -649,6 +649,8 @@
return asName(typedefTag);
case JsGetName.FUNCTION_TYPE_TAG:
return asName(functionTypeTag);
+ case JsGetName.FUNCTION_TYPE_GENERIC_BOUNDS_TAG:
+ return asName(functionTypeGenericBoundsTag);
case JsGetName.FUNCTION_TYPE_VOID_RETURN_TAG:
return asName(functionTypeVoidReturnTag);
case JsGetName.FUNCTION_TYPE_RETURN_TYPE_TAG:
@@ -1617,6 +1619,8 @@
String get functionTypeNamedParametersTag => r'named';
+ String get functionTypeGenericBoundsTag => r'bounds';
+
Map<ResolutionFunctionType, jsAst.Name> functionTypeNameMap =
new HashMap<ResolutionFunctionType, jsAst.Name>();
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 79057a1..dcadac5 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -39,6 +39,7 @@
bool classNeedsRti(ClassEntity cls);
bool classNeedsRtiField(ClassEntity cls);
bool methodNeedsRti(FunctionEntity function);
+ bool methodNeedsGenericRti(FunctionEntity function);
// TODO(redemption): Remove this when the old frontend is deleted.
bool localFunctionNeedsRti(Local function);
bool classUsesTypeVariableExpression(ClassEntity cls);
@@ -90,14 +91,14 @@
/// Computes the [RuntimeTypesChecks] for the data in this builder.
RuntimeTypesChecks computeRequiredChecks(
- CodegenWorldBuilder codegenWorldBuilder);
+ CodegenWorldBuilder codegenWorldBuilder, Set<DartType> implicitIsChecks);
/// Compute type arguments of classes that use one of their type variables in
/// is-checks and add the is-checks that they imply.
///
/// This function must be called after all is-checks have been registered.
- void registerImplicitChecks(
- WorldBuilder worldBuilder, Iterable<ClassEntity> classesUsingChecks);
+ void registerImplicitChecks(Set<InterfaceType> instantiatedTypes,
+ Iterable<ClassEntity> classesUsingChecks, Set<DartType> implicitIsChecks);
}
/// Interface for computing substitutions need for runtime type checks.
@@ -169,16 +170,17 @@
* immutable datastructure.
*/
void registerImplicitChecks(
- WorldBuilder worldBuilder, Iterable<ClassEntity> classesUsingChecks) {
+ Set<InterfaceType> instantiatedTypes,
+ Iterable<ClassEntity> classesUsingChecks,
+ Set<DartType> implicitIsChecks) {
// If there are no classes that use their variables in checks, there is
// nothing to do.
if (classesUsingChecks.isEmpty) return;
- Set<InterfaceType> instantiatedTypes = worldBuilder.instantiatedTypes;
if (cannotDetermineInstantiatedTypesPrecisely) {
for (InterfaceType type in instantiatedTypes) {
do {
for (DartType argument in type.typeArguments) {
- worldBuilder.registerIsCheck(argument);
+ implicitIsChecks.add(argument.unaliased);
}
// TODO(johnniwinther): This seems wrong; the type arguments of [type]
// are not substituted - `List<int>` yields `Iterable<E>` and not
@@ -201,7 +203,7 @@
InterfaceType instance = _types.asInstanceOf(type, cls);
if (instance == null) break;
for (DartType argument in instance.typeArguments) {
- worldBuilder.registerIsCheck(argument);
+ implicitIsChecks.add(argument.unaliased);
}
// TODO(johnniwinther): This seems wrong; the type arguments of
// [type] are not substituted - `List<int>` yields `Iterable<E>` and
@@ -253,6 +255,10 @@
_backendUsage.isRuntimeTypeUsed;
}
+ // TODO(johnniwinther): Optimize to only include generic methods that really
+ // need the RTI.
+ bool methodNeedsGenericRti(FunctionEntity function) => true;
+
bool localFunctionNeedsRti(Local function) {
if (localFunctionsNeedingRti == null) {
// [localFunctionNeedsRti] is only used by the old frontend.
@@ -297,6 +303,12 @@
final Set<ClassEntity> classesUsingTypeVariableExpression =
new Set<ClassEntity>();
+ final Set<ClassEntity> classesUsingTypeVariableTests = new Set<ClassEntity>();
+
+ Set<DartType> isChecks;
+
+ final Set<DartType> implicitIsChecks = new Set<DartType>();
+
RuntimeTypesNeedBuilderImpl(this._elementEnvironment, DartTypes types)
: super(types);
@@ -320,6 +332,7 @@
RuntimeTypesNeed computeRuntimeTypesNeed(
ResolutionWorldBuilder resolutionWorldBuilder, ClosedWorld closedWorld,
{bool enableTypeAssertions}) {
+ isChecks = new Set<DartType>.from(resolutionWorldBuilder.isChecks);
Set<ClassEntity> classesNeedingRti = new Set<ClassEntity>();
Set<FunctionEntity> methodsNeedingRti = new Set<FunctionEntity>();
Set<Local> localFunctionsNeedingRti = new Set<Local>();
@@ -348,8 +361,7 @@
}
}
- Set<ClassEntity> classesUsingTypeVariableTests = new Set<ClassEntity>();
- resolutionWorldBuilder.isChecks.forEach((DartType type) {
+ isChecks.forEach((DartType type) {
if (type.isTypeVariable) {
TypeVariableType typeVariableType = type;
TypeVariableEntity variable = typeVariableType.element;
@@ -362,8 +374,8 @@
}
});
// Add is-checks that result from classes using type variables in checks.
- registerImplicitChecks(
- resolutionWorldBuilder, classesUsingTypeVariableTests);
+ registerImplicitChecks(resolutionWorldBuilder.instantiatedTypes,
+ classesUsingTypeVariableTests, implicitIsChecks);
// Add the rti dependencies that are implicit in the way the backend
// generates code: when we create a new [List], we actually create
// a JSArray in the backend and we need to add type arguments to
@@ -406,25 +418,32 @@
// Compute the set of all classes and methods that need runtime type
// information.
- resolutionWorldBuilder.isChecks.forEach((DartType type) {
- if (type.isInterfaceType) {
- InterfaceType itf = type;
- if (!itf.treatAsRaw) {
- potentiallyAddForRti(itf.element);
+
+ void processChecks(Set<DartType> checks) {
+ checks.forEach((DartType type) {
+ if (type.isInterfaceType) {
+ InterfaceType itf = type;
+ if (!itf.treatAsRaw) {
+ potentiallyAddForRti(itf.element);
+ }
+ } else {
+ ClassEntity contextClass = DartTypes.getClassContext(type);
+ if (contextClass != null) {
+ // [type] contains type variables (declared in [contextClass]) if
+ // [contextClass] is non-null. This handles checks against type
+ // variables and function types containing type variables.
+ potentiallyAddForRti(contextClass);
+ }
+ if (type.isFunctionType) {
+ checkClosures(potentialSubtypeOf: type);
+ }
}
- } else {
- ClassEntity contextClass = DartTypes.getClassContext(type);
- if (contextClass != null) {
- // [type] contains type variables (declared in [contextClass]) if
- // [contextClass] is non-null. This handles checks against type
- // variables and function types containing type variables.
- potentiallyAddForRti(contextClass);
- }
- if (type.isFunctionType) {
- checkClosures(potentialSubtypeOf: type);
- }
- }
- });
+ });
+ }
+
+ processChecks(isChecks);
+ processChecks(implicitIsChecks);
+
if (enableTypeAssertions) {
checkClosures();
}
@@ -562,8 +581,10 @@
}
RuntimeTypesChecks computeRequiredChecks(
- CodegenWorldBuilder codegenWorldBuilder) {
- Set<DartType> isChecks = codegenWorldBuilder.isChecks;
+ CodegenWorldBuilder codegenWorldBuilder, Set<DartType> implicitIsChecks) {
+ Set<DartType> isChecks =
+ new Set<DartType>.from(codegenWorldBuilder.isChecks);
+ isChecks.addAll(implicitIsChecks);
// These types are needed for is-checks against function types.
Set<DartType> instantiatedTypesAndClosures =
computeInstantiatedTypesAndClosures(codegenWorldBuilder);
@@ -956,6 +977,7 @@
OnVariableCallback onVariable;
ShouldEncodeTypedefCallback shouldEncodeTypedef;
Map<TypeVariableType, jsAst.Expression> typedefBindings;
+ List<FunctionTypeVariable> functionTypeVariables = <FunctionTypeVariable>[];
TypeRepresentationGenerator(this.namer);
@@ -976,6 +998,7 @@
jsAst.Expression representation = visit(type, emitter);
this.onVariable = null;
this.shouldEncodeTypedef = null;
+ assert(functionTypeVariables.isEmpty);
return representation;
}
@@ -1006,9 +1029,9 @@
jsAst.Expression visitFunctionTypeVariable(
FunctionTypeVariable type, Emitter emitter) {
- // TODO(johnniwinther): Create a runtime representation for existential
- // types.
- return getDynamicValue();
+ int position = functionTypeVariables.indexOf(type);
+ assert(position >= 0);
+ return js.number(functionTypeVariables.length - position - 1);
}
jsAst.Expression visitDynamicType(DynamicType type, Emitter emitter) {
@@ -1055,6 +1078,20 @@
// Type representations for functions have a property which is a tag marking
// them as function types. The value is not used, so '1' is just a dummy.
addProperty(namer.functionTypeTag, js.number(1));
+
+ if (type.typeVariables.isNotEmpty) {
+ // Generic function types have type parameters which are reduced to de
+ // Bruijn indexes.
+ for (FunctionTypeVariable variable in type.typeVariables.reversed) {
+ functionTypeVariables.add(variable);
+ }
+ // TODO(sra): This emits `P.Object` for the common unbounded case. We
+ // could replace the Object bounds with an array hole for a compact `[,,]`
+ // representation.
+ addProperty(namer.functionTypeGenericBoundsTag,
+ visitList(type.typeVariables.map((v) => v.bound).toList(), emitter));
+ }
+
if (type.returnType.isVoid) {
addProperty(namer.functionTypeVoidReturnTag, js('true'));
} else if (!type.returnType.treatAsDynamic) {
@@ -1082,6 +1119,12 @@
addProperty(namer.functionTypeNamedParametersTag,
new jsAst.ObjectInitializer(namedArguments));
}
+
+ // Exit generic function scope.
+ if (type.typeVariables.isNotEmpty) {
+ functionTypeVariables.length -= type.typeVariables.length;
+ }
+
return new jsAst.ObjectInitializer(properties);
}
diff --git a/pkg/compiler/lib/src/js_emitter/type_test_registry.dart b/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
index 20ec76a..b6a3a8e 100644
--- a/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
+++ b/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
@@ -180,18 +180,26 @@
void computeRequiredTypeChecks(RuntimeTypesChecksBuilder rtiChecksBuilder) {
assert(checkedClasses == null && checkedFunctionTypes == null);
+ Set<DartType> implicitIsChecks = new Set<DartType>();
rtiChecksBuilder.registerImplicitChecks(
- _codegenWorldBuilder, classesUsingTypeVariableTests);
- _rtiChecks = rtiChecksBuilder.computeRequiredChecks(_codegenWorldBuilder);
+ _codegenWorldBuilder.instantiatedTypes,
+ classesUsingTypeVariableTests,
+ implicitIsChecks);
+ _rtiChecks = rtiChecksBuilder.computeRequiredChecks(
+ _codegenWorldBuilder, implicitIsChecks);
checkedClasses = new Set<ClassEntity>();
checkedFunctionTypes = new Set<FunctionType>();
- _codegenWorldBuilder.isChecks.forEach((DartType t) {
+
+ processType(DartType t) {
if (t is InterfaceType) {
checkedClasses.add(t.element);
} else if (t is FunctionType) {
checkedFunctionTypes.add(t);
}
- });
+ }
+
+ _codegenWorldBuilder.isChecks.forEach(processType);
+ implicitIsChecks.forEach(processType);
}
}
diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
index 7f82042..b34cd47 100644
--- a/pkg/compiler/lib/src/js_model/closure.dart
+++ b/pkg/compiler/lib/src/js_model/closure.dart
@@ -624,7 +624,9 @@
}
}
-class ClosureFunctionData extends ClosureMemberData implements FunctionData {
+class ClosureFunctionData extends ClosureMemberData
+ with FunctionDataMixin
+ implements FunctionData {
final FunctionType functionType;
final ir.FunctionNode functionNode;
final ClassTypeVariableAccess classTypeVariableAccess;
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index e11bf46..db3de60 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -76,7 +76,7 @@
Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
String name, Arguments arguments, int offset, bool isSuper) {
// TODO(sigmund): implement;
- return new InvalidExpression();
+ return new InvalidExpression(null);
}
@override
@@ -93,6 +93,6 @@
bool isConstructor: false,
bool isTopLevel: false}) {
// TODO(sigmund): implement;
- return new InvalidExpression();
+ return new InvalidExpression(null);
}
}
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 92e71cd..b01eea5 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -640,6 +640,12 @@
return data.getFunctionType(this);
}
+ List<TypeVariableType> _getFunctionTypeVariables(IndexedFunction function) {
+ assert(checkFamily(function));
+ FunctionData data = _members.getData(function);
+ return data.getFunctionTypeVariables(this);
+ }
+
DartType _getFieldType(IndexedField field) {
assert(checkFamily(field));
FieldData data = _members.getData(field);
@@ -1341,6 +1347,11 @@
}
@override
+ List<TypeVariableType> getFunctionTypeVariables(FunctionEntity function) {
+ return elementMap._getFunctionTypeVariables(function);
+ }
+
+ @override
DartType getFieldType(FieldEntity field) {
return elementMap._getFieldType(field);
}
@@ -1583,7 +1594,8 @@
node.parameter.parent.parent is ir.Procedure) {
// Special case for Dart 1 compatibility in checked mode.
ir.Procedure typeParameterParent = node.parameter.parent.parent;
- if (typeParameterParent.kind != ir.ProcedureKind.Factory) {
+ if (typeParameterParent.kind != ir.ProcedureKind.Factory &&
+ !elementMap.options.strongMode) {
return new Dart1MethodTypeVariableType(
elementMap.getTypeVariable(node.parameter));
}
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index a4a9011..37d97ef 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -564,11 +564,38 @@
abstract class FunctionData implements MemberData {
FunctionType getFunctionType(KernelToElementMap elementMap);
+ List<TypeVariableType> getFunctionTypeVariables(
+ KernelToElementMap elementMap);
+
void forEachParameter(KernelToElementMapForBuilding elementMap,
void f(DartType type, String name, ConstantValue defaultValue));
}
-class FunctionDataImpl extends MemberDataImpl implements FunctionData {
+abstract class FunctionDataMixin implements FunctionData {
+ ir.FunctionNode get functionNode;
+ List<TypeVariableType> _typeVariables;
+
+ List<TypeVariableType> getFunctionTypeVariables(
+ covariant KernelToElementMapBase elementMap) {
+ if (_typeVariables == null) {
+ if (functionNode.typeParameters.isEmpty ||
+ !elementMap.options.strongMode) {
+ _typeVariables = const <TypeVariableType>[];
+ } else {
+ _typeVariables = functionNode.typeParameters
+ .map<TypeVariableType>((ir.TypeParameter typeParameter) {
+ return elementMap
+ .getDartType(new ir.TypeParameterType(typeParameter));
+ }).toList();
+ }
+ }
+ return _typeVariables;
+ }
+}
+
+class FunctionDataImpl extends MemberDataImpl
+ with FunctionDataMixin
+ implements FunctionData {
final ir.FunctionNode functionNode;
FunctionType _type;
diff --git a/pkg/compiler/lib/src/kernel/kernel_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
index 76b19b4..825c81f 100644
--- a/pkg/compiler/lib/src/kernel/kernel_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
@@ -51,6 +51,7 @@
CompilerOptions _options;
CompilerTask _compilerTask;
KernelToElementMapForImpactImpl _elementMap;
+ RuntimeTypesNeedBuilder _runtimeTypesNeedBuilder;
KernelAnnotationProcessor _annotationProcesser;
@@ -133,10 +134,13 @@
}
RuntimeTypesNeedBuilder createRuntimeTypesNeedBuilder() {
- return new RuntimeTypesNeedBuilderImpl(
- elementEnvironment, _elementMap.types);
+ return _runtimeTypesNeedBuilder ??=
+ new RuntimeTypesNeedBuilderImpl(elementEnvironment, _elementMap.types);
}
+ RuntimeTypesNeedBuilder get runtimeTypesNeedBuilderForTesting =>
+ _runtimeTypesNeedBuilder;
+
ResolutionWorldBuilder createResolutionWorldBuilder(
NativeBasicData nativeBasicData,
NativeDataBuilder nativeDataBuilder,
diff --git a/pkg/compiler/lib/src/parser/element_listener.dart b/pkg/compiler/lib/src/parser/element_listener.dart
index 1f516dc..d3d9476 100644
--- a/pkg/compiler/lib/src/parser/element_listener.dart
+++ b/pkg/compiler/lib/src/parser/element_listener.dart
@@ -414,6 +414,11 @@
buildFieldElement, beginToken, endToken, hasParseError);
}
+ @override
+ void handleInvalidTopLevelDeclaration(Token endToken) {
+ memberErrors = memberErrors.tail;
+ }
+
void buildFieldElements(
Modifiers modifiers,
NodeList variables,
diff --git a/pkg/compiler/lib/src/resolution/resolution_strategy.dart b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
index 1c4b55c..fd5efea 100644
--- a/pkg/compiler/lib/src/resolution/resolution_strategy.dart
+++ b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
@@ -58,6 +58,7 @@
final Compiler _compiler;
final _CompilerElementEnvironment _elementEnvironment;
final CommonElements commonElements;
+ RuntimeTypesNeedBuilder _runtimeTypesNeedBuilder;
AnnotationProcessor _annotationProcessor;
@@ -128,10 +129,14 @@
new MirrorsResolutionAnalysisImpl(backend, _compiler.resolution);
RuntimeTypesNeedBuilder createRuntimeTypesNeedBuilder() {
- return new ResolutionRuntimeTypesNeedBuilderImpl(
- elementEnvironment, dartTypes);
+ return _runtimeTypesNeedBuilder ??=
+ new ResolutionRuntimeTypesNeedBuilderImpl(
+ elementEnvironment, dartTypes);
}
+ RuntimeTypesNeedBuilder get runtimeTypesNeedBuilderForTesting =>
+ _runtimeTypesNeedBuilder;
+
ResolutionWorldBuilder createResolutionWorldBuilder(
NativeBasicData nativeBasicData,
NativeDataBuilder nativeDataBuilder,
@@ -349,7 +354,7 @@
}
}
return true;
- }, failedAt(currentElement, message));
+ }(), failedAt(currentElement, message));
}
return new SourceSpan.fromTokens(uri, begin, end);
}
@@ -730,6 +735,12 @@
}
@override
+ List<TypeVariableType> getFunctionTypeVariables(FunctionEntity function) {
+ throw new UnsupportedError(
+ "_CompilerElementEnvironment.getFunctionTypeVariables");
+ }
+
+ @override
DartType getFieldType(covariant FieldElement field) {
field.computeType(_resolution);
return field.type;
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 0f0724b..aae6afd 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -371,6 +371,34 @@
});
}
+ /// Extend current method parameters with parameters for the function type
+ /// variables.
+ ///
+ /// TODO(johnniwinther): Do we need this?
+ /// If the method has type variables but does not need them, bind to `dynamic`
+ /// (represented as `null`).
+ void _addFunctionTypeVariablesIfNeeded(MemberEntity member) {
+ if (member is! FunctionEntity) return;
+
+ List<TypeVariableType> typeVariables =
+ _elementMap.elementEnvironment.getFunctionTypeVariables(member);
+ if (typeVariables.isEmpty) {
+ return;
+ }
+ bool needsRti = rtiNeed.methodNeedsGenericRti(member);
+ typeVariables.forEach((TypeVariableType typeVariableType) {
+ HInstruction param;
+ if (needsRti) {
+ param = addParameter(typeVariableType.element, commonMasks.nonNullType);
+ } else {
+ // Unused, so bind to `dynamic`.
+ param = graph.addConstantNull(closedWorld);
+ }
+ localsHandler.directLocals[
+ localsHandler.getTypeVariableAsLocal(typeVariableType)] = param;
+ });
+ }
+
/// Builds a generative constructor.
///
/// Generative constructors are built in stages, in effect inlining the
@@ -1023,6 +1051,8 @@
open(block);
_addClassTypeVariablesIfNeeded(member);
+ _addFunctionTypeVariablesIfNeeded(member);
+
if (function != null) {
_potentiallyAddFunctionParameterTypeChecks(function);
}
@@ -2808,8 +2838,9 @@
/// Build argument list in canonical order for a static [target], including
/// filling in the default argument value.
- List<HInstruction> _visitArgumentsForStaticTarget(
- ir.FunctionNode target, ir.Arguments arguments) {
+ List<HInstruction> _visitArgumentsForStaticTarget(ir.FunctionNode target,
+ ir.Arguments arguments, SourceInformation sourceInformation,
+ {bool addFunctionTypeArguments: false}) {
// Visit arguments in source order, then re-order and fill in defaults.
var values = _visitPositionalArguments(arguments);
@@ -2848,6 +2879,9 @@
assert(arguments.named.isEmpty);
}
+ if (options.strongMode && addFunctionTypeArguments) {
+ _addTypeArguments(values, arguments, sourceInformation);
+ }
return values;
}
@@ -2883,7 +2917,9 @@
List<HInstruction> arguments = closedWorld.nativeData
.isJsInteropMember(function)
? _visitArgumentsForNativeStaticTarget(target.function, node.arguments)
- : _visitArgumentsForStaticTarget(target.function, node.arguments);
+ : _visitArgumentsForStaticTarget(
+ target.function, node.arguments, sourceInformation,
+ addFunctionTypeArguments: rtiNeed.methodNeedsGenericRti(function));
// Error in the arguments provided. Do not process further.
if (arguments == null) {
@@ -3913,7 +3949,7 @@
return;
}
List<HInstruction> arguments = _visitArgumentsForStaticTarget(
- node.interfaceTarget.function, node.arguments);
+ node.interfaceTarget.function, node.arguments, sourceInformation);
_buildInvokeSuper(
_elementMap.getSelector(node),
_elementMap.getClass(_containingClass(node)),
@@ -4037,8 +4073,8 @@
// Native class generative constructors take a pre-constructed object.
arguments.add(graph.addConstantNull(closedWorld));
}
- arguments.addAll(
- _visitArgumentsForStaticTarget(target.function, node.arguments));
+ arguments.addAll(_visitArgumentsForStaticTarget(
+ target.function, node.arguments, sourceInformation));
if (commonElements.isSymbolConstructor(constructor)) {
constructor = commonElements.symbolValidatedConstructor;
}
@@ -4636,6 +4672,14 @@
localsHandler.getTypeVariableAsLocal(typeVariable), argument);
});
}
+ if (rtiNeed.methodNeedsGenericRti(function) && options.strongMode) {
+ for (TypeVariableType typeVariable in _elementMap.elementEnvironment
+ .getFunctionTypeVariables(function)) {
+ HInstruction argument = compiledArguments[argumentIndex++];
+ localsHandler.updateLocal(
+ localsHandler.getTypeVariableAsLocal(typeVariable), argument);
+ }
+ }
assert(argumentIndex == compiledArguments.length);
_returnType =
diff --git a/pkg/compiler/lib/src/ssa/switch_continue_analysis.dart b/pkg/compiler/lib/src/ssa/switch_continue_analysis.dart
index e11b8f4..1efc255 100644
--- a/pkg/compiler/lib/src/ssa/switch_continue_analysis.dart
+++ b/pkg/compiler/lib/src/ssa/switch_continue_analysis.dart
@@ -95,7 +95,6 @@
bool defaultStatement(ir.Statement node) {
if (node is ir.ExpressionStatement ||
node is ir.EmptyStatement ||
- node is ir.InvalidStatement ||
node is ir.BreakStatement ||
node is ir.ReturnStatement ||
node is ir.AssertStatement ||
diff --git a/pkg/compiler/lib/src/ssa/type_builder.dart b/pkg/compiler/lib/src/ssa/type_builder.dart
index 6d7945c..c005b86 100644
--- a/pkg/compiler/lib/src/ssa/type_builder.dart
+++ b/pkg/compiler/lib/src/ssa/type_builder.dart
@@ -102,7 +102,8 @@
TypeVariableType type, MemberEntity member,
{SourceInformation sourceInformation}) {
assert(assertTypeInContext(type));
- if (type.element.typeDeclaration is! ClassEntity) {
+ if (type.element.typeDeclaration is! ClassEntity &&
+ !builder.options.strongMode) {
// GENERIC_METHODS: We currently don't reify method type variables.
return builder.graph.addConstantNull(builder.closedWorld);
}
@@ -121,8 +122,12 @@
.readLocal(typeVariableLocal, sourceInformation: sourceInformation);
}
- ClassTypeVariableAccess typeVariableAccess =
- computeTypeVariableAccess(member);
+ ClassTypeVariableAccess typeVariableAccess;
+ if (type.element.typeDeclaration is ClassEntity) {
+ typeVariableAccess = computeTypeVariableAccess(member);
+ } else {
+ typeVariableAccess = ClassTypeVariableAccess.parameter;
+ }
switch (typeVariableAccess) {
case ClassTypeVariableAccess.parameter:
return readAsParameter();
diff --git a/pkg/compiler/testing.json b/pkg/compiler/testing.json
index 2b05936..9a4b50d 100644
--- a/pkg/compiler/testing.json
+++ b/pkg/compiler/testing.json
@@ -15,6 +15,7 @@
"exclude": [
"^tests/compiler/dart2js/data/.*",
+ "^tests/compiler/dart2js/inference/data/super_invoke\\.dart",
"^tests/compiler/dart2js/path with spaces/.*"
]
}
diff --git a/pkg/compiler/testing_dart.json b/pkg/compiler/testing_dart.json
index 736a55f..3441f2a 100644
--- a/pkg/compiler/testing_dart.json
+++ b/pkg/compiler/testing_dart.json
@@ -48,6 +48,7 @@
"^tests/compiler/dart2js/serialization/equivalence_test\\.dart",
"^tests/compiler/dart2js/serialization/model_test_helper\\.dart",
"^tests/compiler/dart2js/serialization/test_helper\\.dart",
+ "^tests/compiler/dart2js/inference/data/super_invoke\\.dart",
"^tests/compiler/dart2js/inference/simple_inferrer_closure_test\\.dart",
"^tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test\\.dart",
"^tests/compiler/dart2js/inference/simple_inferrer_const_closure_test\\.dart",
diff --git a/pkg/dev_compiler/lib/src/analyzer/ast_builder.dart b/pkg/dev_compiler/lib/src/analyzer/ast_builder.dart
index 4e1fe71..ec7174d 100644
--- a/pkg/dev_compiler/lib/src/analyzer/ast_builder.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/ast_builder.dart
@@ -7,12 +7,9 @@
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/src/dart/ast/token.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
-import 'package:logging/logging.dart' as logger;
export 'package:analyzer/dart/ast/standard_ast_factory.dart';
-final _log = new logger.Logger('dev_compiler.ast_builder');
-
final ast = new AstBuilder();
class AstBuilder {
diff --git a/pkg/dev_compiler/lib/src/analyzer/context.dart b/pkg/dev_compiler/lib/src/analyzer/context.dart
index aa9d84b..8c6e135 100644
--- a/pkg/dev_compiler/lib/src/analyzer/context.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/context.dart
@@ -2,23 +2,25 @@
// 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 'package:args/args.dart' show ArgParser, ArgResults;
-import 'package:analyzer/src/command_line/arguments.dart';
import 'package:analyzer/file_system/file_system.dart'
show ResourceProvider, ResourceUriResolver;
import 'package:analyzer/file_system/physical_file_system.dart'
show PhysicalResourceProvider;
import 'package:analyzer/source/custom_resolver.dart';
import 'package:analyzer/source/package_map_resolver.dart';
+import 'package:analyzer/src/command_line/arguments.dart';
import 'package:analyzer/src/context/builder.dart';
import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
import 'package:analyzer/src/generated/source.dart'
show DartUriResolver, SourceFactory, UriResolver;
import 'package:analyzer/src/summary/package_bundle_reader.dart'
show InSummaryUriResolver, SummaryDataStore;
+import 'package:args/args.dart' show ArgParser, ArgResults;
import 'package:cli_util/cli_util.dart' show getSdkDir;
import 'package:path/path.dart' as path;
+// ignore_for_file: deprecated_member_use
+
/// Options used to set up Source URI resolution in the analysis context.
class AnalyzerOptions {
final ContextBuilderOptions contextBuilderOptions;
diff --git a/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart b/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart
index 11476a8..4192eb5 100644
--- a/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart
@@ -11,13 +11,10 @@
import 'package:analyzer/src/dart/element/type.dart' show DynamicTypeImpl;
import 'package:analyzer/src/generated/parser.dart' show ResolutionCopier;
import 'package:analyzer/src/task/strong/ast_properties.dart' as ast_properties;
-import 'package:logging/logging.dart' as logger;
import 'ast_builder.dart';
import 'element_helpers.dart' show isInlineJS;
-final _log = new logger.Logger('dev_compiler.reify_coercions');
-
// This class implements a pass which modifies (in place) the ast replacing
// abstract coercion nodes with their dart implementations.
class CoercionReifier extends analyzer.GeneralizingAstVisitor<Object> {
diff --git a/pkg/dev_compiler/lib/src/analyzer/source_map_printer.dart b/pkg/dev_compiler/lib/src/analyzer/source_map_printer.dart
index d2933f8..20d4a7b 100644
--- a/pkg/dev_compiler/lib/src/analyzer/source_map_printer.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/source_map_printer.dart
@@ -3,11 +3,12 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:collection';
+
import 'package:analyzer/dart/ast/ast.dart'
show AstNode, CompilationUnit, Identifier;
import 'package:analyzer/dart/element/element.dart'
show Element, CompilationUnitElement;
-import 'package:analyzer/src/generated/source.dart' show LineInfo, Source;
+import 'package:analyzer/src/generated/source.dart' show LineInfo;
import 'package:source_maps/source_maps.dart' hide Printer;
import 'package:source_span/source_span.dart' show SourceLocation;
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index c25dd88..1d5f990 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -32,7 +32,7 @@
{fe.InitializedCompilerState compilerState}) async {
try {
return await _compile(args, compilerState: compilerState);
- } catch (error) {
+ } catch (error, stackTrace) {
print('''
We're sorry, you've found a bug in our compiler.
You can report this bug at:
@@ -42,6 +42,9 @@
-------------------- %< --------------------
$_binaryName arguments: ${args.join(' ')}
dart --version: ${Platform.version}
+
+$error
+$stackTrace
''');
rethrow;
}
@@ -53,6 +56,7 @@
'Usage: $_binaryName [options...] <sources...>\n\n'
'${ddcArgParser.usage}';
+/// Resolve [s] as a URI, possibly relative to the current directory.
Uri stringToUri(String s, {bool windows}) {
windows ??= Platform.isWindows;
if (windows) {
@@ -67,6 +71,32 @@
return result;
}
+/// Resolve [s] as a URI, and if the URI is a uri under a directory in [roots],
+/// then return a custom URI containing only the subpath from that root and the
+/// provided [scheme]. For example,
+///
+/// stringToCustomUri('a/b/c.dart', [Uri.base.resolve('a/')], 'foo')
+///
+/// returns:
+///
+/// foo:/b/c.dart
+///
+/// This is used to create machine agnostic URIs both for input files and for
+/// summaries. We do so for input files to ensure we don't leak any
+/// user-specific paths into non-package library names, and we do so for input
+/// summaries to be able to easily derive a module name from the summary path.
+Uri stringToCustomUri(String s, List<Uri> roots, String scheme) {
+ Uri resolvedUri = stringToUri(s);
+ if (resolvedUri.scheme != 'file') return resolvedUri;
+ for (var root in roots) {
+ if (resolvedUri.path.startsWith(root.path)) {
+ var path = resolvedUri.path.substring(root.path.length);
+ return Uri.parse('$scheme:///$path');
+ }
+ }
+ return resolvedUri;
+}
+
class CompilerResult {
final fe.InitializedCompilerState compilerState;
final bool result;
@@ -86,8 +116,13 @@
..addOption('dart-sdk-summary',
help: 'The path to the Dart SDK summary file.', hide: true)
..addOption('summary',
- abbr: 's', help: 'summaries to link to', allowMultiple: true)
- ..addFlag('source-map', help: 'emit source mapping', defaultsTo: true);
+ abbr: 's',
+ help: 'path to a summary of a transitive dependency of this module.\n'
+ 'This path should be under a provided summary-input-dir',
+ allowMultiple: true)
+ ..addFlag('source-map', help: 'emit source mapping', defaultsTo: true)
+ ..addOption('summary-input-dir', allowMultiple: true)
+ ..addOption('custom-app-scheme', defaultsTo: 'org-dartlang-app');
addModuleFormatOptions(argParser, singleOutFile: false);
@@ -102,8 +137,20 @@
var moduleFormat = parseModuleFormatOption(argResults).first;
var ddcPath = path.dirname(path.dirname(path.fromUri(Platform.script)));
- var summaryUris =
- (argResults['summary'] as List<String>).map(stringToUri).toList();
+ var multiRoots = [];
+ for (var s in argResults['summary-input-dir']) {
+ var uri = stringToUri(s);
+ if (!uri.path.endsWith('/')) {
+ uri = uri.replace(path: '${uri.path}/');
+ }
+ multiRoots.add(uri);
+ }
+ multiRoots.add(Uri.base);
+
+ var customScheme = argResults['custom-app-scheme'];
+ var summaryUris = argResults['summary']
+ .map((s) => stringToCustomUri(s, multiRoots, customScheme))
+ .toList();
var sdkSummaryPath = argResults['dart-sdk-summary'] ??
path.absolute(ddcPath, 'gen', 'sdk', 'ddc_sdk.dill');
@@ -111,7 +158,9 @@
var packageFile =
argResults['packages'] ?? path.absolute(ddcPath, '..', '..', '.packages');
- var inputs = argResults.rest.map(stringToUri).toList();
+ var inputs = argResults.rest
+ .map((s) => stringToCustomUri(s, [Uri.base], customScheme))
+ .toList();
var succeeded = true;
void errorHandler(fe.CompilationMessage error) {
@@ -129,16 +178,13 @@
// lib folder). The following [FileSystem] will resolve those references to
// the correct location and keeps the real file location hidden from the
// front end.
- // TODO(sigmund): technically we don't need a "multi-root" file system,
- // because we are providing a single root, the alternative here is to
- // implement a new file system with a single root instead.
var fileSystem = new MultiRootFileSystem(
- 'org-dartlang-app', [Uri.base], PhysicalFileSystem.instance);
+ customScheme, multiRoots, PhysicalFileSystem.instance);
compilerState = await fe.initializeCompiler(
compilerState,
- path.toUri(sdkSummaryPath),
- path.toUri(packageFile),
+ stringToUri(sdkSummaryPath),
+ stringToUri(packageFile),
summaryUris,
new DevCompilerTarget(),
fileSystem: fileSystem);
@@ -161,7 +207,8 @@
var jsCode = jsProgramToCode(jsModule, moduleFormat,
buildSourceMap: argResults['source-map'],
jsUrl: path.toUri(output).toString(),
- mapUrl: path.toUri(output + '.map').toString());
+ mapUrl: path.toUri(output + '.map').toString(),
+ customScheme: customScheme);
file.writeAsStringSync(jsCode.code);
if (jsCode.sourceMap != null) {
@@ -199,7 +246,10 @@
}
JSCode jsProgramToCode(JS.Program moduleTree, ModuleFormat format,
- {bool buildSourceMap: false, String jsUrl, String mapUrl}) {
+ {bool buildSourceMap: false,
+ String jsUrl,
+ String mapUrl,
+ String customScheme}) {
var opts = new JS.JavaScriptPrintingOptions(
allowKeywordsInProperties: true, allowSingleLineIfStatements: true);
var printer;
@@ -218,8 +268,8 @@
Map builtMap;
if (buildSourceMap && sourceMap != null) {
- builtMap =
- placeSourceMap(sourceMap.build(jsUrl), mapUrl, <String, String>{});
+ builtMap = placeSourceMap(
+ sourceMap.build(jsUrl), mapUrl, <String, String>{}, customScheme);
var jsDir = path.dirname(path.fromUri(jsUrl));
var relative = path.relative(path.fromUri(mapUrl), from: jsDir);
var relativeMapUrl = path.toUri(relative).toString();
@@ -239,18 +289,23 @@
/// and returns the new map. Relative paths are in terms of URIs ('/'), not
/// local OS paths (e.g., windows '\').
// TODO(jmesserly): find a new home for this.
-Map placeSourceMap(
- Map sourceMap, String sourceMapPath, Map<String, String> bazelMappings) {
+// TODO(sigmund): delete bazelMappings - customScheme should be used instead.
+Map placeSourceMap(Map sourceMap, String sourceMapPath,
+ Map<String, String> bazelMappings, String customScheme) {
var map = new Map.from(sourceMap);
// Convert to a local file path if it's not.
- sourceMapPath = path.fromUri(_sourceToUri(sourceMapPath));
+ sourceMapPath = path.fromUri(_sourceToUri(sourceMapPath, customScheme));
var sourceMapDir = path.dirname(path.absolute(sourceMapPath));
var list = new List.from(map['sources']);
map['sources'] = list;
String makeRelative(String sourcePath) {
- var uri = _sourceToUri(sourcePath);
- if (uri.scheme == 'dart' || uri.scheme == 'package') return sourcePath;
+ var uri = _sourceToUri(sourcePath, customScheme);
+ if (uri.scheme == 'dart' ||
+ uri.scheme == 'package' ||
+ uri.scheme == customScheme) {
+ return sourcePath;
+ }
// Convert to a local file path if it's not.
sourcePath = path.absolute(path.fromUri(uri));
@@ -276,20 +331,19 @@
/// This was copied from module_compiler.dart.
/// Convert a source string to a Uri. The [source] may be a Dart URI, a file
/// URI, or a local win/mac/linux path.
-Uri _sourceToUri(String source) {
+Uri _sourceToUri(String source, customScheme) {
var uri = Uri.parse(source);
var scheme = uri.scheme;
- switch (scheme) {
- case "dart":
- case "package":
- case "file":
- // A valid URI.
- return uri;
- default:
- // Assume a file path.
- // TODO(jmesserly): shouldn't this be `path.toUri(path.absolute)`?
- return new Uri.file(path.absolute(source));
+ if (scheme == "dart" ||
+ scheme == "package" ||
+ scheme == "file" ||
+ scheme == customScheme) {
+ // A valid URI.
+ return uri;
}
+ // Assume a file path.
+ // TODO(jmesserly): shouldn't this be `path.toUri(path.absolute)`?
+ return new Uri.file(path.absolute(source));
}
/// Parses Dart's non-standard `-Dname=value` syntax for declared variables,
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 6e97625..024bcb1 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -4,14 +4,15 @@
import 'dart:collection';
import 'dart:math' show max, min;
-import 'package:kernel/kernel.dart' hide ConstantVisitor;
+
+import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart';
import 'package:kernel/class_hierarchy.dart';
import 'package:kernel/core_types.dart';
+import 'package:kernel/kernel.dart' hide ConstantVisitor;
+import 'package:kernel/src/incremental_class_hierarchy.dart';
import 'package:kernel/type_algebra.dart';
import 'package:kernel/type_environment.dart';
-import 'package:kernel/src/incremental_class_hierarchy.dart';
-import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart';
-import 'package:path/path.dart' as path;
+
import '../compiler/js_names.dart' as JS;
import '../compiler/js_utils.dart' as JS;
import '../compiler/module_builder.dart' show pathToJSIdentifier;
@@ -340,7 +341,13 @@
// TODO(jmesserly): look up the appropriate relative import path if the user
// specified that on the command line.
var uri = _summaryToUri[summary];
- var moduleName = path.basenameWithoutExtension(path.fromUri(uri));
+ var summaryPath = uri.path;
+ var extensionIndex = summaryPath.lastIndexOf('.');
+ // Note: These URIs do not contain absolute paths from the physical file
+ // system, but only the relevant path within a user's project. This path
+ // will match the path where the .js file is generated, so we use it as
+ // the module name.
+ var moduleName = summaryPath.substring(1, extensionIndex);
return moduleName;
}
@@ -3000,9 +3007,6 @@
defaultStatement(Statement node) => _emitInvalidNode(node).toStatement();
@override
- visitInvalidStatement(InvalidStatement node) => defaultStatement(node);
-
- @override
visitExpressionStatement(ExpressionStatement node) =>
_visitAndMarkExpression(node.expression).toStatement();
@@ -4763,6 +4767,11 @@
}
@override
+ visitInstantiation(Instantiation node) {
+ return defaultExpression(node);
+ }
+
+ @override
visitLoadLibrary(LoadLibrary node) => _callHelper('loadLibrary()');
// TODO(jmesserly): DDC loads all libraries eagerly.
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 3fb3927..cb4f95b 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -70,7 +70,7 @@
Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
String name, Arguments arguments, int offset, bool isSuper) {
// TODO(sigmund): implement;
- return new InvalidExpression();
+ return new InvalidExpression(null);
}
@override
@@ -87,6 +87,6 @@
bool isConstructor: false,
bool isTopLevel: false}) {
// TODO(sigmund): implement;
- return new InvalidExpression();
+ return new InvalidExpression(null);
}
}
diff --git a/pkg/dev_compiler/test/codegen_test.dart b/pkg/dev_compiler/test/codegen_test.dart
index 9dabf3a..6e270c9 100644
--- a/pkg/dev_compiler/test/codegen_test.dart
+++ b/pkg/dev_compiler/test/codegen_test.dart
@@ -168,7 +168,9 @@
// some static error is produced.
var intentionalCompileError =
(contents.contains(': compile-time error') ||
- contents.contains('/*@compile-error=')) &&
+ // Use adjacent strings so test.dart doesn't match this line
+ // as an expected compile error.
+ contents.contains('/*@' 'compile-error=')) &&
!status.contains(Expectation.missingCompileTimeError);
var crashing = status.contains(Expectation.crash);
diff --git a/pkg/front_end/lib/src/api_unstable/summary_worker.dart b/pkg/front_end/lib/src/api_unstable/summary_worker.dart
index 33c09af..b34fc82 100644
--- a/pkg/front_end/lib/src/api_unstable/summary_worker.dart
+++ b/pkg/front_end/lib/src/api_unstable/summary_worker.dart
@@ -56,6 +56,6 @@
processedOpts.inputs.addAll(inputs);
var result = await generateKernel(processedOpts,
- buildSummary: true, buildProgram: false);
+ buildSummary: true, buildProgram: false, truncateSummary: true);
return result?.summary;
}
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index 7a77519..dbbc106 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -174,6 +174,14 @@
int finishTypeVariables(ClassBuilder object) => 0;
+ /// This method instantiates type parameters to their bounds in some cases
+ /// where they were omitted by the programmer and not provided by the type
+ /// inference. The method returns the number of distinct type variables
+ /// that were instantiated in this library.
+ int instantiateToBound(TypeBuilder dynamicType, ClassBuilder objectClass) {
+ return 0;
+ }
+
void becomeCoreLibrary(dynamicType) {
if (scope.local["dynamic"] == null) {
addBuilder("dynamic",
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index 35c1851..eca2778 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -17,7 +17,7 @@
abstract class NamedTypeBuilder<T extends TypeBuilder, R> extends TypeBuilder {
final Object name;
- final List<T> arguments;
+ List<T> arguments;
TypeDeclarationBuilder<T, R> builder;
diff --git a/pkg/front_end/lib/src/fasta/dill/built_type_builder.dart b/pkg/front_end/lib/src/fasta/dill/built_type_builder.dart
new file mode 100644
index 0000000..2117d24
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/dill/built_type_builder.dart
@@ -0,0 +1,38 @@
+// 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 file.
+
+library fasta.built_type_builder;
+
+import 'package:kernel/ast.dart' show DartType, Supertype;
+
+import '../kernel/kernel_builder.dart' show KernelTypeBuilder, LibraryBuilder;
+
+import '../problems.dart' show unimplemented;
+
+class BuiltTypeBuilder extends KernelTypeBuilder {
+ final DartType builtType;
+
+ BuiltTypeBuilder(this.builtType);
+
+ DartType build(LibraryBuilder library) => builtType;
+
+ Supertype buildSupertype(
+ LibraryBuilder library, int charOffset, Uri fileUri) {
+ return unimplemented("buildSupertype", -1, null);
+ }
+
+ buildInvalidType(int charOffset, Uri fileUri) {
+ return unimplemented("buildInvalidType", -1, null);
+ }
+
+ String get debugName => "BuiltTypeBuilder";
+
+ StringBuffer printOn(StringBuffer buffer) {
+ return buffer..write(builtType.toString());
+ }
+
+ String get name {
+ return unimplemented("name", -1, null);
+ }
+}
diff --git a/pkg/front_end/lib/src/fasta/dill/built_type_variable_builder.dart b/pkg/front_end/lib/src/fasta/dill/built_type_variable_builder.dart
new file mode 100644
index 0000000..0776650
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/dill/built_type_variable_builder.dart
@@ -0,0 +1,44 @@
+// 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 file.
+
+library fasta.built_type_variable_builder;
+
+import 'package:kernel/ast.dart'
+ show DartType, TypeParameter, TypeParameterType;
+
+import '../kernel/kernel_builder.dart'
+ show
+ TypeVariableBuilder,
+ KernelTypeBuilder,
+ LibraryBuilder,
+ KernelNamedTypeBuilder,
+ KernelLibraryBuilder;
+
+class BuiltTypeVariableBuilder
+ extends TypeVariableBuilder<KernelTypeBuilder, DartType> {
+ final TypeParameter builtTypeParameter;
+
+ TypeParameter get target => builtTypeParameter;
+
+ BuiltTypeVariableBuilder(String name, this.builtTypeParameter,
+ KernelLibraryBuilder compilationUnit, int charOffset,
+ [KernelTypeBuilder bound])
+ : super(name, bound, compilationUnit, charOffset);
+
+ DartType buildType(
+ LibraryBuilder library, List<KernelTypeBuilder> arguments) {
+ // TODO(dmitryas): Do we need a check for [arguments] here?
+ return new TypeParameterType(builtTypeParameter);
+ }
+
+ DartType buildTypesWithBuiltArguments(
+ LibraryBuilder library, List<DartType> arguments) {
+ // TODO(dmitryas): Do we need a check for [arguments] here?
+ return new TypeParameterType(builtTypeParameter);
+ }
+
+ KernelTypeBuilder asTypeBuilder() {
+ return new KernelNamedTypeBuilder(name, null)..bind(this);
+ }
+}
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index 455d2f7..8605dcb 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -1,15 +1,22 @@
-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
+// 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 file.
library fasta.dill_class_builder;
-import 'package:kernel/ast.dart' show Class, Member;
+import 'package:kernel/ast.dart' show Class, Member, TypeParameter, DartType;
+
+import 'package:kernel/type_algebra.dart' show calculateBounds;
import '../problems.dart' show unimplemented;
import '../kernel/kernel_builder.dart'
- show MemberBuilder, KernelClassBuilder, KernelTypeBuilder, Scope;
+ show
+ MemberBuilder,
+ KernelClassBuilder,
+ KernelTypeBuilder,
+ Scope,
+ TypeVariableBuilder;
import '../modifier.dart' show abstractMask;
@@ -17,6 +24,10 @@
import 'dill_library_builder.dart' show DillLibraryBuilder;
+import 'built_type_variable_builder.dart' show BuiltTypeVariableBuilder;
+
+import 'built_type_builder.dart' show BuiltTypeBuilder;
+
class DillClassBuilder extends KernelClassBuilder {
final Class cls;
@@ -51,6 +62,24 @@
}
}
+ List<TypeVariableBuilder> get typeVariables {
+ DillLibraryBuilder parentLibraryBuilder = parent;
+ DillClassBuilder objectClassBuilder =
+ parentLibraryBuilder.loader.coreLibrary["Object"];
+ Class objectClass = objectClassBuilder.cls;
+ List<TypeParameter> targetTypeParameters = target.typeParameters;
+ List<DartType> calculatedBounds =
+ calculateBounds(targetTypeParameters, objectClass);
+ List<TypeVariableBuilder> typeVariables =
+ new List<BuiltTypeVariableBuilder>(targetTypeParameters.length);
+ for (int i = 0; i < typeVariables.length; i++) {
+ TypeParameter parameter = targetTypeParameters[i];
+ typeVariables[i] = new BuiltTypeVariableBuilder(parameter.name, parameter,
+ null, charOffset, new BuiltTypeBuilder(calculatedBounds[i]));
+ }
+ return typeVariables;
+ }
+
/// Returns true if this class is the result of applying a mixin to its
/// superclass.
bool get isMixinApplication => cls.isMixinApplication;
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_typedef_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_typedef_builder.dart
index d73fe7b..66b097c 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_typedef_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_typedef_builder.dart
@@ -4,7 +4,9 @@
library fasta.dill_typedef_builder;
-import 'package:kernel/ast.dart' show DartType, Typedef;
+import 'package:kernel/ast.dart' show DartType, Typedef, TypeParameter, Class;
+
+import 'package:kernel/type_algebra.dart' show calculateBounds;
import '../kernel/kernel_builder.dart'
show
@@ -18,6 +20,12 @@
import 'dill_library_builder.dart' show DillLibraryBuilder;
+import 'dill_class_builder.dart' show DillClassBuilder;
+
+import 'built_type_variable_builder.dart' show BuiltTypeVariableBuilder;
+
+import 'built_type_builder.dart' show BuiltTypeBuilder;
+
class DillFunctionTypeAliasBuilder extends KernelFunctionTypeAliasBuilder {
DillFunctionTypeAliasBuilder(Typedef typedef, DillLibraryBuilder parent)
: super(null, typedef.name, null, null, parent, typedef.fileOffset,
@@ -29,7 +37,21 @@
@override
List<TypeVariableBuilder> get typeVariables {
- return unimplemented("typeVariables", -1, null);
+ DillLibraryBuilder parentLibraryBuilder = parent;
+ DillClassBuilder objectClassBuilder =
+ parentLibraryBuilder.loader.coreLibrary["Object"];
+ Class objectClass = objectClassBuilder.cls;
+ List<TypeParameter> targetTypeParameters = target.typeParameters;
+ List<DartType> calculatedBounds =
+ calculateBounds(targetTypeParameters, objectClass);
+ List<TypeVariableBuilder> typeVariables =
+ new List<BuiltTypeVariableBuilder>(targetTypeParameters.length);
+ for (int i = 0; i < typeVariables.length; i++) {
+ TypeParameter parameter = targetTypeParameters[i];
+ typeVariables[i] = new BuiltTypeVariableBuilder(parameter.name, parameter,
+ null, charOffset, new BuiltTypeBuilder(calculatedBounds[i]));
+ }
+ return typeVariables;
}
@override
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index dad91b9..f84087b 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -1064,6 +1064,7 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messageEmptyNamedParameterList = const MessageCode(
"EmptyNamedParameterList",
+ analyzerCode: "MISSING_IDENTIFIER",
dart2jsCode: "EMPTY_NAMED_PARAMETER_LIST",
message: r"""Named parameter lists cannot be empty.""",
tip: r"""Try adding a named parameter to the list.""");
@@ -1075,6 +1076,7 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messageEmptyOptionalParameterList = const MessageCode(
"EmptyOptionalParameterList",
+ analyzerCode: "MISSING_IDENTIFIER",
dart2jsCode: "EMPTY_OPTIONAL_PARAMETER_LIST",
message: r"""Optional parameter lists cannot be empty.""",
tip: r"""Try adding an optional parameter to the list.""");
@@ -3278,10 +3280,8 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Message Function(String name)> codeNotAType =
- const Code<Message Function(String name)>(
- "NotAType",
- templateNotAType,
-);
+ const Code<Message Function(String name)>("NotAType", templateNotAType,
+ analyzerCode: "NOT_A_TYPE");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsNotAType(String name) {
@@ -3543,6 +3543,97 @@
const Template<
Message Function(
String name,
+ String name2,
+ DartType _type,
+ DartType
+ _type2)> templateOverrideTypeMismatchParameter = const Template<
+ Message Function(String name, String name2, DartType _type,
+ DartType _type2)>(
+ messageTemplate:
+ r"""The parameter '#name' of the method '#name2' has type #type, which does not match the corresponding type in the overridden method (#type2).""",
+ tipTemplate:
+ r"""Change to a supertype of #type2 (or, for a covariant parameter, a subtype).""",
+ withArguments: _withArgumentsOverrideTypeMismatchParameter);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<
+ Message Function(
+ String name, String name2, DartType _type, DartType _type2)>
+ codeOverrideTypeMismatchParameter = const Code<
+ Message Function(
+ String name, String name2, DartType _type, DartType _type2)>(
+ "OverrideTypeMismatchParameter", templateOverrideTypeMismatchParameter,
+ analyzerCode: "INVALID_METHOD_OVERRIDE", dart2jsCode: "*ignored*");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsOverrideTypeMismatchParameter(
+ String name, String name2, DartType _type, DartType _type2) {
+ NameSystem nameSystem = new NameSystem();
+ StringBuffer buffer = new StringBuffer();
+ new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
+ String type = '$buffer';
+
+ buffer = new StringBuffer();
+ new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
+ String type2 = '$buffer';
+
+ return new Message(codeOverrideTypeMismatchParameter,
+ message:
+ """The parameter '$name' of the method '$name2' has type $type, which does not match the corresponding type in the overridden method ($type2).""",
+ tip: """Change to a supertype of $type2 (or, for a covariant parameter, a subtype).""",
+ arguments: {
+ 'name': name,
+ 'name2': name2,
+ 'type': _type,
+ 'type2': _type2
+ });
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+ Message Function(
+ String name,
+ DartType _type,
+ DartType
+ _type2)> templateOverrideTypeMismatchReturnType = const Template<
+ Message Function(String name, DartType _type, DartType _type2)>(
+ messageTemplate:
+ r"""The return type of the method '#name' is #type, which does not match the return type of the overridden method (#type2).""",
+ tipTemplate: r"""Change to a subtype of #type2.""",
+ withArguments: _withArgumentsOverrideTypeMismatchReturnType);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, DartType _type, DartType _type2)>
+ codeOverrideTypeMismatchReturnType =
+ const Code<Message Function(String name, DartType _type, DartType _type2)>(
+ "OverrideTypeMismatchReturnType",
+ templateOverrideTypeMismatchReturnType,
+ analyzerCode: "INVALID_METHOD_OVERRIDE",
+ dart2jsCode: "*ignored*");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsOverrideTypeMismatchReturnType(
+ String name, DartType _type, DartType _type2) {
+ NameSystem nameSystem = new NameSystem();
+ StringBuffer buffer = new StringBuffer();
+ new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
+ String type = '$buffer';
+
+ buffer = new StringBuffer();
+ new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
+ String type2 = '$buffer';
+
+ return new Message(codeOverrideTypeMismatchReturnType,
+ message:
+ """The return type of the method '$name' is $type, which does not match the return type of the overridden method ($type2).""",
+ tip: """Change to a subtype of $type2.""",
+ arguments: {'name': name, 'type': _type, 'type2': _type2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+ Message Function(
+ String name,
String
name2)> templateOverrideTypeVariablesMismatch = const Template<
Message Function(String name, String name2)>(
@@ -4251,9 +4342,8 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Message Function(String name)> codeSuperclassHasNoMethod =
const Code<Message Function(String name)>(
- "SuperclassHasNoMethod",
- templateSuperclassHasNoMethod,
-);
+ "SuperclassHasNoMethod", templateSuperclassHasNoMethod,
+ analyzerCode: "UNDEFINED_SUPER_METHOD");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsSuperclassHasNoMethod(String name) {
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 d960ce9..6184d00 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -4,8 +4,9 @@
library fasta.body_builder;
-import 'package:kernel/ast.dart'
- hide InvalidExpression, InvalidInitializer, InvalidStatement;
+import 'package:kernel/ast.dart' hide InvalidExpression, InvalidInitializer;
+
+import 'package:kernel/type_algebra.dart' show instantiateToBounds;
import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
@@ -1715,6 +1716,8 @@
typeArgument = null;
warningNotError(fasta.messageListLiteralTooManyTypeArguments,
beginToken.charOffset);
+ } else {
+ typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass);
}
}
bool isConst = constKeyword != null;
@@ -1763,8 +1766,9 @@
warningNotError(fasta.messageListLiteralTypeArgumentMismatch,
beginToken.charOffset);
} else {
- keyType = typeArguments[0];
- valueType = typeArguments[1];
+ keyType = instantiateToBounds(typeArguments[0], coreTypes.objectClass);
+ valueType =
+ instantiateToBounds(typeArguments[1], coreTypes.objectClass);
}
}
@@ -2316,7 +2320,8 @@
var prefix = type[0];
identifier = type[1];
if (prefix is PrefixBuilder) {
- type = scopeLookup(prefix.exportScope, identifier.name, start,
+ type = scopeLookup(
+ prefix.exportScope, identifier.name, identifier.token,
isQualified: true, prefix: prefix);
identifier = null;
} else if (prefix is TypeDeclarationAccessor) {
@@ -2364,7 +2369,8 @@
return deprecated_buildCompileTimeError(
"Not a const constructor.", charOffset);
}
- return new ShadowConstructorInvocation(target, initialTarget, arguments,
+ return new ShadowConstructorInvocation(
+ prefixName, target, initialTarget, arguments,
isConst: isConst)
..fileOffset = charOffset;
} else {
@@ -2374,7 +2380,7 @@
"Not a const factory.", charOffset);
} else if (procedure.isFactory) {
return new ShadowFactoryConstructorInvocation(
- target, initialTarget, arguments,
+ prefixName, target, initialTarget, arguments,
isConst: isConst)
..fileOffset = charOffset;
} else {
@@ -2459,11 +2465,18 @@
ShadowArguments arguments = pop();
String name = pop();
List<DartType> typeArguments = pop();
+
+ String prefixName;
var type = pop();
if (type is TypeDeclarationAccessor) {
TypeDeclarationAccessor accessor = type;
+ if (accessor.prefix != null) {
+ prefixName = accessor.prefix.name;
+ nameToken = nameToken.next.next;
+ }
type = accessor.declaration;
}
+
bool savedConstantExpressionRequired = pop();
() {
if (arguments == null) {
@@ -2538,6 +2551,7 @@
push(buildStaticInvocation(target, arguments,
isConst: optional("const", token) || optional("@", token),
charOffset: nameToken.charOffset,
+ prefixName: prefixName,
initialTarget: initialTarget));
return;
} else {
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 40d70e2..2dc4f3b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -4,8 +4,7 @@
library fasta.fasta_accessors;
-import 'package:kernel/ast.dart'
- hide InvalidExpression, InvalidInitializer, InvalidStatement;
+import 'package:kernel/ast.dart' hide InvalidExpression, InvalidInitializer;
import '../../scanner/token.dart' show Token;
@@ -1099,6 +1098,7 @@
}
accessor = new StaticAccessor.fromBuilder(
helper, builder, send.token, setter,
+ prefix: prefix,
targetOffset: declarationReferenceOffset,
targetClass: declaration.target);
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index f261875..98a27ca 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -4,6 +4,7 @@
library fasta.kernel_class_builder;
+import 'package:front_end/src/fasta/fasta_codes.dart';
import 'package:kernel/ast.dart'
show
Class,
@@ -20,10 +21,16 @@
ProcedureKind,
StaticGet,
Supertype,
+ TypeParameter,
+ TypeParameterType,
VariableDeclaration;
import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
+import 'package:kernel/type_algebra.dart' show Substitution;
+
+import 'package:kernel/type_environment.dart' show TypeEnvironment;
+
import '../dill/dill_member_builder.dart' show DillMemberBuilder;
import '../fasta_codes.dart'
@@ -37,6 +44,8 @@
templateOverrideFewerPositionalArguments,
templateOverrideMismatchNamedParameter,
templateOverrideMoreRequiredArguments,
+ templateOverrideTypeMismatchParameter,
+ templateOverrideTypeMismatchReturnType,
templateOverrideTypeVariablesMismatch,
templateRedirectionTargetNotFound;
@@ -202,38 +211,46 @@
.add(new StaticGet(constructor.target)..parent = literal);
}
- void checkOverrides(ClassHierarchy hierarchy) {
- hierarchy.forEachOverridePair(cls, checkOverride);
- }
-
- void checkOverride(
- Member declaredMember, Member interfaceMember, bool isSetter) {
- if (declaredMember is Constructor || interfaceMember is Constructor) {
- unimplemented(
- "Constructor in override check.", declaredMember.fileOffset, fileUri);
- }
- if (declaredMember is Procedure && interfaceMember is Procedure) {
- if (declaredMember.kind == ProcedureKind.Method &&
- interfaceMember.kind == ProcedureKind.Method) {
- checkMethodOverride(declaredMember, interfaceMember);
+ void checkOverrides(
+ ClassHierarchy hierarchy, TypeEnvironment typeEnvironment) {
+ hierarchy.forEachOverridePair(cls,
+ (Member declaredMember, Member interfaceMember, bool isSetter) {
+ if (declaredMember is Constructor || interfaceMember is Constructor) {
+ unimplemented("Constructor in override check.",
+ declaredMember.fileOffset, fileUri);
}
- }
- // TODO(ahe): Handle other cases: accessors, operators, and fields.
+ if (declaredMember is Procedure && interfaceMember is Procedure) {
+ if (declaredMember.kind == ProcedureKind.Method &&
+ interfaceMember.kind == ProcedureKind.Method) {
+ checkMethodOverride(
+ hierarchy, typeEnvironment, declaredMember, interfaceMember);
+ }
+ }
+ // TODO(ahe): Handle other cases: accessors, operators, and fields.
+ });
}
- void checkMethodOverride(
- Procedure declaredMember, Procedure interfaceMember) {
- if (declaredMember.enclosingClass != cls) {
- // TODO(ahe): Include these checks as well, but the message needs to
- // explain that [declaredMember] is inherited.
- return;
+ Uri _getMemberUri(Member member) {
+ if (member is Field) return member.fileUri;
+ if (member is Procedure) return member.fileUri;
+ // Other member types won't be seen because constructors don't participate
+ // in override relationships
+ return unhandled('${member.runtimeType}', '_getMemberUri', -1, null);
+ }
+
+ Substitution _computeInterfaceSubstitution(
+ ClassHierarchy hierarchy,
+ Member declaredMember,
+ Member interfaceMember,
+ FunctionNode declaredFunction,
+ FunctionNode interfaceFunction) {
+ Substitution interfaceSubstitution;
+ if (interfaceMember.enclosingClass.typeParameters.isNotEmpty) {
+ interfaceSubstitution = Substitution.fromSupertype(
+ hierarchy.getClassAsInstanceOf(cls, interfaceMember.enclosingClass));
}
- assert(declaredMember.kind == ProcedureKind.Method);
- assert(interfaceMember.kind == ProcedureKind.Method);
- FunctionNode declaredFunction = declaredMember.function;
- FunctionNode interfaceFunction = interfaceMember.function;
- if (declaredFunction.typeParameters?.length !=
- interfaceFunction.typeParameters?.length) {
+ if (declaredFunction?.typeParameters?.length !=
+ interfaceFunction?.typeParameters?.length) {
addWarning(
templateOverrideTypeVariablesMismatch.withArguments(
"$name::${declaredMember.name.name}",
@@ -243,8 +260,106 @@
context: templateOverriddenMethodCause
.withArguments(interfaceMember.name.name)
.withLocation(
- interfaceMember.fileUri, interfaceMember.fileOffset));
+ _getMemberUri(interfaceMember), interfaceMember.fileOffset));
+ } else if (library.loader.target.backendTarget.strongMode &&
+ declaredFunction?.typeParameters != null) {
+ var substitution = <TypeParameter, DartType>{};
+ for (int i = 0; i < declaredFunction.typeParameters.length; ++i) {
+ var declaredParameter = declaredFunction.typeParameters[i];
+ var interfaceParameter = interfaceFunction.typeParameters[i];
+ substitution[interfaceParameter] =
+ new TypeParameterType(declaredParameter);
+ }
+ var newSubstitution = Substitution.fromMap(substitution);
+ interfaceSubstitution = interfaceSubstitution == null
+ ? newSubstitution
+ : Substitution.combine(interfaceSubstitution, newSubstitution);
}
+ return interfaceSubstitution;
+ }
+
+ bool _checkTypes(
+ TypeEnvironment typeEnvironment,
+ Substitution interfaceSubstitution,
+ Member declaredMember,
+ Member interfaceMember,
+ DartType declaredType,
+ DartType interfaceType,
+ bool isCovariant,
+ VariableDeclaration declaredParameter) {
+ if (!library.loader.target.backendTarget.strongMode) return false;
+
+ if (interfaceSubstitution != null) {
+ interfaceType = interfaceSubstitution.substituteType(interfaceType);
+ }
+
+ bool inParameter = declaredParameter != null;
+ DartType subtype = inParameter ? interfaceType : declaredType;
+ DartType supertype = inParameter ? declaredType : interfaceType;
+
+ if (typeEnvironment.isSubtypeOf(subtype, supertype)) {
+ // No problem--the proper subtyping relation is satisfied.
+ } else if (isCovariant && typeEnvironment.isSubtypeOf(supertype, subtype)) {
+ // No problem--the overriding parameter is marked "covariant" and has
+ // a type which is a subtype of the parameter it overrides.
+ } else {
+ // Report an error.
+ var declaredMemberName = '$name::${declaredMember.name.name}';
+ Message message;
+ int fileOffset;
+ if (declaredParameter == null) {
+ message = templateOverrideTypeMismatchReturnType.withArguments(
+ declaredMemberName, declaredType, interfaceType);
+ fileOffset = declaredMember.fileOffset;
+ } else {
+ message = templateOverrideTypeMismatchParameter.withArguments(
+ declaredParameter.name,
+ declaredMemberName,
+ declaredType,
+ interfaceType);
+ fileOffset = declaredParameter.fileOffset;
+ }
+ library.addCompileTimeError(message, fileOffset, fileUri,
+ context: templateOverriddenMethodCause
+ .withArguments(interfaceMember.name.name)
+ .withLocation(
+ _getMemberUri(interfaceMember), interfaceMember.fileOffset));
+ return true;
+ }
+ return false;
+ }
+
+ void checkMethodOverride(
+ ClassHierarchy hierarchy,
+ TypeEnvironment typeEnvironment,
+ Procedure declaredMember,
+ Procedure interfaceMember) {
+ if (declaredMember.enclosingClass != cls) {
+ // TODO(ahe): Include these checks as well, but the message needs to
+ // explain that [declaredMember] is inherited.
+ return;
+ }
+ assert(declaredMember.kind == ProcedureKind.Method);
+ assert(interfaceMember.kind == ProcedureKind.Method);
+ FunctionNode declaredFunction = declaredMember.function;
+ FunctionNode interfaceFunction = interfaceMember.function;
+
+ Substitution interfaceSubstitution = _computeInterfaceSubstitution(
+ hierarchy,
+ declaredMember,
+ interfaceMember,
+ declaredFunction,
+ interfaceFunction);
+
+ _checkTypes(
+ typeEnvironment,
+ interfaceSubstitution,
+ declaredMember,
+ interfaceMember,
+ declaredFunction.returnType,
+ interfaceFunction.returnType,
+ false,
+ null);
if (declaredFunction.positionalParameters.length <
interfaceFunction.requiredParameterCount ||
declaredFunction.positionalParameters.length <
@@ -273,6 +388,21 @@
.withLocation(
interfaceMember.fileUri, interfaceMember.fileOffset));
}
+ for (int i = 0;
+ i < declaredFunction.positionalParameters.length &&
+ i < interfaceFunction.positionalParameters.length;
+ i++) {
+ var declaredParameter = declaredFunction.positionalParameters[i];
+ _checkTypes(
+ typeEnvironment,
+ interfaceSubstitution,
+ declaredMember,
+ interfaceMember,
+ declaredParameter.type,
+ interfaceFunction.positionalParameters[i].type,
+ declaredParameter.isCovariant,
+ declaredParameter);
+ }
if (declaredFunction.namedParameters.isEmpty &&
interfaceFunction.namedParameters.isEmpty) {
return;
@@ -314,6 +444,16 @@
break outer;
}
}
+ var declaredParameter = declaredNamedParameters.current;
+ _checkTypes(
+ typeEnvironment,
+ interfaceSubstitution,
+ declaredMember,
+ interfaceMember,
+ declaredParameter.type,
+ interfaceNamedParameters.current.type,
+ declaredParameter.isCovariant,
+ declaredParameter);
}
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index 84bfc98..0060ec9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -51,6 +51,7 @@
ConstructorReferenceBuilder,
FormalParameterBuilder,
InvalidTypeBuilder,
+ KernelClassBuilder,
KernelConstructorBuilder,
KernelEnumBuilder,
KernelFieldBuilder,
@@ -74,6 +75,7 @@
QualifiedName,
Scope,
TypeBuilder,
+ TypeDeclarationBuilder,
TypeVariableBuilder,
VoidTypeBuilder,
compareProcedures,
@@ -81,6 +83,8 @@
import 'metadata_collector.dart';
+import 'type_algorithms.dart' show calculateBounds;
+
class KernelLibraryBuilder
extends SourceLibraryBuilder<KernelTypeBuilder, Library> {
final Library library;
@@ -1005,6 +1009,38 @@
return count;
}
+ /// Instantiates the type parameters in all raw generic types in [types] to
+ /// their bounds. The list of types is cleared when done.
+ int instantiateToBound(TypeBuilder dynamicType, ClassBuilder objectClass) {
+ int count = 0;
+
+ for (var type in types) {
+ if (type.builder is! NamedTypeBuilder) {
+ continue;
+ }
+ NamedTypeBuilder typeBuilder = type.builder as NamedTypeBuilder;
+ TypeDeclarationBuilder typeDeclarationBuilder = typeBuilder.builder;
+ List<TypeVariableBuilder> typeParameters;
+
+ if (typeDeclarationBuilder is KernelClassBuilder) {
+ typeParameters = typeDeclarationBuilder.typeVariables;
+ } else if (typeDeclarationBuilder is KernelFunctionTypeAliasBuilder) {
+ typeParameters = typeDeclarationBuilder.typeVariables;
+ }
+
+ if (typeParameters != null &&
+ typeParameters.length > 0 &&
+ typeBuilder.arguments == null) {
+ typeBuilder.arguments =
+ calculateBounds(typeParameters, dynamicType, objectClass);
+ count += typeParameters.length;
+ }
+ }
+ types.clear();
+
+ return count;
+ }
+
@override
void includePart(covariant KernelLibraryBuilder part) {
part.mixinApplicationClasses
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 3025f01..ab33cc1 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
@@ -30,8 +30,7 @@
import 'package:front_end/src/fasta/type_inference/type_schema.dart';
import 'package:front_end/src/fasta/type_inference/type_schema_elimination.dart';
import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart';
-import 'package:kernel/ast.dart'
- hide InvalidExpression, InvalidInitializer, InvalidStatement;
+import 'package:kernel/ast.dart' hide InvalidExpression, InvalidInitializer;
import 'package:kernel/frontend/accessors.dart';
import 'package:kernel/type_algebra.dart';
@@ -571,19 +570,23 @@
/// 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;
- ShadowConstructorInvocation(
- Constructor target, this._initialTarget, Arguments arguments,
+ ShadowConstructorInvocation(this._prefixName, Constructor target,
+ this._initialTarget, Arguments arguments,
{bool isConst: false})
: super(target, arguments, isConst: isConst);
@override
DartType _inferExpression(
ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
- typeNeeded =
- inferrer.listener.constructorInvocationEnter(this, typeContext) ||
- typeNeeded;
+ typeNeeded = inferrer.listener
+ .constructorInvocationEnter(this, _prefixName, typeContext) ||
+ typeNeeded;
var inferredType = inferrer.inferInvocation(
typeContext,
typeNeeded,
@@ -680,19 +683,23 @@
/// 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;
- ShadowFactoryConstructorInvocation(
- Procedure target, this._initialTarget, Arguments arguments,
+ ShadowFactoryConstructorInvocation(this._prefixName, Procedure target,
+ this._initialTarget, Arguments arguments,
{bool isConst: false})
: super(target, arguments, isConst: isConst);
@override
DartType _inferExpression(
ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
- typeNeeded =
- inferrer.listener.constructorInvocationEnter(this, typeContext) ||
- typeNeeded;
+ typeNeeded = inferrer.listener
+ .constructorInvocationEnter(this, _prefixName, typeContext) ||
+ typeNeeded;
var inferredType = inferrer.inferInvocation(
typeContext,
typeNeeded,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 431bd48..3244bb5 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -229,6 +229,9 @@
loader.resolveParts();
loader.computeLibraryScopes();
loader.resolveTypes();
+ if (loader.target.strongMode) {
+ loader.instantiateToBound(dynamicType, objectClassBuilder);
+ }
List<SourceClassBuilder> myClasses = collectMyClasses();
loader.checkSemantics(myClasses);
loader.finishTypeVariables(objectClassBuilder);
@@ -243,11 +246,11 @@
}
loader.computeHierarchy(program);
computeCoreTypes();
- loader.checkOverrides(myClasses);
if (!loader.target.disableTypeInference) {
loader.prepareTopLevelInference(myClasses);
loader.performTopLevelInference(myClasses);
}
+ loader.checkOverrides(myClasses);
} on deprecated_InputError catch (e) {
ticker.logMs("Got deprecated_InputError");
handleInputError(e, isFullProgram: false);
diff --git a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
index 1fa7dd8..cdc332b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
@@ -22,7 +22,7 @@
class RedirectingFactoryBody extends ExpressionStatement {
RedirectingFactoryBody.internal(Expression value)
: super(new Let(new VariableDeclaration(letName, initializer: value),
- new InvalidExpression()));
+ new InvalidExpression(null)));
RedirectingFactoryBody(Member target) : this.internal(new StaticGet(target));
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
new file mode 100644
index 0000000..3a1ccb2
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -0,0 +1,77 @@
+// 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 'kernel_builder.dart'
+ show
+ TypeVariableBuilder,
+ KernelTypeBuilder,
+ KernelNamedTypeBuilder,
+ KernelTypeVariableBuilder,
+ KernelClassBuilder,
+ KernelFunctionTypeAliasBuilder;
+
+KernelTypeBuilder substituteRec(
+ KernelTypeBuilder type,
+ Map<TypeVariableBuilder, KernelTypeBuilder> substitution,
+ KernelTypeBuilder dynamicType,
+ int depth) {
+ if (type is KernelNamedTypeBuilder) {
+ if (type.builder is KernelTypeVariableBuilder &&
+ substitution.containsKey(type.builder)) {
+ if (depth > 0) {
+ return substituteRec(
+ substitution[type.builder], substitution, dynamicType, depth - 1);
+ }
+ return dynamicType;
+ } else if (type.builder is KernelClassBuilder ||
+ type.builder is KernelFunctionTypeAliasBuilder) {
+ if (type.arguments == null || type.arguments.length == 0) {
+ return type;
+ }
+ List<KernelTypeBuilder> typeArguments =
+ new List<KernelTypeBuilder>(type.arguments.length);
+ for (int i = 0; i < typeArguments.length; i++) {
+ typeArguments[i] =
+ substituteRec(type.arguments[i], substitution, dynamicType, depth);
+ }
+ return new KernelNamedTypeBuilder(type.name, typeArguments)
+ ..bind(type.builder);
+ }
+ }
+ return type;
+}
+
+List<KernelTypeBuilder> calculateBounds(
+ List<TypeVariableBuilder> typeParameters,
+ KernelTypeBuilder dynamicType,
+ KernelClassBuilder objectClass) {
+ var refinedBounds = new List<KernelTypeBuilder>(typeParameters.length);
+ var substitution = new Map<TypeVariableBuilder, KernelTypeBuilder>();
+
+ for (int i = 0; i < typeParameters.length; i++) {
+ KernelTypeBuilder type = typeParameters[i].bound;
+ if (type == null ||
+ type is KernelNamedTypeBuilder &&
+ type.builder is KernelClassBuilder &&
+ (type.builder as KernelClassBuilder).cls == objectClass?.cls) {
+ type = dynamicType;
+ }
+
+ refinedBounds[i] = type;
+ substitution[typeParameters[i]] = type;
+ }
+
+ // TODO(dmitryas): Replace the call to [substituteRec] with actual
+ // instantiate-to-bounds algorithm.
+ List<KernelTypeBuilder> result =
+ new List<KernelTypeBuilder>(typeParameters.length);
+ for (int i = 0; i < result.length; i++) {
+ // The current bound `refinedBounds[i]` is used as a starting point for
+ // [substituteRec], that is, the first substitution of a type parameter with
+ // its bound is already performed, so the depth parameter is lessened by 1.
+ result[i] = substituteRec(
+ refinedBounds[i], substitution, dynamicType, typeParameters.length - 1);
+ }
+ return result;
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index 401ae92..5473540 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -10,9 +10,7 @@
Class,
ExpressionStatement,
Field,
- InvalidExpression,
InvalidInitializer,
- InvalidStatement,
Library,
Member,
Procedure,
@@ -154,16 +152,6 @@
}
@override
- visitInvalidExpression(InvalidExpression node) {
- problem(node, "Invalid expression.");
- }
-
- @override
- visitInvalidStatement(InvalidStatement node) {
- problem(node, "Invalid statement.");
- }
-
- @override
visitInvalidInitializer(InvalidInitializer node) {
problem(node, "Invalid initializer.");
}
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 08cfbc2..786d564 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -471,9 +471,8 @@
return parseTopLevelMember(next);
}
// Ignore any preceding modifiers and just report the unexpected token
- reportRecoverableErrorWithToken(next, fasta.templateExpectedDeclaration);
- listener.handleInvalidTopLevelDeclaration(next);
- return next;
+ listener.beginTopLevelMember(next);
+ return reportInvalidTopLevelDeclaration(next);
}
// Report an error for the given modifier preceding a top level keyword
@@ -513,19 +512,21 @@
return parseEnum(previous);
} else if (identical(value, 'typedef')) {
Token next = token.next;
+ directiveState?.checkDeclaration();
if (next.isIdentifier || optional("void", next)) {
- directiveState?.checkDeclaration();
return parseTypedef(previous);
} else {
- directiveState?.checkDeclaration();
return parseTopLevelMember(previous);
}
} else {
// The remaining top level keywords are built-in keywords
- // and can be used as an identifier in a top level declaration
- // such as "abstract<T>() => 0;".
+ // and can be used in a top level declaration
+ // as an identifier such as "abstract<T>() => 0;"
+ // or as a prefix such as "abstract.A b() => 0;".
String nextValue = token.next.stringValue;
- if (identical(nextValue, '(') || identical(nextValue, '<')) {
+ if (identical(nextValue, '(') ||
+ identical(nextValue, '<') ||
+ identical(nextValue, '.')) {
directiveState?.checkDeclaration();
return parseTopLevelMember(previous);
} else if (identical(value, 'library')) {
@@ -1096,9 +1097,10 @@
token = ensureCloseParen(token, begin);
break;
} else if (identical(value, '[]')) {
- --parameterCount;
- reportRecoverableError(next, fasta.messageEmptyOptionalParameterList);
- token = ensureCloseParen(next, begin);
+ // Recovery
+ token = rewriteSquareBrackets(token);
+ token = parseOptionalPositionalParameters(token, kind);
+ token = ensureCloseParen(token, begin);
break;
}
token = parseFormalParameter(token, FormalParameterKind.mandatory, kind);
@@ -1164,21 +1166,42 @@
assert(optional('[', token));
listener.beginOptionalFormalParameters(begin);
int parameterCount = 0;
- do {
+ while (true) {
Token next = token.next;
if (optional(']', next)) {
- token = next;
break;
}
token = parseFormalParameter(
- token, FormalParameterKind.optionalPositional, kind)
- .next;
+ token, FormalParameterKind.optionalPositional, kind);
+ next = token.next;
++parameterCount;
- } while (optional(',', token));
- if (parameterCount == 0) {
- reportRecoverableError(token, fasta.messageEmptyOptionalParameterList);
+ if (!optional(',', next)) {
+ if (!optional(']', next)) {
+ // Recovery
+ reportRecoverableError(
+ next, fasta.templateExpectedButGot.withArguments(']'));
+ // Scanner guarantees a closing bracket.
+ next = begin.endGroup;
+ while (token.next != next) {
+ token = token.next;
+ }
+ }
+ break;
+ }
+ token = next;
}
- expect(']', token);
+ if (parameterCount == 0) {
+ token = rewriteAndRecover(
+ token,
+ fasta.messageEmptyOptionalParameterList,
+ new SyntheticStringToken(
+ TokenType.IDENTIFIER, '', token.next.charOffset, 0));
+ token = parseFormalParameter(
+ token, FormalParameterKind.optionalPositional, kind);
+ ++parameterCount;
+ }
+ token = token.next;
+ assert(optional(']', token));
listener.endOptionalFormalParameters(parameterCount, begin, token);
return token;
}
@@ -1194,21 +1217,42 @@
assert(optional('{', token));
listener.beginOptionalFormalParameters(begin);
int parameterCount = 0;
- do {
+ while (true) {
Token next = token.next;
if (optional('}', next)) {
- token = next;
break;
}
token =
- parseFormalParameter(token, FormalParameterKind.optionalNamed, kind)
- .next;
+ parseFormalParameter(token, FormalParameterKind.optionalNamed, kind);
+ next = token.next;
++parameterCount;
- } while (optional(',', token));
- if (parameterCount == 0) {
- reportRecoverableError(token, fasta.messageEmptyNamedParameterList);
+ if (!optional(',', next)) {
+ if (!optional('}', next)) {
+ // Recovery
+ reportRecoverableError(
+ next, fasta.templateExpectedButGot.withArguments('}'));
+ // Scanner guarantees a closing bracket.
+ next = begin.endGroup;
+ while (token.next != next) {
+ token = token.next;
+ }
+ }
+ break;
+ }
+ token = next;
}
- expect('}', token);
+ if (parameterCount == 0) {
+ token = rewriteAndRecover(
+ token,
+ fasta.messageEmptyNamedParameterList,
+ new SyntheticStringToken(
+ TokenType.IDENTIFIER, '', token.next.charOffset, 0));
+ token =
+ parseFormalParameter(token, FormalParameterKind.optionalNamed, kind);
+ ++parameterCount;
+ }
+ token = token.next;
+ assert(optional('}', token));
listener.endOptionalFormalParameters(parameterCount, begin, token);
return token;
}
@@ -1695,8 +1739,13 @@
reportRecoverableErrorWithToken(
next, fasta.templateBuiltInIdentifierInDeclaration);
} else if (!optional("dynamic", next)) {
- reportRecoverableErrorWithToken(
- next, fasta.templateBuiltInIdentifierAsType);
+ if (context == IdentifierContext.typeReference &&
+ optional('.', next.next)) {
+ // Built in identifiers may be used as a prefix
+ } else {
+ reportRecoverableErrorWithToken(
+ next, fasta.templateBuiltInIdentifierAsType);
+ }
}
token = next;
} else if (!inPlainSync && next.type.isPseudo) {
@@ -1756,6 +1805,8 @@
followingValues = ['<', 'extends', 'with', 'implements', '{'];
} else if (context == IdentifierContext.combinator) {
followingValues = [';'];
+ } else if (context == IdentifierContext.constructorReferenceContinuation) {
+ followingValues = ['.', ',', '(', ')', '[', ']', '}', ';'];
} else if (context == IdentifierContext.fieldDeclaration) {
followingValues = [';', '=', ',', '}'];
} else if (context == IdentifierContext.enumDeclaration) {
@@ -2651,16 +2702,14 @@
token, IdentifierContext.topLevelVariableDeclaration);
return parseFields(beforeStart, const Link<Token>(), token, true);
} else {
- return reportUnrecoverableErrorWithToken(
- token, fasta.templateExpectedDeclaration);
+ return reportInvalidTopLevelDeclaration(token);
}
}
Token afterName = identifiers.head.next;
identifiers = identifiers.tail;
if (identifiers.isEmpty) {
- return reportUnrecoverableErrorWithToken(
- token, fasta.templateExpectedDeclaration);
+ return reportInvalidTopLevelDeclaration(token);
}
Token beforeName = identifiers.head;
identifiers = identifiers.tail;
@@ -2919,7 +2968,8 @@
// A field or abstract getter.
identifiers = identifiers.prepend(previous);
return identifiers;
- } else if (optional('native', token) &&
+ } else if (hasName &&
+ optional('native', token) &&
(token.next.kind == STRING_TOKEN || optional(';', token.next))) {
// Skip.
previous = token;
@@ -3218,6 +3268,18 @@
return token;
}
+ /// Replace the token after [token] with `[` followed by `]`
+ /// and return [token].
+ Token rewriteSquareBrackets(Token token) {
+ Token next = token.next;
+ assert(optional('[]', next));
+ Token replacement = link(
+ new BeginToken(TokenType.OPEN_SQUARE_BRACKET, next.offset),
+ new Token(TokenType.CLOSE_SQUARE_BRACKET, next.offset + 1));
+ rewriter.replaceTokenFollowing(token, replacement);
+ return token;
+ }
+
void rewriteGtCompositeOrRecover(Token token, Token next, String value) {
assert(value != '>');
Token replacement = new Token(TokenType.GT, next.charOffset);
@@ -4754,14 +4816,9 @@
expect(']', token);
return token;
}
- BeginToken replacement = link(
- new BeginToken(TokenType.OPEN_SQUARE_BRACKET, token.offset),
- new Token(TokenType.CLOSE_SQUARE_BRACKET, token.offset + 1));
- rewriter.replaceTokenFollowing(beforeToken, replacement);
- replacement.endToken = replacement.next;
- token = replacement.next;
- listener.handleLiteralList(0, replacement, constKeyword, token);
- return token;
+ token = rewriteSquareBrackets(beforeToken).next;
+ listener.handleLiteralList(0, token, constKeyword, token.next);
+ return token.next;
}
/// This method parses the portion of a map literal that starts with the left
@@ -6060,6 +6117,12 @@
return nextToken;
}
+ Token reportInvalidTopLevelDeclaration(Token token) {
+ reportRecoverableErrorWithToken(token, fasta.templateExpectedDeclaration);
+ listener.handleInvalidTopLevelDeclaration(token);
+ return token;
+ }
+
Token reportUnmatchedToken(BeginToken token) {
return reportUnrecoverableError(
token,
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index e8d2bc3..e62a87d 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -582,14 +582,13 @@
}
}
- /// Resolves all unresolved types in [types]. The list of types is cleared
- /// when done.
+ /// Resolves all unresolved types in [types]. The list of types is retained
+ /// and is used in [KernelLibraryBuilder.instantiateToBound] later.
int resolveTypes() {
int typeCount = types.length;
for (UnresolvedType<T> t in types) {
t.resolveIn(scope);
}
- types.clear();
return typeCount;
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index ac4e347..c3a81e6 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -351,6 +351,16 @@
ticker.logMs("Resolved $count type-variable bounds");
}
+ void instantiateToBound(TypeBuilder dynamicType, ClassBuilder objectClass) {
+ int count = 0;
+ builders.forEach((Uri uri, LibraryBuilder library) {
+ if (library.loader == this) {
+ count += library.instantiateToBound(dynamicType, objectClass);
+ }
+ });
+ ticker.logMs("Instantiated $count type variables to their bounds");
+ }
+
void finishNativeMethods() {
int count = 0;
builders.forEach((Uri uri, LibraryBuilder library) {
@@ -547,7 +557,8 @@
assert(hierarchy != null);
for (SourceClassBuilder builder in sourceClasses) {
if (builder.library.loader == this) {
- builder.checkOverrides(hierarchy);
+ builder.checkOverrides(
+ hierarchy, typeInferenceEngine?.typeSchemaEnvironment);
}
}
ticker.logMs("Checked overrides");
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
index 51f8484..1de0b4d 100644
--- 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
@@ -160,8 +160,8 @@
ConditionalExpression expression, DartType inferredType) =>
genericExpressionExit("conditionalExpression", expression, inferredType);
- bool constructorInvocationEnter(
- InvocationExpression expression, DartType typeContext) =>
+ bool constructorInvocationEnter(InvocationExpression expression,
+ String prefixName, DartType typeContext) =>
genericExpressionEnter("constructorInvocation", expression, typeContext);
void constructorInvocationExit(
@@ -323,8 +323,13 @@
DartType inferredType) =>
genericExpressionExit("methodInvocation", expression, inferredType);
- void methodInvocationExitCall(Expression expression, Arguments arguments,
- bool isImplicitCall, DartType inferredType) =>
+ void methodInvocationExitCall(
+ Expression expression,
+ Arguments arguments,
+ bool isImplicitCall,
+ FunctionType calleeType,
+ Substitution substitution,
+ DartType inferredType) =>
genericExpressionExit("methodInvocation", expression, inferredType);
bool namedFunctionExpressionEnter(Let expression, DartType typeContext) =>
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 aab2c19..0af6595 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
@@ -1205,8 +1205,8 @@
handleInvocationContravariance(checkKind, desugaredInvocation, arguments,
expression, inferredType, calleeType, fileOffset);
if (identical(interfaceMember, 'call')) {
- listener.methodInvocationExitCall(
- expression, arguments, isImplicitCall, inferredType);
+ listener.methodInvocationExitCall(expression, arguments, isImplicitCall,
+ calleeType, lastInferredSubstitution, inferredType);
} else {
listener.methodInvocationExit(expression, arguments, isImplicitCall,
interfaceMember, calleeType, lastInferredSubstitution, inferredType);
@@ -1257,8 +1257,7 @@
var replacedExpression = handlePropertyGetContravariance(receiver,
interfaceMember, desugaredGet, expression, inferredType, fileOffset);
if ((interfaceMember is Procedure &&
- interfaceMember.kind == ProcedureKind.Method) ||
- interfaceMember == 'call') {
+ interfaceMember.kind == ProcedureKind.Method)) {
inferredType =
instantiateTearOff(inferredType, typeContext, replacedExpression);
}
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
index 26cba01..dba0d52 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema_environment.dart
@@ -371,48 +371,6 @@
// TODO(paulberry): report any errors from instantiateToBounds.
}
- /// Given a [DartType] [type], if [type] is an uninstantiated
- /// parameterized type then instantiate the parameters to their
- /// bounds. See the issue for the algorithm description.
- ///
- /// https://github.com/dart-lang/sdk/issues/27526#issuecomment-260021397
- ///
- /// TODO(paulberry) Compute lazily and cache.
- DartType instantiateToBounds(DartType type,
- {Map<TypeParameter, DartType> knownTypes}) {
- List<TypeParameter> typeFormals = _typeFormalsAsParameters(type);
- int count = typeFormals.length;
- if (count == 0) {
- return type;
- }
- var substitution = <TypeParameter, DartType>{};
- for (TypeParameter parameter in typeFormals) {
- // Note: we treat class<T extends Object> as equivalent to class<T>; in
- // both cases they instantiate to class<dynamic>. See dartbug.com/29561
- if (_isObjectOrDynamic(parameter.bound)) {
- substitution[parameter] = const DynamicType();
- } else {
- substitution[parameter] = parameter.bound;
- }
- }
- if (knownTypes != null) {
- type = substitute(type, knownTypes);
- }
- var result = substituteDeep(type, substitution);
- if (result != null) return result;
-
- // Instantiation failed due to a circularity.
- // TODO(paulberry): report the error.
- // Substitute `dynamic` for all parameters to try to allow compilation to
- // continue. Note that [substituteDeep] is destructive of the
- // [substitution] so we create a fresh one.
- substitution = <TypeParameter, DartType>{};
- for (TypeParameter parameter in typeFormals) {
- substitution[parameter] = const DynamicType();
- }
- return substitute(type, substitution);
- }
-
@override
bool isBottom(DartType t) {
if (t is UnknownType) {
@@ -735,18 +693,6 @@
(type is InterfaceType &&
identical(type.classNode, coreTypes.objectClass));
- /// Given a [type], returns the [TypeParameter]s corresponding to its formal
- /// type parameters (if any).
- List<TypeParameter> _typeFormalsAsParameters(DartType type) {
- if (type is TypedefType) {
- return type.typedefNode.typeParameters;
- } else if (type is InterfaceType) {
- return type.classNode.typeParameters;
- } else {
- return const [];
- }
- }
-
DartType _typeParameterLeastUpperBound(DartType type1, DartType type2) {
// This currently just implements a simple least upper bound to
// handle some common cases. It also avoids some termination issues
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index ed9816d..2ff707a 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -118,6 +118,15 @@
..libraries.addAll(truncateSummary
? kernelTarget.loader.libraries
: summaryProgram.libraries);
+ trimmedSummaryProgram.metadata.addAll(summaryProgram.metadata);
+
+ // As documented, we only run outline transformations when we are building
+ // summaries without building a full program (at this time, that's
+ // the only need we have for these transformations).
+ if (!buildProgram) {
+ options.target.performOutlineTransformations(trimmedSummaryProgram);
+ options.ticker.logMs("Transformed outline");
+ }
summary = serializeProgram(trimmedSummaryProgram);
options.ticker.logMs("Generated outline");
}
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index b6047e9..62d7386 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -93,6 +93,7 @@
EmptyNamedParameterList:
template: "Named parameter lists cannot be empty."
tip: "Try adding a named parameter to the list."
+ analyzerCode: "MISSING_IDENTIFIER"
dart2jsCode: EMPTY_NAMED_PARAMETER_LIST
script: >
foo({}) {}
@@ -104,6 +105,7 @@
EmptyOptionalParameterList:
template: "Optional parameter lists cannot be empty."
tip: "Try adding an optional parameter to the list."
+ analyzerCode: "MISSING_IDENTIFIER"
dart2jsCode: EMPTY_OPTIONAL_PARAMETER_LIST
script: >
foo([]) {}
@@ -920,6 +922,8 @@
NotAType:
template: "'#name' isn't a type."
+ analyzerCode: NOT_A_TYPE
+ dart2jsCode: "*ignored*"
FastaUsageShort:
template: |
@@ -1163,6 +1167,18 @@
OverrideMoreRequiredArguments:
template: "The method '#name' has more required arguments than those of overridden method '#name2'."
+OverrideTypeMismatchParameter:
+ template: "The parameter '#name' of the method '#name2' has type #type, which does not match the corresponding type in the overridden method (#type2)."
+ tip: "Change to a supertype of #type2 (or, for a covariant parameter, a subtype)."
+ analyzerCode: INVALID_METHOD_OVERRIDE
+ dart2jsCode: "*ignored*"
+
+OverrideTypeMismatchReturnType:
+ template: "The return type of the method '#name' is #type, which does not match the return type of the overridden method (#type2)."
+ tip: "Change to a subtype of #type2."
+ analyzerCode: INVALID_METHOD_OVERRIDE
+ dart2jsCode: "*ignored*"
+
IllegalMethodName:
template: "'#name' isn't a legal method name."
tip: "Did you mean '#name2'?"
@@ -1488,6 +1504,8 @@
SuperclassHasNoMethod:
template: "Superclass has no method named '#name'."
+ analyzerCode: UNDEFINED_SUPER_METHOD
+ dart2jsCode: "*ignored*"
SuperclassHasNoDefaultConstructor:
template: "The superclass, '#name', has no unnamed constructor that takes no arguments."
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 5b94c6a..72a523c 100644
--- a/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
+++ b/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
@@ -185,6 +185,7 @@
var translatedDeclarations = _translateDeclarations(_kernelDeclarations);
var translatedReferences = _translateReferences(_kernelReferences);
var resolutionApplier = new ValidatingResolutionApplier(
+ null,
new _TestTypeContext(),
translatedDeclarations,
translatedReferences,
@@ -243,6 +244,7 @@
var translatedDeclarations = _translateDeclarations(_kernelDeclarations);
var translatedReferences = _translateReferences(_kernelReferences);
var resolutionApplier = new ValidatingResolutionApplier(
+ null,
new _TestTypeContext(),
translatedDeclarations,
translatedReferences,
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
index de89058..80eaee2 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
@@ -340,94 +340,6 @@
expect(inferredTypes[0], _list(dynamicType));
}
- void test_instantiateToBounds_noTypesKnown() {
- // class A {}
- var A = _addClass(_class('A')).rawType;
- // class B<T extends int> {}
- var B = _addClass(
- _class('B', typeParameters: [new TypeParameter('T', intType)]))
- .thisType;
- // class C<T extends int, S extends B<T>> {}
- var C = () {
- var T = new TypeParameter('T', intType);
- var S = new TypeParameter(
- 'S', new InterfaceType(B.classNode, [new TypeParameterType(T)]));
- return _addClass(_class('C', typeParameters: [T, S])).thisType;
- }();
- // class D<T extends B<T>> {}
- var D = () {
- var T = new TypeParameter('T');
- T.bound = new InterfaceType(B.classNode, [new TypeParameterType(T)]);
- return _addClass(_class('D', typeParameters: [T])).thisType;
- }();
- // typedef T E<T extends int>();
- var E = () {
- var T = new TypeParameter('T', intType);
- var typedefNode = new Typedef(
- 'E', new FunctionType([], new TypeParameterType(T)),
- typeParameters: [T]);
- return new TypedefType(typedefNode, [new TypeParameterType(T)]);
- }();
- // class F<T> {}
- var F = _addClass(
- _class('F', typeParameters: [new TypeParameter('T', objectType)]))
- .thisType;
- var env = _makeEnv();
- // A => A
- expect(env.instantiateToBounds(A), same(A));
- // B => B<int>
- expect(
- env.instantiateToBounds(B), new InterfaceType(B.classNode, [intType]));
- // C => C<int, A<int>>
- expect(
- env.instantiateToBounds(C),
- new InterfaceType(C.classNode, [
- intType,
- new InterfaceType(B.classNode, [intType])
- ]));
- // D => error
- // However to allow analysis to continue D => D<dynamic>
- // TODO(paulberry): check that an error is reported.
- expect(env.instantiateToBounds(D), D.classNode.rawType);
- // E => E<int> => () -> int
- expect(
- env.instantiateToBounds(E), new TypedefType(E.typedefNode, [intType]));
- // F => F<dynamic>
- expect(env.instantiateToBounds(F), F.classNode.rawType);
- }
-
- void test_instantiateToBounds_typesKnown() {
- // class A<T extends num> {}
- var A = _addClass(
- _class('A', typeParameters: [new TypeParameter('T', numType)]))
- .thisType;
- // class B<T extends A<T>> {}
- var B = () {
- var T = new TypeParameter('T');
- T.bound = new InterfaceType(A.classNode, [new TypeParameterType(T)]);
- return _addClass(_class('B', typeParameters: [T])).thisType;
- }();
- var env = _makeEnv();
- // A => A<int> (if T known to be `int`)
- expect(
- env.instantiateToBounds(A,
- knownTypes: {A.classNode.typeParameters[0]: intType}),
- new InterfaceType(A.classNode, [intType]));
- // Check that known types can be used to break circularities
- // B => B<int> (if T known to be `int`)
- expect(
- env.instantiateToBounds(B,
- knownTypes: {B.classNode.typeParameters[0]: intType}),
- new InterfaceType(B.classNode, [intType]));
- }
-
- void test_lub_bottom() {
- var A = _addClass(_class('A')).rawType;
- var env = _makeEnv();
- expect(env.getLeastUpperBound(bottomType, A), same(A));
- expect(env.getLeastUpperBound(A, bottomType), same(A));
- }
-
void test_lub_classic() {
// Make the class hierarchy:
//
diff --git a/pkg/front_end/testcases/ast_builder.status b/pkg/front_end/testcases/ast_builder.status
index da87982..33cc33c 100644
--- a/pkg/front_end/testcases/ast_builder.status
+++ b/pkg/front_end/testcases/ast_builder.status
@@ -25,7 +25,6 @@
inference/bug30624: Crash
inference/bug31133: Crash
inference/bug31436: Crash
-inference/call_corner_cases: Crash
inference/closure_param_null_to_object: Crash
inference/constructors_infer_from_arguments_redirecting: Crash
inference/constructors_too_many_positional_arguments: Crash
@@ -50,14 +49,13 @@
inference/for_loop_initializer_expression: Crash
inference/future_then_explicit_future: Fail
inference/generic_functions_return_typedef: Fail
-inference/generic_methods_basic_downward_inference: Crash
-inference/generic_methods_downwards_inference_fold: Crash
+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_rethrow: Crash
-inference/infer_statics_transitively3: Crash
inference/instantiate_tearoff: Crash
inference/instantiate_tearoff_after_contravariance_check: Crash
inference/instantiate_tearoff_of_call: Crash
@@ -69,20 +67,19 @@
inference/try_catch: Crash
inference/try_catch_finally: Crash
inference/try_catch_promotion: Crash
-inference/unsafe_block_closure_inference_closure_call: 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_expr2: Crash
+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_expr2: Crash
-inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr: Crash
-inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr: Crash
-inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2: Crash
-inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Crash
+inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Fail
invalid_cast: Crash
invocations: Crash
metadata_enum: Crash
metadata_named_mixin_application: Crash
micro: Crash
+native_as_name: Crash
+override_check_after_inference: Fail
+override_check_basic: Fail
+override_check_with_covariant_modifier: Fail
qualified: Crash
rasta/abstract_constructor: Crash
rasta/bad_continue: Crash
@@ -90,7 +87,6 @@
rasta/bad_interpolation: Crash
rasta/bad_redirection: Crash
rasta/breaking_bad: Crash
-rasta/cascades: Crash
rasta/class_hierarchy: Crash
rasta/deferred_load: Crash
rasta/generic_factory: Crash
@@ -111,10 +107,8 @@
rasta/mandatory_parameter_initializer: Crash
rasta/parser_error: Crash
rasta/static: Crash
-rasta/super: Crash
rasta/super_initializer: Crash
rasta/supports_reflection: VerificationError
-rasta/this_invoke: Crash
rasta/try_label: Crash
rasta/type_literals: Crash
rasta/typedef: Crash
@@ -132,7 +126,6 @@
regress/issue_29983: Crash
regress/issue_29984: Crash
regress/issue_29985: Crash
-regress/issue_30838: Crash
regress/issue_31155: Crash # Issue 31155.
regress/issue_31157: Crash
regress/issue_31180: Crash
@@ -147,6 +140,5 @@
runtime_checks_new/for_in_call_kinds: Crash
statements: Crash
super_call: Crash
-super_rasta_copy: Crash
type_variable_as_super: Crash
uninitialized_fields: 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 75506cd..c2af184 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,24 @@
: super core::Object::•()
;
set a(dynamic #synthetic) → dynamic
- let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\n set a();\n ^";
set d(dynamic #synthetic) → dynamic
- let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\n set d(x, y);\n ^";
}
abstract class B extends core::Object {
default constructor •() → void
: super core::Object::•()
;
set a(dynamic #synthetic) → dynamic
- let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\n set a();\n ^";
set d(dynamic #synthetic) → dynamic
- let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\n set d(x, y);\n ^";
}
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 set b(dynamic #synthetic) → dynamic
- let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\nset b();\n ^";
static set c(dynamic #synthetic) → dynamic
- let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\nset c(x, y);\n ^";
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 c3b8952..bc2a67d 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,24 @@
: super core::Object::•()
;
set a(dynamic #synthetic) → void
- let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\n set a();\n ^";
set d(dynamic #synthetic) → void
- let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\n set d(x, y);\n ^";
}
abstract class B extends core::Object {
default constructor •() → void
: super core::Object::•()
;
set a(dynamic #synthetic) → void
- let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\n set a();\n ^";
set d(dynamic #synthetic) → void
- let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\n set d(x, y);\n ^";
}
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 set b(dynamic #synthetic) → void
- let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\nset b();\n ^";
static set c(dynamic #synthetic) → void
- let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\nset c(x, y);\n ^";
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 5a5cd3c..55b0b3d 100644
--- a/pkg/front_end/testcases/bug21938.dart.strong.expect
+++ b/pkg/front_end/testcases/bug21938.dart.strong.expect
@@ -5,10 +5,10 @@
static method test() → dynamic {
core::Object x;
core::Function f;
- let final dynamic #t1 = x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
f.call(5, 2);
- let final dynamic #t3 = x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\nTry correcting the name to the name of an existing method, or defining a method named 'call'.\n x. /*@error=UndefinedMethod*/ call();\n ^";
f.call;
f.call(5, 2);
}
diff --git a/pkg/front_end/testcases/compile.status b/pkg/front_end/testcases/compile.status
index 6a6141f..41e6f96 100644
--- a/pkg/front_end/testcases/compile.status
+++ b/pkg/front_end/testcases/compile.status
@@ -92,6 +92,7 @@
rasta/typedef: Fail
rasta/unresolved: Fail
rasta/unresolved_constructor: Fail
+rasta/unresolved_for_in: RuntimeError # Test contains a compile-time error, signaled at run time in the JIT VM
rasta/unresolved_recovery: Fail
regress/issue_29975: Fail # Issue 29975.
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 bdde0f0..61ac3b7 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,6 @@
static method m({core::int a = 0}) → dynamic {}
}
static method test() → void {
- self::C::m(a: const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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'.\n C.m(a: 1, a: 2, a: 3);\n ^");
}
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 205c40b..30567bb 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,6 @@
static method m({core::int a = 0}) → dynamic {}
}
static method test() → void {
- self::C::m(a: const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\n C.m(a: 1, a: 2, a: 3);\n ^" as{TypeError} core::int);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/dynamic_and_void.dart.strong.expect b/pkg/front_end/testcases/dynamic_and_void.dart.strong.expect
index a38f5f7..5a9ee9e 100644
--- a/pkg/front_end/testcases/dynamic_and_void.dart.strong.expect
+++ b/pkg/front_end/testcases/dynamic_and_void.dart.strong.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method testDynamic() → invalid-type
- return let final dynamic #t1 = 0 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/dynamic_and_void.dart:12:52: Error: A value of type 'dart.core::int' 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/*@warning=TypeNotFound*/ dynamic testDynamic() => 0;\n ^"));
+ return let final dynamic #t1 = 0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/dynamic_and_void.dart:12:52: Error: A value of type 'dart.core::int' 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/*@warning=TypeNotFound*/ dynamic testDynamic() => 0;\n ^";
static method testVoid() → void {}
static method main() → 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 bd755de..deb6838 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,6 @@
return null;
() → core::String g = f;
g = () → core::String {
- return let final dynamic #t1 = 1 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
};
}
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 3d8d593..a16af52 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,6 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 e4c1a19..7f05ebe 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,6 @@
}
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
static method main() → 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 343375c..7abb51e 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,7 @@
static method test() → void {
core::List<core::int> l;
- l = <core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = 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 3854430..c6c4809 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,23 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::F2::•(<core::int>[]);
new self::F2::•(<core::int>[3]);
- new self::F2::•(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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]]);
}
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 e9a6131..cedb9f0 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,23 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::f2(<core::int>[]);
self::f2(<core::int>[3]);
- self::f2(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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]]);
}
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 6f719a2..a4f41b5 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,37 @@
{
(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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 l4 = (core::int x) → core::String {
- return let final dynamic #t3 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
};
}
{
(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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 l3 = (core::int x) → core::String {
- return let final dynamic #t5 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
};
(core::int) → core::String l4 = (core::int x) → core::String {
- return let final dynamic #t6 = x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
};
}
{
(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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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> l4 = (core::int x) → core::List<core::String> {
- return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 7a2b86c..1c86887 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,24 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 0ebb117..0322edf 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,10 @@
<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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = <T extends core::Object>(core::int x) → core::String {
- return let final dynamic #t3 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
};
}
{
@@ -21,12 +21,12 @@
<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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 {
- return let final dynamic #t5 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
};
v = <T extends core::Object>(core::int x) → core::String {
- return let final dynamic #t6 = x in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
};
}
{
@@ -35,10 +35,10 @@
<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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 = <T extends core::Object>(core::int x) → core::List<core::String> {
- return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^"];
};
}
{
@@ -52,8 +52,8 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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;
<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 b1d7123..251b409 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,59 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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> a0 = new self::A::•<core::int, core::String>(let final dynamic #t3 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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> a0 = new self::B::•<core::String, core::int>(let final dynamic #t9 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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> a0 = new self::C::•<core::int>(let final dynamic #t15 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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> a0 = new self::D::•<dynamic, core::String>(let final dynamic #t19 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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<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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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> 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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^");
}
}
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 c9f07bb..682efdc 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,13 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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<dynamic> l0 = <dynamic>[];
@@ -17,21 +17,21 @@
core::List<dynamic> l3 = <dynamic>["hello", 3];
}
{
- core::List<core::int> l0 = let final dynamic #t4 = <core::num>[] in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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];
}
{
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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];
}
}
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 fd577a7..b13ab72 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,14 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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<dynamic, dynamic> l0 = <dynamic, dynamic>{};
@@ -22,27 +22,27 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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<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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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> 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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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, core::String> l0 = let final dynamic #t10 = <core::num, dynamic>{} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 ^";
}
{
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^"};
}
}
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 544e036..8e73907 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,14 @@
}
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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* 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::_internal<dynamic>() in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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::_internal<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* core::List::_internal<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 7ce4694..90b2c64 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,7 @@
}
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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::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 feb474b..c13378b 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,7 @@
}
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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::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 c50c1d6..7885101 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,7 @@
}
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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::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 6f0d786..c7158f8f 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,7 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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::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 65a1eb4..c135f5a 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,7 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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::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 49bf492..9f39d90 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,10 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^"));
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart
index 76caea4..6382d87 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart
@@ -2,7 +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.
-/*@testedFeatures=inference*/
+/*@testedFeatures=inference,error*/
library test;
class C {
@@ -10,7 +10,7 @@
}
class D extends C {
-/*error:INVALID_METHOD_OVERRIDE*/ /*@topType=dynamic*/ m(
+/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
/*@topType=dynamic*/ x) =>
x;
}
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 8f1d4a3..a111385 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,6 +16,7 @@
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:13: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 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 7294101..159630d 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,6 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^"]);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart
index b7dea26..df04cb8 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart
@@ -2,7 +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.
-/*@testedFeatures=inference*/
+/*@testedFeatures=inference,error*/
library test;
class C {
@@ -11,8 +11,8 @@
}
class D extends C {
- /*error:INVALID_METHOD_OVERRIDE*/ T m<T>(T x) => x;
- /*error:INVALID_METHOD_OVERRIDE*/ T g<T>(T x) => x;
+ T m<T>(T /*@error=OverrideTypeMismatchParameter*/ x) => x;
+ T g<T>(T /*@error=OverrideTypeMismatchParameter*/ x) => x;
}
main() {
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 c249951..5cd40dd 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,6 +20,7 @@
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:53: 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 m<T>(T /*@error=OverrideTypeMismatchParameter*/ x) => x;\n ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:53: 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 g<T>(T /*@error=OverrideTypeMismatchParameter*/ x) => x;\n ^"]/* 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 dd144e6..6bc1c77 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,8 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 +35,8 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 +51,8 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^");
}
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 9fc45f4..07fd5ca 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,6 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n 1.0);\n ^");
}
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 6ca1c45..38c148a 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,8 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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> 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 9ce6a97..df8a365 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,12 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = new self::B::•().{self::B::z};
- s = let final dynamic #t2 = new self::B::•().{self::B::w} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = new self::B::•().{self::B::w};
}
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 690683f..90366c9 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,30 +24,30 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 self::B j = null as self::B;
static method test1() → dynamic {
- self::a = let final dynamic #t4 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = new self::B::•(3);
- self::b = let final dynamic #t5 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = new self::B::•(3);
self::c1 = <dynamic>[];
- self::c1 = let final dynamic #t6 = <dynamic, dynamic>{} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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::c2 = <dynamic>[];
- self::c2 = let final dynamic #t7 = <dynamic, dynamic>{} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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::d = <dynamic, dynamic>{};
- self::d = let final dynamic #t8 = 3 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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::e = new self::A::•();
- self::e = let final dynamic #t9 = <dynamic, dynamic>{} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::f = 3;
- self::f = let final dynamic #t10 = false in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::g = 1;
- self::g = let final dynamic #t11 = false in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 a1049d5..8240108 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,7 @@
static field core::int y = inf::x;
static method test1() → dynamic {
- inf::x = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 9ea7a585..2e4b516 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,7 @@
;
}
static method test1() → dynamic {
- inf::A::x = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 8311e1b..6724aed 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
@@ -6,7 +6,7 @@
static method test() → dynamic {
function f() → dynamic
return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
- const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\n g() => 0;\n ^";
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 0543e35..748504a 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
@@ -6,7 +6,7 @@
static method test() → dynamic {
function f() → dynamic
return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
- const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\n g() => 0;\n ^";
() → dynamic v = f;
}
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 90a895e..4c57475 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,7 @@
return 3;
}
static method foo() → dynamic {
- core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 6037f63..4182344 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,7 @@
return 3;
}
static method foo() → dynamic {
- core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 c5b4f48..5808152 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,6 @@
static method test1() → dynamic {
core::int x = 3;
- x = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 8ef2f58..366198e 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,6 @@
static method test2() → dynamic {
core::int x = 3;
- x = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 ca8a3db..d388007 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,13 @@
;
method test1() → dynamic {
core::int a = this.{self::A::x};
- a = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = 3;
core::int b = this.{self::A::y};
- b = let final dynamic #t2 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = 4;
core::int c = this.{self::A::z};
- c = let final dynamic #t3 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = 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 b4093b9..76876ca 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,13 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = 3;
core::int b = self::y;
- b = let final dynamic #t2 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = 4;
core::int c = self::z;
- c = let final dynamic #t3 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 = 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 36156bb..a7065a9 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,7 @@
}
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 3938452..845d695 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,10 @@
get x() → core::int
return 3;
get w() → core::int
- return let final dynamic #t1 = "hello" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
static method foo() → dynamic {
- core::String y = let final dynamic #t2 = new self::B::•().{self::B::x} in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 bf205a4..0a109ac 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,7 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 84d133b..8c7be39 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,7 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 d980427..6da1d62 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,7 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 c5b8a9c..66a87ce 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,7 @@
;
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
}
}
@@ -24,7 +24,7 @@
;
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
self::Baz::T y = i;
}
}
@@ -32,13 +32,13 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 y = x;
}
dynamic z;
@@ -57,7 +57,7 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 ^") {
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 7671fe8..46005fa 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,7 @@
;
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
}
}
@@ -25,7 +25,7 @@
;
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
self::Baz::T y = i;
}
}
@@ -37,13 +37,13 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 y = x;
}
dynamic z;
@@ -62,7 +62,7 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 ^") {
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 cabfadb..eb2a83e 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,7 @@
class Foo extends core::Object {
field core::int x = 1;
- constructor •([core::int x = let final dynamic #t1 = "1" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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
: self::Foo::x = x, super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect
index 58bf32f..83f4257 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<core::int>> extends core::Object {
default constructor •() → void
: super core::Object::•()
;
@@ -12,7 +12,7 @@
: super core::Object::•()
;
}
-static field self::B<dynamic> v = null;
+static field self::B<self::A<core::int>> v = null;
static method main() → dynamic {
self::v;
}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect
index a124293..d6316f7 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect
@@ -7,12 +7,12 @@
: super core::Object::•()
;
}
-class B<T extends self::A<dynamic>> extends core::Object {
+class B<T extends self::A<core::int>> extends core::Object {
default constructor •() → void
: super core::Object::•()
;
}
-static field self::B<dynamic> v = null;
+static field self::B<self::A<core::int>> v = null;
static method main() → dynamic {
self::v;
}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect
index 6be8e0b..a6e138b 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect
@@ -12,7 +12,7 @@
: super core::Object::•()
;
}
-static field self::B<dynamic> v = null;
+static field self::B<self::A<dynamic>> v = null;
static method main() → dynamic {
self::v;
}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect
index 4770520..fa1e89c 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect
@@ -7,7 +7,7 @@
: super core::Object::•()
;
}
-static field self::A<dynamic> v = null;
+static field self::A<core::int> v = null;
static method main() → dynamic {
self::v;
}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect
index 4770520..fa1e89c 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect
@@ -7,7 +7,7 @@
: super core::Object::•()
;
}
-static field self::A<dynamic> v = null;
+static field self::A<core::int> v = null;
static method main() → dynamic {
self::v;
}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect
index a82a67e..5618eb8 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect
@@ -12,7 +12,7 @@
: super core::Object::•()
;
}
-static field self::B<dynamic> v = null;
+static field self::B<self::A> v = null;
static method main() → dynamic {
self::v;
}
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 530a778..58cfa0a 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,14 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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}(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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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}(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 4ebc1ee..821836d 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,13 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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}(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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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}(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 4dc01e4..08b1d5d 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,7 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 ^";
}
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 a918da1..b8f2535 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,17 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^");
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::[]=}(4.0, "u");
- x.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^");
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 91043cc..8798304 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,16 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^");
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::[]=}(4.0, "u");
- self::x2.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^");
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/propagate_inference_transitively.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
index 48ae27d..9d2eb39 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,8 @@
}
static method test5() → dynamic {
self::A a1 = new self::A::•();
- a1.{self::A::x} = let final dynamic #t1 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
self::A a2 = new self::A::•();
- a2.{self::A::x} = let final dynamic #t2 = "hi" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 7e2ea00..7a9fa5e 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,7 @@
: super core::Object::•()
;
set x(dynamic #synthetic) → void
- let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\n void set x() {}\n ^";
}
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 734cbb2..e48816b 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,7 @@
: super core::Object::•()
;
set x(dynamic #synthetic) → void
- let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\n void set x() {}\n ^";
}
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 44c0bca..9deb7db 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,7 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 ^";
}
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_new/for_each_invalid_iterable.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
index c5e0b7d..6e772f2 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,17 @@
static method test() → dynamic async {
core::String s;
- for (final dynamic #t1 in let final dynamic #t2 = s in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 ^") {
core::int x = #t1 as{TypeError} core::int;
}
- await for (final dynamic #t3 in let final dynamic #t4 = s in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 ^") {
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 ^") {
y = #t5 as{TypeError} core::int;
}
- await for (final dynamic #t7 in let final dynamic #t8 = s in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 ^") {
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 35b39d2..8013f99 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,10 @@
b = #t4 as{TypeError} self::B;
}
for (final self::A #t5 in iterable) {
- i = let final dynamic #t6 = #t5 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
await for (final self::A #t7 in stream) {
- i = let final dynamic #t8 = #t7 in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 e975696..b541199 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,11 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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;
}
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 +132,10 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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;
}
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 8c8778a..852b248 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,11 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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;
}
}
abstract class Test4 extends core::Object {
@@ -123,10 +123,10 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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;
}
}
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 de5b829..b0964a3 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,11 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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;
}
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 +88,10 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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;
}
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 19f5a4c..abc9777 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,8 @@
: 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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 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 9da5914..6a1582a 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,5 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 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 5220a4a..77f5f93 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
@@ -11,10 +11,10 @@
}
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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.{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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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;
a = new self::A::•();
- a = let final dynamic #t3 = a.{self::A::+}(1) in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\nTry changing the type of the left hand side, or casting the right hand side to '#lib1::A'.\n a /*@error=InvalidAssignment*/ += 1;\n ^";
}
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 4900c71..9ca2218 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
@@ -27,17 +27,17 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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 ^";
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
static method ok() → dynamic {
function localFunction(core::int i) → void {}
diff --git a/pkg/front_end/testcases/native_as_name.dart b/pkg/front_end/testcases/native_as_name.dart
new file mode 100644
index 0000000..8bd1047
--- /dev/null
+++ b/pkg/front_end/testcases/native_as_name.dart
@@ -0,0 +1,33 @@
+// 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.
+
+main() {
+ print(new W().native);
+ print(new X().native());
+ print(new Y2().native);
+ print((new Z()..native = "setter").f);
+}
+
+class W {
+ String native;
+ W() : native = "field";
+}
+
+class X {
+ String native() => "method";
+}
+
+class Y1 {
+ String get native;
+}
+
+class Y2 {
+ @override
+ String get native => "getter";
+}
+
+class Z {
+ set native(String s) => f = s;
+ String f;
+}
diff --git a/pkg/front_end/testcases/native_as_name.dart.direct.expect b/pkg/front_end/testcases/native_as_name.dart.direct.expect
new file mode 100644
index 0000000..01d9add
--- /dev/null
+++ b/pkg/front_end/testcases/native_as_name.dart.direct.expect
@@ -0,0 +1,45 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class W extends core::Object {
+ field core::String native;
+ constructor •() → void
+ : self::W::native = "field", super core::Object::•()
+ ;
+}
+class X extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ method native() → core::String
+ return "method";
+}
+class Y1 extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ abstract get native() → core::String;
+}
+class Y2 extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ @core::override
+ get native() → core::String
+ return "getter";
+}
+class Z extends core::Object {
+ field core::String f = null;
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ set native(core::String s) → dynamic
+ return this.{self::Z::f} = s;
+}
+static method main() → dynamic {
+ core::print(new self::W::•().native);
+ core::print(new self::X::•().native());
+ core::print(new self::Y2::•().native);
+ core::print((let final dynamic #t1 = new self::Z::•() in let final dynamic #t2 = #t1.native = "setter" in #t1).f);
+}
diff --git a/pkg/front_end/testcases/native_as_name.dart.outline.expect b/pkg/front_end/testcases/native_as_name.dart.outline.expect
new file mode 100644
index 0000000..9955d59
--- /dev/null
+++ b/pkg/front_end/testcases/native_as_name.dart.outline.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class W extends core::Object {
+ field core::String native;
+ constructor •() → void
+ ;
+}
+class X extends core::Object {
+ default constructor •() → void
+ ;
+ method native() → core::String
+ ;
+}
+class Y1 extends core::Object {
+ default constructor •() → void
+ ;
+ abstract get native() → core::String;
+}
+class Y2 extends core::Object {
+ default constructor •() → void
+ ;
+ get native() → core::String
+ ;
+}
+class Z extends core::Object {
+ field core::String f;
+ default constructor •() → void
+ ;
+ set native(core::String s) → dynamic
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/native_as_name.dart.strong.expect b/pkg/front_end/testcases/native_as_name.dart.strong.expect
new file mode 100644
index 0000000..eb3cfd0
--- /dev/null
+++ b/pkg/front_end/testcases/native_as_name.dart.strong.expect
@@ -0,0 +1,45 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class W extends core::Object {
+ field core::String native;
+ constructor •() → void
+ : self::W::native = "field", super core::Object::•()
+ ;
+}
+class X extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ method native() → core::String
+ return "method";
+}
+class Y1 extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ abstract get native() → core::String;
+}
+class Y2 extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ @core::override
+ get native() → core::String
+ return "getter";
+}
+class Z extends core::Object {
+ field core::String f = null;
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ set native(core::String s) → void
+ return this.{self::Z::f} = s;
+}
+static method main() → dynamic {
+ core::print(new self::W::•().{self::W::native});
+ core::print(new self::X::•().{self::X::native}());
+ core::print(new self::Y2::•().{self::Y2::native});
+ core::print((let final self::Z #t1 = new self::Z::•() in let final dynamic #t2 = #t1.{self::Z::native} = "setter" in #t1).{self::Z::f});
+}
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart b/pkg/front_end/testcases/override_check_after_inference.dart
new file mode 100644
index 0000000..9777a7e
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_after_inference.dart
@@ -0,0 +1,27 @@
+// 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 file.
+
+/*@testedFeatures=error*/
+
+class A {}
+
+class B extends A {}
+
+class C {
+ void f(A x) {}
+}
+
+class D extends C {
+ void f(x) {} // Inferred type: (A) -> void
+}
+
+class E extends D {
+ void f(A x) {} // Ok
+}
+
+class F extends D {
+ void f(B /*@error=OverrideTypeMismatchParameter*/ x) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.direct.expect b/pkg/front_end/testcases/override_check_after_inference.dart.direct.expect
new file mode 100644
index 0000000..ecd2931
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.direct.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+}
+class B extends self::A {
+ default constructor •() → void
+ : super self::A::•()
+ ;
+}
+class C extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ method f(self::A x) → void {}
+}
+class D extends self::C {
+ default constructor •() → void
+ : super self::C::•()
+ ;
+ method f(dynamic x) → void {}
+}
+class E extends self::D {
+ default constructor •() → void
+ : super self::D::•()
+ ;
+ method f(self::A x) → void {}
+}
+class F extends self::D {
+ default constructor •() → void
+ : super self::D::•()
+ ;
+ method f(self::B x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect b/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect
new file mode 100644
index 0000000..9f2649d
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ default constructor •() → void
+ ;
+}
+class B extends self::A {
+ default constructor •() → void
+ ;
+}
+class C extends core::Object {
+ default constructor •() → void
+ ;
+ method f(self::A x) → void
+ ;
+}
+class D extends self::C {
+ default constructor •() → void
+ ;
+ method f(dynamic x) → void
+ ;
+}
+class E extends self::D {
+ default constructor •() → void
+ ;
+ method f(self::A x) → void
+ ;
+}
+class F extends self::D {
+ default constructor •() → void
+ ;
+ method f(self::B x) → void
+ ;
+}
+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
new file mode 100644
index 0000000..02d5935
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+}
+class B extends self::A {
+ default constructor •() → void
+ : super self::A::•()
+ ;
+}
+class C extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ method f(self::A x) → void {}
+}
+class D extends self::C {
+ default constructor •() → void
+ : super self::C::•()
+ ;
+ method f(self::A x) → void {}
+}
+class E extends self::D {
+ default constructor •() → void
+ : super self::D::•()
+ ;
+ method f(self::A x) → void {}
+}
+class F extends self::D {
+ default constructor •() → void
+ : super self::D::•()
+ ;
+ 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 method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_basic.dart b/pkg/front_end/testcases/override_check_basic.dart
new file mode 100644
index 0000000..70134a6
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_basic.dart
@@ -0,0 +1,32 @@
+// 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 file.
+
+/*@testedFeatures=error*/
+
+class A {}
+
+class B extends A {}
+
+class C {
+ void f1(A x) {}
+ void f2([A x]) {}
+ void f3({A x}) {}
+ A f4() {}
+}
+
+class D extends C {
+ void f1(Object x) {} // Ok
+ void f2([Object x]) {} // Ok
+ void f3({Object x}) {} // Ok
+ B f4() {} // Ok
+}
+
+class E extends C {
+ void f1(B /*@error=OverrideTypeMismatchParameter*/ x) {}
+ void f2([B /*@error=OverrideTypeMismatchParameter*/ x]) {}
+ void f3({B /*@error=OverrideTypeMismatchParameter*/ x}) {}
+ Object /*@error=OverrideTypeMismatchReturnType*/ f4() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/override_check_basic.dart.direct.expect b/pkg/front_end/testcases/override_check_basic.dart.direct.expect
new file mode 100644
index 0000000..bbf5c19
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_basic.dart.direct.expect
@@ -0,0 +1,42 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+}
+class B extends self::A {
+ default constructor •() → void
+ : super self::A::•()
+ ;
+}
+class C extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ method f1(self::A x) → void {}
+ method f2([self::A x = null]) → void {}
+ method f3({self::A x = null}) → void {}
+ method f4() → self::A {}
+}
+class D extends self::C {
+ default constructor •() → void
+ : super self::C::•()
+ ;
+ method f1(core::Object x) → void {}
+ method f2([core::Object x = null]) → void {}
+ method f3({core::Object x = null}) → void {}
+ method f4() → self::B {}
+}
+class E extends self::C {
+ default constructor •() → void
+ : super self::C::•()
+ ;
+ method f1(self::B x) → void {}
+ method f2([self::B x = null]) → void {}
+ method f3({self::B x = null}) → void {}
+ method f4() → core::Object {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_basic.dart.outline.expect b/pkg/front_end/testcases/override_check_basic.dart.outline.expect
new file mode 100644
index 0000000..a3e5791
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_basic.dart.outline.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ default constructor •() → void
+ ;
+}
+class B extends self::A {
+ default constructor •() → void
+ ;
+}
+class C extends core::Object {
+ default constructor •() → void
+ ;
+ method f1(self::A x) → void
+ ;
+ method f2([self::A x]) → void
+ ;
+ method f3({self::A x}) → void
+ ;
+ method f4() → self::A
+ ;
+}
+class D extends self::C {
+ default constructor •() → void
+ ;
+ method f1(core::Object x) → void
+ ;
+ method f2([core::Object x]) → void
+ ;
+ method f3({core::Object x}) → void
+ ;
+ method f4() → self::B
+ ;
+}
+class E extends self::C {
+ default constructor •() → void
+ ;
+ method f1(self::B x) → void
+ ;
+ method f2([self::B x]) → void
+ ;
+ method f3({self::B x}) → void
+ ;
+ method f4() → core::Object
+ ;
+}
+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
new file mode 100644
index 0000000..9252e55d
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_basic.dart.strong.expect
@@ -0,0 +1,43 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+}
+class B extends self::A {
+ default constructor •() → void
+ : super self::A::•()
+ ;
+}
+class C extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ method f1(self::A x) → void {}
+ method f2([self::A x = null]) → void {}
+ method f3({self::A x = null}) → void {}
+ method f4() → self::A {}
+}
+class D extends self::C {
+ default constructor •() → void
+ : super self::C::•()
+ ;
+ method f1(core::Object x) → void {}
+ method f2([core::Object x = null]) → void {}
+ method f3({core::Object x = null}) → void {}
+ method f4() → self::B {}
+}
+class E extends self::C {
+ default constructor •() → void
+ : super self::C::•()
+ ;
+ method f1(self::B x) → void {}
+ method f2([self::B x = null]) → void {}
+ 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 method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart b/pkg/front_end/testcases/override_check_two_substitutions.dart
new file mode 100644
index 0000000..98ab523
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart
@@ -0,0 +1,17 @@
+// 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 file.
+
+/*@testedFeatures=error*/
+
+class A<T> {
+ void f<U>(Map<T, U> m) {}
+}
+
+class B extends A<String> {
+ // To see that this is a valid override, both T and U need to be substituted
+ // correctly.
+ void f<V>(Map<String, V> m) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect
new file mode 100644
index 0000000..9a29468
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ method f<U extends core::Object>(core::Map<self::A::T, self::A::f::U> m) → void {}
+}
+class B extends self::A<core::String> {
+ default constructor •() → void
+ : super self::A::•()
+ ;
+ method f<V extends core::Object>(core::Map<core::String, self::B::f::V> m) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
new file mode 100644
index 0000000..4eeabe2
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+ default constructor •() → void
+ ;
+ method f<U extends core::Object>(core::Map<self::A::T, self::A::f::U> m) → void
+ ;
+}
+class B extends self::A<core::String> {
+ default constructor •() → void
+ ;
+ method f<V extends core::Object>(core::Map<core::String, self::B::f::V> m) → void
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect
new file mode 100644
index 0000000..21337fd
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ method f<U extends core::Object>(generic-covariant-impl generic-covariant-interface core::Map<self::A::T, self::A::f::U> m) → void {}
+}
+class B extends self::A<core::String> {
+ default constructor •() → void
+ : super self::A::•()
+ ;
+ method f<V extends core::Object>(generic-covariant-impl core::Map<core::String, self::B::f::V> m) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart
new file mode 100644
index 0000000..715a685
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart
@@ -0,0 +1,29 @@
+// 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 file.
+
+/*@testedFeatures=error*/
+
+class A {}
+
+class B extends A {}
+
+class C {
+ void f1(covariant A x) {}
+ void f2(A x) {}
+ void f3(covariant A x) {}
+ void f4(A x) {}
+ void f5(covariant A x) {}
+ void f6(covariant B x) {}
+}
+
+class D extends C {
+ void f1(B x) {} // Ok because covariant is inherited
+ void f2(covariant B x) {} // Ok because covariant
+ void f3(covariant B x) {} // Ok because covariant
+ void f4(B /*@error=OverrideTypeMismatchParameter*/ x) {} // Not covariant
+ void f5(covariant String /*@error=OverrideTypeMismatchParameter*/ x) {}
+ void f6(covariant A x) {} // Always ok
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.direct.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.direct.expect
new file mode 100644
index 0000000..8ae0958
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.direct.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+}
+class B extends self::A {
+ default constructor •() → void
+ : super self::A::•()
+ ;
+}
+class C extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ method f1(covariant self::A x) → void {}
+ method f2(self::A x) → void {}
+ method f3(covariant self::A x) → void {}
+ method f4(self::A x) → void {}
+ method f5(covariant self::A x) → void {}
+ method f6(covariant self::B x) → void {}
+}
+class D extends self::C {
+ default constructor •() → void
+ : super self::C::•()
+ ;
+ method f1(self::B x) → void {}
+ method f2(covariant self::B x) → void {}
+ method f3(covariant self::B x) → void {}
+ method f4(self::B x) → void {}
+ method f5(covariant core::String x) → void {}
+ method f6(covariant self::A x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect
new file mode 100644
index 0000000..de5016f
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ default constructor •() → void
+ ;
+}
+class B extends self::A {
+ default constructor •() → void
+ ;
+}
+class C extends core::Object {
+ default constructor •() → void
+ ;
+ method f1(covariant self::A x) → void
+ ;
+ method f2(self::A x) → void
+ ;
+ method f3(covariant self::A x) → void
+ ;
+ method f4(self::A x) → void
+ ;
+ method f5(covariant self::A x) → void
+ ;
+ method f6(covariant self::B x) → void
+ ;
+}
+class D extends self::C {
+ default constructor •() → void
+ ;
+ method f1(self::B x) → void
+ ;
+ method f2(covariant self::B x) → void
+ ;
+ method f3(covariant self::B x) → void
+ ;
+ method f4(self::B x) → void
+ ;
+ method f5(covariant core::String x) → void
+ ;
+ method f6(covariant self::A x) → void
+ ;
+}
+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
new file mode 100644
index 0000000..06f4aca
--- /dev/null
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+}
+class B extends self::A {
+ default constructor •() → void
+ : super self::A::•()
+ ;
+}
+class C extends core::Object {
+ default constructor •() → void
+ : super core::Object::•()
+ ;
+ method f1(covariant self::A x) → void {}
+ method f2(self::A x) → void {}
+ method f3(covariant self::A x) → void {}
+ method f4(self::A x) → void {}
+ method f5(covariant self::A x) → void {}
+ method f6(covariant self::B x) → void {}
+}
+class D extends self::C {
+ default constructor •() → void
+ : super self::C::•()
+ ;
+ method f1(covariant self::B x) → void {}
+ method f2(covariant self::B x) → void {}
+ method f3(covariant self::B x) → void {}
+ method f4(self::B x) → void {}
+ 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 method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.direct.expect b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.direct.expect
index 2ba15c7..7f8beee 100644
--- a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.direct.expect
@@ -4,7 +4,7 @@
class C extends core::Object {
const constructor •() → void
- : final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:20: Error: Method not found: 'x'.\n const C() : this.x(1);\n ^"))
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:20: Error: Method not found: 'x'.\n const C() : this.x(1);\n ^"
;
const constructor x() → void
: super core::Object::•()
diff --git a/pkg/front_end/testcases/rasta/bad_continue.dart.direct.expect b/pkg/front_end/testcases/rasta/bad_continue.dart.direct.expect
index 977534a..f0ab924 100644
--- a/pkg/front_end/testcases/rasta/bad_continue.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/bad_continue.dart.direct.expect
@@ -1,9 +1,8 @@
library;
import self as self;
-import "dart:core" as core;
static method main() → dynamic {
- const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/bad_continue.dart:6:12: Error: Can't find label 'here'.\n continue here;\n ^"));
+ invalid-expression "pkg/front_end/testcases/rasta/bad_continue.dart:6:12: Error: Can't find label 'here'.\n continue here;\n ^";
#L1:
break #L1;
}
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.direct.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.direct.expect
index e11ae08..dcdb2f0 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.direct.expect
@@ -4,12 +4,12 @@
class A extends core::Object {
constructor •(dynamic x) → void
- : final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.\n A(this.x);\n ^"))
+ : final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.\n A(this.x);\n ^"
;
}
class B extends self::A {
const constructor •() → void
- : final dynamic #t2 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The unnamed constructor in 'A' requires arguments.\n const B();\n ^"))
+ : final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The unnamed constructor in 'A' requires arguments.\n const B();\n ^"
;
}
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/bad_redirection.dart.direct.expect b/pkg/front_end/testcases/rasta/bad_redirection.dart.direct.expect
index 9446333..d61c880 100644
--- a/pkg/front_end/testcases/rasta/bad_redirection.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/bad_redirection.dart.direct.expect
@@ -5,7 +5,7 @@
class Foo extends core::Object {
constructor •() → void
: super core::Object::•()
- const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/bad_redirection.dart:6:11: Error: Can't return from a constructor.\n Foo() = Bar;\n ^"));
+ invalid-expression "pkg/front_end/testcases/rasta/bad_redirection.dart:6:11: Error: Can't return from a constructor.\n Foo() = Bar;\n ^";
}
class Bar extends self::Foo {
static factory •() → self::Bar
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.direct.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.direct.expect
index 8a3cd35..957daf2 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.direct.expect
@@ -4,7 +4,7 @@
class C extends core::Object {
constructor •() → void
- : final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:15: Error: 'field' isn't an instance field of this class.\n C() : field = null;\n ^"))
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:15: Error: 'field' isn't an instance field of this class.\n C() : field = null;\n ^"
;
set field(dynamic value) → dynamic {}
}
diff --git a/pkg/front_end/testcases/rasta/breaking_bad.dart.direct.expect b/pkg/front_end/testcases/rasta/breaking_bad.dart.direct.expect
index 359a253..eadb4ab 100644
--- a/pkg/front_end/testcases/rasta/breaking_bad.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/breaking_bad.dart.direct.expect
@@ -1,9 +1,8 @@
library;
import self as self;
-import "dart:core" as core;
static method main() → dynamic {
- const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/breaking_bad.dart:6:3: Error: No target of break.\n break;\n ^"));
+ invalid-expression "pkg/front_end/testcases/rasta/breaking_bad.dart:6:3: Error: No target of break.\n break;\n ^";
#L1:
break #L1;
}
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.direct.expect
index 9f60197..f284b26 100644
--- a/pkg/front_end/testcases/rasta/issue_000031.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.direct.expect
@@ -1,7 +1,6 @@
library;
import self as self;
-import "dart:core" as core;
static method main() → dynamic {
- let final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/issue_000031.dart: Error: A library can't be used as an expression.")) in let final dynamic #t2 = #t1.toString() in #t1;
+ let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart: Error: A library can't be used as an expression." in let final dynamic #t2 = #t1.toString() in #t1;
}
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 1d114ad..a3bb321 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
@@ -1,6 +1,5 @@
library;
import self as self;
-import "dart:core" as core;
-@const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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'.\n@JS()\n ^"
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000042.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000042.dart.direct.expect
index d807232..c4f7d99 100644
--- a/pkg/front_end/testcases/rasta/issue_000042.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000042.dart.direct.expect
@@ -3,7 +3,7 @@
import "dart:core" as core;
static method main() → dynamic {
- for (final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/issue_000042.dart:6:8: Error: Expected lvalue, but got [x, y]\n for (var x, y in []) {}\n ^")) in <dynamic>[]) {
+ for (final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/issue_000042.dart:6:8: Error: Expected lvalue, but got [x, y]\n for (var x, y in []) {}\n ^" in <dynamic>[]) {
}
#L1:
{
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.direct.expect
index 2894bc1..abff29a 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.direct.expect
@@ -9,7 +9,7 @@
;
constructor missingFactoryKeyword() → void
: super core::Object::•()
- const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Can't return from a constructor.\n C.missingFactoryKeyword() = C.constant;\n ^"));
+ invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Can't return from a constructor.\n C.missingFactoryKeyword() = C.constant;\n ^";
static factory good() → self::C
let dynamic #redirecting_factory = self::C::constant in invalid-expression;
method notEvenAConstructor(dynamic a) → self::C
@@ -20,7 +20,7 @@
static method main() → dynamic {
self::C c = null;
core::print(const self::C::constant());
- core::print(const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Not a const constructor.\n print(const C.missingFactoryKeyword());\n ^")));
+ core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Not a const constructor.\n print(const C.missingFactoryKeyword());\n ^");
core::print(const self::C::constant());
core::print(new self::C::constant().notEvenAConstructor(null));
}
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.direct.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.direct.expect
index 3e1085f..c8306b8 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.direct.expect
@@ -4,7 +4,7 @@
class A extends core::Object {
const constructor •() → void
- : final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/malformed_const_constructor.dart:7:7: Error: Setter not found: 'x'.\n : x = 'foo'\n ^"))
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/malformed_const_constructor.dart:7:7: Error: Setter not found: 'x'.\n : x = 'foo'\n ^"
;
}
static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/malformed_const_constructor.dart:8:5: Error: Expected a function body, but got ':'.\n : x = 'foo'\n ^", "pkg/front_end/testcases/rasta/malformed_const_constructor.dart: Error: A const constructor can't have a body."]/* from null */;
diff --git a/pkg/front_end/testcases/rasta/malformed_function.dart.direct.expect b/pkg/front_end/testcases/rasta/malformed_function.dart.direct.expect
index a0ceaaf..e391c9b 100644
--- a/pkg/front_end/testcases/rasta/malformed_function.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function.dart.direct.expect
@@ -1,7 +1,6 @@
library;
import self as self;
-import "dart:core" as core;
static method main() → dynamic {
- const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/malformed_function.dart:7:8: Error: Can't assign to a parenthesized expression.\n (null) = null;\n ^"));
+ invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:7:8: Error: Can't assign to a parenthesized expression.\n (null) = null;\n ^";
}
diff --git a/pkg/front_end/testcases/rasta/super.dart.direct.expect b/pkg/front_end/testcases/rasta/super.dart.direct.expect
index 23bb7ae..864867d 100644
--- a/pkg/front_end/testcases/rasta/super.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.direct.expect
@@ -51,8 +51,8 @@
self::use(super.{self::A::~}());
super.{self::A::unary-}();
self::use(super.{self::A::unary-}());
- this.•.+(const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use `super` as an expression.\n +super;\n ^")));
- self::use(this.•.+(const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use `super` as an expression.\n use(+super);\n ^"))));
+ this.•.+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use `super` as an expression.\n +super;\n ^");
+ self::use(this.•.+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use `super` as an expression.\n use(+super);\n ^"));
super.{self::A::==}(87);
self::use(super.{self::A::==}(87));
!super.{self::A::==}(87);
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index 4de50f1..5430f1d 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -51,8 +51,8 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 ^"))).+(const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 ^"))).+(const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^"));
super.{self::A::==}(87);
self::use(super.{self::A::==}(87));
!super.{self::A::==}(87);
@@ -101,10 +101,10 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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.{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 +125,10 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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.{self::A::a}.call();
self::use(super.{self::A::a}.call());
super.{self::B::b}.call();
@@ -223,10 +223,10 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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.{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,10 +247,10 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^");
}
}
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:44:9: Error: '+' is not a prefix operator.\nTry removing '+'.\n use(+super);\n ^"]/* from null */;
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 ac56b5b..6741aa0 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,14 @@
let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <dynamic>[], <dynamic>[#t2].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
core::print(self::Fisk);
}
- for (final dynamic #t3 = let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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) {
- core::print(const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/unresolved_for_in.dart: Error: A library can't be used as an expression.")));
+ 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) {
+ 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 <dynamic>[], <dynamic>[#t4].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
core::print(() → void);
}
- for (final dynamic #t5 = let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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\n for (1 in x) {\n ^" in x) {
core::print(this.key);
}
}
@@ -38,14 +38,14 @@
let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <dynamic>[], <dynamic>[#t7].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
core::print(self::Fisk);
}
- for (final dynamic #t8 = let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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) {
- core::print(const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/rasta/unresolved_for_in.dart: Error: A library can't be used as an expression.")));
+ 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) {
+ 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 <dynamic>[], <dynamic>[#t9].toList(growable: false), core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
core::print(() → void);
}
- for (final dynamic #t10 = let dynamic _ = null in const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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\n for (1 in arguments) {\n ^" in arguments) {
core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{}))));
}
}
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 dc22e28..5cfc393 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
@@ -1,9 +1,8 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
dynamic a = "";
- const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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 '\"\"'.\n a.\"\";\n ^";
}
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 999c91b..0be6765 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,6 @@
static method bad() → dynamic {
core::String a = "";
- const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 '\"\"'.\n a.\"\";\n ^";
}
static method main() → dynamic {}
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 f3457c6..974f689 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
- const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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 '('.\n x.(null);\n ^";
}
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 8bafc43..974f689 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
- const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 '('.\n x.(null);\n ^";
}
static method main() → 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 3cf4a03..340ebcf 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
@@ -1,12 +1,11 @@
library;
import self as self;
-import "dart:core" as core;
static method f() → dynamic sync* {
- const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\n return missing;\n ^";
}
static method g() → dynamic sync*
- const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\ng() sync* => dummy;\n ^";
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 9690132..544ffb8 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
@@ -3,10 +3,10 @@
import "dart:core" as core;
static method f() → dynamic sync* {
- const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\n return missing;\n ^";
}
static method g() → dynamic sync*
- const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\ng() sync* => dummy;\n ^";
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 3c1d7c5..6dd3ecf 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
@@ -1,10 +1,9 @@
library;
import self as self;
-import "dart:core" as core;
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 method bad() → dynamic {
- for (final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\n for (int i = i;; false) {}\n ^"; ; 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 e52d320..6dd3ecf 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -1,10 +1,9 @@
library;
import self as self;
-import "dart:core" as core;
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 method bad() → dynamic {
- for (final dynamic #t1 = const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\n for (int i = i;; false) {}\n ^"; ; false) {
}
}
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 e6d2919..6e85a5c 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
- return const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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 '('.\n return null?.(1);\n ^";
}
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 f4e5fc3..6e85a5c 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
- return const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 '('.\n return null?.(1);\n ^";
}
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 0bf317f..2d0fca7 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
- return const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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 '['.\n return null?.[1];\n ^";
}
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 98db547..2d0fca7 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
- return const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 '['.\n return null?.[1];\n ^";
}
static method main() → dynamic {}
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 46417cd..7175ccd 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
@@ -4,7 +4,7 @@
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 method bad() → dynamic {
- for (core::int i = 0, final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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 <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, 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.\n for (int i = 0, i > 10; i++) {}\n ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, 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 2636284..0177011 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
@@ -4,7 +4,7 @@
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 method bad() → dynamic {
- for (core::int i = 0, final dynamic #t1 = const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, 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.\n for (int i = 0, i > 10; i++) {}\n ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, 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 c888cdc..dc53dd7 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
- return const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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'.\n return null?.true;\n ^";
}
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 b576812..dc53dd7 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
- return const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\n return null?.true;\n ^";
}
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 b572c76..288ffbf 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
- return const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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'.\n return null?.1;\n ^";
}
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 3ec70a0..288ffbf 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
@@ -1,8 +1,7 @@
library;
import self as self;
-import "dart:core" as core;
static method bad() → dynamic {
- return const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\n return null?.1;\n ^";
}
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 0177799..a3c7dee 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
@@ -5,6 +5,6 @@
class Increment extends core::Object {
field core::int x = null;
constructor •() → void
- : final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31192.dart:7:18: Error: Not a valid initializer.\nTo initialize a field, use the syntax 'name = value'.\n Increment() : x++ {}\n ^")) {}
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:18: Error: Not a valid initializer.\nTo initialize a field, use the syntax 'name = value'.\n Increment() : x++ {}\n ^" {}
}
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 e570872..a3c7dee 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
@@ -5,6 +5,6 @@
class Increment extends core::Object {
field core::int x = null;
constructor •() → void
- : final dynamic #t1 = const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/regress/issue_31192.dart:7:18: Error: Not a valid initializer.\nTo initialize a field, use the syntax 'name = value'.\n Increment() : x++ {}\n ^")) {}
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:18: Error: Not a valid initializer.\nTo initialize a field, use the syntax 'name = value'.\n Increment() : x++ {}\n ^" {}
}
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 072b91b..7a0c1f5 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,7 @@
}
class B extends self::A {
constructor •() → void
- : final dynamic #t1 = const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n B(): super().foo() {}\n ^".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 ad0da2f..7a0c1f5 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,7 @@
}
class B extends self::A {
constructor •() → void
- : final dynamic #t1 = const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n B(): super().foo() {}\n ^".foo() {}
}
static method bad() → dynamic {
new self::B::•();
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 8f3f8c1..b817868 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,7 @@
;
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^");
}
}
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 6653026..ef697c2 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,11 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
});
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 b614d43..212456e 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,9 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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>'.\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;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index b92e4f8..abc2724 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -41,6 +41,9 @@
null_aware: Fail
operators: Fail
optional: Fail
+override_check_after_inference: TypeCheckError # Issue #31620
+override_check_basic: TypeCheckError # Issue #31620
+override_check_with_covariant_modifier: TypeCheckError # Issue #31620
platform: Fail
prefer_baseclass: Fail
redirecting_constructor: Fail
@@ -102,7 +105,7 @@
inference/infer_type_regardless_of_declaration_order_or_cycles: RuntimeError
inference/infer_types_on_generic_instantiations_4: RuntimeError
inference/infer_types_on_generic_instantiations_infer: TypeCheckError
-inference/instantiate_tearoff_of_call: TypeCheckError
+inference/instantiate_tearoff_of_call: Fail # Issue #31746
inference/instantiate_to_bounds_generic_has_bound_defined_after transform: RuntimeError
inference/unresolved_super: TypeCheckError
inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: Fail # Issue #25824
diff --git a/pkg/front_end/testcases/super_call.dart.direct.expect b/pkg/front_end/testcases/super_call.dart.direct.expect
index b526f3a0..39a17a6 100644
--- a/pkg/front_end/testcases/super_call.dart.direct.expect
+++ b/pkg/front_end/testcases/super_call.dart.direct.expect
@@ -16,7 +16,7 @@
method call(core::int x) → core::int
return x.*(3);
method call_super() → core::int {
- return const core::_ConstantExpressionError::•()._throw(new core::_CompileTimeError::•("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.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n return super(5);\n ^";
}
}
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 3c4e3e0..31219d0 100644
--- a/pkg/front_end/testcases/super_call.dart.strong.expect
+++ b/pkg/front_end/testcases/super_call.dart.strong.expect
@@ -16,7 +16,7 @@
method call(core::int x) → core::int
return x.{core::num::*}(3);
method call_super() → core::int {
- return const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n return super(5);\n ^" 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 d809ae2..3460d49 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,8 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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.{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 +117,8 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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.{self::A::a}.call();
self::use(super.{self::A::a}.call());
super.{self::B::b}.call();
@@ -207,8 +207,8 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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.{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,8 +229,8 @@
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^");
}
}
static method use(dynamic x) → dynamic {
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 d1fddfc..2d5d17c 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -7,9 +7,9 @@
: super core::Object::•()
;
method method() → invalid-type
- return let final dynamic #t1 = "Hello, World!" in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
static method main() → dynamic {
- core::String s = let final dynamic #t2 = new self::C::•<dynamic>().{self::C::method}() in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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::print(s);
}
diff --git a/pkg/front_end/testcases/undefined.dart.strong.expect b/pkg/front_end/testcases/undefined.dart.strong.expect
index 4562a4e..e05b21c 100644
--- a/pkg/front_end/testcases/undefined.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined.dart.strong.expect
@@ -11,10 +11,10 @@
}
static method test(self::C c) → void {
c.{self::C::x};
- let final dynamic #t1 = c in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
c.{self::C::f}();
- let final dynamic #t2 = c in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\nTry correcting the name to the name of an existing method, or defining a method named 'g'.\n c. /*@error=UndefinedMethod*/ g();\n ^";
c.{self::C::x} = null;
- let final dynamic #t3 = c in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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'.\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 ^";
}
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 3d93d26..7a86cc9 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,7 @@
}
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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("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 ^"))).{core::Object::==}(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'.\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 ^").{core::Object::==}(null) ?{dynamic} #t3.{self::C::x} = 1 : null;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/warn_unresolved_sends.dart.strong.expect b/pkg/front_end/testcases/warn_unresolved_sends.dart.strong.expect
index aac9d0a..1668b95 100644
--- a/pkg/front_end/testcases/warn_unresolved_sends.dart.strong.expect
+++ b/pkg/front_end/testcases/warn_unresolved_sends.dart.strong.expect
@@ -45,12 +45,12 @@
this.{self::D::setterOnly} = 0;
this.{self::D::getterOnly};
this.{self::C::getterOnly} = 0;
- let final dynamic #t1 = this in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/warn_unresolved_sends.dart:49:39: Error: The getter 'missingField' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.\n this. /*@warning=GetterNotFound*/ missingField;\n ^"));
- let final dynamic #t2 = this in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/warn_unresolved_sends.dart:50:39: Error: The setter 'missingField' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.\n this. /*@warning=SetterNotFound*/ missingField = 0;\n ^"));
- let final dynamic #t3 = this in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/warn_unresolved_sends.dart:51:39: Error: The method 'missingMethod' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing method, or defining a method named 'missingMethod'.\n this. /*@warning=MethodNotFound*/ missingMethod();\n ^"));
- let final dynamic #t4 = this in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/warn_unresolved_sends.dart:53:33: Error: The getter 'missingField' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.\n /*@warning=GetterNotFound*/ missingField;\n ^"));
- let final dynamic #t5 = this in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/warn_unresolved_sends.dart:54:33: Error: The setter 'missingField' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.\n /*@warning=SetterNotFound*/ missingField = 0;\n ^"));
- let final dynamic #t6 = this in let dynamic _ = null in const core::_ConstantExpressionError::•().{core::_ConstantExpressionError::_throw}(new core::_CompileTimeError::•("pkg/front_end/testcases/warn_unresolved_sends.dart:55:33: Error: The method 'missingMethod' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing method, or defining a method named 'missingMethod'.\n /*@warning=MethodNotFound*/ missingMethod();\n ^"));
+ let final dynamic #t1 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/warn_unresolved_sends.dart:49:39: Error: The getter 'missingField' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.\n this. /*@warning=GetterNotFound*/ missingField;\n ^";
+ let final dynamic #t2 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/warn_unresolved_sends.dart:50:39: Error: The setter 'missingField' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.\n this. /*@warning=SetterNotFound*/ missingField = 0;\n ^";
+ let final dynamic #t3 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/warn_unresolved_sends.dart:51:39: Error: The method 'missingMethod' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing method, or defining a method named 'missingMethod'.\n this. /*@warning=MethodNotFound*/ missingMethod();\n ^";
+ let final dynamic #t4 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/warn_unresolved_sends.dart:53:33: Error: The getter 'missingField' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.\n /*@warning=GetterNotFound*/ missingField;\n ^";
+ let final dynamic #t5 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/warn_unresolved_sends.dart:54:33: Error: The setter 'missingField' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.\n /*@warning=SetterNotFound*/ missingField = 0;\n ^";
+ let final dynamic #t6 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/warn_unresolved_sends.dart:55:33: Error: The method 'missingMethod' isn't defined for the class '#lib1::D'.\nTry correcting the name to the name of an existing method, or defining a method named 'missingMethod'.\n /*@warning=MethodNotFound*/ missingMethod();\n ^";
}
}
class E extends self::D {
diff --git a/pkg/front_end/tool/perf_common.dart b/pkg/front_end/tool/perf_common.dart
index e55fcf7..5599fc0 100644
--- a/pkg/front_end/tool/perf_common.dart
+++ b/pkg/front_end/tool/perf_common.dart
@@ -27,6 +27,8 @@
final whitelistMessageCode = new Set<String>.from(<String>[
// Code names in this list should match the key used in messages.yaml
codeInvalidAssignment.name,
+ codeOverrideTypeMismatchParameter.name,
+ codeOverriddenMethodCause.name,
// The following errors are not covered by unit tests in the SDK repo because
// they are only seen today in the flutter-gallery benchmark (external to
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index b014ea7..848fa2f 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -468,6 +468,8 @@
type InvalidExpression extends Expression {
Byte tag = 19;
+ FileOffset fileOffset;
+ StringReference message;
}
type VariableGet extends Expression {
@@ -908,10 +910,6 @@
abstract type Statement extends Node {}
-type InvalidStatement extends Statement {
- Byte tag = 60;
-}
-
type ExpressionStatement extends Statement {
Byte tag = 61;
Expression expression;
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 9300ef0..e655f93 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -2041,6 +2041,10 @@
///
/// Should throw a runtime error when evaluated.
class InvalidExpression extends Expression {
+ String message;
+
+ InvalidExpression(this.message);
+
DartType getStaticType(TypeEnvironment types) => const BottomType();
accept(ExpressionVisitor v) => v.visitInvalidExpression(this);
@@ -3722,17 +3726,6 @@
accept1(StatementVisitor1 v, arg);
}
-/// A statement with a compile-time error.
-///
-/// Should throw an exception at runtime.
-class InvalidStatement extends Statement {
- accept(StatementVisitor v) => v.visitInvalidStatement(this);
- accept1(StatementVisitor1 v, arg) => v.visitInvalidStatement(this, arg);
-
- visitChildren(Visitor v) {}
- transformChildren(Transformer v) {}
-}
-
@coq
class ExpressionStatement extends Statement {
Expression expression;
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 4dcd262..be7788c 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1155,7 +1155,9 @@
case Tag.CheckLibraryIsLoaded:
return new CheckLibraryIsLoaded(readLibraryDependencyReference());
case Tag.InvalidExpression:
- return new InvalidExpression();
+ int offset = readOffset();
+ return new InvalidExpression(readStringOrNullIfEmpty())
+ ..fileOffset = offset;
case Tag.VariableGet:
int offset = readOffset();
readUInt(); // offset of the variable declaration in the binary.
@@ -1434,8 +1436,6 @@
Statement readStatement() {
int tag = readByte();
switch (tag) {
- case Tag.InvalidStatement:
- return new InvalidStatement();
case Tag.ExpressionStatement:
return new ExpressionStatement(readExpression());
case Tag.Block:
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index b9b8c99..38fbba4 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -870,6 +870,8 @@
visitInvalidExpression(InvalidExpression node) {
writeByte(Tag.InvalidExpression);
+ writeOffset(node.fileOffset);
+ writeStringReference(node.message ?? '');
}
visitVariableGet(VariableGet node) {
@@ -1243,10 +1245,6 @@
}
}
- visitInvalidStatement(InvalidStatement node) {
- writeByte(Tag.InvalidStatement);
- }
-
visitExpressionStatement(ExpressionStatement node) {
writeByte(Tag.ExpressionStatement);
writeNode(node.expression);
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 3910e5f..2380ad9 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -71,7 +71,6 @@
static const int ConstListLiteral = 58;
static const int ConstMapLiteral = 59;
- static const int InvalidStatement = 60;
static const int ExpressionStatement = 61;
static const int Block = 62;
static const int EmptyStatement = 63;
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index d54f44a..420a756 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -60,7 +60,9 @@
return type == null ? null : substitute(type, typeSubstitution);
}
- visitInvalidExpression(InvalidExpression node) => new InvalidExpression();
+ visitInvalidExpression(InvalidExpression node) {
+ return new InvalidExpression(node.message);
+ }
visitVariableGet(VariableGet node) {
return new VariableGet(
@@ -267,11 +269,6 @@
return new VectorCopy(clone(node.vectorExpression));
}
- // Statements
- visitInvalidStatement(InvalidStatement node) {
- return new InvalidStatement();
- }
-
visitExpressionStatement(ExpressionStatement node) {
return new ExpressionStatement(clone(node.expression));
}
diff --git a/pkg/kernel/lib/frontend/accessors.dart b/pkg/kernel/lib/frontend/accessors.dart
index 0c15bc3..e132d55 100644
--- a/pkg/kernel/lib/frontend/accessors.dart
+++ b/pkg/kernel/lib/frontend/accessors.dart
@@ -128,14 +128,13 @@
Expression _finish(Expression body) => body;
/// Returns an [Expression] representing a compile-time error.
- ///
- /// At runtime, an exception will be thrown.
- makeInvalidRead() => new InvalidExpression();
+ makeInvalidRead() => new InvalidExpression(null);
/// Returns an [Expression] representing a compile-time error wrapping
/// [value].
///
- /// At runtime, [value] will be evaluated before throwing an exception.
+ /// The expression will be a compile-time error but will contain [value] as a
+ /// subexpression before the compile-time error.
makeInvalidWrite(Expression value) => wrapInvalid(value);
}
@@ -506,5 +505,6 @@
}
Expression wrapInvalid(Expression e) {
- return new Let(new VariableDeclaration.forValue(e), new InvalidExpression());
+ return new Let(
+ new VariableDeclaration.forValue(e), new InvalidExpression(null));
}
diff --git a/pkg/kernel/lib/interpreter/interpreter.dart b/pkg/kernel/lib/interpreter/interpreter.dart
index 25fa8c11..ef47e93 100644
--- a/pkg/kernel/lib/interpreter/interpreter.dart
+++ b/pkg/kernel/lib/interpreter/interpreter.dart
@@ -1711,11 +1711,6 @@
m: "Execution is not implemented for statement:\n$node ");
}
- Configuration visitInvalidStatement(
- InvalidStatement node, ExecConfiguration conf) {
- throw "Invalid statement at ${node.location}";
- }
-
Configuration visitExpressionStatement(
ExpressionStatement node, ExecConfiguration conf) {
var cont = new ExpressionEK(conf.state.continuation, conf.environment);
diff --git a/pkg/kernel/lib/kernel.dart b/pkg/kernel/lib/kernel.dart
index 48af8f4..e3c04e1 100644
--- a/pkg/kernel/lib/kernel.dart
+++ b/pkg/kernel/lib/kernel.dart
@@ -66,9 +66,15 @@
}
void writeProgramToText(Program program,
- {String path, bool showExternal: false, bool showOffsets: false}) {
+ {String path,
+ bool showExternal: false,
+ bool showOffsets: false,
+ bool showMetadata: false}) {
StringBuffer buffer = new StringBuffer();
- new Printer(buffer, showExternal: showExternal, showOffsets: showOffsets)
+ new Printer(buffer,
+ showExternal: showExternal,
+ showOffsets: showOffsets,
+ showMetadata: showMetadata)
.writeProgramFile(program);
if (path == null) {
print(buffer);
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index d22a14e..342757e 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -72,6 +72,16 @@
/// promotion do not slow down compilation too much.
bool get disableTypeInference => false;
+ /// Perform target-specific transformations on the outlines stored in
+ /// [Program] when generating summaries.
+ ///
+ /// This transformation is used to add metadata on outlines and to filter
+ /// unnecessary information before generating program summaries. This
+ /// transformation is not applied when compiling full kernel programs to
+ /// prevent affecting the internal invariants of the compiler and accidentally
+ /// slowing down compilation.
+ void performOutlineTransformations(Program program) {}
+
/// Perform target-specific modular transformations on the given program.
///
/// These transformations should not be whole-program transformations. They
@@ -169,33 +179,14 @@
/// Builds an expression that throws [error] as compile-time error. The
/// target must be able to handle this expression in a constant expression.
Expression throwCompileConstantError(CoreTypes coreTypes, Expression error) {
- // This method returns `const _ConstantExpressionError()._throw(error)`.
- int offset = error.fileOffset;
- var receiver = new ConstructorInvocation(
- coreTypes.constantExpressionErrorDefaultConstructor,
- new Arguments.empty()..fileOffset = offset,
- isConst: true)
- ..fileOffset = offset;
- var methodInvocation = new MethodInvocation(
- receiver,
- new Name("_throw", coreTypes.coreLibrary),
- new Arguments(<Expression>[error])..fileOffset = error.fileOffset)
- ..fileOffset = offset;
- if (strongMode) {
- methodInvocation.interfaceTarget = coreTypes.constantExpressionErrorThrow;
- }
- return methodInvocation;
+ return error;
}
/// Builds an expression that represents a compile-time error which is
/// suitable for being passed to [throwCompileConstantError].
Expression buildCompileTimeError(
CoreTypes coreTypes, String message, int offset) {
- return new ConstructorInvocation(
- coreTypes.compileTimeErrorDefaultConstructor,
- new Arguments(<Expression>[new StringLiteral(message)])
- ..fileOffset = offset)
- ..fileOffset = offset;
+ return new InvalidExpression(message)..fileOffset = offset;
}
String toString() => 'Target($name)';
@@ -218,7 +209,7 @@
@override
Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
String name, Arguments arguments, int offset, bool isSuper) {
- return new InvalidExpression();
+ return new InvalidExpression(null);
}
@override
@@ -234,6 +225,6 @@
bool isStatic: false,
bool isConstructor: false,
bool isTopLevel: false}) {
- return new InvalidExpression();
+ return new InvalidExpression(null);
}
}
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 449301e..0218fe3 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -222,11 +222,13 @@
final NameSystem syntheticNames;
final StringSink sink;
final Annotator annotator;
+ final Map<String, MetadataRepository<dynamic>> metadata;
ImportTable importTable;
int indentation = 0;
int column = 0;
bool showExternal;
bool showOffsets;
+ bool showMetadata;
static int SPACE = 0;
static int WORD = 1;
@@ -237,16 +239,19 @@
{NameSystem syntheticNames,
this.showExternal,
this.showOffsets: false,
+ this.showMetadata: false,
this.importTable,
- this.annotator})
+ this.annotator,
+ this.metadata})
: this.syntheticNames = syntheticNames ?? new NameSystem();
- Printer._inner(Printer parent, this.importTable)
+ Printer._inner(Printer parent, this.importTable, this.metadata)
: sink = parent.sink,
syntheticNames = parent.syntheticNames,
annotator = parent.annotator,
showExternal = parent.showExternal,
- showOffsets = parent.showOffsets;
+ showOffsets = parent.showOffsets,
+ showMetadata = parent.showMetadata;
bool shouldHighlight(Node node) {
return false;
@@ -387,7 +392,8 @@
}
endLine();
- var inner = new Printer._inner(this, imports);
+ var inner =
+ new Printer._inner(this, imports, library.enclosingProgram?.metadata);
library.typedefs.forEach(inner.writeNode);
library.classes.forEach(inner.writeNode);
library.fields.forEach(inner.writeNode);
@@ -396,7 +402,7 @@
void writeProgramFile(Program program) {
ImportTable imports = new ProgramImportTable(program);
- var inner = new Printer._inner(this, imports);
+ var inner = new Printer._inner(this, imports, program.metadata);
writeWord('main');
writeSpaced('=');
inner.writeMemberReferenceFromReference(program.mainMethodName);
@@ -504,6 +510,9 @@
if (showOffsets && node is TreeNode) {
writeWord("[${node.fileOffset}]");
}
+ if (showMetadata && node is TreeNode) {
+ writeMetadata(node);
+ }
node.accept(this);
@@ -519,6 +528,17 @@
}
}
+ void writeMetadata(TreeNode node) {
+ if (metadata != null) {
+ for (var md in metadata.values) {
+ final nodeMetadata = md.mapping[node];
+ if (nodeMetadata != null) {
+ writeWord("[@${md.tag}=${nodeMetadata}]");
+ }
+ }
+ }
+ }
+
void writeAnnotatedType(DartType type, String annotation) {
writeType(type);
if (annotation != null) {
@@ -998,6 +1018,9 @@
visitInvalidExpression(InvalidExpression node) {
writeWord('invalid-expression');
+ if (node.message != null) {
+ writeWord('"${escapeString(node.message)}"');
+ }
}
visitMethodInvocation(MethodInvocation node) {
@@ -1402,11 +1425,6 @@
writeExpression(node.value);
}
- visitInvalidStatement(InvalidStatement node) {
- writeIndentation();
- endLine('invalid-statement;');
- }
-
visitExpressionStatement(ExpressionStatement node) {
writeIndentation();
writeExpression(node.expression);
diff --git a/pkg/kernel/lib/transformations/closure/converter.dart b/pkg/kernel/lib/transformations/closure/converter.dart
index 3424c0d0..dcc7af9 100644
--- a/pkg/kernel/lib/transformations/closure/converter.dart
+++ b/pkg/kernel/lib/transformations/closure/converter.dart
@@ -392,7 +392,7 @@
/// Is this closure itself captured by a closure?
bool isCaptured = capturedVariables.contains(node.variable);
if (isCaptured) {
- context.extend(node.variable, new InvalidExpression());
+ context.extend(node.variable, new InvalidExpression(null));
}
Context parent = context;
return saveContext(() {
@@ -635,7 +635,7 @@
}
Expression cloneContext() {
- InvalidExpression placeHolder = new InvalidExpression();
+ InvalidExpression placeHolder = new InvalidExpression(null);
contextClonePlaceHolders.add(placeHolder);
return placeHolder;
}
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
index 32b6f74..d9ebd0e 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/kernel/lib/transformations/continuation.dart
@@ -355,11 +355,6 @@
List<Statement> statements = <Statement>[];
- TreeNode visitInvalidStatement(InvalidStatement stmt) {
- statements.add(stmt);
- return null;
- }
-
TreeNode visitExpressionStatement(ExpressionStatement stmt) {
stmt.expression = expressionRewriter.rewrite(stmt.expression, statements)
..parent = stmt;
diff --git a/pkg/kernel/lib/transformations/reify/transformation/builder.dart b/pkg/kernel/lib/transformations/reify/transformation/builder.dart
index 1b9d097..7f0ea0e 100644
--- a/pkg/kernel/lib/transformations/reify/transformation/builder.dart
+++ b/pkg/kernel/lib/transformations/reify/transformation/builder.dart
@@ -302,7 +302,7 @@
return new ConstructorInvocation(
rtiLibrary.voidTypeConstructor, new Arguments(<Expression>[]));
}
- return new InvalidExpression();
+ return new InvalidExpression(null);
}
Expression createCallAsInstanceOf(Expression receiver, Class cls) {
diff --git a/pkg/kernel/lib/type_algebra.dart b/pkg/kernel/lib/type_algebra.dart
index 60b6e3c..9471dd3 100644
--- a/pkg/kernel/lib/type_algebra.dart
+++ b/pkg/kernel/lib/type_algebra.dart
@@ -66,6 +66,58 @@
return substitutor.isInfinite ? null : result;
}
+List<DartType> calculateBounds(
+ List<TypeParameter> typeParameters, Class object) {
+ var refinedBounds = new List<DartType>(typeParameters.length);
+ var substitution = <TypeParameter, DartType>{};
+ var substitutionToDynamic = <TypeParameter, DartType>{};
+
+ for (int i = 0; i < typeParameters.length; i++) {
+ DartType type = typeParameters[i].bound;
+ if (type == null || type is InterfaceType && type.classNode == object) {
+ type = const DynamicType();
+ }
+
+ refinedBounds[i] = type;
+ substitution[typeParameters[i]] = type;
+ substitutionToDynamic[typeParameters[i]] = const DynamicType();
+ }
+
+ var result = new List<DartType>(typeParameters.length);
+ for (int i = 0; i < result.length; i++) {
+ result[i] = substituteDeep(refinedBounds[i], substitution);
+ if (result[i] == null) {
+ result[i] = substitute(refinedBounds[i], substitutionToDynamic);
+ }
+ }
+ return result;
+}
+
+DartType instantiateToBounds(DartType type, Class object) {
+ if (type is InterfaceType) {
+ for (var typeArgument in type.typeArguments) {
+ // If at least one of the arguments is not dynamic, we assume that the
+ // type is not raw and does not need instantiation of its type parameters
+ // to their bounds.
+ if (typeArgument is! DynamicType) {
+ return type;
+ }
+ }
+ return new InterfaceType.byReference(
+ type.className, calculateBounds(type.classNode.typeParameters, object));
+ }
+ if (type is TypedefType) {
+ for (var typeArgument in type.typeArguments) {
+ if (typeArgument is! DynamicType) {
+ return type;
+ }
+ }
+ return new TypedefType.byReference(type.typedefReference,
+ calculateBounds(type.typedefNode.typeParameters, object));
+ }
+ return type;
+}
+
/// Returns true if [type] contains a reference to any of the given [variables].
///
/// It is an error to call this with a [type] that contains a [FunctionType]
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index f0d1247..7b73df2 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -471,7 +471,7 @@
@override
DartType visitInvalidExpression(InvalidExpression node) {
- return const BottomType();
+ return const DynamicType();
}
@override
@@ -921,9 +921,6 @@
}
@override
- visitInvalidStatement(InvalidStatement node) {}
-
- @override
visitLabeledStatement(LabeledStatement node) {
visitStatement(node.body);
}
diff --git a/pkg/kernel/lib/visitor.dart b/pkg/kernel/lib/visitor.dart
index 01d56b8..bfbf8f9 100644
--- a/pkg/kernel/lib/visitor.dart
+++ b/pkg/kernel/lib/visitor.dart
@@ -70,7 +70,6 @@
R defaultStatement(Statement node) => null;
- R visitInvalidStatement(InvalidStatement node) => defaultStatement(node);
R visitExpressionStatement(ExpressionStatement node) =>
defaultStatement(node);
R visitBlock(Block node) => defaultStatement(node);
@@ -192,7 +191,6 @@
// Statements
R defaultStatement(Statement node) => defaultTreeNode(node);
- R visitInvalidStatement(InvalidStatement node) => defaultStatement(node);
R visitExpressionStatement(ExpressionStatement node) =>
defaultStatement(node);
R visitBlock(Block node) => defaultStatement(node);
@@ -511,8 +509,6 @@
R defaultStatement(Statement node, T arg) => null;
- R visitInvalidStatement(InvalidStatement node, T arg) =>
- defaultStatement(node, arg);
R visitExpressionStatement(ExpressionStatement node, T arg) =>
defaultStatement(node, arg);
R visitBlock(Block node, T arg) => defaultStatement(node, arg);
diff --git a/pkg/kernel/test/baseline_tester.dart b/pkg/kernel/test/baseline_tester.dart
deleted file mode 100644
index fb7fb2b..0000000
--- a/pkg/kernel/test/baseline_tester.dart
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright (c) 2016, 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:io';
-
-import 'package:analyzer/src/kernel/loader.dart';
-import 'package:kernel/application_root.dart';
-import 'package:kernel/class_hierarchy.dart';
-import 'package:kernel/core_types.dart';
-import 'package:kernel/kernel.dart';
-import 'package:kernel/target/targets.dart';
-import 'package:kernel/text/ast_to_text.dart';
-import 'package:kernel/verifier.dart';
-import 'package:path/path.dart' as pathlib;
-import 'package:test/test.dart';
-
-final String testcaseDirectory = 'pkg/kernel/testcases';
-final String inputDirectory = 'pkg/kernel/testcases/input';
-final String sdkDirectory = 'sdk';
-
-/// A target to be used for testing.
-///
-/// To simplify testing dependencies, we avoid transformations that rely on
-/// a patched SDK or any SDK changes that have not landed in the main SDK.
-abstract class TestTarget extends Target {
- /// Annotations to apply on the textual output.
- Annotator get annotator => null;
-
- // Return a list of strings so that we can accumulate errors.
- List<String> performModularTransformationsOnProgram(
- CoreTypes coreTypes, ClassHierarchy hierarchy, Program program,
- {void logger(String msg)});
- List<String> performGlobalTransformations(
- CoreTypes coreTypes, Program program,
- {void logger(String msg)});
-}
-
-void runBaselineTests(String folderName, TestTarget target) {
- String outputDirectory = '$testcaseDirectory/$folderName';
- var batch = new DartLoaderBatch();
- Directory directory = new Directory(inputDirectory);
- var applicationRoot = new ApplicationRoot(directory.absolute.path);
- for (FileSystemEntity file in directory.listSync()) {
- if (file is File && file.path.endsWith('.dart')) {
- String name = pathlib.basename(file.path);
- test(name, () async {
- Uri dartPath =
- new Uri(scheme: 'file', path: pathlib.absolute(file.path));
- String shortName = pathlib.withoutExtension(name);
- String filenameOfBaseline = '$outputDirectory/$shortName.baseline.txt';
- String filenameOfCurrent = '$outputDirectory/$shortName.current.txt';
-
- var program = new Program();
- var coreTypes = new CoreTypes(program);
- var hierarchy = new ClosedWorldClassHierarchy(program);
- var loader = await batch.getLoader(
- program,
- new DartOptions(
- strongMode: target.strongMode,
- sdk: sdkDirectory,
- declaredVariables: target.extraDeclaredVariables,
- applicationRoot: applicationRoot));
- loader.loadProgram(dartPath, target: target);
- verifyProgram(program);
- var errors = <String>[];
- errors.addAll(target.performModularTransformationsOnProgram(
- coreTypes, hierarchy, program));
- verifyProgram(program);
- errors.addAll(target.performGlobalTransformations(coreTypes, program));
- verifyProgram(program);
-
- var buffer = new StringBuffer();
- for (var error in errors) {
- buffer.writeln('// $error');
- }
- new Printer(buffer, annotator: target.annotator)
- .writeLibraryFile(program.mainMethod.enclosingLibrary);
- String current = '$buffer';
- new File(filenameOfCurrent).writeAsStringSync(current);
-
- var baselineFile = new File(filenameOfBaseline);
- if (!baselineFile.existsSync()) {
- new File(filenameOfBaseline).writeAsStringSync(current);
- } else {
- var baseline = baselineFile.readAsStringSync();
- if (baseline != current) {
- fail('Output of `$name` changed for $folderName.\n'
- 'Command to reset the baseline:\n'
- ' rm $filenameOfBaseline\n'
- 'Command to see the diff:\n'
- ' diff -cd $outputDirectory/$shortName.{baseline,current}.txt'
- '\n');
- }
- }
- });
- }
- }
-}
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 461add4..b210ee2 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -85,7 +85,6 @@
[ $compiler == dart2analyzer ]
dev_compiler/test/options/*: SkipByDesign
-dev_compiler/test/codegen_test: MissingCompileTimeError # Issue 30245
[ $compiler == none && $runtime == drt ]
mutation_observer: Skip # Issue 21149
@@ -132,8 +131,6 @@
analysis_server/test/analysis/get_errors_test: Skip # runtime error, Issue 22180
analysis_server/test/integration/analysis/analysis_options_test: RuntimeError # Issue 24796
analyzer/test/generated/non_error_resolver_kernel_test: RuntimeError # Issue 30785
-kernel/test/baseline_spec_mode_test: RuntimeError # Issue 28243
-kernel/test/baseline_strong_mode_test: RuntimeError # Issue 28243
analyzer/tool/task_dependency_graph/check_test: Slow, Pass
[ $compiler == dart2js ]
diff --git a/pkg/vm/bin/dump_kernel.dart b/pkg/vm/bin/dump_kernel.dart
new file mode 100644
index 0000000..e2bbb61
--- /dev/null
+++ b/pkg/vm/bin/dump_kernel.dart
@@ -0,0 +1,36 @@
+// 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 file.
+
+import 'dart:io';
+
+import 'package:kernel/kernel.dart' show Program, writeProgramToText;
+import 'package:kernel/binary/ast_from_binary.dart'
+ show BinaryBuilderWithMetadata;
+
+import 'package:vm/metadata/direct_call.dart' show DirectCallMetadataRepository;
+
+final String _usage = '''
+Usage: dump_kernel input.dill output.txt
+Dumps kernel binary file with VM-specific metadata.
+''';
+
+main(List<String> arguments) async {
+ if (arguments.length != 2) {
+ print(_usage);
+ exit(1);
+ }
+
+ final input = arguments[0];
+ final output = arguments[1];
+
+ final program = new Program();
+
+ // Register VM-specific metadata.
+ program.addMetadataRepository(new DirectCallMetadataRepository());
+
+ final List<int> bytes = new File(input).readAsBytesSync();
+ new BinaryBuilderWithMetadata(bytes).readProgram(program);
+
+ writeProgramToText(program, path: output, showMetadata: true);
+}
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index 8df5e10..13be81e 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -47,7 +47,8 @@
CompilerOptions options;
- Compiler(this.fileSystem, Uri platformKernel, {this.strongMode: false}) {
+ Compiler(this.fileSystem, Uri platformKernel,
+ {this.strongMode: false, bool suppressWarnings: false}) {
Uri packagesUri = (Platform.packageConfig != null)
? Uri.parse(Platform.packageConfig)
: null;
@@ -80,7 +81,7 @@
case Severity.nit:
break;
case Severity.warning:
- stderr.writeln(formatted);
+ if (!suppressWarnings) stderr.writeln(formatted);
break;
}
};
@@ -97,8 +98,9 @@
IncrementalKernelGenerator generator;
IncrementalCompiler(FileSystem fileSystem, Uri platformKernel,
- {strongMode: false})
- : super(fileSystem, platformKernel, strongMode: strongMode);
+ {bool strongMode: false, bool suppressWarnings: false})
+ : super(fileSystem, platformKernel,
+ strongMode: strongMode, suppressWarnings: suppressWarnings);
@override
Future<Program> compileInternal(Uri script) async {
@@ -120,8 +122,11 @@
final bool requireMain;
SingleShotCompiler(FileSystem fileSystem, Uri platformKernel,
- {this.requireMain: false, strongMode: false})
- : super(fileSystem, platformKernel, strongMode: strongMode);
+ {this.requireMain: false,
+ bool strongMode: false,
+ bool suppressWarnings: false})
+ : super(fileSystem, platformKernel,
+ strongMode: strongMode, suppressWarnings: suppressWarnings);
@override
Future<Program> compileInternal(Uri script) async {
@@ -135,7 +140,7 @@
Future<Compiler> lookupOrBuildNewIncrementalCompiler(
int isolateId, List sourceFiles, Uri platformKernel,
- {strongMode: false}) async {
+ {bool strongMode: false, bool suppressWarnings: false}) async {
IncrementalCompiler compiler;
if (isolateCompilers.containsKey(isolateId)) {
compiler = isolateCompilers[isolateId];
@@ -159,7 +164,7 @@
// isolate needs to receive a message indicating that particular
// isolate was shut down. Message should be handled here in this script.
compiler = new IncrementalCompiler(fileSystem, platformKernel,
- strongMode: strongMode);
+ strongMode: strongMode, suppressWarnings: suppressWarnings);
isolateCompilers[isolateId] = compiler;
}
return compiler;
@@ -185,8 +190,7 @@
final bool strong = request[5];
final int isolateId = request[6];
final List sourceFiles = request[7];
- // TODO(bkonyi): this still needs to be hooked in.
- // final bool suppressWarnings = request[8];
+ final bool suppressWarnings = request[8];
Compiler compiler;
// TODO(aam): There should be no need to have an option to choose
@@ -195,13 +199,16 @@
// watch the performance though.
if (incremental) {
compiler = await lookupOrBuildNewIncrementalCompiler(
- isolateId, sourceFiles, platformKernel);
+ isolateId, sourceFiles, platformKernel,
+ suppressWarnings: suppressWarnings);
} else {
final FileSystem fileSystem = sourceFiles == null
? PhysicalFileSystem.instance
: _buildFileSystem(sourceFiles);
compiler = new SingleShotCompiler(fileSystem, platformKernel,
- requireMain: sourceFiles == null, strongMode: strong);
+ requireMain: sourceFiles == null,
+ strongMode: strong,
+ suppressWarnings: suppressWarnings);
}
CompilationResult result;
diff --git a/pkg/vm/lib/metadata/direct_call.dart b/pkg/vm/lib/metadata/direct_call.dart
index 46f1fea..570e303 100644
--- a/pkg/vm/lib/metadata/direct_call.dart
+++ b/pkg/vm/lib/metadata/direct_call.dart
@@ -8,10 +8,19 @@
/// Metadata for annotating method invocations converted to direct calls.
class DirectCallMetadata {
- final Member target;
+ final Reference _targetReference;
final bool checkReceiverForNull;
- DirectCallMetadata(this.target, this.checkReceiverForNull);
+ DirectCallMetadata(Member target, bool checkReceiverForNull)
+ : this.byReference(getMemberReference(target), checkReceiverForNull);
+
+ DirectCallMetadata.byReference(
+ this._targetReference, this.checkReceiverForNull);
+
+ Member get target => _targetReference.asMember;
+
+ @override
+ String toString() => "${target}${checkReceiverForNull ? '??' : ''}";
}
/// Repository for [DirectCallMetadata].
@@ -32,11 +41,12 @@
@override
DirectCallMetadata readFromBinary(BinarySource source) {
- var target = source.readCanonicalNameReference()?.getReference()?.asMember;
- if (target == null) {
+ final targetReference = source.readCanonicalNameReference()?.getReference();
+ if (targetReference == null) {
throw 'DirectCallMetadata should have a non-null target';
}
- var checkReceiverForNull = (source.readByte() != 0);
- return new DirectCallMetadata(target, checkReceiverForNull);
+ final checkReceiverForNull = (source.readByte() != 0);
+ return new DirectCallMetadata.byReference(
+ targetReference, checkReceiverForNull);
}
}
diff --git a/pkg/vm/tool/dump_kernel b/pkg/vm/tool/dump_kernel
new file mode 100755
index 0000000..bd3dc31
--- /dev/null
+++ b/pkg/vm/tool/dump_kernel
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+# 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 file.
+
+# Script for dumping kernel files with VM-specific metadata.
+
+set -e
+
+function follow_links() {
+ file="$1"
+ while [ -h "$file" ]; do
+ # On Mac OS, readlink -f doesn't work.
+ file="$(readlink "$file")"
+ done
+ echo "$file"
+}
+
+# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
+PROG_NAME="$(follow_links "$BASH_SOURCE")"
+
+# Handle the case where dart-sdk/bin has been symlinked to.
+CUR_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
+
+SDK_DIR="$CUR_DIR/../../.."
+
+if [[ `uname` == 'Darwin' ]]; then
+ OUT_DIR="$SDK_DIR/xcodebuild"
+else
+ OUT_DIR="$SDK_DIR/out"
+fi
+
+export DART_CONFIGURATION=${DART_CONFIGURATION:-ReleaseX64}
+BIN_DIR="$OUT_DIR/$DART_CONFIGURATION"
+
+"$BIN_DIR"/dart "${SDK_DIR}/pkg/vm/bin/dump_kernel.dart" "$@"
diff --git a/pkg/vm/tool/gen_kernel b/pkg/vm/tool/gen_kernel
index e5687b8..551d2d5 100755
--- a/pkg/vm/tool/gen_kernel
+++ b/pkg/vm/tool/gen_kernel
@@ -8,12 +8,8 @@
set -e
-# Enable Dart 2.0 fixed-size integers for gen_kernel if running in strong mode.
-for arg in "$@"; do
- if [ "$arg" == "--strong-mode" ]; then
- DART_VM_FLAGS="--limit-ints-to-64-bits $DART_VM_FLAGS"
- fi
-done
+# Enable Dart 2.0 fixed-size integers for gen_kernel
+DART_VM_FLAGS="--limit-ints-to-64-bits $DART_VM_FLAGS"
function follow_links() {
file="$1"
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index 65b7aa8..e9f85168 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -50,10 +50,10 @@
// Make a request to the loader. Future will complete with result which is
// either a Uri or a List<int>.
-Future _makeLoaderRequest(int tag, String uri) {
+Future<T> _makeLoaderRequest<T>(int tag, String uri) {
assert(_isolateId != null);
assert(_loadPort != null);
- Completer completer = new Completer();
+ Completer completer = new Completer<T>();
RawReceivePort port = new RawReceivePort();
port.handler = (msg) {
// Close the port.
@@ -318,7 +318,8 @@
// Handling of Resource class by dispatching to the load port.
Future<List<int>> _resourceReadAsBytes(Uri uri) async {
- List response = await _makeLoaderRequest(_Dart_kResourceLoad, uri.toString());
+ List response =
+ await _makeLoaderRequest<List<int>>(_Dart_kResourceLoad, uri.toString());
if (response[4] is String) {
// Throw the error.
throw response[4];
@@ -331,7 +332,7 @@
if (_traceLoading) {
_log("Request for package root from user code.");
}
- return _makeLoaderRequest(_Dart_kGetPackageRootUri, null);
+ return _makeLoaderRequest<Uri>(_Dart_kGetPackageRootUri, null);
}
Future<Uri> _getPackageConfigFuture() {
@@ -339,7 +340,7 @@
_log("Request for package config from user code.");
}
assert(_loadPort != null);
- return _makeLoaderRequest(_Dart_kGetPackageConfigUri, null);
+ return _makeLoaderRequest<Uri>(_Dart_kGetPackageConfigUri, null);
}
Future<Uri> _resolvePackageUriFuture(Uri packageUri) async {
@@ -353,8 +354,8 @@
// Return the incoming parameter if not passed a package: URI.
return packageUri;
}
- var result =
- await _makeLoaderRequest(_Dart_kResolvePackageUri, packageUri.toString());
+ var result = await _makeLoaderRequest<Uri>(
+ _Dart_kResolvePackageUri, packageUri.toString());
if (result is! Uri) {
if (_traceLoading) {
_log("Exception when resolving package URI: $packageUri");
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index 64236ee..6bcca69 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -31,6 +31,10 @@
[ $compiler == dartkp ]
*: Skip # Non-kernel also skips precompiled mode.
+[ $arch == simdbc64 && $compiler == dartk ]
+pause_on_unhandled_async_exceptions2_test: RuntimeError, Timeout # Issue 31765
+pause_on_unhandled_async_exceptions_test: RuntimeError, Timeout # Issue 31765
+
[ $compiler == dartk && $mode == debug ]
isolate_lifecycle_test: Skip # Flaky.
pause_idle_isolate_test: Skip # Flaky
diff --git a/runtime/tests/vm/dart/byte_array_optimized_test.dart b/runtime/tests/vm/dart/byte_array_optimized_test.dart
index 2c6a5d2..763fa52 100644
--- a/runtime/tests/vm/dart/byte_array_optimized_test.dart
+++ b/runtime/tests/vm/dart/byte_array_optimized_test.dart
@@ -747,10 +747,6 @@
}
Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
for (int i = 0; i < array.length; ++i) {
- array[i] = 0x10000000000000000 + i;
- }
- Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
- for (int i = 0; i < array.length; ++i) {
array[i] = -10 + i;
}
Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], array);
@@ -875,10 +871,6 @@
}
Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
for (int i = 0; i < array.length; ++i) {
- array[i] = 0x10000000000000000 + i;
- }
- Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
- for (int i = 0; i < array.length; ++i) {
array[i] = 0xFFFFFFFFFFFFFFFF - i;
}
Expect.listEquals([
@@ -907,8 +899,10 @@
Expect.isTrue(copy is Uint64List);
Expect.equals(4, region.length);
Expect.listEquals([3, 4, 5, 6], region);
- array.setRange(3, 7, [0x10000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
- Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9], array);
+ array.setRange(3, 7, [-0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
+ Expect.listEquals(
+ [0, 1, 2, -0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9],
+ array);
}
static testUint64List() {
@@ -3015,108 +3009,6 @@
0xFF
], array);
for (int i = 0; i < view.length; ++i) {
- view[i] = 0x10000000000000000 + i;
- }
- Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
- Expect.listEquals([
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x01,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x02,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x03,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x04,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x05,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x06,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x07,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x08,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x09,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF
- ], array);
- for (int i = 0; i < view.length; ++i) {
view[i] = -10 + i;
}
Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], view);
@@ -3777,108 +3669,6 @@
-1
], array);
for (int i = 0; i < view.length; ++i) {
- view[i] = 0x10000000000000000 + i;
- }
- Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
- Expect.listEquals([
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 1,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 2,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 3,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 4,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 6,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 7,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1
- ], array);
- for (int i = 0; i < view.length; ++i) {
view[i] = 0xFFFFFFFFFFFFFFFF - i;
}
Expect.listEquals([
@@ -4003,8 +3793,9 @@
Expect.isTrue(copy is Uint64List);
Expect.equals(4, region.length);
Expect.listEquals([3, 4, 5, 6], region);
- view.setRange(3, 7, [0x10000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
- Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9], view);
+ view.setRange(3, 7, [0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
+ Expect.listEquals(
+ [0, 1, 2, 0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9], view);
Expect.listEquals([
-1,
-1,
@@ -4045,7 +3836,7 @@
0,
0,
0,
- 0,
+ -128,
0,
0,
0,
diff --git a/runtime/tests/vm/dart/byte_array_test.dart b/runtime/tests/vm/dart/byte_array_test.dart
index cefc49c..903bf2b 100644
--- a/runtime/tests/vm/dart/byte_array_test.dart
+++ b/runtime/tests/vm/dart/byte_array_test.dart
@@ -864,10 +864,6 @@
}
Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
for (int i = 0; i < array.length; ++i) {
- array[i] = 0x10000000000000000 + i;
- }
- Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
- for (int i = 0; i < array.length; ++i) {
array[i] = -10 + i;
}
Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], array);
@@ -995,10 +991,6 @@
}
Expect.listEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array);
for (int i = 0; i < array.length; ++i) {
- array[i] = 0x10000000000000000 + i;
- }
- Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], array);
- for (int i = 0; i < array.length; ++i) {
array[i] = 0xFFFFFFFFFFFFFFFF - i;
}
Expect.listEquals([
@@ -1030,8 +1022,10 @@
Expect.isTrue(copy is Uint64List);
Expect.equals(4, region.length);
Expect.listEquals([3, 4, 5, 6], region);
- array.setRange(3, 7, [0x10000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
- Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9], array);
+ array.setRange(3, 7, [-0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
+ Expect.listEquals(
+ [0, 1, 2, -0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9],
+ array);
}
static testUint64List() {
@@ -3409,108 +3403,6 @@
0xFF
], array);
for (int i = 0; i < view.length; ++i) {
- view[i] = 0x10000000000000000 + i;
- }
- Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
- Expect.listEquals([
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x01,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x02,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x03,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x04,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x05,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x06,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x07,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x08,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x09,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF
- ], array);
- for (int i = 0; i < view.length; ++i) {
view[i] = -10 + i;
}
Expect.listEquals([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1], view);
@@ -4171,108 +4063,6 @@
-1
], array);
for (int i = 0; i < view.length; ++i) {
- view[i] = 0x10000000000000000 + i;
- }
- Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], view);
- Expect.listEquals([
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 1,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 2,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 3,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 4,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 6,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 7,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1,
- -1
- ], array);
- for (int i = 0; i < view.length; ++i) {
view[i] = 0xFFFFFFFFFFFFFFFF - i;
}
Expect.listEquals([
@@ -4397,8 +4187,9 @@
Expect.isTrue(copy is Uint64List);
Expect.equals(4, region.length);
Expect.listEquals([3, 4, 5, 6], region);
- view.setRange(3, 7, [0x10000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
- Expect.listEquals([0, 1, 2, 1, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9], view);
+ view.setRange(3, 7, [0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF]);
+ Expect.listEquals(
+ [0, 1, 2, 0x8000000000000001, 0, 1, 0xFFFFFFFFFFFFFFFF, 7, 8, 9], view);
Expect.listEquals([
-1,
-1,
@@ -4439,7 +4230,7 @@
0,
0,
0,
- 0,
+ -128,
0,
0,
0,
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 63981da..9b7d730 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -132,12 +132,6 @@
cc/IsolateReload_NoLibsModified: Fail # Please triage.
cc/IsolateReload_PrefixImportedLibModified: Fail # Please triage.
-# Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
-# are to be triaged. Isolate tests are skipped on purpose due to the usage of
-# batch mode.
-[ $arch == simdbc64 && $compiler == dartk ]
-dart/truncating_ints_test: RuntimeError # Please triage.
-
[ $arch == x64 && $system == windows ]
cc/Profiler_BinaryOperatorSourcePositionOptimized: Pass, Fail # Issue 31137
cc/Profiler_ClosureAllocation: Pass, Fail # Issue 31137
@@ -348,7 +342,6 @@
dart/data_uri_spawn_test: Skip # Please triage.
dart/snapshot_version_test: RuntimeError # Please triage.
dart/spawn_infinite_loop_test: Crash # Please triage.
-dart/truncating_ints_test: CompileTimeError # Please triage.
[ $compiler == dartkp && !$strong ]
dart/truncating_ints_test: Skip # This test cannot be run in dartkp/legacy mode (gen_kernel does not pass --limit-ints-to-64-bits in legacy mode).
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index e31ae3c..12c48e7 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -393,7 +393,8 @@
return;
}
- if (Isolate::Current()->error_on_bad_override()) {
+ Isolate* isolate = Isolate::Current();
+ if (isolate->error_on_bad_override() && !isolate->strong()) {
// Verify that the target is compatible with the redirecting factory.
Error& error = Error::Handle();
if (!target.HasCompatibleParametersWith(factory, &error)) {
@@ -1518,8 +1519,9 @@
// functions of a class, so we do not need to consider fields as implicitly
// generating getters and setters.
// Most overriding conflicts are only static warnings, i.e. they are not
- // reported as compile-time errors by the vm. However, signature conflicts in
- // overrides can be reported if the flag --error_on_bad_override is specified.
+ // reported as compile-time errors by the vm. However, in non-strong mode,
+ // signature conflicts in overrides can be reported if the flag
+ // --error_on_bad_override is specified.
// Static warning examples are:
// - a static getter 'v' conflicting with an inherited instance setter 'v='.
// - a static setter 'v=' conflicting with an inherited instance member 'v'.
@@ -1648,7 +1650,8 @@
// If we check for bad overrides, collect interfaces, super interfaces, and
// super classes of this class.
GrowableArray<const Class*> interfaces(zone, 4);
- if (Isolate::Current()->error_on_bad_override()) {
+ Isolate* isolate = Isolate::Current();
+ if (isolate->error_on_bad_override() && !isolate->strong()) {
CollectInterfaces(cls, &interfaces);
// Include superclasses in list of interfaces and super interfaces.
super_class = cls.SuperClass();
@@ -1670,8 +1673,8 @@
FinalizeSignature(cls, function);
name = function.name();
// Report signature conflicts only.
- if (Isolate::Current()->error_on_bad_override() && !function.is_static() &&
- !function.IsGenerativeConstructor()) {
+ if (isolate->error_on_bad_override() && !isolate->strong() &&
+ !function.is_static() && !function.IsGenerativeConstructor()) {
// A constructor cannot override anything.
for (intptr_t i = 0; i < interfaces.length(); i++) {
const Class* interface = interfaces.At(i);
@@ -2648,7 +2651,8 @@
FinalizeClass(super);
}
// Ensure interfaces are finalized in case we check for bad overrides.
- if (Isolate::Current()->error_on_bad_override()) {
+ Isolate* isolate = Isolate::Current();
+ if (isolate->error_on_bad_override() && !isolate->strong()) {
GrowableArray<const Class*> interfaces(4);
CollectInterfaces(cls, &interfaces);
for (intptr_t i = 0; i < interfaces.length(); i++) {
diff --git a/runtime/vm/compiler/assembler/assembler_dbc_test.cc b/runtime/vm/compiler/assembler/assembler_dbc_test.cc
index 23e89aa..3f6c5e7 100644
--- a/runtime/vm/compiler/assembler/assembler_dbc_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_dbc_test.cc
@@ -90,7 +90,7 @@
ic_data.AddCheck(cids, dummy_instance_function);
// For the non-Smi tests.
- cids[0] = kBigintCid;
+ cids[0] = kMintCid;
ic_data.AddCheck(cids, dummy_instance_function);
ICData* call_ic_data = &ICData::ZoneHandle(ic_data.Original());
@@ -211,7 +211,7 @@
ASSEMBLER_TEST_GENERATE(AddTOSNonSmi, assembler) {
const String& numstr =
- String::Handle(String::New("98765432198765432100", Heap::kOld));
+ String::Handle(String::New("9176543219876543210", Heap::kOld));
__ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
__ PushConstant(Smi::Handle(Smi::New(1)));
__ AddTOS();
@@ -252,7 +252,7 @@
ASSEMBLER_TEST_GENERATE(SubTOSNonSmi, assembler) {
const String& numstr =
- String::Handle(String::New("98765432198765432100", Heap::kOld));
+ String::Handle(String::New("9176543219876543210", Heap::kOld));
__ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
__ PushConstant(Smi::Handle(Smi::New(1)));
__ SubTOS();
@@ -293,7 +293,7 @@
ASSEMBLER_TEST_GENERATE(MulTOSNonSmi, assembler) {
const String& numstr =
- String::Handle(String::New("98765432198765432100", Heap::kOld));
+ String::Handle(String::New("9176543219876543210", Heap::kOld));
__ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
__ PushConstant(Smi::Handle(Smi::New(1)));
__ MulTOS();
@@ -321,7 +321,7 @@
ASSEMBLER_TEST_GENERATE(BitOrTOSNonSmi, assembler) {
const String& numstr =
- String::Handle(String::New("98765432198765432100", Heap::kOld));
+ String::Handle(String::New("9176543219876543210", Heap::kOld));
__ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
__ PushConstant(Smi::Handle(Smi::New(0x08)));
__ BitOrTOS();
@@ -349,7 +349,7 @@
ASSEMBLER_TEST_GENERATE(BitAndTOSNonSmi, assembler) {
const String& numstr =
- String::Handle(String::New("98765432198765432100", Heap::kOld));
+ String::Handle(String::New("9176543219876543210", Heap::kOld));
__ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
__ PushConstant(Smi::Handle(Smi::New(0x08)));
__ BitAndTOS();
@@ -390,7 +390,7 @@
ASSEMBLER_TEST_GENERATE(EqualTOSNonSmi, assembler) {
const String& numstr =
- String::Handle(String::New("98765432198765432100", Heap::kOld));
+ String::Handle(String::New("9176543219876543210", Heap::kOld));
__ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
__ PushConstant(Smi::Handle(Smi::New(-42)));
__ EqualTOS();
@@ -431,7 +431,7 @@
ASSEMBLER_TEST_GENERATE(LessThanTOSNonSmi, assembler) {
const String& numstr =
- String::Handle(String::New("98765432198765432100", Heap::kOld));
+ String::Handle(String::New("9176543219876543210", Heap::kOld));
__ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
__ PushConstant(Smi::Handle(Smi::New(-42)));
__ LessThanTOS();
@@ -472,7 +472,7 @@
ASSEMBLER_TEST_GENERATE(GreaterThanTOSNonSmi, assembler) {
const String& numstr =
- String::Handle(String::New("98765432198765432100", Heap::kOld));
+ String::Handle(String::New("9176543219876543210", Heap::kOld));
__ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
__ PushConstant(Smi::Handle(Smi::New(-42)));
__ GreaterThanTOS();
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 7f5c613..353764f 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -408,6 +408,41 @@
return dst_type().raw() == other_assert->dst_type().raw();
}
+Instruction* AssertSubtypeInstr::Canonicalize(FlowGraph* flow_graph) {
+ // If all values for type parameters are known (i.e. from instantiator and
+ // function) we can instantiate the sub and super type and remove this
+ // instruction if the subtype test succeeds.
+ ConstantInstr* constant_instantiator_type_args =
+ instantiator_type_arguments()->definition()->AsConstant();
+ ConstantInstr* constant_function_type_args =
+ function_type_arguments()->definition()->AsConstant();
+ if ((constant_instantiator_type_args != NULL) &&
+ (constant_function_type_args != NULL)) {
+ ASSERT(constant_instantiator_type_args->value().IsNull() ||
+ constant_instantiator_type_args->value().IsTypeArguments());
+ ASSERT(constant_function_type_args->value().IsNull() ||
+ constant_function_type_args->value().IsTypeArguments());
+
+ Zone* Z = Thread::Current()->zone();
+ TypeArguments& instantiator_type_args = TypeArguments::Handle(Z);
+ instantiator_type_args ^= constant_instantiator_type_args->value().raw();
+
+ TypeArguments& function_type_args = TypeArguments::Handle(Z);
+ function_type_args ^= constant_function_type_args->value().raw();
+
+ Error& error_bound = Error::Handle(Z);
+
+ AbstractType& sub_type = AbstractType::Handle(Z, sub_type_.raw());
+ AbstractType& super_type = AbstractType::Handle(Z, super_type_.raw());
+ if (AbstractType::InstantiateAndTestSubtype(
+ &sub_type, &super_type, &error_bound, instantiator_type_args,
+ function_type_args)) {
+ return NULL;
+ }
+ }
+ return this;
+}
+
bool AssertSubtypeInstr::AttributesEqual(Instruction* other) const {
AssertSubtypeInstr* other_assert = other->AsAssertSubtype();
ASSERT(other_assert != NULL);
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 4a72d27..7e391d9 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -2789,16 +2789,16 @@
virtual bool CanBecomeDeoptimizationTarget() const { return true; }
+ virtual Instruction* Canonicalize(FlowGraph* flow_graph);
+
virtual bool AttributesEqual(Instruction* other) const;
PRINT_OPERANDS_TO_SUPPORT
- // TODO(sjindel): Implement Canonicalize to finalize dst_type when the
- // instantiator and function type args are constant.
private:
const TokenPosition token_pos_;
- const AbstractType& sub_type_;
- const AbstractType& super_type_;
+ AbstractType& sub_type_;
+ AbstractType& super_type_;
const String& dst_name_;
DISALLOW_COPY_AND_ASSIGN(AssertSubtypeInstr);
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index ffff777..3aa37d8 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -136,7 +136,11 @@
const intptr_t rollback_point = rollback_.length();
- if (Isolate::Current()->type_checks()) {
+ // When having assertions enabled or when running in strong-mode the IR graphs
+ // can contain [AssertAssignableInstr]s and we therefore enable this
+ // optimization.
+ Isolate* isolate = Isolate::Current();
+ if (isolate->type_checks() || isolate->strong()) {
StrengthenAsserts(block);
}
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 35bc55b..d83c8365 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -1150,6 +1150,8 @@
Tag tag = builder_->ReadTag(&payload);
switch (tag) {
case kInvalidExpression:
+ builder_->ReadPosition();
+ builder_->SkipStringReference();
return;
case kVariableGet: {
builder_->ReadPosition(); // read position.
@@ -1424,8 +1426,6 @@
void StreamingScopeBuilder::VisitStatement() {
Tag tag = builder_->ReadTag(); // read tag.
switch (tag) {
- case kInvalidStatement:
- return;
case kExpressionStatement:
VisitExpression(); // read expression.
return;
@@ -4498,8 +4498,6 @@
Fragment StreamingFlowGraphBuilder::BuildStatement() {
Tag tag = ReadTag(); // read tag.
switch (tag) {
- case kInvalidStatement:
- return BuildInvalidStatement();
case kExpressionStatement:
return BuildExpressionStatement();
case kBlock:
@@ -4815,6 +4813,8 @@
Tag tag = ReadTag(&payload);
switch (tag) {
case kInvalidExpression:
+ ReadPosition();
+ SkipStringReference();
return;
case kVariableGet:
ReadPosition(); // read position.
@@ -5044,8 +5044,6 @@
void StreamingFlowGraphBuilder::SkipStatement() {
Tag tag = ReadTag(); // read tag.
switch (tag) {
- case kInvalidStatement:
- return;
case kExpressionStatement:
SkipExpression(); // read expression.
return;
@@ -5866,28 +5864,27 @@
Fragment StreamingFlowGraphBuilder::BuildInvalidExpression(
TokenPosition* position) {
- if (position != NULL) *position = TokenPosition::kNoSource;
-
// The frontend will take care of emitting normal errors (like
// [NoSuchMethodError]s) and only emit [InvalidExpression]s in very special
// situations (e.g. an invalid annotation).
- return ThrowNoSuchMethodError();
+ TokenPosition pos = ReadPosition();
+ if (position != NULL) *position = pos;
+ const String& message = H.DartString(ReadStringReference());
+ H.ReportError(script(), pos, "%s", message.ToCString());
+ return Fragment();
}
Fragment StreamingFlowGraphBuilder::BuildVariableGet(TokenPosition* position) {
- (position != NULL) ? * position = ReadPosition()
- : ReadPosition(); // read position.
+ (position != NULL) ? * position = ReadPosition() : ReadPosition();
intptr_t variable_kernel_position = ReadUInt(); // read kernel position.
ReadUInt(); // read relative variable index.
SkipOptionalDartType(); // read promoted type.
-
return LoadLocal(LookupVariable(variable_kernel_position));
}
Fragment StreamingFlowGraphBuilder::BuildVariableGet(uint8_t payload,
TokenPosition* position) {
- (position != NULL) ? * position = ReadPosition()
- : ReadPosition(); // read position.
+ (position != NULL) ? * position = ReadPosition() : ReadPosition();
intptr_t variable_kernel_position = ReadUInt(); // read kernel position.
return LoadLocal(LookupVariable(variable_kernel_position));
}
@@ -7830,11 +7827,6 @@
return Constant(Object::ZoneHandle(Z, H.constants().At(constant_index)));
}
-Fragment StreamingFlowGraphBuilder::BuildInvalidStatement() {
- H.ReportError("Invalid statements not implemented yet!");
- return Fragment();
-}
-
Fragment StreamingFlowGraphBuilder::BuildExpressionStatement() {
Fragment instructions = BuildExpression(); // read expression.
instructions += Drop();
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index 9196276..c3da1c1 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -1218,7 +1218,6 @@
Fragment BuildClosureCreation(TokenPosition* position);
Fragment BuildConstantExpression(TokenPosition* position);
- Fragment BuildInvalidStatement();
Fragment BuildExpressionStatement();
Fragment BuildBlock();
Fragment BuildEmptyStatement();
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index 5e71c4f..4e0189c 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -80,7 +80,7 @@
"Disable to make importing dart:mirrors an error.") \
R(enable_type_checks, false, bool, false, "Enable type checks.") \
R(error_on_bad_override, false, bool, false, \
- "Report error for bad overrides.") \
+ "Report error for bad overrides. Ignored in strong mode.") \
R(error_on_bad_type, false, bool, false, \
"Report error for malformed types.") \
P(external_max_size, int, (kWordSize <= 4) ? 512 : 1024, \
@@ -100,7 +100,7 @@
P(interpret_irregexp, bool, USING_DBC, "Use irregexp bytecode interpreter") \
P(lazy_dispatchers, bool, true, "Generate dispatchers lazily") \
P(link_natives_lazily, bool, false, "Link native calls lazily") \
- P(limit_ints_to_64_bits, bool, false, "Truncate integers to 64 bits") \
+ P(limit_ints_to_64_bits, bool, true, "Truncate integers to 64 bits") \
C(load_deferred_eagerly, true, true, bool, false, \
"Load deferred libraries eagerly.") \
R(log_marker_tasks, false, bool, false, \
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 6a1d898..4819fd2 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -87,7 +87,6 @@
kConstListLiteral = 58,
kConstMapLiteral = 59,
- kInvalidStatement = 60,
kExpressionStatement = 61,
kBlock = 62,
kEmptyStatement = 63,
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 090091d..99454e3 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -6475,6 +6475,7 @@
bool Function::HasCompatibleParametersWith(const Function& other,
Error* bound_error) const {
ASSERT(Isolate::Current()->error_on_bad_override());
+ ASSERT(!Isolate::Current()->strong());
ASSERT((bound_error != NULL) && bound_error->IsNull());
// Check that this function's signature type is a subtype of the other
// function's signature type.
@@ -6483,15 +6484,6 @@
// Note that type parameters declared by a generic signature are preserved.
Function& this_fun = Function::Handle(raw());
if (!this_fun.HasInstantiatedSignature(kCurrentClass)) {
- // HasCompatibleParametersWith is called at compile time to check for bad
- // overrides and can only detect some obviously wrong overrides, but it
- // should never give false negatives.
- if (Isolate::Current()->strong()) {
- // Instantiating all type parameters to dynamic is not the right thing
- // to do in strong mode, because of contravariance of parameter types.
- // It is better to skip the test than to give a false negative.
- return true;
- }
this_fun = this_fun.InstantiateSignatureFrom(
Object::null_type_arguments(), Object::null_type_arguments(),
kNoneFree, // Keep function type parameters, do not map to dynamic.
@@ -6499,10 +6491,6 @@
}
Function& other_fun = Function::Handle(other.raw());
if (!other_fun.HasInstantiatedSignature(kCurrentClass)) {
- if (Isolate::Current()->strong()) {
- // See comment above.
- return true;
- }
other_fun = other_fun.InstantiateSignatureFrom(
Object::null_type_arguments(), Object::null_type_arguments(),
kNoneFree, // Keep function type parameters, do not map to dynamic.
diff --git a/runtime/vm/simulator_arm.cc b/runtime/vm/simulator_arm.cc
index c244c40..f0264a6 100644
--- a/runtime/vm/simulator_arm.cc
+++ b/runtime/vm/simulator_arm.cc
@@ -825,7 +825,7 @@
// Sets the register in the architecture state. It will also deal with updating
// Simulator internal state for special registers such as PC.
-void Simulator::set_register(Register reg, int32_t value) {
+DART_FORCE_INLINE void Simulator::set_register(Register reg, int32_t value) {
ASSERT((reg >= 0) && (reg < kNumberOfCpuRegisters));
if (reg == PC) {
pc_modified_ = true;
@@ -833,44 +833,32 @@
registers_[reg] = value;
}
-// Get the register from the architecture state. This function does handle
-// the special case of accessing the PC register.
-int32_t Simulator::get_register(Register reg) const {
- ASSERT((reg >= 0) && (reg < kNumberOfCpuRegisters));
- return registers_[reg] + ((reg == PC) ? Instr::kPCReadOffset : 0);
-}
-
// Raw access to the PC register.
-void Simulator::set_pc(int32_t value) {
+DART_FORCE_INLINE void Simulator::set_pc(int32_t value) {
pc_modified_ = true;
registers_[PC] = value;
}
-// Raw access to the PC register without the special adjustment when reading.
-int32_t Simulator::get_pc() const {
- return registers_[PC];
-}
-
// Accessors for VFP register state.
-void Simulator::set_sregister(SRegister reg, float value) {
+DART_FORCE_INLINE void Simulator::set_sregister(SRegister reg, float value) {
ASSERT(TargetCPUFeatures::vfp_supported());
ASSERT((reg >= 0) && (reg < kNumberOfSRegisters));
sregisters_[reg] = bit_cast<int32_t, float>(value);
}
-float Simulator::get_sregister(SRegister reg) const {
+DART_FORCE_INLINE float Simulator::get_sregister(SRegister reg) const {
ASSERT(TargetCPUFeatures::vfp_supported());
ASSERT((reg >= 0) && (reg < kNumberOfSRegisters));
return bit_cast<float, int32_t>(sregisters_[reg]);
}
-void Simulator::set_dregister(DRegister reg, double value) {
+DART_FORCE_INLINE void Simulator::set_dregister(DRegister reg, double value) {
ASSERT(TargetCPUFeatures::vfp_supported());
ASSERT((reg >= 0) && (reg < kNumberOfDRegisters));
dregisters_[reg] = bit_cast<int64_t, double>(value);
}
-double Simulator::get_dregister(DRegister reg) const {
+DART_FORCE_INLINE double Simulator::get_dregister(DRegister reg) const {
ASSERT(TargetCPUFeatures::vfp_supported());
ASSERT((reg >= 0) && (reg < kNumberOfDRegisters));
return bit_cast<double, int64_t>(dregisters_[reg]);
@@ -960,7 +948,7 @@
FATAL("Cannot continue execution after unimplemented instruction.");
}
-intptr_t Simulator::ReadW(uword addr, Instr* instr) {
+DART_FORCE_INLINE intptr_t Simulator::ReadW(uword addr, Instr* instr) {
if ((addr & 3) == 0) {
intptr_t* ptr = reinterpret_cast<intptr_t*>(addr);
return *ptr;
@@ -969,7 +957,9 @@
return 0;
}
-void Simulator::WriteW(uword addr, intptr_t value, Instr* instr) {
+DART_FORCE_INLINE void Simulator::WriteW(uword addr,
+ intptr_t value,
+ Instr* instr) {
if ((addr & 3) == 0) {
intptr_t* ptr = reinterpret_cast<intptr_t*>(addr);
*ptr = value;
@@ -978,7 +968,7 @@
UnalignedAccess("write", addr, instr);
}
-uint16_t Simulator::ReadHU(uword addr, Instr* instr) {
+DART_FORCE_INLINE uint16_t Simulator::ReadHU(uword addr, Instr* instr) {
if ((addr & 1) == 0) {
uint16_t* ptr = reinterpret_cast<uint16_t*>(addr);
return *ptr;
@@ -987,7 +977,7 @@
return 0;
}
-int16_t Simulator::ReadH(uword addr, Instr* instr) {
+DART_FORCE_INLINE int16_t Simulator::ReadH(uword addr, Instr* instr) {
if ((addr & 1) == 0) {
int16_t* ptr = reinterpret_cast<int16_t*>(addr);
return *ptr;
@@ -996,7 +986,9 @@
return 0;
}
-void Simulator::WriteH(uword addr, uint16_t value, Instr* instr) {
+DART_FORCE_INLINE void Simulator::WriteH(uword addr,
+ uint16_t value,
+ Instr* instr) {
if ((addr & 1) == 0) {
uint16_t* ptr = reinterpret_cast<uint16_t*>(addr);
*ptr = value;
@@ -1005,17 +997,17 @@
UnalignedAccess("halfword write", addr, instr);
}
-uint8_t Simulator::ReadBU(uword addr) {
+DART_FORCE_INLINE uint8_t Simulator::ReadBU(uword addr) {
uint8_t* ptr = reinterpret_cast<uint8_t*>(addr);
return *ptr;
}
-int8_t Simulator::ReadB(uword addr) {
+DART_FORCE_INLINE int8_t Simulator::ReadB(uword addr) {
int8_t* ptr = reinterpret_cast<int8_t*>(addr);
return *ptr;
}
-void Simulator::WriteB(uword addr, uint8_t value) {
+DART_FORCE_INLINE void Simulator::WriteB(uword addr, uint8_t value) {
uint8_t* ptr = reinterpret_cast<uint8_t*>(addr);
*ptr = value;
}
@@ -1062,7 +1054,7 @@
// Checks if the current instruction should be executed based on its
// condition bits.
-bool Simulator::ConditionallyExecute(Instr* instr) {
+DART_FORCE_INLINE bool Simulator::ConditionallyExecute(Instr* instr) {
switch (instr->ConditionField()) {
case EQ:
return z_flag_;
@@ -1101,23 +1093,25 @@
}
// Calculate and set the Negative and Zero flags.
-void Simulator::SetNZFlags(int32_t val) {
+DART_FORCE_INLINE void Simulator::SetNZFlags(int32_t val) {
n_flag_ = (val < 0);
z_flag_ = (val == 0);
}
// Set the Carry flag.
-void Simulator::SetCFlag(bool val) {
+DART_FORCE_INLINE void Simulator::SetCFlag(bool val) {
c_flag_ = val;
}
// Set the oVerflow flag.
-void Simulator::SetVFlag(bool val) {
+DART_FORCE_INLINE void Simulator::SetVFlag(bool val) {
v_flag_ = val;
}
// Calculate C flag value for additions (and subtractions with adjusted args).
-bool Simulator::CarryFrom(int32_t left, int32_t right, int32_t carry) {
+DART_FORCE_INLINE bool Simulator::CarryFrom(int32_t left,
+ int32_t right,
+ int32_t carry) {
uint64_t uleft = static_cast<uint32_t>(left);
uint64_t uright = static_cast<uint32_t>(right);
uint64_t ucarry = static_cast<uint32_t>(carry);
@@ -1125,7 +1119,9 @@
}
// Calculate V flag value for additions (and subtractions with adjusted args).
-bool Simulator::OverflowFrom(int32_t left, int32_t right, int32_t carry) {
+DART_FORCE_INLINE bool Simulator::OverflowFrom(int32_t left,
+ int32_t right,
+ int32_t carry) {
int64_t result = static_cast<int64_t>(left) + right + carry;
return (result >> 31) != (result >> 32);
}
@@ -1274,7 +1270,7 @@
// Addressing Mode 1 - Data-processing operands:
// Get the value based on the shifter_operand with immediate.
-int32_t Simulator::GetImm(Instr* instr, bool* carry_out) {
+DART_FORCE_INLINE int32_t Simulator::GetImm(Instr* instr, bool* carry_out) {
int rotate = instr->RotateField() * 2;
int immed8 = instr->Immed8Field();
int imm = (immed8 >> rotate) | (immed8 << (32 - rotate));
@@ -1282,23 +1278,12 @@
return imm;
}
-static int count_bits(int bit_vector) {
- int count = 0;
- while (bit_vector != 0) {
- if ((bit_vector & 1) != 0) {
- count++;
- }
- bit_vector >>= 1;
- }
- return count;
-}
-
// Addressing Mode 4 - Load and Store Multiple
void Simulator::HandleRList(Instr* instr, bool load) {
Register rn = instr->RnField();
int32_t rn_val = get_register(rn);
int rlist = instr->RlistField();
- int num_regs = count_bits(rlist);
+ int num_regs = Utils::CountOneBits32(static_cast<uint32_t>(rlist));
uword address = 0;
uword end_address = 0;
@@ -1516,7 +1501,7 @@
// Instruction types 0 and 1 are both rolled into one function because they
// only differ in the handling of the shifter_operand.
-void Simulator::DecodeType01(Instr* instr) {
+DART_FORCE_INLINE void Simulator::DecodeType01(Instr* instr) {
if (!instr->IsDataProcessing()) {
// miscellaneous, multiply, sync primitives, extra loads and stores.
if (instr->IsMiscellaneous()) {
@@ -2136,7 +2121,7 @@
}
}
-void Simulator::DecodeType2(Instr* instr) {
+DART_FORCE_INLINE void Simulator::DecodeType2(Instr* instr) {
Register rd = instr->RdField();
Register rn = instr->RnField();
int32_t rn_val = get_register(rn);
@@ -3454,18 +3439,8 @@
}
// Executes the current instruction.
-void Simulator::InstructionDecode(Instr* instr) {
+DART_FORCE_INLINE void Simulator::InstructionDecodeImpl(Instr* instr) {
pc_modified_ = false;
- if (IsTracingExecution()) {
- THR_Print("%" Pu64 " ", icount_);
- const uword start = reinterpret_cast<uword>(instr);
- const uword end = start + Instr::kInstrSize;
- if (FLAG_support_disassembler) {
- Disassembler::Disassemble(start, end);
- } else {
- THR_Print("Disassembler not supported in this mode.\n");
- }
- }
if (instr->ConditionField() == kSpecialCondition) {
if (instr->InstructionBits() == static_cast<int32_t>(0xf57ff01f)) {
// Format(instr, "clrex");
@@ -3520,12 +3495,26 @@
}
}
+void Simulator::InstructionDecode(Instr* instr) {
+ if (IsTracingExecution()) {
+ THR_Print("%" Pu64 " ", icount_);
+ const uword start = reinterpret_cast<uword>(instr);
+ const uword end = start + Instr::kInstrSize;
+ if (FLAG_support_disassembler) {
+ Disassembler::Disassemble(start, end);
+ } else {
+ THR_Print("Disassembler not supported in this mode.\n");
+ }
+ }
+ InstructionDecodeImpl(instr);
+}
+
void Simulator::Execute() {
// Get the PC to simulate. Cannot use the accessor here as we need the
// raw PC value and not the one used as input to arithmetic instructions.
uword program_counter = get_pc();
- if (FLAG_stop_sim_at == ULLONG_MAX) {
+ if (FLAG_stop_sim_at == ULLONG_MAX && FLAG_trace_sim_after == ULLONG_MAX) {
// Fast version of the dispatch loop without checking whether the simulator
// should be stopping at a particular executed instruction.
while (program_counter != kEndSimulatingPC) {
@@ -3534,7 +3523,7 @@
if (IsIllegalAddress(program_counter)) {
HandleIllegalAccess(program_counter, instr);
} else {
- InstructionDecode(instr);
+ InstructionDecodeImpl(instr);
}
program_counter = get_pc();
}
diff --git a/runtime/vm/simulator_arm.h b/runtime/vm/simulator_arm.h
index 566f857..ad94b25 100644
--- a/runtime/vm/simulator_arm.h
+++ b/runtime/vm/simulator_arm.h
@@ -50,13 +50,16 @@
// architecture specification and is off by 8 from the currently executing
// instruction.
void set_register(Register reg, int32_t value);
- int32_t get_register(Register reg) const;
+ DART_FORCE_INLINE int32_t get_register(Register reg) const {
+ ASSERT((reg >= 0) && (reg < kNumberOfCpuRegisters));
+ return registers_[reg] + ((reg == PC) ? Instr::kPCReadOffset : 0);
+ }
int32_t get_sp() const { return get_register(SPREG); }
// Special case of set_register and get_register to access the raw PC value.
void set_pc(int32_t value);
- int32_t get_pc() const;
+ DART_FORCE_INLINE int32_t get_pc() const { return registers_[PC]; }
// Accessors for VFP register state.
void set_sregister(SRegister reg, float value);
@@ -232,6 +235,7 @@
// Executes one instruction.
void InstructionDecode(Instr* instr);
+ void InstructionDecodeImpl(Instr* instr);
// Executes ARM instructions until the PC reaches kEndSimulatingPC.
void Execute();
diff --git a/sdk/lib/_internal/js_runtime/lib/js_rti.dart b/sdk/lib/_internal/js_runtime/lib/js_rti.dart
index 2e1c8d7..5dd9ffd 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_rti.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_rti.dart
@@ -22,8 +22,9 @@
* array are the type arguments.
* 3) `null`: the dynamic type.
* 4) a JavaScript object representing the function type. For instance, it has
- * the form {ret: rti, args: [rti], opt: [rti], named: {name: rti}} for a
+ * the form {ret: rti, args: [rti], opt: [rti], named: {name: rti}} for a
* function with a return type, regular, optional and named arguments.
+ * Generic function types have a 'bounds' property.
*
* To check subtype relations between generic classes we use a JavaScript
* expression that describes the necessary substitution for type arguments.
@@ -531,14 +532,25 @@
* representations.
*
* The arguments [s] and [t] must be types, usually represented by the
- * constructor of the class, or an array (for generic types).
+ * constructor of the class, or an array (for generic class types).
*/
bool isSubtype(var s, var t) {
// Subtyping is reflexive.
if (isIdentical(s, t)) return true;
// If either type is dynamic, [s] is a subtype of [t].
if (s == null || t == null) return true;
+
+ // Generic function type parameters must match exactly, which would have
+ // exited earlier. The de Bruijn indexing ensures the representation as a
+ // small number can be used for type comparison.
+ if (isGenericFunctionTypeParameter(s)) {
+ // TODO(sra): tau <: Object.
+ return false;
+ }
+ if (isGenericFunctionTypeParameter(t)) return false;
+
if (isNullType(s)) return true;
+
if (isDartFunctionType(t)) {
return isFunctionSubtype(s, t);
}
@@ -633,8 +645,24 @@
bool isFunctionSubtype(var s, var t) {
assert(isDartFunctionType(t));
if (!isDartFunctionType(s)) return false;
+ var genericBoundsTag =
+ JS_GET_NAME(JsGetName.FUNCTION_TYPE_GENERIC_BOUNDS_TAG);
var voidReturnTag = JS_GET_NAME(JsGetName.FUNCTION_TYPE_VOID_RETURN_TAG);
var returnTypeTag = JS_GET_NAME(JsGetName.FUNCTION_TYPE_RETURN_TYPE_TAG);
+
+ // Generic function types must agree on number of type parameters and bounds.
+ if (hasField(s, genericBoundsTag)) {
+ if (hasNoField(t, genericBoundsTag)) return false;
+ var sBounds = getField(s, genericBoundsTag);
+ var tBounds = getField(t, genericBoundsTag);
+ int sGenericParameters = getLength(sBounds);
+ int tGenericParameters = getLength(tBounds);
+ if (sGenericParameters != tGenericParameters) return false;
+ // TODO(sra): Compare bounds.
+ } else if (hasField(t, genericBoundsTag)) {
+ return false;
+ }
+
if (hasField(s, voidReturnTag)) {
if (hasNoField(t, voidReturnTag) && hasField(t, returnTypeTag)) {
return false;
@@ -717,6 +745,15 @@
}
/**
+ * Returns whether [type] is the representation of a generic function type
+ * parameter. Generic function type parameters are represented de Bruijn
+ * indexes.
+ */
+bool isGenericFunctionTypeParameter(var type) {
+ return type is num; // Actually int, but 'is num' is faster.
+}
+
+/**
* Calls the JavaScript [function] with the [arguments] with the global scope
* as the `this` context.
*/
diff --git a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart b/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
index 5b40739..e1eb66d 100644
--- a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
+++ b/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
@@ -327,6 +327,11 @@
/// Name used to tag a function type.
FUNCTION_TYPE_TAG,
+ /// Name used to tag bounds of a generic function type. If bounds are present,
+ /// the property value is an Array of bounds (the length gives the number of
+ /// type parameters). If absent, the type is not a generic function type.
+ FUNCTION_TYPE_GENERIC_BOUNDS_TAG,
+
/// Name used to tag void return in function type representations in
/// JavaScript.
FUNCTION_TYPE_VOID_RETURN_TAG,
diff --git a/sdk/lib/core/iterable.dart b/sdk/lib/core/iterable.dart
index 864dc0f..e91b3a8 100644
--- a/sdk/lib/core/iterable.dart
+++ b/sdk/lib/core/iterable.dart
@@ -111,6 +111,17 @@
const factory Iterable.empty() = EmptyIterable<E>;
/**
+ * Adapts [source] to be an `Iterable<T>`.
+ *
+ * Any time the iterable would produce an element that is not a [T],
+ * the element access will throw. If all elements of [source] are actually
+ * instances of [T], or if only elements that are actually instances of [T]
+ * are accessed, then the resulting iterable can be used as an `Iterable<T>`.
+ */
+ static Iterable<T> castTo<S, T>(Iterable<S> source) =>
+ new CastIterable<S, T>(source);
+
+ /**
* Returns a new `Iterator` that allows iterating the elements of this
* `Iterable`.
*
diff --git a/sdk/lib/core/list.dart b/sdk/lib/core/list.dart
index e412b3e..3f3f381 100644
--- a/sdk/lib/core/list.dart
+++ b/sdk/lib/core/list.dart
@@ -156,6 +156,22 @@
external factory List.unmodifiable(Iterable elements);
/**
+ * Adapts [source] to be a `List<T>`.
+ *
+ * Any time the list would produce an element that is not a [T],
+ * the element access will throw.
+ *
+ * Any time a [T] value is attempted stored into the adapted list,
+ * the store will throw unless the value is also an instance of [S].
+ *
+ * If all accessed elements of [source] are actually instances of [T],
+ * and if all elements stored into the returned list are actually instance
+ * of [S],
+ * then the returned list can be used as a `List<T>`.
+ */
+ static List<T> castTo<S, T>(List<S> source) => new CastList<S, T>(source);
+
+ /**
* Returns the object at the given [index] in the list
* or throws a [RangeError] if [index] is out of bounds.
*/
diff --git a/sdk/lib/core/map.dart b/sdk/lib/core/map.dart
index fb5a596..316febb 100644
--- a/sdk/lib/core/map.dart
+++ b/sdk/lib/core/map.dart
@@ -143,6 +143,23 @@
LinkedHashMap<K, V>.fromIterables;
/**
+ * Adapts [source] to be a `Map<K2, V2>`.
+ *
+ * Any time the set would produce a key or value that is not a [K2] or [V2],
+ * the access will throw.
+ *
+ * Any time [K2] key or [V2] value is attempted added into the adapted map,
+ * the store will throw unless the key is also an instance of [K] and
+ * the value is also an instance of [V].
+ *
+ * If all accessed entries of [source] are have [K2] keys and [V2] values
+ * and if all entries added to the returned map have [K] keys and [V]] values,
+ * then the returned map can be used as a `Map<K2, V2>`.
+ */
+ static Map<K2, V2> castTo<K, V, K2, V2>(Map<K, V> source) =>
+ new CastMap<K, V, K2, V2>(source);
+
+ /**
* Returns true if this map contains the given [value].
*
* Returns true if any of the values in the map are equal to `value`
diff --git a/sdk/lib/core/set.dart b/sdk/lib/core/set.dart
index 2d0bda5..1813fc7 100644
--- a/sdk/lib/core/set.dart
+++ b/sdk/lib/core/set.dart
@@ -79,6 +79,29 @@
factory Set.from(Iterable elements) = LinkedHashSet<E>.from;
/**
+ * Adapts [source] to be a `Set<T>`.
+ *
+ * If [newSet] is provided, it is used to create the new sets returned
+ * by [toSet], [union], and is also used for [intersection] and [difference].
+ * If [newSet] is omitted, it defaults to creating a new set using the
+ * default [Set] constructor, and [intersection] and [difference]
+ * returns an adapted version of calling the same method on the source.
+ *
+ * Any time the set would produce an element that is not a [T],
+ * the element access will throw.
+ *
+ * Any time a [T] value is attempted added into the adapted set,
+ * the store will throw unless the value is also an instance of [S].
+ *
+ * If all accessed elements of [source] are actually instances of [T],
+ * and if all elements added to the returned set are actually instance
+ * of [S],
+ * then the returned set can be used as a `Set<T>`.
+ */
+ static Set<T> castTo<S, T>(Set<S> source, {Set<R> Function<R>() newSet}) =>
+ new CastSet<S, T>(source, newSet);
+
+ /**
* Provides an iterator that iterates over the elements of this set.
*
* The order of iteration is defined by the individual `Set` implementation,
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index ef20c8d..b301d80 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -1694,7 +1694,7 @@
if (argumentError) {
throw new ArgumentError("Illegal character in path");
} else {
- throw new UnsupportedError("Illegal character in path");
+ throw new UnsupportedError("Illegal character in path: $segment");
}
}
}
diff --git a/sdk/lib/internal/cast.dart b/sdk/lib/internal/cast.dart
new file mode 100644
index 0000000..4a39115
--- /dev/null
+++ b/sdk/lib/internal/cast.dart
@@ -0,0 +1,352 @@
+// Copyright (c) 2012, 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.
+
+part of dart._internal;
+
+// Casting wrappers for collections and asynchronous classes.
+
+abstract class _CastIterableBase<S, T> extends Iterable<T> {
+ Iterable<S> get _source;
+
+ Iterator<T> get iterator => new CastIterator<S, T>(_source.iterator);
+
+ // The following members use the default implementation on the
+ // throwing iterator. These are all operations that have no more efficient
+ // implementation than visiting every element in order,
+ // or that has no more efficient way to get the correct type (toList, toSet).
+ //
+ // * map
+ // * where
+ // * expand
+ // * forEach
+ // * reduce
+ // * fold
+ // * every
+ // * any
+ // * join
+ // * toList
+ // * toSet
+ // * skipWhile
+ // * takeWhile
+ // * firstWhere
+ // * singleWhere
+
+ int get length => _source.length;
+ bool get isEmpty => _source.isEmpty;
+ bool get isNotEmpty => _source.isNotEmpty;
+
+ Iterable<T> skip(int count) => new CastIterable<S, T>(_source.skip(count));
+ Iterable<T> take(int count) => new CastIterable<S, T>(_source.take(count));
+
+ T elementAt(int index) => _source.elementAt(index) as T;
+ T get first => _source.first as T;
+ T get last => _source.last as T;
+ T get single => _source.single as T;
+
+ bool contains(Object other) => _source.contains(other);
+
+ // Might be implemented by testing backwards from the end,
+ // so use the _source's implementation.
+ T lastWhere(bool test(T element), {T orElse()}) =>
+ _source.lastWhere((S element) => test(element as T),
+ orElse: (orElse == null) ? null : () => orElse() as S) as T;
+
+ String toString() => _source.toString();
+}
+
+class CastIterator<S, T> implements Iterator<T> {
+ Iterator<S> _source;
+ CastIterator(this._source);
+ bool moveNext() => _source.moveNext();
+ T get current => _source.current as T;
+}
+
+class CastIterable<S, T> extends _CastIterableBase<S, T> {
+ final Iterable<S> _source;
+
+ CastIterable._(this._source);
+
+ factory CastIterable(Iterable<S> source) {
+ if (source is EfficientLengthIterable<S>) {
+ return new _EfficientLengthCastIterable<S, T>(source);
+ }
+ return new CastIterable<S, T>._(source);
+ }
+
+ Iterable<R> cast<R>() => new CastIterable<S, R>(_source);
+}
+
+class _EfficientLengthCastIterable<S, T> extends CastIterable<S, T>
+ implements EfficientLengthIterable<T> {
+ _EfficientLengthCastIterable(EfficientLengthIterable<S> source)
+ : super._(source);
+}
+
+abstract class _CastListBase<S, T> extends _CastIterableBase<S, T>
+ with ListMixin<T> {
+ List<S> get _source;
+
+ // Using the default implementation from ListMixin:
+ // * reversed
+ // * shuffle
+ // * indexOf
+ // * lastIndexOf
+ // * clear
+ // * sublist
+ // * asMap
+
+ T operator [](int index) => _source[index] as T;
+
+ void operator []=(int index, T value) {
+ _source[index] = value as S;
+ }
+
+ void set length(int length) {
+ _source.length = length;
+ }
+
+ void add(T value) {
+ _source.add(value as S);
+ }
+
+ void addAll(Iterable<T> values) {
+ _source.addAll(new CastIterable<T, S>(values));
+ }
+
+ void sort([int compare(T v1, T v2)]) {
+ _source.sort((S v1, S v2) => compare(v1 as T, v2 as T));
+ }
+
+ void shuffle([Random random]) {
+ _source.shuffle(random);
+ }
+
+ void insert(int index, T element) {
+ _source.insert(index, element as S);
+ }
+
+ void insertAll(int index, Iterable<T> elements) {
+ _source.insertAll(index, new CastIterable<T, S>(elements));
+ }
+
+ void setAll(int index, Iterable<T> elements) {
+ _source.setAll(index, new CastIterable<T, S>(elements));
+ }
+
+ bool remove(Object value) => _source.remove(value);
+
+ T removeAt(int index) => _source.removeAt(index) as T;
+
+ T removeLast() => _source.removeLast() as T;
+
+ void removeWhere(bool test(T element)) {
+ _source.removeWhere((S element) => test(element as T));
+ }
+
+ void retainWhere(bool test(T element)) {
+ _source.retainWhere((S element) => test(element as T));
+ }
+
+ Iterable<T> getRange(int start, int end) =>
+ new CastIterable<S, T>(_source.getRange(start, end));
+
+ void setRange(int start, int end, Iterable<T> iterable, [int skipCount = 0]) {
+ _source.setRange(start, end, new CastIterable<T, S>(iterable), skipCount);
+ }
+
+ void removeRange(int start, int end) {
+ _source.removeRange(start, end);
+ }
+
+ void fillRange(int start, int end, [T fillValue]) {
+ _source.fillRange(start, end, fillValue as S);
+ }
+
+ void replaceRange(int start, int end, Iterable<T> replacement) {
+ _source.replaceRange(start, end, new CastIterable<T, S>(replacement));
+ }
+}
+
+class CastList<S, T> extends _CastListBase<S, T> {
+ final List<S> _source;
+ CastList(this._source);
+
+ List<R> cast<R>() => new CastList<S, R>(_source);
+}
+
+class CastSet<S, T> extends _CastIterableBase<S, T> implements Set<T> {
+ final Set<S> _source;
+
+ /// Creates a new empty set of the same *kind* as [_source],
+ /// but with `<R>` as type argument.
+ /// Used by [toSet] (and indirectly by [union]).
+ final Set<R> Function<R>() _emptySet;
+
+ CastSet(this._source, this._emptySet);
+
+ static Set<R> _defaultEmptySet<R>() => new Set<R>();
+
+ Set<R> cast<R>() => new CastSet<S, R>(_source, _emptySet);
+
+ bool add(T value) => _source.add(value as S);
+
+ void addAll(Iterable<T> elements) {
+ _source.addAll(new CastIterable<T, S>(elements));
+ }
+
+ bool remove(Object object) => _source.remove(object);
+
+ void removeAll(Iterable<Object> objects) {
+ _source.removeAll(objects);
+ }
+
+ void retainAll(Iterable<Object> objects) {
+ _source.retainAll(objects);
+ }
+
+ void removeWhere(bool test(T element)) {
+ _source.removeWhere((S element) => test(element as T));
+ }
+
+ void retainWhere(bool test(T element)) {
+ _source.retainWhere((S element) => test(element as T));
+ }
+
+ bool containsAll(Iterable<Object> objects) => _source.containsAll(objects);
+
+ Set<T> intersection(Set<Object> other) {
+ if (_emptySet != null) return _conditionalAdd(other, true);
+ return new CastSet<S, T>(_source.intersection(other), null);
+ }
+
+ Set<T> difference(Set<Object> other) {
+ if (_emptySet != null) return _conditionalAdd(other, false);
+ return new CastSet<S, T>(_source.difference(other), null);
+ }
+
+ Set<T> _conditionalAdd(Set<Object> other, bool otherContains) {
+ Set<T> result = (_emptySet == null) ? new Set<T>() : _emptySet<T>();
+ for (var element in _source) {
+ T castElement = element as T;
+ if (otherContains == other.contains(castElement)) result.add(castElement);
+ }
+ return result;
+ }
+
+ Set<T> union(Set<T> other) => _clone()..addAll(other);
+
+ void clear() {
+ _source.clear();
+ }
+
+ Set<T> _clone() {
+ Set<T> result = (_emptySet == null) ? new Set<T>() : _emptySet<T>();
+ result.addAll(this);
+ return result;
+ }
+
+ Set<T> toSet() => _clone();
+
+ T lookup(Object key) => _source.lookup(key) as T;
+}
+
+abstract class _CastQueueMixin<S, T> implements Queue<T> {
+ Queue<S> get _source;
+
+ T removeFirst() => _source.removeFirst() as T;
+ T removeLast() => _source.removeLast() as T;
+
+ @deprecated
+ void add(T value) {
+ _source.add(value as S);
+ }
+
+ void addFirst(T value) {
+ _source.addFirst(value as S);
+ }
+
+ void addLast(T value) {
+ _source.addLast(value as S);
+ }
+
+ bool remove(Object other) => _source.remove(other);
+ void addAll(Iterable<T> elements) {
+ _source.addAll(new CastIterable<T, S>(elements));
+ }
+
+ void removeWhere(bool test(T element)) {
+ _source.removeWhere((S element) => test(element as T));
+ }
+
+ void retainWhere(bool test(T element)) {
+ _source.retainWhere((S element) => test(element as T));
+ }
+
+ void clear() {
+ _source.clear();
+ }
+}
+
+class CastMap<SK, SV, K, V> implements Map<K, V> {
+ final Map<SK, SV> _source;
+
+ CastMap(this._source);
+
+ Map<RK, RV> cast<RK, RV>() => new CastMap<SK, SV, RK, RV>(_source);
+
+ bool containsValue(Object value) => _source.containsValue(value);
+
+ bool containsKey(Object key) => _source.containsKey(key);
+
+ V operator [](Object key) => _source[key] as V;
+
+ void operator []=(K key, V value) {
+ _source[key as SK] = value as SV;
+ }
+
+ V putIfAbsent(K key, V ifAbsent()) => _source.putIfAbsent(
+ key as SK, (ifAbsent == null) ? null : () => ifAbsent() as SV) as V;
+
+ void addAll(Map<K, V> other) {
+ _source.addAll(new CastMap<K, V, SK, SV>(other));
+ }
+
+ V remove(Object key) => _source.remove(key) as V;
+
+ void clear() {
+ _source.clear();
+ }
+
+ void forEach(void f(K key, V value)) {
+ _source.forEach((SK key, SV value) {
+ f(key as K, value as V);
+ });
+ }
+
+ Iterable<K> get keys => new CastIterable<SK, K>(_source.keys);
+
+ Iterable<V> get values => new CastIterable<SV, V>(_source.values);
+
+ int get length => _source.length;
+
+ bool get isEmpty => _source.isEmpty;
+
+ bool get isNotEmpty => _source.isNotEmpty;
+}
+
+class CastQueue<S, T> extends _CastIterableBase<S, T>
+ with _CastQueueMixin<S, T> {
+ final Queue<S> _source;
+ CastQueue(this._source);
+ Queue<R> cast<R>() => new CastQueue<S, R>(_source);
+}
+
+// TODO(lrn): Use when ListQueue implements List.
+// class CastListQueue<S, T>
+// extends _CastListBase<S, T> with _CastQueueMixin<S, T>
+// implements ListQueue<T> {
+// final ListQueue<S> _source;
+// CastListQueue(this._source);
+// ListQueue<R> cast<R>() => new CastListQueue<S, R>(_source);
+// }
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index eeb0f85..430698c 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -10,6 +10,7 @@
import 'dart:core' as core;
import 'dart:math' show Random;
+part 'cast.dart';
part 'iterable.dart';
part 'list.dart';
part 'print.dart';
diff --git a/sdk/lib/internal/internal_sources.gni b/sdk/lib/internal/internal_sources.gni
index 9f7db6b..6acd227 100644
--- a/sdk/lib/internal/internal_sources.gni
+++ b/sdk/lib/internal/internal_sources.gni
@@ -7,6 +7,7 @@
"internal.dart",
# The above file needs to be first as it lists the parts below.
+ "cast.dart",
"iterable.dart",
"list.dart",
"linked_list.dart",
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index be5d4a9..9c6b0b9 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -32,8 +32,12 @@
Language/Expressions/Await_Expressions/evaluation_throws_t04: RuntimeError # Please triage this failure
Language/Expressions/Await_Expressions/evaluation_throws_t06: RuntimeError # Please triage this failure
Language/Expressions/Await_Expressions/evaluation_throws_t07: RuntimeError # Please triage this failure
+Language/Expressions/Constants/exception_t02: Crash # Issue 31762
Language/Expressions/Constants/identifier_denotes_a_constant_t06: MissingCompileTimeError # Issue 26580
Language/Expressions/Constants/identifier_denotes_a_constant_t07: MissingCompileTimeError # Issue 26580
+Language/Expressions/Constants/literal_number_t01: Crash # Issue 31762
+Language/Expressions/Constants/math_operators_t01: Crash # Issue 31762
+Language/Expressions/Constants/math_operators_t06: Crash # Issue 31762
Language/Expressions/Function_Invocation/async_cleanup_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
Language/Expressions/Function_Invocation/async_cleanup_t03: Skip # https://github.com/dart-lang/sdk/issues/28873
Language/Expressions/Function_Invocation/async_cleanup_t05: Skip # https://github.com/dart-lang/sdk/issues/28873
@@ -50,8 +54,12 @@
Language/Expressions/Maps/static_type_dynamic_t01: CompileTimeError # Maybe ok. Issue 17207
Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t01: MissingCompileTimeError # Issue 25496
Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t02: MissingCompileTimeError # Issue 25496
+Language/Expressions/Numbers/static_type_of_int_t01: Crash # Issue 31762
+Language/Expressions/Numbers/syntax_t06: Crash # Issue 31762
Language/Expressions/Numbers/syntax_t06: Fail # Issue 21098
+Language/Expressions/Numbers/syntax_t09: Crash # Issue 31762
Language/Expressions/Numbers/syntax_t09: Fail # Issue 21098
+Language/Expressions/Numbers/syntax_t10: Crash # Issue 31762
Language/Expressions/Object_Identity/Object_Identity/constant_objects_t01: Fail # Issue 11551, also related to issue 563, 18738
Language/Expressions/Object_Identity/Object_Identity/double_t02: Fail # Issue 11551, also related to issue 563, 18738
Language/Expressions/Object_Identity/constant_objects_t01: RuntimeError # Please triage this failure
@@ -183,19 +191,64 @@
LibTest/core/RegExp/Pattern_semantics/splitQueryString_A02_t01: Pass, RuntimeError # https://github.com/dart-lang/sdk/issues/29814
LibTest/core/double/INFINITY_A01_t04: RuntimeError # Expected to fail because double.INFINITY is int.
LibTest/core/double/NEGATIVE_INFINITY_A01_t04: RuntimeError # Expected to fail because double.NEGATIVE_INFINITY is int.
+LibTest/core/double/isInfinite_A01_t03: Crash # Issue 31762
+LibTest/core/double/operator_GE_A01_t02: Crash # Issue 31762
+LibTest/core/double/operator_GT_A01_t02: Crash # Issue 31762
+LibTest/core/double/operator_LE_A01_t02: Crash # Issue 31762
+LibTest/core/double/operator_LT_A01_t02: Crash # Issue 31762
+LibTest/core/int/abs_A01_t01: Crash # Issue 31762
+LibTest/core/int/ceilToDouble_A01_t01: Crash # Issue 31762
+LibTest/core/int/ceil_A01_t01: Crash # Issue 31762
+LibTest/core/int/compareTo_A01_t01: Crash # Issue 31762
+LibTest/core/int/floorToDouble_A01_t01: Crash # Issue 31762
+LibTest/core/int/floor_A01_t01: Crash # Issue 31762
+LibTest/core/int/hashCode_A01_t01: Crash # Issue 31762
LibTest/core/int/hashCode_A01_t01: RuntimeError, OK # co19 issue 308
LibTest/core/int/isEven_A01_t01: RuntimeError, OK # co19 issue 277
+LibTest/core/int/isEven_A01_t01: Crash # Issue 31762
+LibTest/core/int/isInfinite_A01_t01: Crash # Issue 31762
+LibTest/core/int/isNaN_A01_t01: Crash # Issue 31762
+LibTest/core/int/isNegative_A01_t01: Crash # Issue 31762
LibTest/core/int/isOdd_A01_t01: RuntimeError, OK # co19 issue 277
+LibTest/core/int/isOdd_A01_t01: Crash # Issue 31762
LibTest/core/int/operator_AND_A01_t01: RuntimeError, OK # Requires bigints.
+LibTest/core/int/operator_AND_A01_t01: Crash # Issue 31762
+LibTest/core/int/operator_GE_A01_t01: Crash # Issue 31762
LibTest/core/int/operator_GT_A01_t01: RuntimeError, OK # co19 issue 200
+LibTest/core/int/operator_GT_A01_t01: Crash # Issue 31762
+LibTest/core/int/operator_LE_A01_t01: Crash # Issue 31762
LibTest/core/int/operator_LT_A01_t01: RuntimeError, OK # co19 issue 200
+LibTest/core/int/operator_LT_A01_t01: Crash # Issue 31762
+LibTest/core/int/operator_NOT_A01_t01: Crash # Issue 31762
LibTest/core/int/operator_NOT_A01_t01: RuntimeError, OK # Expects negative result from bit-operation.
LibTest/core/int/operator_OR_A01_t01: RuntimeError, OK # Requires bigints.
+LibTest/core/int/operator_OR_A01_t01: Crash # Issue 31762
LibTest/core/int/operator_XOR_A01_t01: RuntimeError, OK # Requires bigints.
+LibTest/core/int/operator_XOR_A01_t01: Crash # Issue 31762
LibTest/core/int/operator_addition_A01_t01: RuntimeError, OK # co19 issue 200
+LibTest/core/int/operator_addition_A01_t01: Crash # Issue 31762
+LibTest/core/int/operator_division_A01_t01: Crash # Issue 31762
+LibTest/core/int/operator_left_shift_A01_t01: Crash # Issue 31762
+LibTest/core/int/operator_multiplication_A01_t01: Crash # Issue 31762
+LibTest/core/int/operator_remainder_A01_t01: Crash # Issue 31762
LibTest/core/int/operator_remainder_A01_t01: RuntimeError, OK # Requires bigints.
+LibTest/core/int/operator_remainder_A01_t02: Crash # Issue 31762
LibTest/core/int/operator_right_shift_A01_t01: RuntimeError, OK # Expects negative result from bit-operation.
+LibTest/core/int/operator_right_shift_A01_t01: Crash # Issue 31762
+LibTest/core/int/operator_subtraction_A01_t01: Crash # Issue 31762
+LibTest/core/int/operator_truncating_division_A01_t01: Crash # Issue 31762
+LibTest/core/int/operator_truncating_division_A01_t02: Crash # Issue 31762
+LibTest/core/int/operator_unary_minus_A01_t01: Crash # Issue 31762
+LibTest/core/int/parse_A01_t01: Crash # Issue 31762
+LibTest/core/int/remainder_A01_t01: Crash # Issue 31762
+LibTest/core/int/remainder_A01_t02: Crash # Issue 31762
+LibTest/core/int/roundToDouble_A01_t01: Crash # Issue 31762
+LibTest/core/int/round_A01_t01: Crash # Issue 31762
+LibTest/core/int/toDouble_A01_t01: Crash # Issue 31762
LibTest/core/int/toDouble_A01_t01: RuntimeError, OK # co19 issue 200
+LibTest/core/int/toInt_A01_t01: Crash # Issue 31762
+LibTest/core/int/truncateToDouble_A01_t01: Crash # Issue 31762
+LibTest/core/int/truncate_A01_t01: Crash # Issue 31762
LibTest/html/Element/addEventListener_A01_t04: Skip # https://github.com/dart-lang/sdk/issues/28873
LibTest/html/HttpRequest/responseType_A01_t03: CompileTimeError # co19-roll r706: Please triage this failure
LibTest/html/IFrameElement/addEventListener_A01_t04: Skip # https://github.com/dart-lang/sdk/issues/28873
@@ -218,6 +271,8 @@
LibTest/math/MutableRectangle/boundingBox_A01_t01: RuntimeError, Pass # co19-roll r706: Please triage this failure.
LibTest/math/Rectangle/boundingBox_A01_t01: RuntimeError, Pass # co19-roll r706: Please triage this failure.
LibTest/math/pow_A04_t01: Fail # co19-roll r587: Please triage this failure
+LibTest/math/pow_A09_t01: Crash # Issue 31762
+LibTest/math/pow_A10_t01: Crash # Issue 31762
LibTest/math/pow_A14_t01: Fail # co19-roll r587: Please triage this failure
LibTest/math/pow_A16_t01: Fail # co19-roll r587: Please triage this failure
LibTest/typed_data/ByteData/*Int64*: Fail # co19-roll r569: Please triage this failure
@@ -238,6 +293,7 @@
LibTest/typed_data/ByteData/getInt16_A02_t02: Fail # co19-roll r569: Please triage this failure
LibTest/typed_data/ByteData/getInt32_A02_t01: Fail # Issue 12989
LibTest/typed_data/ByteData/getInt32_A02_t02: Fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/getInt64_A01_t01: Crash # Issue 31762
LibTest/typed_data/ByteData/getInt64_A02_t02: Fail # co19-roll r569: Please triage this failure
LibTest/typed_data/ByteData/getInt8_A02_t01: Fail # Issue 12989
LibTest/typed_data/ByteData/getInt8_A02_t02: Fail # Issue 12989
@@ -245,6 +301,7 @@
LibTest/typed_data/ByteData/getUint16_A02_t02: Fail # co19-roll r569: Please triage this failure
LibTest/typed_data/ByteData/getUint32_A02_t01: Fail # Issue 12989
LibTest/typed_data/ByteData/getUint32_A02_t02: Fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/getUint64_A01_t01: Crash # Issue 31762
LibTest/typed_data/ByteData/getUint64_A02_t02: Fail # co19-roll r569: Please triage this failure
LibTest/typed_data/ByteData/getUint8_A02_t01: Fail # Issue 12989
LibTest/typed_data/ByteData/getUint8_A02_t02: Fail # Issue 12989
@@ -256,6 +313,7 @@
LibTest/typed_data/ByteData/setInt16_A02_t02: Fail # co19-roll r569: Please triage this failure
LibTest/typed_data/ByteData/setInt32_A02_t01: Fail # Issue 12989
LibTest/typed_data/ByteData/setInt32_A02_t02: Fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/setInt64_A01_t01: Crash # Issue 31762
LibTest/typed_data/ByteData/setInt64_A02_t02: Fail # co19-roll r569: Please triage this failure
LibTest/typed_data/ByteData/setInt8_A02_t01: Fail # Issue 12989
LibTest/typed_data/ByteData/setInt8_A02_t02: Fail # Issue 12989
@@ -263,6 +321,7 @@
LibTest/typed_data/ByteData/setUint16_A02_t02: Fail # co19-roll r569: Please triage this failure
LibTest/typed_data/ByteData/setUint32_A02_t01: Fail # Issue 12989
LibTest/typed_data/ByteData/setUint32_A02_t02: Fail # co19-roll r569: Please triage this failure
+LibTest/typed_data/ByteData/setUint64_A01_t01: Crash # Issue 31762
LibTest/typed_data/ByteData/setUint64_A02_t02: Fail # co19-roll r569: Please triage this failure
LibTest/typed_data/ByteData/setUint8_A02_t01: Fail # Issue 12989
LibTest/typed_data/ByteData/setUint8_A02_t02: Fail # Issue 12989
@@ -302,6 +361,10 @@
LibTest/typed_data/Int32List/Int32List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
LibTest/typed_data/Int32List/Int32List_A02_t01: Fail # co19-roll r576: Please triage this failure
LibTest/typed_data/Int64List/*: Fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int64List/Int64List.fromList_A01_t01: Crash # Issue 31762
+LibTest/typed_data/Int64List/Int64List.fromList_A01_t02: Crash # Issue 31762
+LibTest/typed_data/Int64List/Int64List.view_A01_t01: Crash # Issue 31762
+LibTest/typed_data/Int64List/Int64List.view_A01_t02: Crash # Issue 31762
LibTest/typed_data/Int64List/Int64List_A02_t01: Pass # co19-roll r559: Please triage this failure
LibTest/typed_data/Int8List/Int8List.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
LibTest/typed_data/Int8List/Int8List.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
@@ -316,6 +379,10 @@
LibTest/typed_data/Uint32List/Uint32List.view_A05_t03: RuntimeError # co19-roll r559: Please triage this failure
LibTest/typed_data/Uint32List/Uint32List_A02_t01: Fail # co19-roll r576: Please triage this failure
LibTest/typed_data/Uint64List/*: Fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t01: Crash # Issue 31762
+LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t02: Crash # Issue 31762
+LibTest/typed_data/Uint64List/Uint64List.view_A01_t01: Crash # Issue 31762
+LibTest/typed_data/Uint64List/Uint64List.view_A01_t02: Crash # Issue 31762
LibTest/typed_data/Uint64List/Uint64List_A02_t01: Pass # co19-roll r559: Please triage this failure
LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t01: RuntimeError # co19-roll r559: Please triage this failure
LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t02: RuntimeError # co19-roll r559: Please triage this failure
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 92571b0..88395aa 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -273,8 +273,15 @@
[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
Language/Expressions/Assignment/super_assignment_failed_t05: RuntimeError # Issue 25671
+Language/Expressions/Constants/literal_number_t01: CompileTimeError # Large integer literal
+Language/Expressions/Constants/math_operators_t01: CompileTimeError # Large integer literal
+Language/Expressions/Constants/math_operators_t06: CompileTimeError # Large integer literal
Language/Expressions/Function_Invocation/async_generator_invokation_t08: Fail # Issue 25967
Language/Expressions/Function_Invocation/async_generator_invokation_t10: Fail # Issue 25967
+Language/Expressions/Numbers/static_type_of_int_t01: CompileTimeError # Large integer literal
+Language/Expressions/Numbers/syntax_t06: CompileTimeError # Large integer literal
+Language/Expressions/Numbers/syntax_t09: CompileTimeError # Large integer literal
+Language/Expressions/Numbers/syntax_t10: CompileTimeError # Large integer literal
Language/Libraries_and_Scripts/Exports/reexport_t02: MissingCompileTimeError, Fail # Dart issue 12916
Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Skip # Issue 29895
Language/Statements/Assert/execution_t02: Skip # co19 issue 734
@@ -286,6 +293,14 @@
Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_async_t10: RuntimeError # Issue 25748
Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_sync_t05: RuntimeError # Issue 25662,25634
LayoutTests/fast/*: SkipByDesign # DOM not supported on VM.
+LibTest/collection/ListBase/ListBase_class_A01_t01: RuntimeError # Large integers
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: RuntimeError # Large integers
+LibTest/core/Duration/inDays_A01_t01: RuntimeError # Large integers
+LibTest/core/Duration/inHours_A01_t01: RuntimeError # Large integers
+LibTest/core/Duration/inMilliseconds_A01_t01: RuntimeError # Large integers
+LibTest/core/Duration/inMinutes_A01_t01: RuntimeError # Large integers
+LibTest/core/Duration/inSeconds_A01_t01: RuntimeError # Large integers
+LibTest/core/List/List_class_A01_t01: RuntimeError # Large integers
LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: RuntimeError # Issue 1296
LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError, Fail # Issue 22200
LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: RuntimeError, Fail # Issue 22200
@@ -293,7 +308,52 @@
LibTest/core/RegExp/Pattern_semantics/splitQueryString_A02_t01: RuntimeError # Issue 1296
LibTest/core/Symbol/Symbol_A01_t03: RuntimeError # Issue 13596
LibTest/core/Symbol/Symbol_A01_t05: RuntimeError # Issue 13596
+LibTest/core/double/ceil_A01_t04: RuntimeError # Large integers
+LibTest/core/double/floor_A01_t04: RuntimeError # Large integers
+LibTest/core/double/isInfinite_A01_t03: CompileTimeError # Large integer literal
+LibTest/core/double/round_A01_t03: RuntimeError # Large integers
+LibTest/core/double/toInt_A01_t05: RuntimeError # Large integers
+LibTest/core/double/truncate_A01_t05: RuntimeError # Large integers
+LibTest/core/int/abs_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/ceilToDouble_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/ceil_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/compareTo_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/floorToDouble_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/floor_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/isEven_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/isInfinite_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/isNaN_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/isNegative_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/isOdd_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_AND_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_GE_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_GT_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_LE_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_LT_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_NOT_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_OR_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_XOR_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_addition_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_division_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_left_shift_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_multiplication_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_remainder_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_remainder_A01_t02: CompileTimeError # Large integer literal
+LibTest/core/int/operator_right_shift_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_subtraction_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_truncating_division_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/operator_truncating_division_A01_t02: CompileTimeError # Large integer literal
+LibTest/core/int/operator_unary_minus_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/parse_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/remainder_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/remainder_A01_t02: CompileTimeError # Large integer literal
+LibTest/core/int/roundToDouble_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/round_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/toDouble_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/toInt_A01_t01: CompileTimeError # Large integer literal
LibTest/core/int/toRadixString_A01_t01: Fail # co19 issue 492
+LibTest/core/int/truncateToDouble_A01_t01: CompileTimeError # Large integer literal
+LibTest/core/int/truncate_A01_t01: CompileTimeError # Large integer literal
LibTest/html/*: SkipByDesign # dart:html not supported on VM.
LibTest/isolate/Isolate/spawnUri_A02_t02: Skip # Issue 15974
LibTest/isolate/Isolate/spawnUri_A02_t03: Skip # Issue 15974
@@ -304,8 +364,15 @@
LibTest/isolate/Isolate/spawn_A04_t04: Skip # Issue 15974
LibTest/isolate/Isolate/spawn_A06_t03: Skip # Issue 15974
LibTest/isolate/Isolate/spawn_A06_t05: Skip # Issue 15974
+LibTest/math/pow_A10_t01: CompileTimeError # Large integer literal
+LibTest/typed_data/ByteData/getUint64_A01_t01: CompileTimeError # Large integer literal
+LibTest/typed_data/ByteData/setUint64_A01_t01: CompileTimeError # Large integer literal
LibTest/typed_data/Float32x4/reciprocalSqrt_A01_t01: Pass, Fail # co19 issue 599
LibTest/typed_data/Float32x4/reciprocal_A01_t01: Pass, Fail # co19 issue 599
+LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t01: CompileTimeError # Large integer literal
+LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t02: CompileTimeError # Large integer literal
+LibTest/typed_data/Uint64List/Uint64List.view_A01_t01: CompileTimeError # Large integer literal
+LibTest/typed_data/Uint64List/Uint64List.view_A01_t02: CompileTimeError # Large integer literal
WebPlatformTest/*: SkipByDesign # dart:html not supported on VM.
[ $runtime == flutter || $hot_reload || $hot_reload_rollback ]
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_relations_test.dart b/tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart
similarity index 72%
rename from tests/compiler/dart2js/inference/simple_inferrer_relations_test.dart
rename to tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart
index 9125ad8..b89d27a 100644
--- a/tests/compiler/dart2js/inference/simple_inferrer_relations_test.dart
+++ b/tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart
@@ -50,10 +50,19 @@
""";
void main() {
- asyncTest(() => compileAll(TEST).then((generated) {
- if (generated.contains(r'=== true')) {
- print(generated);
- Expect.fail("missing elision of '=== true'");
- }
- }));
+ runTest({bool useKernel}) async {
+ String generated = await compileAll(TEST,
+ compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+ if (generated.contains(r'=== true')) {
+ print(generated);
+ Expect.fail("missing elision of '=== true'");
+ }
+ }
+
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTest(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTest(useKernel: true);
+ });
}
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 5984d35..dcf56c9 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -1,6 +1,7 @@
+# Copyright (c) 2012, 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.
-# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+
analyze_dart_test: Slow, Pass
analyze_test: Slow, Pass
async_await_syntax_test: Pass # DON'T CHANGE THIS LINE -- Don't mark these tests as failing. Instead, fix the errors/warnings that they report or update the whitelist in the test-files to temporarily allow digression.
@@ -8,6 +9,7 @@
codegen/gvn_dynamic_field_get_test: Fail # Issue 18519
codegen/load_elimination_test: Pass, Slow
codegen/logical_expression_test: Fail # Issue 17027
+codegen/number_output_test: RuntimeError # Issue 31762
codegen/simple_function_subtype_test: Fail # simple_function_subtype_test is temporarily(?) disabled due to new method for building function type tests.
deferred_loading/deferred_loading_test: Slow, Pass
equivalence/id_equivalence_test: Pass, Slow
@@ -17,6 +19,7 @@
inference/simple_inferrer_global_field_closure_test: Fail # Issue 16507
inference/swarm_test: Slow, Pass
inlining/inlining_test: Slow, Pass
+js/js_parser_test: RuntimeError # Issue 31762
kernel/*: Slow, Pass
kernel/compile_from_dill_fast_startup_test: RuntimeError # Test must be updated to support FE with patching.
kernel/compile_from_dill_test: RuntimeError # Test must be updated to support FE with patching.
@@ -44,13 +47,18 @@
serialization/compilation4_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
serialization/compilation5_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
serialization/compilation_1_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
+serialization/equivalence_test: RuntimeError # Issue 31762
+serialization/impact_test: RuntimeError # Issue 31762
serialization/library_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
+serialization/model0_test: RuntimeError # Issue 31762
serialization/model1_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
serialization/model3_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
serialization/model4_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
serialization/model5_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
serialization/model_1_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
serialization/native_data_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
+serialization/reserialization_test: RuntimeError # Issue 31762
+serialization/resolved_ast_test: RuntimeError # Issue 31762
sourcemaps/source_mapping_invokes_test: Pass, Slow
sourcemaps/source_mapping_operators_test: Pass, Slow
sourcemaps/source_mapping_test: Pass, Slow
diff --git a/tests/compiler/dart2js/deferred_loading/data/shared_constant.dart b/tests/compiler/dart2js/deferred_loading/data/shared_constant.dart
new file mode 100644
index 0000000..a1bccc0
--- /dev/null
+++ b/tests/compiler/dart2js/deferred_loading/data/shared_constant.dart
@@ -0,0 +1,18 @@
+// 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.
+
+/// Regression test for issue https://github.com/dart-lang/sdk/issues/31306.
+///
+/// When 1 constant was imported in two libraries by using the same exact
+/// deferred import URI, the deferred-constant initializer was incorrectly moved
+/// to the main output unit.
+
+import '../libs/shared_constant_a.dart';
+import '../libs/shared_constant_b.dart';
+
+/*element: main:OutputUnit(main, {})*/
+main() async {
+ (await doA()).method();
+ await doB();
+}
diff --git a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
index ec84fcd..9a48d0c 100644
--- a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
+++ b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
@@ -66,8 +66,16 @@
Expect.isTrue(import.isDeferred);
if (importPrefixes.containsKey(import.name)) {
+ var existing = importPrefixes[import.name];
+ var current = import.enclosingLibrary.canonicalUri;
Expect.equals(
- importPrefixes[import.name], import.enclosingLibrary.canonicalUri);
+ existing,
+ current,
+ '\n Duplicate prefix \'${import.name}\' used in both:\n'
+ ' - $existing and\n'
+ ' - $current.\n'
+ ' We require using unique prefixes on these tests to make '
+ 'the expectations more readable.');
}
importPrefixes[import.name] = import.enclosingLibrary.canonicalUri;
}
diff --git a/tests/compiler/dart2js/deferred_loading/libs/shared_constant_a.dart b/tests/compiler/dart2js/deferred_loading/libs/shared_constant_a.dart
new file mode 100644
index 0000000..8821616
--- /dev/null
+++ b/tests/compiler/dart2js/deferred_loading/libs/shared_constant_a.dart
@@ -0,0 +1,11 @@
+// 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 'shared_constant_shared.dart' deferred as s1;
+
+/*element: doA:OutputUnit(main, {})*/
+doA() async {
+ await s1.loadLibrary();
+ return s1.constant;
+}
diff --git a/tests/compiler/dart2js/deferred_loading/libs/shared_constant_b.dart b/tests/compiler/dart2js/deferred_loading/libs/shared_constant_b.dart
new file mode 100644
index 0000000..3e87532
--- /dev/null
+++ b/tests/compiler/dart2js/deferred_loading/libs/shared_constant_b.dart
@@ -0,0 +1,11 @@
+// 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 'shared_constant_shared.dart' deferred as s2;
+
+/*element: doB:OutputUnit(main, {})*/
+doB() async {
+ await s2.loadLibrary();
+ return s2.constant;
+}
diff --git a/tests/compiler/dart2js/deferred_loading/libs/shared_constant_c.dart b/tests/compiler/dart2js/deferred_loading/libs/shared_constant_c.dart
new file mode 100644
index 0000000..370c0e1
--- /dev/null
+++ b/tests/compiler/dart2js/deferred_loading/libs/shared_constant_c.dart
@@ -0,0 +1,11 @@
+// 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.
+
+class C {
+ /*element: C.:OutputUnit(1, {s1, s2})*/
+ const C();
+
+ /*element: C.method:OutputUnit(1, {s1, s2})*/
+ method() => print("1");
+}
diff --git a/tests/compiler/dart2js/deferred_loading/libs/shared_constant_shared.dart b/tests/compiler/dart2js/deferred_loading/libs/shared_constant_shared.dart
new file mode 100644
index 0000000..c309a75
--- /dev/null
+++ b/tests/compiler/dart2js/deferred_loading/libs/shared_constant_shared.dart
@@ -0,0 +1,9 @@
+// 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 'shared_constant_c.dart';
+
+/*element: constant:OutputUnit(1, {s1, s2})*/
+const constant =
+ /*OutputUnit(1, {s1, s2})*/ const C();
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
index a19dc4b..939543a 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
@@ -233,7 +233,7 @@
sb.write(sourceCode.substring(end, offset));
}
for (String annotation in annotations[offset]) {
- sb.write(colorizeAnnotation('/* ', annotation, ' */'));
+ sb.write(colorizeAnnotation('/*', annotation, '*/'));
}
end = offset;
}
@@ -579,8 +579,10 @@
for (Annotation annotation in code.annotations) {
String text = annotation.text;
IdValue idValue = IdValue.decode(annotation.offset, text);
- Expect.isFalse(expectedValues.containsKey(idValue.id),
- "Duplicate annotations for ${idValue.id}.");
+ Expect.isFalse(
+ expectedValues.containsKey(idValue.id),
+ "Duplicate annotations for ${idValue.id}: ${idValue} and "
+ "${expectedValues[idValue.id]}.");
expectedValues[idValue.id] = idValue;
}
});
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_test.dart b/tests/compiler/dart2js/equivalence/id_equivalence_test.dart
index a7f811b..93646f7 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_test.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_test.dart
@@ -26,6 +26,14 @@
'../jumps/data',
];
+const List<String> skipList = const <String>[
+ // TODO(johnniwinther): Fix these when kernel provides a unique offset for
+ // `()` in `foo[0]()`.
+ 'closure_tracer.dart',
+ 'closure_tracer_28919.dart',
+ 'index_call.dart',
+];
+
main(List<String> args) {
asyncTest(() async {
for (String path in dataDirectories) {
@@ -34,6 +42,10 @@
if (args.isNotEmpty && !args.contains(entity.uri.pathSegments.last)) {
continue;
}
+ if (skipList.contains(entity.uri.pathSegments.last)) {
+ print('Skipping ${entity.uri}');
+ continue;
+ }
print('Checking ${entity.uri}');
String annotatedCode =
await new File.fromUri(entity.uri).readAsString();
diff --git a/tests/compiler/dart2js/generic_methods/generic_method_test.dart b/tests/compiler/dart2js/generic_methods/generic_method_test.dart
new file mode 100644
index 0000000..1de091b
--- /dev/null
+++ b/tests/compiler/dart2js/generic_methods/generic_method_test.dart
@@ -0,0 +1,103 @@
+// 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 file.
+
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/js/js.dart' as js;
+import 'package:compiler/src/world.dart';
+import 'package:expect/expect.dart';
+import '../kernel/compiler_helper.dart';
+
+const String SOURCE = r'''
+import 'package:meta/dart2js.dart';
+
+// TODO(johnniwinther): Remove these when the needed RTI is correctly computed
+// for function type variables.
+test(o) => o is double || o is String || o is int;
+
+@noInline
+genericMethod1<T>(T t) {
+ test(t);
+ print('genericMethod1:');
+ print('$t is $T = ${t is T}');
+ print('"foo" is $T = ${"foo" is T}');
+ print('');
+}
+
+@noInline
+genericMethod2<T, S>(S s, T t) {
+ test(t);
+ test(s);
+ print('genericMethod2:');
+ print('$t is $T = ${t is T}');
+ print('$s is $T = ${s is T}');
+ print('$t is $S = ${t is S}');
+ print('$s is $S = ${s is S}');
+ print('');
+}
+
+@tryInline
+genericMethod3<T, S>(T t, S s) {
+ test(t);
+ test(s);
+ print('genericMethod3:');
+ print('$t is $T = ${t is T}');
+ print('$s is $T = ${s is T}');
+ print('$t is $S = ${t is S}');
+ print('$s is $S = ${s is S}');
+ print('');
+}
+
+main() {
+ genericMethod1<int>(0);
+ genericMethod2<String, double>(0.5, 'foo');
+ genericMethod3<double, String>(1.5, 'bar');
+}
+''';
+
+const String OUTPUT = r'''
+genericMethod1:
+0 is int = true
+"foo" is int = false
+
+genericMethod2:
+foo is String = true
+0.5 is String = false
+foo is double = false
+0.5 is double = true
+
+genericMethod3:
+1.5 is double = true
+bar is double = false
+1.5 is String = false
+bar is String = true
+
+''';
+
+main(List<String> args) {
+ asyncTest(() async {
+ Compiler compiler = await runWithD8(
+ memorySourceFiles: {'main.dart': SOURCE},
+ options: [Flags.useKernel, Flags.strongMode],
+ expectedOutput: OUTPUT,
+ printJs: args.contains('-v'));
+ ClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
+ ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+
+ void checkMethod(String name, int expectedParameterCount) {
+ FunctionEntity function = elementEnvironment.lookupLibraryMember(
+ elementEnvironment.mainLibrary, name);
+ Expect.isNotNull(function, "Method '$name' not found.");
+ js.Fun fun = compiler.backend.generatedCode[function];
+ Expect.equals(expectedParameterCount, fun.params.length,
+ "Unexpected parameter count for $function:\n${js.nodeToString(fun)}");
+ }
+
+ checkMethod('genericMethod1', 2);
+ checkMethod('genericMethod2', 4);
+ });
+}
diff --git a/tests/compiler/dart2js/inference/assert_message_throw_test.dart b/tests/compiler/dart2js/inference/assert_message_throw_test.dart
deleted file mode 100644
index d64ba79..0000000
--- a/tests/compiler/dart2js/inference/assert_message_throw_test.dart
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2016, 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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/elements/elements.dart';
-import 'package:compiler/src/types/masks.dart';
-import 'package:compiler/src/world.dart' show ClosedWorld;
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String SOURCE = '''
-main(args) {
- test0();
- test1(args == null);
- test2(args == null);
- test3(args);
-}
-
-// Check that `throw` in the message does is handled conditionally.
-test0() {
- assert(true, throw "unreachable");
- var list = [];
- return list;
-}
-
-// Check that side-effects of the assert message is not included after the
-// assert.
-test1(b) {
- var a;
- assert(b, a = 42);
- return a;
-}
-
-// Check that side-effects of the assert message is included after the assert
-// through the thrown exception.
-test2(b) {
- var a;
- try {
- assert(b, a = 42);
- } catch (e) {}
- return a;
-}
-
-// Check that type tests are preserved after the assert.
-test3(a) {
- assert(a is int);
- return a;
-}
-''';
-
-main() {
- asyncTest(() async {
- CompilationResult result = await runCompiler(
- entryPoint: Uri.parse('memory:main.dart'),
- memorySourceFiles: {'main.dart': SOURCE},
- options: [Flags.enableCheckedMode, Flags.enableAssertMessage]);
- Compiler compiler = result.compiler;
- ClosedWorld closedWorld =
- compiler.resolutionWorldBuilder.closedWorldForTesting;
-
- void check(String methodName, TypeMask expectedReturnType) {
- LibraryElement mainApp = closedWorld.elementEnvironment.mainLibrary;
- MemberElement element = mainApp.find(methodName);
- TypeMask typeMask = simplify(
- compiler.globalInference.results.resultOfMember(element).returnType,
- closedWorld);
- Expect.equals(expectedReturnType, typeMask,
- "Unexpected return type on method '$methodName'.");
- }
-
- check('test0', closedWorld.commonMasks.growableListType);
- check('test1', closedWorld.commonMasks.nullType);
- check('test2', closedWorld.commonMasks.uint31Type.nullable());
- check('test3', closedWorld.commonMasks.intType);
- });
-}
diff --git a/tests/compiler/dart2js/inference/closure_tracer_28919_test.dart b/tests/compiler/dart2js/inference/closure_tracer_28919_test.dart
deleted file mode 100644
index 46ad3d3..0000000
--- a/tests/compiler/dart2js/inference/closure_tracer_28919_test.dart
+++ /dev/null
@@ -1,114 +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 file.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/inferrer/type_graph_inferrer.dart';
-import 'package:compiler/src/types/types.dart';
-import 'package:compiler/src/world.dart';
-import 'package:expect/expect.dart';
-
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-bool isContainer(TypeMask mask) {
- return mask is ContainerTypeMask;
-}
-
-const String TEST = '''
-
-foo1() {
- final methods = [];
- var res, sum;
- for (int i = 0; i != 3; i++) {
- methods.add((int x) { res = x; sum = x + i; });
- }
- methods[0](499);
- probe1res(res);
- probe1sum(sum);
- probe1methods(methods);
-}
-probe1res(x) => x;
-probe1sum(x) => x;
-probe1methods(x) => x;
-
-nonContainer(choice) {
- var m = choice == 0 ? [] : "<String>";
- if (m is !List) throw 123;
- // The union then filter leaves us with a non-container type.
- return m;
-}
-
-foo2(int choice) {
- final methods = nonContainer(choice);
- var res, sum;
- for (int i = 0; i != 3; i++) {
- methods.add((int x) { res = x; sum = x + i; });
- }
- methods[0](499);
- probe2res(res);
- probe2methods(methods);
-}
-probe2res(x) => x;
-probe2methods(x) => x;
-
-main() {
- foo1();
- foo2(0);
- foo2(1);
-}
-''';
-
-void main() {
- runTest({bool useKernel}) async {
- CompilationResult result = await runCompiler(
- memorySourceFiles: {'main.dart': TEST},
- options: useKernel ? [Flags.useKernel] : []);
- Expect.isTrue(result.isSuccess);
- Compiler compiler = result.compiler;
-
- TypeGraphInferrer typesInferrer =
- compiler.globalInference.typesInferrerInternal;
- ClosedWorld closedWorld = typesInferrer.closedWorld;
- ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
- CommonMasks commonMasks = closedWorld.commonMasks;
-
- typeOf(String name) {
- LibraryEntity library = elementEnvironment.mainLibrary;
- MemberEntity member =
- elementEnvironment.lookupLibraryMember(library, name);
- return typesInferrer.getReturnTypeOfMember(member);
- }
-
- checkType(String name, type) {
- var mask = typeOf(name);
- Expect.equals(type.nullable(), simplify(mask, closedWorld), name);
- }
-
- checkContainer(String name, bool value) {
- var mask = typeOf(name);
- Expect.equals(
- value, isContainer(mask), '$name is container (mask: $mask)');
- }
-
- checkContainer('probe1methods', true);
- checkType('probe1res', commonMasks.uint31Type);
- checkType('probe1sum', commonMasks.positiveIntType);
-
- checkContainer('probe2methods', false);
- checkType('probe2res', commonMasks.dynamicType);
- }
-
- asyncTest(() async {
- print('--test from ast---------------------------------------------------');
- await runTest(useKernel: false);
- print('--test from kernel------------------------------------------------');
- await runTest(useKernel: true);
- });
-}
diff --git a/tests/compiler/dart2js/inference/closure_tracer_test.dart b/tests/compiler/dart2js/inference/closure_tracer_test.dart
deleted file mode 100644
index be82ef3..0000000
--- a/tests/compiler/dart2js/inference/closure_tracer_test.dart
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright (c) 2013, 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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-/// Currently it only works with the mock compiler.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-const String TEST = '''
-testFunctionStatement() {
- var res;
- closure(a) => res = a;
- closure(42);
- return res;
-}
-
-testFunctionExpression() {
- var res;
- var closure = (a) => res = a;
- closure(42);
- return res;
-}
-
-var staticField;
-
-testStoredInStatic() {
- var res;
- closure(a) => res = a;
- staticField = closure;
- staticField(42);
- return res;
-}
-
-class A {
- var field;
- A(this.field);
- static foo(a) => topLevel3 = a;
-}
-
-testStoredInInstance() {
- var res;
- closure(a) => res = a;
- var a = new A(closure);
- a.field(42);
- return res;
-}
-
-testStoredInMapOfList() {
- var res;
- closure(a) => res = a;
- var a = [closure];
- var b = {'foo' : 1};
- b['bar'] = a;
- b['bar'][0](42);
- return res;
-}
-
-testStoredInListOfList() {
- var res;
- closure(a) => res = a;
- var a = [closure];
- var b = [0, 1, 2];
- b[1] = a;
- b[1][0](42);
- return res;
-}
-
-testStoredInListOfListUsingInsert() {
- var res;
- closure(a) => res = a;
- var a = [closure];
- var b = [0, 1, 2];
- b.insert(1, a);
- b[1][0](42);
- return res;
-}
-
-testStoredInListOfListUsingAdd() {
- var res;
- closure(a) => res = a;
- var a = [closure];
- var b = [0, 1, 2];
- b.add(a);
- b[3][0](42);
- return res;
-}
-
-foo(closure) {
- closure(42);
-}
-
-testPassedInParameter() {
- var res;
- closure(a) => res = a;
- foo(closure);
- return res;
-}
-
-var topLevel1;
-foo2(a) => topLevel1 = a;
-testStaticClosure1() {
- var a = foo2;
- a(42);
- return topLevel1;
-}
-
-var topLevel2;
-bar(a) => topLevel2 = a;
-testStaticClosure2() {
- var a = bar;
- a(42);
- var b = bar;
- b(2.5);
- return topLevel2;
-}
-
-var topLevel3;
-testStaticClosure3() {
- var a = A.foo;
- a(42);
- return topLevel3;
-}
-
-var topLevel4;
-testStaticClosure4Helper(a) => topLevel4 = a;
-testStaticClosure4() {
- var a = testStaticClosure4Helper;
- // Test calling the static after tearing it off.
- testStaticClosure4Helper(2.5);
- a(42);
- return topLevel4;
-}
-
-main() {
- testFunctionStatement();
- testFunctionExpression();
- testStoredInStatic();
- testStoredInInstance();
- testStoredInMapOfList();
- testStoredInListOfList();
- testStoredInListOfListUsingInsert();
- testStoredInListOfListUsingAdd();
- testPassedInParameter();
- testStaticClosure1();
- testStaticClosure2();
- testStaticClosure3();
- testStaticClosure4();
-}
-''';
-
-void main() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- asyncTest(() => compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
- var commonMasks = closedWorld.commonMasks;
-
- checkType(String name, type) {
- MemberElement element = findElement(compiler, name);
- var mask = typesInferrer.getReturnTypeOfMember(element);
- Expect.equals(type.nullable(), simplify(mask, closedWorld), name);
- }
-
- checkType('testFunctionStatement', commonMasks.uint31Type);
- checkType('testFunctionExpression', commonMasks.uint31Type);
- checkType('testStoredInInstance', commonMasks.uint31Type);
- checkType('testStoredInStatic', commonMasks.uint31Type);
- checkType('testStoredInMapOfList', commonMasks.uint31Type);
- checkType('testStoredInListOfList', commonMasks.uint31Type);
- checkType('testStoredInListOfListUsingInsert', commonMasks.uint31Type);
- checkType('testStoredInListOfListUsingAdd', commonMasks.uint31Type);
- checkType('testPassedInParameter', commonMasks.uint31Type);
- checkType('testStaticClosure1', commonMasks.uint31Type);
- checkType('testStaticClosure2', commonMasks.numType);
- checkType('testStaticClosure3', commonMasks.uint31Type);
- checkType('testStaticClosure4', commonMasks.numType);
- }));
-}
diff --git a/tests/compiler/dart2js/inference/container_mask_equal_test.dart b/tests/compiler/dart2js/inference/container_mask_equal_test.dart
deleted file mode 100644
index 5f8af3a..0000000
--- a/tests/compiler/dart2js/inference/container_mask_equal_test.dart
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2013, 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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-// Regression test for dart2js that used to have a bogus
-// implementation of var.== and
-// var.hashCode.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:expect/expect.dart';
-import '../memory_compiler.dart';
-
-const MEMORY_SOURCE_FILES = const {
- 'main.dart': '''
-
-import 'dart:typed_data';
-
-a() => [0];
-b() => [1, 2];
-c() => new Uint8List(1);
-d() => new Uint8List(2);
-
-main() {
- print(a); print(b); print(c); print(d);
-}
-''',
-};
-
-main() {
- runTests({bool useKernel}) async {
- var result = await runCompiler(
- memorySourceFiles: MEMORY_SOURCE_FILES,
- options: useKernel ? [Flags.useKernel] : []);
- var compiler = result.compiler;
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
- var elementEnvironment = closedWorld.elementEnvironment;
-
- var element = elementEnvironment.lookupLibraryMember(
- elementEnvironment.mainLibrary, 'a');
- var mask1 = typesInferrer.getReturnTypeOfMember(element);
-
- element = elementEnvironment.lookupLibraryMember(
- elementEnvironment.mainLibrary, 'b');
- var mask2 = typesInferrer.getReturnTypeOfMember(element);
-
- element = elementEnvironment.lookupLibraryMember(
- elementEnvironment.mainLibrary, 'c');
- var mask3 = typesInferrer.getReturnTypeOfMember(element);
-
- element = elementEnvironment.lookupLibraryMember(
- elementEnvironment.mainLibrary, 'd');
- var mask4 = typesInferrer.getReturnTypeOfMember(element);
-
- Expect.notEquals(
- mask1.union(mask2, closedWorld), mask3.union(mask4, closedWorld));
- }
-
- asyncTest(() async {
- print('--test from ast---------------------------------------------------');
- await runTests(useKernel: false);
- print('--test from kernel------------------------------------------------');
- await runTests(useKernel: true);
- });
-}
diff --git a/tests/compiler/dart2js/inference/data/assert_message_throw.dart b/tests/compiler/dart2js/inference/data/assert_message_throw.dart
new file mode 100644
index 0000000..d310309
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/assert_message_throw.dart
@@ -0,0 +1,50 @@
+// 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.
+
+/// This file contains tests of assertions when assertions are _disabled_. The
+/// file 'assert_message_throw_ea.dart' contains similar tests for when
+/// assertions are _enabled_.
+
+/*element: main:[null]*/
+main(/*[null|subclass=Object]*/ args) {
+ test0();
+ test1(args == null);
+ test2(args == null);
+ test3(args);
+}
+
+// Check that `throw` in the message is handled conditionally.
+/*element: test0:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
+test0() {
+ assert(true, throw "unreachable");
+ var list = [];
+ return list;
+}
+
+// Check that side-effects of the assert message is not included after the
+// assert.
+/*element: test1:[null]*/
+test1(/*[exact=JSBool]*/ b) {
+ var a;
+ assert(b, a = 42);
+ return a;
+}
+
+// Check that side-effects of the assert message is included after the assert
+// through the thrown exception.
+/*element: test2:[null]*/
+test2(/*[exact=JSBool]*/ b) {
+ var a;
+ try {
+ assert(b, a = 42);
+ } catch (e) {}
+ return a;
+}
+
+// Check that type tests are preserved after the assert.
+/*element: test3:[null|subclass=Object]*/
+test3(/*[null|subclass=Object]*/ a) {
+ assert(a is int);
+ return a;
+}
diff --git a/tests/compiler/dart2js/inference/data/assert_message_throw_ea.dart b/tests/compiler/dart2js/inference/data/assert_message_throw_ea.dart
new file mode 100644
index 0000000..c3f0a1b
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/assert_message_throw_ea.dart
@@ -0,0 +1,50 @@
+// 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.
+
+/// This file contains tests of assertions when assertions are _enabled_. The
+/// file 'assert_message_throw.dart' contains similar tests for when assertions
+/// are _disabled_.
+
+/*element: main:[null]*/
+main(/*[null|subclass=Object]*/ args) {
+ test0();
+ test1(args == null);
+ test2(args == null);
+ test3(args);
+}
+
+// Check that `throw` in the message is handled conditionally.
+/*element: test0:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
+test0() {
+ assert(true, throw "unreachable");
+ var list = [];
+ return list;
+}
+
+// Check that side-effects of the assert message is not included after the
+// assert.
+/*element: test1:[null]*/
+test1(/*[exact=JSBool]*/ b) {
+ var a;
+ assert(b, a = 42);
+ return a;
+}
+
+// Check that side-effects of the assert message is included after the assert
+// through the thrown exception.
+/*element: test2:[null|exact=JSUInt31]*/
+test2(/*[exact=JSBool]*/ b) {
+ var a;
+ try {
+ assert(b, a = 42);
+ } catch (e) {}
+ return a;
+}
+
+// Check that type tests are preserved after the assert.
+/*element: test3:[subclass=JSInt]*/
+test3(/*[null|subclass=Object]*/ a) {
+ assert(a is int);
+ return a;
+}
diff --git a/tests/compiler/dart2js/inference/data/closure_tracer.dart b/tests/compiler/dart2js/inference/data/closure_tracer.dart
new file mode 100644
index 0000000..f1dfbb1
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/closure_tracer.dart
@@ -0,0 +1,210 @@
+// 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.
+
+/*element: testFunctionStatement:[null|exact=JSUInt31]*/
+testFunctionStatement() {
+ var res;
+ /*[exact=JSUInt31]*/ closure(/*[exact=JSUInt31]*/ a) => res = a;
+ closure(42);
+ return res;
+}
+
+/*element: testFunctionExpression:[null|exact=JSUInt31]*/
+testFunctionExpression() {
+ var res;
+ var closure = /*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ a) => res = a;
+ closure(42);
+ return res;
+}
+
+/*element: staticField:[null|subclass=Closure]*/
+var staticField;
+
+/*element: testStoredInStatic:[null|exact=JSUInt31]*/
+testStoredInStatic() {
+ var res;
+ /*[exact=JSUInt31]*/ closure(/*[exact=JSUInt31]*/ a) => res = a;
+ staticField = closure;
+ staticField(42);
+ return res;
+}
+
+class A {
+ /*element: A.field:[subclass=Closure]*/
+ var field;
+ /*element: A.:[exact=A]*/
+ A(this. /*[subclass=Closure]*/ field);
+
+ /*element: A.foo:[exact=JSUInt31]*/
+ static foo(/*[exact=JSUInt31]*/ a) => topLevel3 = a;
+}
+
+/*element: testStoredInInstance:[null|exact=JSUInt31]*/
+testStoredInInstance() {
+ var res;
+ /*[exact=JSUInt31]*/ closure(/*[exact=JSUInt31]*/ a) => res = a;
+ var a = new A(closure);
+ a. /*invoke: [exact=A]*/ field(42);
+ return res;
+}
+
+/*element: testStoredInMapOfList:[null|subclass=Object]*/
+testStoredInMapOfList() {
+ var res;
+ /*[null|subclass=Object]*/ closure(/*[null|subclass=Object]*/ a) => res = a;
+ dynamic a = [closure];
+ dynamic b = {'foo': 1};
+
+ b
+ /*update: Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSUInt31], [null|exact=JSExtendableArray]), map: {foo: [exact=JSUInt31], bar: Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)})*/
+ ['bar'] = a;
+
+ b
+ /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSUInt31], [null|exact=JSExtendableArray]), map: {foo: [exact=JSUInt31], bar: Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)})*/
+ ['bar']
+
+ /*Container([null|exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+ [0](42);
+ return res;
+}
+
+/*element: testStoredInListOfList:[null|exact=JSUInt31]*/
+testStoredInListOfList() {
+ var res;
+ /*[exact=JSUInt31]*/ closure(/*[exact=JSUInt31]*/ a) => res = a;
+ dynamic a = [closure];
+ dynamic b = [0, 1, 2];
+
+ b
+ /*update: Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: 3)*/
+ [1] = a;
+
+ b
+ /*Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: 3)*/
+ [1]
+ /*Union([exact=JSExtendableArray], [exact=JSUInt31])*/
+ [0](42);
+ return res;
+}
+
+/*element: testStoredInListOfListUsingInsert:[null|exact=JSUInt31]*/
+testStoredInListOfListUsingInsert() {
+ var res;
+ /*[exact=JSUInt31]*/ closure(/*[exact=JSUInt31]*/ a) => res = a;
+ dynamic a = [closure];
+ dynamic b = [0, 1, 2];
+
+ b
+ .
+ /*invoke: Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/
+ insert(1, a);
+
+ b /*Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/
+ [1]
+ /*Union([exact=JSExtendableArray], [exact=JSUInt31])*/
+ [0](42);
+ return res;
+}
+
+/*element: testStoredInListOfListUsingAdd:[null|exact=JSUInt31]*/
+testStoredInListOfListUsingAdd() {
+ var res;
+ /*[exact=JSUInt31]*/ closure(/*[exact=JSUInt31]*/ a) => res = a;
+ dynamic a = [closure];
+ dynamic b = [0, 1, 2];
+
+ b
+ .
+ /*invoke: Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/
+ add(a);
+
+ b
+ /*Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/
+ [3]
+ /*Union([exact=JSExtendableArray], [exact=JSUInt31])*/
+ [0](42);
+ return res;
+}
+
+/*element: foo:[null]*/
+foo(/*[subclass=Closure]*/ closure) {
+ closure(42);
+}
+
+/*element: testPassedInParameter:[null|exact=JSUInt31]*/
+testPassedInParameter() {
+ var res;
+ /*[exact=JSUInt31]*/ closure(/*[exact=JSUInt31]*/ a) => res = a;
+ foo(closure);
+ return res;
+}
+
+/*element: topLevel1:[null|exact=JSUInt31]*/
+var topLevel1;
+/*element: foo2:[exact=JSUInt31]*/
+foo2(/*[exact=JSUInt31]*/ a) => topLevel1 = a;
+
+/*element: testStaticClosure1:[null|exact=JSUInt31]*/
+testStaticClosure1() {
+ var a = foo2;
+ a(42);
+ return topLevel1;
+}
+
+/*element: topLevel2:Union([exact=JSUInt31], [null|exact=JSDouble])*/
+var topLevel2;
+
+/*element: bar:Union([exact=JSDouble], [exact=JSUInt31])*/
+bar(/*Union([exact=JSDouble], [exact=JSUInt31])*/ a) => topLevel2 = a;
+
+/*element: testStaticClosure2:Union([exact=JSUInt31], [null|exact=JSDouble])*/
+testStaticClosure2() {
+ var a = bar;
+ a(42);
+ var b = bar;
+ b(2.5);
+ return topLevel2;
+}
+
+/*element: topLevel3:[null|exact=JSUInt31]*/
+var topLevel3;
+
+/*element: testStaticClosure3:[null|exact=JSUInt31]*/ testStaticClosure3() {
+ var a = A.foo;
+ a(42);
+ return topLevel3;
+}
+
+/*element: topLevel4:Union([exact=JSUInt31], [null|exact=JSDouble])*/
+var topLevel4;
+
+/*element: testStaticClosure4Helper:Union([exact=JSDouble], [exact=JSUInt31])*/
+testStaticClosure4Helper(/*Union([exact=JSDouble], [exact=JSUInt31])*/ a) =>
+ topLevel4 = a;
+
+/*element: testStaticClosure4:Union([exact=JSUInt31], [null|exact=JSDouble])*/
+testStaticClosure4() {
+ var a = testStaticClosure4Helper;
+ // Test calling the static after tearing it off.
+ testStaticClosure4Helper(2.5);
+ a(42);
+ return topLevel4;
+}
+
+/*element: main:[null]*/
+main() {
+ testFunctionStatement();
+ testFunctionExpression();
+ testStoredInStatic();
+ testStoredInInstance();
+ testStoredInMapOfList();
+ testStoredInListOfList();
+ testStoredInListOfListUsingInsert();
+ testStoredInListOfListUsingAdd();
+ testPassedInParameter();
+ testStaticClosure1();
+ testStaticClosure2();
+ testStaticClosure3();
+ testStaticClosure4();
+}
diff --git a/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart b/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart
new file mode 100644
index 0000000..1fece67
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart
@@ -0,0 +1,78 @@
+// 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.
+
+// Regression test for issue 28919.
+
+/*element: foo1:[null]*/
+foo1() {
+ final methods = [];
+ var res, sum;
+ for (int i = 0;
+ i /*invoke: [subclass=JSPositiveInt]*/ != 3;
+ i /*invoke: [subclass=JSPositiveInt]*/ ++) {
+ methods
+ . /*invoke: Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/ add(
+ /*[null]*/ (int /*[exact=JSUInt31]*/ x) {
+ res = x;
+ sum = x /*invoke: [exact=JSUInt31]*/ + i;
+ });
+ }
+ methods /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/ [
+ 0](499);
+ probe1res(res);
+ probe1sum(sum);
+ probe1methods(methods);
+}
+
+/*element: probe1res:[null|exact=JSUInt31]*/
+probe1res(/*[null|exact=JSUInt31]*/ x) => x;
+
+/*element: probe1sum:[null|subclass=JSPositiveInt]*/
+probe1sum(/*[null|subclass=JSPositiveInt]*/ x) => x;
+
+/*element: probe1methods:Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/
+probe1methods(
+ /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/ x) =>
+ x;
+
+/*element: nonContainer:[exact=JSExtendableArray]*/
+nonContainer(/*[exact=JSUInt31]*/ choice) {
+ var m = choice /*invoke: [exact=JSUInt31]*/ == 0 ? [] : "<String>";
+ if (m is! List) throw 123;
+ // The union then filter leaves us with a non-container type.
+ return m;
+}
+
+/*element: foo2:[null]*/
+foo2(int /*[exact=JSUInt31]*/ choice) {
+ final methods = nonContainer(choice);
+
+ /// ignore: unused_local_variable
+ var res, sum;
+ for (int i = 0;
+ i /*invoke: [subclass=JSPositiveInt]*/ != 3;
+ i /*invoke: [subclass=JSPositiveInt]*/ ++) {
+ methods. /*invoke: [exact=JSExtendableArray]*/ add(
+ /*[null]*/ (int /*[null|subclass=Object]*/ x) {
+ res = x;
+ sum = x + i;
+ });
+ }
+ methods /*[exact=JSExtendableArray]*/ [0](499);
+ probe2res(res);
+ probe2methods(methods);
+}
+
+/*element: probe2res:[null|subclass=Object]*/
+probe2res(/*[null|subclass=Object]*/ x) => x;
+
+/*element: probe2methods:[exact=JSExtendableArray]*/
+probe2methods(/*[exact=JSExtendableArray]*/ x) => x;
+
+/*element: main:[null]*/
+main() {
+ foo1();
+ foo2(0);
+ foo2(1);
+}
diff --git a/tests/compiler/dart2js/inference/data/container_mask_equal.dart b/tests/compiler/dart2js/inference/data/container_mask_equal.dart
new file mode 100644
index 0000000..be6deee
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/container_mask_equal.dart
@@ -0,0 +1,34 @@
+// 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.
+
+// Regression test for dart2js that used to have a bogus
+// implementation of var.== and var.hashCode.
+
+import 'dart:typed_data';
+
+/*element: method1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+method1() => [0];
+
+/*element: method2:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+method2() => [1, 2];
+
+/*element: method3:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 1)*/
+method3() => new Uint8List(1);
+
+/*element: method4:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 2)*/
+method4() => new Uint8List(2);
+
+/*element: method1or2:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
+method1or2(/*[exact=JSBool]*/ c) => c ? method1() : method2();
+
+/*element: method3or4:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: null)*/
+method3or4(/*[exact=JSBool]*/ c) => c ? method3() : method4();
+
+/*element: main:[null]*/
+main() {
+ method1or2(true);
+ method1or2(false);
+ method3or4(true);
+ method3or4(false);
+}
diff --git a/tests/compiler/dart2js/inference/data/index_call.dart b/tests/compiler/dart2js/inference/data/index_call.dart
new file mode 100644
index 0000000..1bab3af
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/index_call.dart
@@ -0,0 +1,94 @@
+// 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.
+
+/*element: main:[null]*/
+main() {
+ listIndexCall();
+ listIndexExplicitCall();
+ multiListIndex();
+ multiListIndexCall();
+ multiMapIndex();
+ multiMapIndexCall();
+ multiMapListIndexCall();
+}
+
+/*element: listIndexCall:[null|subclass=Object]*/
+listIndexCall() {
+ var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ a}) => a;
+ var a = [closure];
+ return a /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/
+ [0](a: 0);
+}
+
+/*element: listIndexExplicitCall:[null|subclass=Object]*/
+listIndexExplicitCall() {
+ var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ b}) => b;
+ var a = [closure];
+ return a /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/
+ [0]
+ .call(b: 0);
+}
+
+/*element: multiListIndex:[subclass=JSPositiveInt]*/
+multiListIndex() {
+ var a = [
+ [0]
+ ];
+ return a
+ /*Container([exact=JSExtendableArray], element: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1), length: 1)*/
+ [0]
+ /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+ [0]
+ . /*invoke: [exact=JSUInt31]*/ abs();
+}
+
+/*element: multiListIndexCall:[null|subclass=Object]*/
+multiListIndexCall() {
+ var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ c}) => c;
+ var a = [
+ [closure]
+ ];
+ return a
+ /*Container([exact=JSExtendableArray], element: Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1), length: 1)*/
+ [0]
+ /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/
+ [0](c: 0);
+}
+
+/*element: multiMapIndex:[subclass=JSPositiveInt]*/
+multiMapIndex() {
+ var a = {
+ 'a': {'b': 0}
+ };
+ return a /*Dictionary([subclass=JsLinkedHashMap], key: Value([exact=JSString], value: "a"), value: Dictionary([null|subclass=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|exact=JSUInt31], map: {b: [exact=JSUInt31]}), map: {a: Dictionary([subclass=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|exact=JSUInt31], map: {b: [exact=JSUInt31]})})*/
+ ['a']
+ /*Dictionary([subclass=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|exact=JSUInt31], map: {b: [exact=JSUInt31]})*/
+ ['b']
+ . /*invoke: [exact=JSUInt31]*/
+ abs();
+}
+
+/*element: multiMapIndexCall:[null|subclass=Object]*/
+multiMapIndexCall() {
+ var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ d}) => d;
+ var a = {
+ 'a': {'b': closure}
+ };
+ return a /*Dictionary([subclass=JsLinkedHashMap], key: Value([exact=JSString], value: "a"), value: Dictionary([null|subclass=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|subclass=Closure], map: {b: [subclass=Closure]}), map: {a: Dictionary([subclass=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|subclass=Closure], map: {b: [subclass=Closure]})})*/
+ ['a']
+ /*Dictionary([subclass=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|subclass=Closure], map: {b: [subclass=Closure]})*/
+ ['b'](d: 0);
+}
+
+/*element: multiMapListIndexCall:[null|subclass=Object]*/
+multiMapListIndexCall() {
+ var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ d}) => d;
+ var a = {
+ 'a': [closure]
+ };
+ return a /*Dictionary([subclass=JsLinkedHashMap], key: Value([exact=JSString], value: "a"), value: Container([null|exact=JSExtendableArray], element: [subclass=Closure], length: 1), map: {a: Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)})*/
+ ['a']
+ /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/
+ [0](d: 0);
+}
diff --git a/tests/compiler/dart2js/inference/data/issue13354.dart b/tests/compiler/dart2js/inference/data/issue13354.dart
new file mode 100644
index 0000000..24a47b0
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/issue13354.dart
@@ -0,0 +1,29 @@
+// 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.
+
+// Regression test for issue 13354.
+
+/*element: bar:[exact=JSUInt31]*/
+bar() => 42;
+
+/*element: baz:[subclass=Closure]*/
+baz() => bar;
+
+/*element: A.:[exact=A]*/
+class A {
+ /*element: A.foo:[exact=JSUInt31]*/
+ foo() => 42;
+}
+
+/*element: B.:[exact=B]*/
+class B extends A {
+ /*element: B.foo:[subclass=Closure]*/
+ foo() => super.foo;
+}
+
+/*element: main:[null]*/
+main() {
+ baz();
+ new B(). /*invoke: [exact=B]*/ foo();
+}
diff --git a/tests/compiler/dart2js/inference/data/list_tracer2.dart b/tests/compiler/dart2js/inference/data/list_tracer2.dart
new file mode 100644
index 0000000..356c791
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/list_tracer2.dart
@@ -0,0 +1,18 @@
+// 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.
+
+// We used to always nullify the element type of a list we are tracing in
+// the presence of a fixed length list constructor call.
+
+/*element: myList:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+var myList = [42];
+
+/*element: main:[exact=JSUInt31]*/
+main() {
+ /// ignore: unused_local_variable
+ var a = new List(42);
+ return myList
+ /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+ [0];
+}
diff --git a/tests/compiler/dart2js/inference/data/list_tracer3.dart b/tests/compiler/dart2js/inference/data/list_tracer3.dart
new file mode 100644
index 0000000..7782208
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/list_tracer3.dart
@@ -0,0 +1,24 @@
+// 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.
+
+// We used to always nullify the element type of a list we are tracing in
+// the presence of a fixed length list constructor call.
+
+/*element: myList:Container([exact=JSExtendableArray], element: Union([exact=JSString], [subclass=JSNumber]), length: null)*/
+var myList = [];
+
+/*element: otherList:Container([exact=JSExtendableArray], element: Union([exact=JSString], [exact=JSUInt31]), length: 2)*/
+var otherList = ['foo', 42];
+
+/*element: main:[null]*/
+main() {
+ dynamic a = otherList
+ /*Container([exact=JSExtendableArray], element: Union([exact=JSString], [exact=JSUInt31]), length: 2)*/
+ [0];
+ a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ += 54;
+ myList
+ .
+ /*invoke: Container([exact=JSExtendableArray], element: Union([exact=JSString], [subclass=JSNumber]), length: null)*/
+ add(a);
+}
diff --git a/tests/compiler/dart2js/inference/issue13354_test.dart b/tests/compiler/dart2js/inference/issue13354_test.dart
deleted file mode 100644
index e5c7b4ea..0000000
--- a/tests/compiler/dart2js/inference/issue13354_test.dart
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2013, 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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = """
-bar() => 42;
-baz() => bar;
-
-class A {
- foo() => 42;
-}
-
-class B extends A {
- foo() => super.foo;
-}
-
-main() {
- baz();
- new B().foo();
-}
-""";
-
-void main() {
- runTest({bool useKernel}) async {
- var result = await runCompiler(
- memorySourceFiles: {'main.dart': TEST},
- options: useKernel ? [Flags.useKernel] : []);
- var compiler = result.compiler;
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
- var elementEnvironment = closedWorld.elementEnvironment;
- var commonMasks = closedWorld.commonMasks;
-
- checkReturn(String name, type) {
- MemberEntity element = elementEnvironment.lookupLibraryMember(
- elementEnvironment.mainLibrary, name);
- Expect.equals(
- type,
- simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld),
- name);
- }
-
- checkReturnInClass(String className, String methodName, type) {
- dynamic cls = elementEnvironment.lookupClass(
- elementEnvironment.mainLibrary, className);
- var element = elementEnvironment.lookupClassMember(cls, methodName);
- Expect.equals(type,
- simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld));
- }
-
- checkReturn('bar', commonMasks.uint31Type);
- checkReturn('baz', commonMasks.functionType);
-
- checkReturnInClass('A', 'foo', commonMasks.uint31Type);
- checkReturnInClass('B', 'foo', commonMasks.functionType);
- }
-
- asyncTest(() async {
- print('--test from ast---------------------------------------------------');
- await runTest(useKernel: false);
- print('--test from kernel------------------------------------------------');
- await runTest(useKernel: true);
- });
-}
diff --git a/tests/compiler/dart2js/inference/list_tracer2_test.dart b/tests/compiler/dart2js/inference/list_tracer2_test.dart
deleted file mode 100644
index b76158d..0000000
--- a/tests/compiler/dart2js/inference/list_tracer2_test.dart
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2013, 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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-
-// We used to always nullify the element type of a list we are tracing in
-// the presence of a fixed length list constructor call.
-
-import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/types/types.dart' show ContainerTypeMask;
-import 'package:expect/expect.dart';
-import 'type_mask_test_helper.dart';
-import '../memory_compiler.dart';
-
-const String TEST = r'''
-var myList = [42];
-main() {
- var a = new List(42);
- return myList[0];
-}
-''';
-
-void main() {
- runTest({bool useKernel}) async {
- var result = await runCompiler(
- memorySourceFiles: {'main.dart': TEST},
- options: useKernel ? [Flags.useKernel] : []);
- var compiler = result.compiler;
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
- var elementEnvironment = closedWorld.elementEnvironment;
-
- checkType(String name, type) {
- MemberEntity element = elementEnvironment.lookupLibraryMember(
- elementEnvironment.mainLibrary, name);
- ContainerTypeMask mask = typesInferrer.getTypeOfMember(element);
- Expect.equals(type, simplify(mask.elementType, closedWorld), name);
- }
-
- checkType('myList', typesInferrer.closedWorld.commonMasks.uint31Type);
- }
-
- asyncTest(() async {
- print('--test from ast---------------------------------------------------');
- await runTest(useKernel: false);
- print('--test from kernel------------------------------------------------');
- await runTest(useKernel: true);
- });
-}
diff --git a/tests/compiler/dart2js/inference/list_tracer3_test.dart b/tests/compiler/dart2js/inference/list_tracer3_test.dart
deleted file mode 100644
index b229cf6..0000000
--- a/tests/compiler/dart2js/inference/list_tracer3_test.dart
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2013, 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.
-
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-/// Currently it only works with the mock compiler.
-
-// We used to always nullify the element type of a list we are tracing in
-// the presence of a fixed length list constructor call.
-
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'package:compiler/src/types/types.dart' show ContainerTypeMask;
-
-import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
-
-const String TEST = r'''
-var myList = [];
-var otherList = ['foo', 42];
-main() {
- var a = otherList[0];
- a += 54;
- myList.add(a);
-}
-''';
-
-void main() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- asyncTest(() => compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
-
- checkType(String name, type) {
- MemberElement element = findElement(compiler, name);
- ContainerTypeMask mask = typesInferrer.getTypeOfMember(element);
- Expect.equals(type, simplify(mask.elementType, closedWorld), name);
- }
-
- var interceptorType =
- typesInferrer.closedWorld.commonMasks.interceptorType;
- checkType('myList', interceptorType);
- }));
-}
diff --git a/tests/compiler/dart2js/inference/list_tracer_length_test.dart b/tests/compiler/dart2js/inference/list_tracer_length_test.dart
index 01523e2..5ad3506 100644
--- a/tests/compiler/dart2js/inference/list_tracer_length_test.dart
+++ b/tests/compiler/dart2js/inference/list_tracer_length_test.dart
@@ -2,8 +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.
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-/// Currently it only works with the mock compiler.
+/// TODO(johnniwinther): Currently this only works with the mock compiler.
import "package:expect/expect.dart";
import "package:async_helper/async_helper.dart";
diff --git a/tests/compiler/dart2js/inference/list_tracer_node_type_test.dart b/tests/compiler/dart2js/inference/list_tracer_node_type_test.dart
index 62b25da..b1d315f 100644
--- a/tests/compiler/dart2js/inference/list_tracer_node_type_test.dart
+++ b/tests/compiler/dart2js/inference/list_tracer_node_type_test.dart
@@ -2,8 +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.
-/// TODO(johnniwinther): Port this test to use the equivalence framework.
-/// Currently it only works with the mock compiler.
+/// TODO(johnniwinther): Currently this only works with the mock compiler.
import "package:expect/expect.dart";
import "package:async_helper/async_helper.dart";
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_and_or_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_and_or_test.dart
index eaacd3e..e990edb 100644
--- a/tests/compiler/dart2js/inference/simple_inferrer_and_or_test.dart
+++ b/tests/compiler/dart2js/inference/simple_inferrer_and_or_test.dart
@@ -4,10 +4,12 @@
/// TODO(johnniwinther): Port this test to use the equivalence framework.
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/elements/entities.dart';
import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
+import '../memory_compiler.dart';
const String TEST = """
class X {}
@@ -95,35 +97,43 @@
""";
void main() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- asyncTest(() => compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
+ runTest({bool useKernel}) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {'main.dart': TEST},
+ options: useKernel ? [Flags.useKernel] : []);
+ Expect.isTrue(result.isSuccess);
+ var compiler = result.compiler;
+ var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ var closedWorld = typesInferrer.closedWorld;
- checkReturn(String name, type) {
- MemberElement element = findElement(compiler, name);
- Expect.equals(
- type,
- simplify(
- typesInferrer.getReturnTypeOfMember(element), closedWorld));
- }
+ checkReturn(String name, type) {
+ MemberEntity element = findMember(closedWorld, name);
+ Expect.equals(type,
+ simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld));
+ }
- var subclassOfInterceptor = closedWorld.commonMasks.interceptorType;
+ var subclassOfInterceptor = interceptorOrComparable(closedWorld);
- checkReturn('returnDyn1', subclassOfInterceptor);
- checkReturn('returnDyn2', subclassOfInterceptor);
- checkReturn('returnDyn3', subclassOfInterceptor);
- checkReturn(
- 'returnDyn4', closedWorld.commonMasks.dynamicType.nonNullable());
- checkReturn(
- 'returnDyn5', closedWorld.commonMasks.dynamicType.nonNullable());
- checkReturn(
- 'returnDyn6', closedWorld.commonMasks.dynamicType.nonNullable());
- checkReturn('returnDyn7', subclassOfInterceptor);
- checkReturn('returnDyn7b', subclassOfInterceptor);
- checkReturn('returnDyn8', subclassOfInterceptor);
- checkReturn('returnDyn9', subclassOfInterceptor);
- checkReturn('returnString', closedWorld.commonMasks.stringType);
- }));
+ checkReturn('returnDyn1', subclassOfInterceptor);
+ checkReturn('returnDyn2', subclassOfInterceptor);
+ checkReturn('returnDyn3', subclassOfInterceptor);
+ checkReturn(
+ 'returnDyn4', closedWorld.commonMasks.dynamicType.nonNullable());
+ checkReturn(
+ 'returnDyn5', closedWorld.commonMasks.dynamicType.nonNullable());
+ checkReturn(
+ 'returnDyn6', closedWorld.commonMasks.dynamicType.nonNullable());
+ checkReturn('returnDyn7', subclassOfInterceptor);
+ checkReturn('returnDyn7b', subclassOfInterceptor);
+ checkReturn('returnDyn8', subclassOfInterceptor);
+ checkReturn('returnDyn9', subclassOfInterceptor);
+ checkReturn('returnString', closedWorld.commonMasks.stringType);
+ }
+
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTest(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTest(useKernel: true);
+ });
}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_closure_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_closure_test.dart
index 9b418e9..915eeb4 100644
--- a/tests/compiler/dart2js/inference/simple_inferrer_closure_test.dart
+++ b/tests/compiler/dart2js/inference/simple_inferrer_closure_test.dart
@@ -4,10 +4,12 @@
/// TODO(johnniwinther): Port this test to use the equivalence framework.
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/elements/entities.dart';
import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
+import '../memory_compiler.dart';
const String TEST = """
returnInt1() {
@@ -117,47 +119,52 @@
""";
void main() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- asyncTest(() => compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
+ runTest({bool useKernel}) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {'main.dart': TEST},
+ options: useKernel ? [Flags.useKernel] : []);
+ Expect.isTrue(result.isSuccess);
+ var compiler = result.compiler;
+ var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ var closedWorld = typesInferrer.closedWorld;
- checkReturn(String name, type) {
- MemberElement element = findElement(compiler, name);
- Expect.equals(
- type,
- simplify(
- typesInferrer.getReturnTypeOfMember(element), closedWorld),
- name);
- }
+ checkReturn(String name, type) {
+ MemberEntity element = findMember(closedWorld, name);
+ Expect.equals(
+ type,
+ simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld),
+ name);
+ }
- checkReturn('returnInt1', closedWorld.commonMasks.uint31Type);
- checkReturn('returnInt2', closedWorld.commonMasks.uint31Type);
- checkReturn('returnInt3', closedWorld.commonMasks.uint31Type);
- checkReturn('returnInt4', closedWorld.commonMasks.uint31Type);
- checkReturn(
- 'returnIntOrNull', closedWorld.commonMasks.uint31Type.nullable());
+ checkReturn('returnInt1', closedWorld.commonMasks.uint31Type);
+ checkReturn('returnInt2', closedWorld.commonMasks.uint31Type);
+ checkReturn('returnInt3', closedWorld.commonMasks.uint31Type);
+ checkReturn('returnInt4', closedWorld.commonMasks.uint31Type);
+ checkReturn(
+ 'returnIntOrNull', closedWorld.commonMasks.uint31Type.nullable());
- checkReturn(
- 'returnDyn1', closedWorld.commonMasks.dynamicType.nonNullable());
- checkReturn(
- 'returnDyn2', closedWorld.commonMasks.dynamicType.nonNullable());
- checkReturn(
- 'returnDyn3', closedWorld.commonMasks.dynamicType.nonNullable());
- checkReturn('returnNum1', closedWorld.commonMasks.numType);
+ checkReturn(
+ 'returnDyn1', closedWorld.commonMasks.dynamicType.nonNullable());
+ checkReturn(
+ 'returnDyn2', closedWorld.commonMasks.dynamicType.nonNullable());
+ checkReturn(
+ 'returnDyn3', closedWorld.commonMasks.dynamicType.nonNullable());
+ checkReturn('returnNum1', closedWorld.commonMasks.numType);
- checkReturnInClass(String className, String methodName, type) {
- dynamic cls = findElement(compiler, className);
- var element = cls.lookupLocalMember(methodName);
- Expect.equals(
- type,
- simplify(
- typesInferrer.getReturnTypeOfMember(element), closedWorld));
- }
+ checkReturnInClass(String className, String methodName, type) {
+ var element = findClassMember(closedWorld, className, methodName);
+ Expect.equals(type,
+ simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld));
+ }
- dynamic cls = findElement(compiler, 'A');
- checkReturnInClass(
- 'A', 'foo', new TypeMask.nonNullExact(cls, closedWorld));
- }));
+ dynamic cls = findClass(closedWorld, 'A');
+ checkReturnInClass('A', 'foo', new TypeMask.nonNullExact(cls, closedWorld));
+ }
+
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTest(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTest(useKernel: true);
+ });
}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test.dart
index d7c416e..3b418e7 100644
--- a/tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test.dart
+++ b/tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test.dart
@@ -4,9 +4,12 @@
/// TODO(johnniwinther): Port this test to use the equivalence framework.
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/elements/entities.dart';
import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import '../compiler_helper.dart';
+import 'type_mask_test_helper.dart';
+import '../memory_compiler.dart';
const String TEST = """
@@ -27,19 +30,29 @@
""";
void main() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- asyncTest(() => compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
+ runTest({bool useKernel}) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {'main.dart': TEST},
+ options: useKernel ? [Flags.useKernel] : []);
+ Expect.isTrue(result.isSuccess);
+ var compiler = result.compiler;
+ var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ var closedWorld = typesInferrer.closedWorld;
- checkReturn(String name, type) {
- MemberElement element = findElement(compiler, name);
- dynamic returnType = typesInferrer.getReturnTypeOfMember(element);
- Expect.equals(type, returnType.simplify(compiler), name);
- }
+ checkReturn(String name, type) {
+ MemberEntity element = findMember(closedWorld, name);
+ TypeMask returnType = typesInferrer.getReturnTypeOfMember(element);
+ Expect.equals(type, simplify(returnType, closedWorld), name);
+ }
- checkReturn('method', closedWorld.commonMasks.numType);
- checkReturn('returnNum', closedWorld.commonMasks.numType);
- }));
+ checkReturn('method', closedWorld.commonMasks.numType);
+ checkReturn('returnNum', closedWorld.commonMasks.numType);
+ }
+
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTest(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTest(useKernel: true);
+ });
}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_final_field2_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_final_field2_test.dart
index 53db6e1..47349b4 100644
--- a/tests/compiler/dart2js/inference/simple_inferrer_final_field2_test.dart
+++ b/tests/compiler/dart2js/inference/simple_inferrer_final_field2_test.dart
@@ -8,9 +8,10 @@
// inferring types for fields.
import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
import 'package:expect/expect.dart';
-
-import '../compiler_helper.dart';
+import 'type_mask_test_helper.dart';
+import '../memory_compiler.dart';
const String TEST = """
@@ -27,21 +28,30 @@
""";
void main() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- asyncTest(() => compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ runTest({bool useKernel}) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {'main.dart': TEST},
+ options: useKernel ? [Flags.useKernel] : []);
+ Expect.isTrue(result.isSuccess);
+ var compiler = result.compiler;
+ var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ var closedWorld = typesInferrer.closedWorld;
- checkFieldTypeInClass(String className, String fieldName, type) {
- dynamic cls = findElement(compiler, className);
- var element = cls.lookupLocalMember(fieldName);
- Expect.isTrue(
- typesInferrer.getTypeOfMember(element).containsOnly(type));
- }
+ checkFieldTypeInClass(String className, String fieldName, type) {
+ var element = findClassMember(closedWorld, className, fieldName);
+ Expect.isTrue(typesInferrer.getTypeOfMember(element).containsOnly(type));
+ }
- checkFieldTypeInClass('A', 'intField',
- typesInferrer.closedWorld.commonElements.jsUInt31Class);
- checkFieldTypeInClass('A', 'stringField',
- typesInferrer.closedWorld.commonElements.jsStringClass);
- }));
+ checkFieldTypeInClass('A', 'intField',
+ typesInferrer.closedWorld.commonElements.jsUInt31Class);
+ checkFieldTypeInClass('A', 'stringField',
+ typesInferrer.closedWorld.commonElements.jsStringClass);
+ }
+
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTest(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTest(useKernel: true);
+ });
}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_final_field3_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_final_field3_test.dart
index 20c319a..613466e 100644
--- a/tests/compiler/dart2js/inference/simple_inferrer_final_field3_test.dart
+++ b/tests/compiler/dart2js/inference/simple_inferrer_final_field3_test.dart
@@ -6,10 +6,11 @@
// Test that we are analyzing field parameters correctly.
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
+import '../memory_compiler.dart';
const String TEST = """
@@ -26,20 +27,29 @@
""";
void main() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- asyncTest(() => compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
+ runTest({bool useKernel}) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {'main.dart': TEST},
+ options: useKernel ? [Flags.useKernel] : []);
+ Expect.isTrue(result.isSuccess);
+ var compiler = result.compiler;
+ var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ var closedWorld = typesInferrer.closedWorld;
- checkFieldTypeInClass(String className, String fieldName, type) {
- dynamic cls = findElement(compiler, className);
- var element = cls.lookupLocalMember(fieldName);
- Expect.equals(type,
- simplify(typesInferrer.getTypeOfMember(element), closedWorld));
- }
+ checkFieldTypeInClass(String className, String fieldName, type) {
+ var element = findClassMember(closedWorld, className, fieldName);
+ Expect.equals(
+ type, simplify(typesInferrer.getTypeOfMember(element), closedWorld));
+ }
- checkFieldTypeInClass(
- 'A', 'dynamicField', closedWorld.commonMasks.interceptorType);
- }));
+ checkFieldTypeInClass(
+ 'A', 'dynamicField', interceptorOrComparable(closedWorld));
+ }
+
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTest(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTest(useKernel: true);
+ });
}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_test.dart
index 9f79e36..97d1ff9 100644
--- a/tests/compiler/dart2js/inference/simple_inferrer_test.dart
+++ b/tests/compiler/dart2js/inference/simple_inferrer_test.dart
@@ -4,12 +4,12 @@
/// TODO(johnniwinther): Port this test to use the equivalence framework.
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/elements/entities.dart';
import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'package:compiler/src/types/types.dart' show TypeMask;
-
import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
+import '../memory_compiler.dart';
const String TEST = """
returnNum1(a) {
@@ -521,19 +521,19 @@
}
testReturnNull4() {
- var a = topLeveGetter();
+ var a = topLevelGetter();
if (a == null) return a;
return null;
}
testReturnNull5() {
- var a = topLeveGetter();
+ var a = topLevelGetter();
if (a != null) return null;
return a;
}
testReturnNull6() {
- var a = topLeveGetter();
+ var a = topLevelGetter();
if (a == null) return 42;
return a;
}
@@ -725,168 +725,164 @@
""";
void main() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- compiler.diagnosticHandler = createHandler(compiler, TEST);
- asyncTest(() => compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
- var commonMasks = closedWorld.commonMasks;
+ runTest({bool useKernel}) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {'main.dart': TEST},
+ options: useKernel ? [Flags.useKernel] : []);
+ Expect.isTrue(result.isSuccess);
+ var compiler = result.compiler;
+ var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ var closedWorld = typesInferrer.closedWorld;
+ var commonMasks = closedWorld.commonMasks;
- checkReturn(String name, type) {
- MemberElement element = findElement(compiler, name);
- Expect.equals(
- type,
- simplify(
- typesInferrer.getReturnTypeOfMember(element), closedWorld),
- name);
- }
+ checkReturn(String name, type) {
+ MemberEntity element = findMember(closedWorld, name);
+ Expect.equals(
+ type,
+ simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld),
+ name);
+ }
- var interceptorType = commonMasks.interceptorType;
+ var interceptorType = commonMasks.interceptorType;
+ var interceptorOrComparableType = interceptorOrComparable(closedWorld);
- checkReturn('returnNum1', commonMasks.numType);
- checkReturn('returnNum2', commonMasks.numType);
- checkReturn('returnInt1', commonMasks.uint31Type);
- checkReturn('returnInt2', commonMasks.uint31Type);
- checkReturn('returnDouble', commonMasks.doubleType);
- checkReturn('returnGiveUp', interceptorType);
- checkReturn(
- 'returnInt5', commonMasks.uint32Type); // uint31+uint31->uint32
- checkReturn(
- 'returnInt6', commonMasks.uint32Type); // uint31+uint31->uint32
- checkReturn('returnIntOrNull', commonMasks.uint31Type.nullable());
- checkReturn('returnInt3', commonMasks.uint31Type);
- checkReturn('returnDynamic', commonMasks.dynamicType);
- checkReturn('returnInt4', commonMasks.uint31Type);
- checkReturn('returnInt7', commonMasks.positiveIntType);
- checkReturn('returnInt8', commonMasks.positiveIntType);
- checkReturn('returnEmpty1', const TypeMask.nonNullEmpty());
- checkReturn('returnEmpty2', const TypeMask.nonNullEmpty());
- TypeMask intType = new TypeMask.nonNullSubtype(
- closedWorld.commonElements.intClass, closedWorld);
- checkReturn('testIsCheck1', intType);
- checkReturn('testIsCheck2', intType);
- checkReturn('testIsCheck3', intType.nullable());
- checkReturn('testIsCheck4', intType);
- checkReturn('testIsCheck5', intType);
- checkReturn('testIsCheck6', commonMasks.dynamicType);
- checkReturn('testIsCheck7', intType);
- checkReturn('testIsCheck8', commonMasks.dynamicType);
- checkReturn('testIsCheck9', intType);
- checkReturn('testIsCheck10', commonMasks.dynamicType);
- checkReturn('testIsCheck11', intType);
- checkReturn('testIsCheck12', commonMasks.dynamicType);
- checkReturn('testIsCheck13', intType);
- checkReturn('testIsCheck14', commonMasks.dynamicType);
- // TODO(29309): Re-enable when 29309 is fixed.
- // checkReturn('testIsCheck15', intType);
- checkReturn('testIsCheck16', commonMasks.dynamicType);
- checkReturn('testIsCheck17', intType);
- checkReturn('testIsCheck18', commonMasks.dynamicType);
- checkReturn('testIsCheck19', commonMasks.dynamicType);
- checkReturn('testIsCheck20', interceptorType);
- checkReturn('testIsCheck21', commonMasks.dynamicType);
- checkReturn('testIsCheck22', commonMasks.dynamicType);
- checkReturn('testIsCheck23', intType);
- checkReturn('testIsCheck24', intType);
- checkReturn('testIsCheck25', commonMasks.dynamicType);
- checkReturn('testIsCheck26', intType);
- checkReturn('testIsCheck27', intType);
- checkReturn('testIsCheck28', commonMasks.dynamicType);
- checkReturn('testIsCheck29', commonMasks.dynamicType);
- checkReturn('testIf1', commonMasks.uint31Type.nullable());
- checkReturn('testIf2', commonMasks.uint31Type.nullable());
- checkReturn(
- 'returnAsString',
- new TypeMask.subtype(
- closedWorld.commonElements.stringClass, closedWorld));
- checkReturn('returnIntAsNum', commonMasks.uint31Type);
- checkReturn('returnAsTypedef', commonMasks.functionType.nullable());
- checkReturn('returnTopLevelGetter', commonMasks.uint31Type);
- checkReturn('testDeadCode', commonMasks.uint31Type);
- checkReturn('testLabeledIf', commonMasks.uint31Type.nullable());
- checkReturn(
- 'testSwitch1',
- simplify(
- commonMasks.intType
- .union(commonMasks.doubleType, closedWorld)
- .nullable(),
- closedWorld));
- checkReturn('testSwitch2', commonMasks.uint31Type);
- checkReturn('testSwitch3', interceptorType.nullable());
- checkReturn('testSwitch4', commonMasks.uint31Type);
- checkReturn('testSwitch5', commonMasks.uint31Type);
- checkReturn('testContinue1', interceptorType.nullable());
- checkReturn('testBreak1', interceptorType.nullable());
- checkReturn('testContinue2', interceptorType.nullable());
- checkReturn('testBreak2', commonMasks.uint32Type.nullable());
- checkReturn('testReturnElementOfConstList1', commonMasks.uint31Type);
- checkReturn('testReturnElementOfConstList2', commonMasks.uint31Type);
- checkReturn('testReturnItselfOrInt', commonMasks.uint31Type);
- checkReturn('testReturnInvokeDynamicGetter', commonMasks.dynamicType);
+ checkReturn('returnNum1', commonMasks.numType);
+ checkReturn('returnNum2', commonMasks.numType);
+ checkReturn('returnInt1', commonMasks.uint31Type);
+ checkReturn('returnInt2', commonMasks.uint31Type);
+ checkReturn('returnDouble', commonMasks.doubleType);
+ checkReturn('returnGiveUp', interceptorOrComparableType);
+ checkReturn('returnInt5', commonMasks.uint32Type); // uint31+uint31->uint32
+ checkReturn('returnInt6', commonMasks.uint32Type); // uint31+uint31->uint32
+ checkReturn('returnIntOrNull', commonMasks.uint31Type.nullable());
+ checkReturn('returnInt3', commonMasks.uint31Type);
+ checkReturn('returnDynamic', commonMasks.dynamicType);
+ checkReturn('returnInt4', commonMasks.uint31Type);
+ checkReturn('returnInt7', commonMasks.positiveIntType);
+ checkReturn('returnInt8', commonMasks.positiveIntType);
+ checkReturn('returnEmpty1', const TypeMask.nonNullEmpty());
+ checkReturn('returnEmpty2', const TypeMask.nonNullEmpty());
+ TypeMask intType = new TypeMask.nonNullSubtype(
+ closedWorld.commonElements.intClass, closedWorld);
+ checkReturn('testIsCheck1', intType);
+ checkReturn('testIsCheck2', intType);
+ checkReturn('testIsCheck3', intType.nullable());
+ checkReturn('testIsCheck4', intType);
+ checkReturn('testIsCheck5', intType);
+ checkReturn('testIsCheck6', commonMasks.dynamicType);
+ checkReturn('testIsCheck7', intType);
+ checkReturn('testIsCheck8', commonMasks.dynamicType);
+ checkReturn('testIsCheck9', intType);
+ checkReturn('testIsCheck10', commonMasks.dynamicType);
+ checkReturn('testIsCheck11', intType);
+ checkReturn('testIsCheck12', commonMasks.dynamicType);
+ checkReturn('testIsCheck13', intType);
+ checkReturn('testIsCheck14', commonMasks.dynamicType);
+ // TODO(29309): Re-enable when 29309 is fixed.
+ // checkReturn('testIsCheck15', intType);
+ checkReturn('testIsCheck16', commonMasks.dynamicType);
+ checkReturn('testIsCheck17', intType);
+ checkReturn('testIsCheck18', commonMasks.dynamicType);
+ checkReturn('testIsCheck19', commonMasks.dynamicType);
+ checkReturn('testIsCheck20', interceptorOrComparableType);
+ checkReturn('testIsCheck21', commonMasks.dynamicType);
+ checkReturn('testIsCheck22', commonMasks.dynamicType);
+ checkReturn('testIsCheck23', intType);
+ checkReturn('testIsCheck24', intType);
+ checkReturn('testIsCheck25', commonMasks.dynamicType);
+ checkReturn('testIsCheck26', intType);
+ checkReturn('testIsCheck27', intType);
+ checkReturn('testIsCheck28', commonMasks.dynamicType);
+ checkReturn('testIsCheck29', commonMasks.dynamicType);
+ checkReturn('testIf1', commonMasks.uint31Type.nullable());
+ checkReturn('testIf2', commonMasks.uint31Type.nullable());
+ checkReturn(
+ 'returnAsString',
+ new TypeMask.subtype(
+ closedWorld.commonElements.stringClass, closedWorld));
+ checkReturn('returnIntAsNum', commonMasks.uint31Type);
+ checkReturn('returnAsTypedef', commonMasks.functionType.nullable());
+ checkReturn('returnTopLevelGetter', commonMasks.uint31Type);
+ checkReturn('testDeadCode', commonMasks.uint31Type);
+ checkReturn('testLabeledIf', commonMasks.uint31Type.nullable());
+ checkReturn(
+ 'testSwitch1',
+ simplify(
+ commonMasks.intType
+ .union(commonMasks.doubleType, closedWorld)
+ .nullable(),
+ closedWorld));
+ checkReturn('testSwitch2', commonMasks.uint31Type);
+ checkReturn('testSwitch3', interceptorOrComparableType.nullable());
+ checkReturn('testSwitch4', commonMasks.uint31Type);
+ checkReturn('testSwitch5', commonMasks.uint31Type);
+ checkReturn('testContinue1', interceptorOrComparableType.nullable());
+ checkReturn('testBreak1', interceptorOrComparableType.nullable());
+ checkReturn('testContinue2', interceptorOrComparableType.nullable());
+ checkReturn('testBreak2', commonMasks.uint32Type.nullable());
+ checkReturn('testReturnElementOfConstList1', commonMasks.uint31Type);
+ checkReturn('testReturnElementOfConstList2', commonMasks.uint31Type);
+ checkReturn('testReturnItselfOrInt', commonMasks.uint31Type);
+ checkReturn('testReturnInvokeDynamicGetter', commonMasks.dynamicType);
- checkReturn('testDoWhile1', commonMasks.stringType);
- checkReturn('testDoWhile2', commonMasks.nullType);
- checkReturn('testDoWhile3', commonMasks.uint31Type);
- checkReturn('testDoWhile4', commonMasks.numType);
+ checkReturn('testDoWhile1', commonMasks.stringType);
+ checkReturn('testDoWhile2', commonMasks.nullType);
+ checkReturn('testDoWhile3', commonMasks.uint31Type);
+ checkReturn('testDoWhile4', commonMasks.numType);
- checkReturnInClass(String className, String methodName, type) {
- dynamic cls = findElement(compiler, className);
- var element = cls.lookupLocalMember(methodName);
- Expect.equals(
- type,
- simplify(
- typesInferrer.getReturnTypeOfMember(element), closedWorld),
- '$className:$methodName');
- }
+ checkReturnInClass(String className, String methodName, type) {
+ var element = findClassMember(closedWorld, className, methodName);
+ Expect.equals(
+ type,
+ simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld),
+ '$className:$methodName');
+ }
- checkReturnInClass('A', 'returnInt1', commonMasks.uint32Type);
- checkReturnInClass('A', 'returnInt2', commonMasks.uint32Type);
- checkReturnInClass('A', 'returnInt3', commonMasks.uint32Type);
- checkReturnInClass('A', 'returnInt4', commonMasks.uint32Type);
- checkReturnInClass('A', 'returnInt5', commonMasks.uint32Type);
- checkReturnInClass('A', 'returnInt6', commonMasks.uint32Type);
- checkReturnInClass('A', '==', interceptorType);
+ checkReturnInClass('A', 'returnInt1', commonMasks.uint32Type);
+ checkReturnInClass('A', 'returnInt2', commonMasks.uint32Type);
+ checkReturnInClass('A', 'returnInt3', commonMasks.uint32Type);
+ checkReturnInClass('A', 'returnInt4', commonMasks.uint32Type);
+ checkReturnInClass('A', 'returnInt5', commonMasks.uint32Type);
+ checkReturnInClass('A', 'returnInt6', commonMasks.uint32Type);
+ checkReturnInClass('A', '==', interceptorType);
- checkReturnInClass('B', 'returnInt1', commonMasks.uint32Type);
- checkReturnInClass('B', 'returnInt2', commonMasks.uint32Type);
- checkReturnInClass('B', 'returnInt3', commonMasks.uint32Type);
- checkReturnInClass('B', 'returnInt4', commonMasks.uint32Type);
- checkReturnInClass('B', 'returnInt5', commonMasks.uint32Type);
- checkReturnInClass('B', 'returnInt6', commonMasks.uint32Type);
- checkReturnInClass('B', 'returnInt7', commonMasks.uint32Type);
- checkReturnInClass('B', 'returnInt8', commonMasks.uint32Type);
- checkReturnInClass('B', 'returnInt9', commonMasks.uint31Type);
+ checkReturnInClass('B', 'returnInt1', commonMasks.uint32Type);
+ checkReturnInClass('B', 'returnInt2', commonMasks.uint32Type);
+ checkReturnInClass('B', 'returnInt3', commonMasks.uint32Type);
+ checkReturnInClass('B', 'returnInt4', commonMasks.uint32Type);
+ checkReturnInClass('B', 'returnInt5', commonMasks.uint32Type);
+ checkReturnInClass('B', 'returnInt6', commonMasks.uint32Type);
+ checkReturnInClass('B', 'returnInt7', commonMasks.uint32Type);
+ checkReturnInClass('B', 'returnInt8', commonMasks.uint32Type);
+ checkReturnInClass('B', 'returnInt9', commonMasks.uint31Type);
- checkReturnInClass('C', 'returnInt1', commonMasks.positiveIntType);
- checkReturnInClass('C', 'returnInt2', commonMasks.positiveIntType);
- checkReturnInClass('C', 'returnInt3', commonMasks.positiveIntType);
- checkReturnInClass('C', 'returnInt4', commonMasks.positiveIntType);
- checkReturnInClass('C', 'returnInt5', commonMasks.positiveIntType);
- checkReturnInClass('C', 'returnInt6', commonMasks.positiveIntType);
+ checkReturnInClass('C', 'returnInt1', commonMasks.positiveIntType);
+ checkReturnInClass('C', 'returnInt2', commonMasks.positiveIntType);
+ checkReturnInClass('C', 'returnInt3', commonMasks.positiveIntType);
+ checkReturnInClass('C', 'returnInt4', commonMasks.positiveIntType);
+ checkReturnInClass('C', 'returnInt5', commonMasks.positiveIntType);
+ checkReturnInClass('C', 'returnInt6', commonMasks.positiveIntType);
- checkFactoryConstructor(String className, String factoryName) {
- dynamic cls = findElement(compiler, className);
- var element = cls.localLookup(factoryName);
- Expect.equals(new TypeMask.nonNullExact(cls, closedWorld),
- typesInferrer.getReturnTypeOfMember(element));
- }
+ checkReturn('testCascade1', commonMasks.growableListType);
+ ClassEntity clsCascadeHelper = findClass(closedWorld, 'CascadeHelper');
+ checkReturn('testCascade2',
+ new TypeMask.nonNullExact(clsCascadeHelper, closedWorld));
+ checkReturn('testSpecialization1', commonMasks.numType);
+ checkReturn('testSpecialization2', commonMasks.dynamicType);
+ checkReturn('testSpecialization3', commonMasks.uint31Type.nullable());
+ checkReturn('testReturnNull1', commonMasks.nullType);
+ checkReturn('testReturnNull2', commonMasks.nullType);
+ checkReturn('testReturnNull3', commonMasks.dynamicType);
+ checkReturn('testReturnNull4', commonMasks.nullType);
+ checkReturn('testReturnNull5', commonMasks.nullType);
+ checkReturn('testReturnNull6', commonMasks.dynamicType);
+ checkReturn('testReturnNotEquals', commonMasks.boolType);
+ }
- checkFactoryConstructor('A', '');
-
- checkReturn('testCascade1', commonMasks.growableListType);
- ClassElement clsCascadeHelper = findElement(compiler, 'CascadeHelper');
- checkReturn('testCascade2',
- new TypeMask.nonNullExact(clsCascadeHelper, closedWorld));
- checkReturn('testSpecialization1', commonMasks.numType);
- checkReturn('testSpecialization2', commonMasks.dynamicType);
- checkReturn('testSpecialization3', commonMasks.uint31Type.nullable());
- checkReturn('testReturnNull1', commonMasks.nullType);
- checkReturn('testReturnNull2', commonMasks.nullType);
- checkReturn('testReturnNull3', commonMasks.dynamicType);
- checkReturn('testReturnNull4', commonMasks.nullType);
- checkReturn('testReturnNull5', commonMasks.nullType);
- checkReturn('testReturnNull6', commonMasks.dynamicType);
- checkReturn('testReturnNotEquals', commonMasks.boolType);
- }));
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTest(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTest(useKernel: true);
+ });
}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_try_catch_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_try_catch_test.dart
index 8105bd0..bfe19ca 100644
--- a/tests/compiler/dart2js/inference/simple_inferrer_try_catch_test.dart
+++ b/tests/compiler/dart2js/inference/simple_inferrer_try_catch_test.dart
@@ -4,12 +4,12 @@
/// TODO(johnniwinther): Port this test to use the equivalence framework.
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/elements/entities.dart';
import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'package:compiler/src/types/types.dart' show TypeMask;
-
import 'type_mask_test_helper.dart';
-import '../compiler_helper.dart';
+import '../memory_compiler.dart';
const String TEST = """
returnInt1() {
@@ -166,38 +166,46 @@
""";
void main() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- asyncTest(() => compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
- var commonMasks = closedWorld.commonMasks;
+ runTest({bool useKernel}) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {'main.dart': TEST},
+ options: useKernel ? [Flags.useKernel] : []);
+ Expect.isTrue(result.isSuccess);
+ var compiler = result.compiler;
+ var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ var closedWorld = typesInferrer.closedWorld;
+ var commonMasks = closedWorld.commonMasks;
- checkReturn(String name, type) {
- MemberElement element = findElement(compiler, name);
- Expect.equals(
- type,
- simplify(
- typesInferrer.getReturnTypeOfMember(element), closedWorld));
- }
+ checkReturn(String name, type) {
+ MemberEntity element = findMember(closedWorld, name);
+ Expect.equals(type,
+ simplify(typesInferrer.getReturnTypeOfMember(element), closedWorld));
+ }
- checkReturn('returnInt1', commonMasks.uint31Type);
- checkReturn('returnInt2', commonMasks.uint31Type);
- checkReturn('returnInt3', commonMasks.uint31Type);
- checkReturn('returnInt4', commonMasks.uint31Type);
- checkReturn('returnInt5', commonMasks.uint31Type);
- checkReturn(
- 'returnInt6',
- new TypeMask.nonNullSubtype(
- closedWorld.commonElements.intClass, closedWorld));
+ checkReturn('returnInt1', commonMasks.uint31Type);
+ checkReturn('returnInt2', commonMasks.uint31Type);
+ checkReturn('returnInt3', commonMasks.uint31Type);
+ checkReturn('returnInt4', commonMasks.uint31Type);
+ checkReturn('returnInt5', commonMasks.uint31Type);
+ checkReturn(
+ 'returnInt6',
+ new TypeMask.nonNullSubtype(
+ closedWorld.commonElements.intClass, closedWorld));
- var subclassOfInterceptor = commonMasks.interceptorType;
+ var subclassOfInterceptor = interceptorOrComparable(closedWorld);
- checkReturn('returnDyn1', subclassOfInterceptor);
- checkReturn('returnDyn2', subclassOfInterceptor);
- checkReturn('returnDyn3', subclassOfInterceptor);
- checkReturn('returnDyn4', subclassOfInterceptor);
- checkReturn('returnDyn5', subclassOfInterceptor);
- checkReturn('returnDyn6', commonMasks.dynamicType);
- }));
+ checkReturn('returnDyn1', subclassOfInterceptor);
+ checkReturn('returnDyn2', subclassOfInterceptor);
+ checkReturn('returnDyn3', subclassOfInterceptor);
+ checkReturn('returnDyn4', subclassOfInterceptor);
+ checkReturn('returnDyn5', subclassOfInterceptor);
+ checkReturn('returnDyn6', commonMasks.dynamicType);
+ }
+
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTest(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTest(useKernel: true);
+ });
}
diff --git a/tests/compiler/dart2js/inference/simple_inferrer_unregister_call_test.dart b/tests/compiler/dart2js/inference/simple_inferrer_unregister_call_test.dart
index 5356f65..ae5835a 100644
--- a/tests/compiler/dart2js/inference/simple_inferrer_unregister_call_test.dart
+++ b/tests/compiler/dart2js/inference/simple_inferrer_unregister_call_test.dart
@@ -5,9 +5,10 @@
/// TODO(johnniwinther): Port this test to use the equivalence framework.
import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
import 'package:expect/expect.dart';
-
-import '../compiler_helper.dart';
+import 'type_mask_test_helper.dart';
+import '../memory_compiler.dart';
const String TEST = """
var a = '';
@@ -31,18 +32,28 @@
""";
void main() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- asyncTest(() => compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ runTest({bool useKernel}) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {'main.dart': TEST},
+ options: useKernel ? [Flags.useKernel] : []);
+ Expect.isTrue(result.isSuccess);
+ var compiler = result.compiler;
+ var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ var closedWorld = typesInferrer.closedWorld;
- checkReturnInClass(String className, String methodName, type) {
- dynamic cls = findElement(compiler, className);
- var element = cls.lookupLocalMember(methodName);
- Expect.equals(type, typesInferrer.getReturnTypeOfMember(element));
- }
+ checkReturnInClass(String className, String methodName, type) {
+ var element = findClassMember(closedWorld, className, methodName);
+ Expect.equals(type, typesInferrer.getReturnTypeOfMember(element));
+ }
- checkReturnInClass(
- 'A', '+', typesInferrer.closedWorld.commonMasks.uint31Type);
- }));
+ checkReturnInClass(
+ 'A', '+', typesInferrer.closedWorld.commonMasks.uint31Type);
+ }
+
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTest(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTest(useKernel: true);
+ });
}
diff --git a/tests/compiler/dart2js/inference/type_combination_test.dart b/tests/compiler/dart2js/inference/type_combination_test.dart
index dbbd030..c79b188 100644
--- a/tests/compiler/dart2js/inference/type_combination_test.dart
+++ b/tests/compiler/dart2js/inference/type_combination_test.dart
@@ -2,18 +2,17 @@
// 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.
-// TODO(johnniwinther): Port this test to be frontend agnostic.
-
import 'package:async_helper/async_helper.dart';
import 'package:expect/expect.dart';
-import 'package:compiler/src/js_backend/backend.dart' show JavaScriptBackend;
-import 'package:compiler/src/js_backend/js_backend.dart';
+import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/elements/entities.dart';
import 'package:compiler/src/types/types.dart';
import 'package:compiler/src/world.dart';
-import 'package:compiler/src/universe/use.dart';
-import 'package:compiler/src/universe/world_impact.dart';
-import '../compiler_helper.dart';
import 'type_mask_test_helper.dart';
+import '../compiler_helper.dart';
+import '../memory_compiler.dart';
TypeMask nullType;
TypeMask objectType;
@@ -34,6 +33,7 @@
TypeMask potentialArray;
TypeMask potentialString;
TypeMask jsInterceptor;
+TypeMask jsInterceptorOrComparable;
TypeMask jsIndexable;
TypeMask jsReadableArray;
@@ -50,6 +50,7 @@
TypeMask jsUnmodifiableArrayOrNull;
TypeMask jsIndexableOrNull;
TypeMask jsInterceptorOrNull;
+TypeMask jsInterceptorOrComparableOrNull;
class Pair {
final first;
@@ -105,9 +106,7 @@
}
}
-void testUnion(MockCompiler compiler) {
- ClosedWorld closedWorld =
- compiler.resolutionWorldBuilder.closedWorldForTesting;
+void testUnion(ClosedWorld closedWorld) {
RuleSet ruleSet = new RuleSet(
'union', (t1, t2) => simplify(t1.union(t2, closedWorld), closedWorld));
rule(type1, type2, result) => ruleSet.rule(type1, type2, result);
@@ -186,7 +185,7 @@
rule(jsNumber, jsInteger, jsNumber);
rule(jsNumber, jsDouble, jsNumber);
rule(jsNumber, jsIndexable, objectType);
- rule(jsNumber, jsString, jsInterceptor);
+ rule(jsNumber, jsString, jsInterceptorOrComparable);
rule(jsNumber, jsReadableArray, jsInterceptor);
rule(jsNumber, jsMutableArray, jsInterceptor);
rule(jsNumber, jsExtendableArray, jsInterceptor);
@@ -199,14 +198,14 @@
rule(jsNumber, jsNumberOrNull, jsNumberOrNull);
rule(jsNumber, jsIntegerOrNull, jsNumberOrNull);
rule(jsNumber, jsDoubleOrNull, jsNumberOrNull);
- rule(jsNumber, jsStringOrNull, jsInterceptorOrNull);
+ rule(jsNumber, jsStringOrNull, jsInterceptorOrComparableOrNull);
rule(jsNumber, nullType, jsNumberOrNull);
rule(jsNumber, jsFixedArray, jsInterceptor);
rule(jsInteger, jsInteger, jsInteger);
rule(jsInteger, jsDouble, jsNumber);
rule(jsInteger, jsIndexable, objectType);
- rule(jsInteger, jsString, jsInterceptor);
+ rule(jsInteger, jsString, jsInterceptorOrComparable);
rule(jsInteger, jsReadableArray, jsInterceptor);
rule(jsInteger, jsMutableArray, jsInterceptor);
rule(jsInteger, jsExtendableArray, jsInterceptor);
@@ -219,13 +218,13 @@
rule(jsInteger, jsNumberOrNull, jsNumberOrNull);
rule(jsInteger, jsIntegerOrNull, jsIntegerOrNull);
rule(jsInteger, jsDoubleOrNull, jsNumberOrNull);
- rule(jsInteger, jsStringOrNull, jsInterceptorOrNull);
+ rule(jsInteger, jsStringOrNull, jsInterceptorOrComparableOrNull);
rule(jsInteger, nullType, jsIntegerOrNull);
rule(jsInteger, jsFixedArray, jsInterceptor);
rule(jsDouble, jsDouble, jsDouble);
rule(jsDouble, jsIndexable, objectType);
- rule(jsDouble, jsString, jsInterceptor);
+ rule(jsDouble, jsString, jsInterceptorOrComparable);
rule(jsDouble, jsReadableArray, jsInterceptor);
rule(jsDouble, jsMutableArray, jsInterceptor);
rule(jsDouble, jsExtendableArray, jsInterceptor);
@@ -238,7 +237,7 @@
rule(jsDouble, jsNumberOrNull, jsNumberOrNull);
rule(jsDouble, jsIntegerOrNull, jsNumberOrNull);
rule(jsDouble, jsDoubleOrNull, jsDoubleOrNull);
- rule(jsDouble, jsStringOrNull, jsInterceptorOrNull);
+ rule(jsDouble, jsStringOrNull, jsInterceptorOrComparableOrNull);
rule(jsDouble, nullType, jsDoubleOrNull);
rule(jsDouble, jsFixedArray, jsInterceptor);
@@ -270,9 +269,9 @@
rule(jsString, potentialArray, dynamicType);
rule(jsString, potentialString, potentialString);
rule(jsString, jsBooleanOrNull, jsInterceptorOrNull);
- rule(jsString, jsNumberOrNull, jsInterceptorOrNull);
- rule(jsString, jsIntegerOrNull, jsInterceptorOrNull);
- rule(jsString, jsDoubleOrNull, jsInterceptorOrNull);
+ rule(jsString, jsNumberOrNull, jsInterceptorOrComparableOrNull);
+ rule(jsString, jsIntegerOrNull, jsInterceptorOrComparableOrNull);
+ rule(jsString, jsDoubleOrNull, jsInterceptorOrComparableOrNull);
rule(jsString, jsStringOrNull, jsStringOrNull);
rule(jsString, nullType, jsStringOrNull);
rule(jsString, jsFixedArray, jsIndexable);
@@ -386,18 +385,18 @@
rule(jsNumberOrNull, jsNumberOrNull, jsNumberOrNull);
rule(jsNumberOrNull, jsIntegerOrNull, jsNumberOrNull);
rule(jsNumberOrNull, jsDoubleOrNull, jsNumberOrNull);
- rule(jsNumberOrNull, jsStringOrNull, jsInterceptorOrNull);
+ rule(jsNumberOrNull, jsStringOrNull, jsInterceptorOrComparableOrNull);
rule(jsNumberOrNull, nullType, jsNumberOrNull);
rule(jsNumberOrNull, jsFixedArray, jsInterceptorOrNull);
rule(jsIntegerOrNull, jsIntegerOrNull, jsIntegerOrNull);
rule(jsIntegerOrNull, jsDoubleOrNull, jsNumberOrNull);
- rule(jsIntegerOrNull, jsStringOrNull, jsInterceptorOrNull);
+ rule(jsIntegerOrNull, jsStringOrNull, jsInterceptorOrComparableOrNull);
rule(jsIntegerOrNull, nullType, jsIntegerOrNull);
rule(jsIntegerOrNull, jsFixedArray, jsInterceptorOrNull);
rule(jsDoubleOrNull, jsDoubleOrNull, jsDoubleOrNull);
- rule(jsDoubleOrNull, jsStringOrNull, jsInterceptorOrNull);
+ rule(jsDoubleOrNull, jsStringOrNull, jsInterceptorOrComparableOrNull);
rule(jsDoubleOrNull, nullType, jsDoubleOrNull);
rule(jsDoubleOrNull, jsFixedArray, jsInterceptorOrNull);
@@ -418,9 +417,7 @@
ruleSet.validateCoverage();
}
-void testIntersection(MockCompiler compiler) {
- ClosedWorld closedWorld =
- compiler.resolutionWorldBuilder.closedWorldForTesting;
+void testIntersection(ClosedWorld closedWorld) {
RuleSet ruleSet =
new RuleSet('intersection', (t1, t2) => t1.intersection(t2, closedWorld));
rule(type1, type2, result) => ruleSet.rule(type1, type2, result);
@@ -735,9 +732,7 @@
ruleSet.validateCoverage();
}
-void testRegressions(MockCompiler compiler) {
- ClosedWorld closedWorld =
- compiler.resolutionWorldBuilder.closedWorldForTesting;
+void testRegressions(ClosedWorld closedWorld) {
TypeMask nonNullPotentialString =
new TypeMask.nonNullSubtype(patternClass, closedWorld);
Expect.equals(potentialString,
@@ -746,113 +741,114 @@
void main() {
asyncTest(() async {
- MockCompiler compiler = new MockCompiler.internal();
- await compiler.init("""
- class PatternImpl implements Pattern {}
- """);
- JavaScriptBackend backend = compiler.backend;
- WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl();
- LibraryElement interceptorsLibrary =
- compiler.resolution.commonElements.interceptorsLibrary;
- interceptorsLibrary.forEachLocalMember((dynamic element) {
- if (element.isClass) {
- element.ensureResolved(compiler.resolution);
- impactBuilder
- .registerTypeUse(new TypeUse.instantiation(element.rawType));
- }
- });
- LibraryElement mainApp = compiler.mainApp;
- ClassElement patternImplClass = mainApp.find('PatternImpl');
- patternImplClass.ensureResolved(compiler.resolution);
-
- impactBuilder.registerTypeUse(new TypeUse.instantiation(
- compiler.resolution.commonElements.mapType()));
- impactBuilder.registerTypeUse(new TypeUse.instantiation(
- compiler.resolution.commonElements.functionType));
- impactBuilder
- .registerTypeUse(new TypeUse.instantiation(patternImplClass.rawType));
- compiler.enqueuer.resolution.applyImpact(impactBuilder);
- backend.onResolutionEnd();
- compiler.closeResolution(null);
- ClosedWorld closedWorld =
- compiler.resolutionWorldBuilder.closedWorldForTesting;
-
- // Grab hold of a supertype for String so we can produce potential
- // string types.
- LibraryElement coreLibrary = closedWorld.commonElements.coreLibrary;
- patternClass = coreLibrary.find('Pattern');
-
- nonPrimitive1 = new TypeMask.nonNullSubtype(
- closedWorld.commonElements.mapClass, closedWorld);
- nonPrimitive2 = new TypeMask.nonNullSubtype(
- closedWorld.commonElements.functionClass, closedWorld);
- potentialArray =
- new TypeMask.subtype(closedWorld.commonElements.listClass, closedWorld);
- potentialString = new TypeMask.subtype(patternClass, closedWorld);
- jsInterceptor = new TypeMask.nonNullSubclass(
- closedWorld.commonElements.jsInterceptorClass, closedWorld);
- jsArrayOrNull = new TypeMask.subclass(
- closedWorld.commonElements.jsArrayClass, closedWorld);
- jsReadableArray = new TypeMask.nonNullSubclass(
- closedWorld.commonElements.jsArrayClass, closedWorld);
- jsMutableArrayOrNull = new TypeMask.subclass(
- closedWorld.commonElements.jsMutableArrayClass, closedWorld);
- jsMutableArray = new TypeMask.nonNullSubclass(
- closedWorld.commonElements.jsMutableArrayClass, closedWorld);
- jsFixedArrayOrNull = new TypeMask.exact(
- closedWorld.commonElements.jsFixedArrayClass, closedWorld);
- jsFixedArray = new TypeMask.nonNullExact(
- closedWorld.commonElements.jsFixedArrayClass, closedWorld);
- jsExtendableArrayOrNull = new TypeMask.exact(
- closedWorld.commonElements.jsExtendableArrayClass, closedWorld);
- jsExtendableArray = new TypeMask.nonNullExact(
- closedWorld.commonElements.jsExtendableArrayClass, closedWorld);
- jsUnmodifiableArrayOrNull = new TypeMask.exact(
- closedWorld.commonElements.jsUnmodifiableArrayClass, closedWorld);
- jsUnmodifiableArray = new TypeMask.nonNullExact(
- closedWorld.commonElements.jsUnmodifiableArrayClass, closedWorld);
- jsIndexableOrNull = new TypeMask.subtype(
- closedWorld.commonElements.jsIndexableClass, closedWorld);
- jsIndexable = new TypeMask.nonNullSubtype(
- closedWorld.commonElements.jsIndexableClass, closedWorld);
- jsInterceptorOrNull = new TypeMask.subclass(
- closedWorld.commonElements.jsInterceptorClass, closedWorld);
- jsStringOrNull = new TypeMask.exact(
- closedWorld.commonElements.jsStringClass, closedWorld);
- jsString = new TypeMask.nonNullExact(
- closedWorld.commonElements.jsStringClass, closedWorld);
- jsBoolean = new TypeMask.nonNullExact(
- closedWorld.commonElements.jsBoolClass, closedWorld);
- jsNumber = new TypeMask.nonNullSubclass(
- closedWorld.commonElements.jsNumberClass, closedWorld);
- jsInteger = new TypeMask.nonNullExact(
- closedWorld.commonElements.jsIntClass, closedWorld);
- jsDouble = new TypeMask.nonNullExact(
- closedWorld.commonElements.jsDoubleClass, closedWorld);
- jsBooleanOrNull =
- new TypeMask.exact(closedWorld.commonElements.jsBoolClass, closedWorld);
- jsNumberOrNull = new TypeMask.subclass(
- closedWorld.commonElements.jsNumberClass, closedWorld);
- jsIntegerOrNull =
- new TypeMask.exact(closedWorld.commonElements.jsIntClass, closedWorld);
- jsDoubleOrNull = new TypeMask.exact(
- closedWorld.commonElements.jsDoubleClass, closedWorld);
- nullType = const TypeMask.empty();
- objectType = new TypeMask.nonNullSubclass(
- closedWorld.commonElements.objectClass, closedWorld);
- emptyType = const TypeMask.nonNullEmpty();
- dynamicType = new TypeMask.subclass(
- closedWorld.commonElements.objectClass, closedWorld);
-
- Expect.notEquals(
- emptyType, nonPrimitive1, "nonPrimitive1 expected to be non-empty.");
- Expect.notEquals(jsStringOrNull, potentialString,
- "potentialString expected not to be exact JSString");
- Expect.notEquals(jsArrayOrNull, potentialArray,
- "potentialArray expected not to be JSArray subclass");
-
- testUnion(compiler);
- testIntersection(compiler);
- testRegressions(compiler);
+ print('--test from ast---------------------------------------------------');
+ await runTests(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTests(useKernel: true);
});
}
+
+runTests({bool useKernel}) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {
+ 'main.dart': r'''
+ import 'dart:collection';
+ class AList<E> extends ListBase<E> {}
+ main() {
+ print('${0}${true}${null}${0.5}${[]}${{}}');
+ print('${"".split("")}${new RegExp('')}');
+ print('${const []}${const {}}${(){}}${new AList()}');
+ }
+ '''
+ },
+ options: useKernel ? [Flags.useKernel] : [],
+ beforeRun: (compiler) => compiler.stopAfterTypeInference = true);
+ Expect.isTrue(result.isSuccess);
+ Compiler compiler = result.compiler;
+ ClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
+ CommonElements commonElements = closedWorld.commonElements;
+ ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+
+ // Grab hold of a supertype for String so we can produce potential
+ // string types.
+ LibraryEntity coreLibrary = commonElements.coreLibrary;
+ patternClass = elementEnvironment.lookupClass(coreLibrary, 'Pattern');
+
+ nonPrimitive1 = new TypeMask.nonNullSubtype(
+ closedWorld.commonElements.mapClass, closedWorld);
+ nonPrimitive2 = new TypeMask.nonNullSubtype(
+ closedWorld.commonElements.functionClass, closedWorld);
+ potentialArray =
+ new TypeMask.subtype(closedWorld.commonElements.listClass, closedWorld);
+ potentialString = new TypeMask.subtype(patternClass, closedWorld);
+ jsInterceptor = new TypeMask.nonNullSubclass(
+ closedWorld.commonElements.jsInterceptorClass, closedWorld);
+ jsArrayOrNull = new TypeMask.subclass(
+ closedWorld.commonElements.jsArrayClass, closedWorld);
+ jsReadableArray = new TypeMask.nonNullSubclass(
+ closedWorld.commonElements.jsArrayClass, closedWorld);
+ jsMutableArrayOrNull = new TypeMask.subclass(
+ closedWorld.commonElements.jsMutableArrayClass, closedWorld);
+ jsMutableArray = new TypeMask.nonNullSubclass(
+ closedWorld.commonElements.jsMutableArrayClass, closedWorld);
+ jsFixedArrayOrNull = new TypeMask.exact(
+ closedWorld.commonElements.jsFixedArrayClass, closedWorld);
+ jsFixedArray = new TypeMask.nonNullExact(
+ closedWorld.commonElements.jsFixedArrayClass, closedWorld);
+ jsExtendableArrayOrNull = new TypeMask.exact(
+ closedWorld.commonElements.jsExtendableArrayClass, closedWorld);
+ jsExtendableArray = new TypeMask.nonNullExact(
+ closedWorld.commonElements.jsExtendableArrayClass, closedWorld);
+ jsUnmodifiableArrayOrNull = new TypeMask.exact(
+ closedWorld.commonElements.jsUnmodifiableArrayClass, closedWorld);
+ jsUnmodifiableArray = new TypeMask.nonNullExact(
+ closedWorld.commonElements.jsUnmodifiableArrayClass, closedWorld);
+ jsIndexableOrNull = new TypeMask.subtype(
+ closedWorld.commonElements.jsIndexableClass, closedWorld);
+ jsIndexable = new TypeMask.nonNullSubtype(
+ closedWorld.commonElements.jsIndexableClass, closedWorld);
+ jsInterceptorOrNull = new TypeMask.subclass(
+ closedWorld.commonElements.jsInterceptorClass, closedWorld);
+ jsStringOrNull =
+ new TypeMask.exact(closedWorld.commonElements.jsStringClass, closedWorld);
+ jsString = new TypeMask.nonNullExact(
+ closedWorld.commonElements.jsStringClass, closedWorld);
+ jsBoolean = new TypeMask.nonNullExact(
+ closedWorld.commonElements.jsBoolClass, closedWorld);
+ jsNumber = new TypeMask.nonNullSubclass(
+ closedWorld.commonElements.jsNumberClass, closedWorld);
+ jsInteger = new TypeMask.nonNullExact(
+ closedWorld.commonElements.jsIntClass, closedWorld);
+ jsDouble = new TypeMask.nonNullExact(
+ closedWorld.commonElements.jsDoubleClass, closedWorld);
+ jsBooleanOrNull =
+ new TypeMask.exact(closedWorld.commonElements.jsBoolClass, closedWorld);
+ jsNumberOrNull = new TypeMask.subclass(
+ closedWorld.commonElements.jsNumberClass, closedWorld);
+ jsIntegerOrNull =
+ new TypeMask.exact(closedWorld.commonElements.jsIntClass, closedWorld);
+ jsDoubleOrNull =
+ new TypeMask.exact(closedWorld.commonElements.jsDoubleClass, closedWorld);
+ nullType = const TypeMask.empty();
+ objectType = new TypeMask.nonNullSubclass(
+ closedWorld.commonElements.objectClass, closedWorld);
+ emptyType = const TypeMask.nonNullEmpty();
+ dynamicType = new TypeMask.subclass(
+ closedWorld.commonElements.objectClass, closedWorld);
+
+ jsInterceptorOrComparable =
+ interceptorOrComparable(closedWorld, nullable: false);
+ jsInterceptorOrComparableOrNull =
+ interceptorOrComparable(closedWorld, nullable: true);
+
+ Expect.notEquals(
+ emptyType, nonPrimitive1, "nonPrimitive1 expected to be non-empty.");
+ Expect.notEquals(jsStringOrNull, potentialString,
+ "potentialString expected not to be exact JSString");
+ Expect.notEquals(jsArrayOrNull, potentialArray,
+ "potentialArray expected not to be JSArray subclass");
+
+ testUnion(closedWorld);
+ testIntersection(closedWorld);
+ testRegressions(closedWorld);
+}
diff --git a/tests/compiler/dart2js/inference/type_inference6_test.dart b/tests/compiler/dart2js/inference/type_inference6_test.dart
index 0c899a5..659e104 100644
--- a/tests/compiler/dart2js/inference/type_inference6_test.dart
+++ b/tests/compiler/dart2js/inference/type_inference6_test.dart
@@ -4,12 +4,12 @@
/// TODO(johnniwinther): Port this test to use the equivalence framework.
-import "package:async_helper/async_helper.dart";
-import "package:expect/expect.dart";
-import '../compiler_helper.dart';
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/elements/entities.dart';
+import 'package:expect/expect.dart';
import 'type_mask_test_helper.dart';
-
-import 'dart:async';
+import '../memory_compiler.dart';
const String TEST = r"""
foo() {
@@ -22,23 +22,25 @@
}
""";
-Future runTest() {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(TEST, uri);
- return compiler.run(uri).then((_) {
+main() {
+ runTest({bool useKernel}) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {'main.dart': TEST},
+ options: useKernel ? [Flags.useKernel] : []);
+ Expect.isTrue(result.isSuccess);
+ var compiler = result.compiler;
var typesInferrer = compiler.globalInference.typesInferrerInternal;
var closedWorld = typesInferrer.closedWorld;
var commonMasks = closedWorld.commonMasks;
- MemberElement element = findElement(compiler, "foo");
+ MemberEntity element = findMember(closedWorld, "foo");
var mask = typesInferrer.getReturnTypeOfMember(element);
Expect.equals(commonMasks.uint31Type, simplify(mask, closedWorld));
- });
-}
+ }
-main() {
- asyncStart();
- runTest().then((_) {
- // Make sure that the type is still correct when we do a second compilation.
- return runTest();
- }).whenComplete(asyncEnd);
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTest(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTest(useKernel: true);
+ });
}
diff --git a/tests/compiler/dart2js/inference/type_inference_switch_test.dart b/tests/compiler/dart2js/inference/type_inference_switch_test.dart
index 20da364..9823a26 100644
--- a/tests/compiler/dart2js/inference/type_inference_switch_test.dart
+++ b/tests/compiler/dart2js/inference/type_inference_switch_test.dart
@@ -4,12 +4,12 @@
/// TODO(johnniwinther): Port this test to use the equivalence framework.
-import "package:async_helper/async_helper.dart";
-import "package:expect/expect.dart";
-import '../compiler_helper.dart';
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/elements/entities.dart';
+import 'package:expect/expect.dart';
import 'type_mask_test_helper.dart';
-
-import 'dart:async';
+import '../memory_compiler.dart';
const String TEST1 = r"""
foo(int x) {
@@ -132,31 +132,39 @@
}
""";
-Future runTest(String test, checker) {
- Uri uri = new Uri(scheme: 'source');
- var compiler = mockCompilerFor(test, uri);
- return compiler.run(uri).then((_) {
- var typesInferrer = compiler.globalInference.typesInferrerInternal;
- var closedWorld = typesInferrer.closedWorld;
- var commonMasks = closedWorld.commonMasks;
+main() {
+ runTests({bool useKernel}) async {
+ runTest(String test, checker) async {
+ CompilationResult result = await runCompiler(
+ memorySourceFiles: {'main.dart': test},
+ options: useKernel ? [Flags.useKernel] : []);
+ Expect.isTrue(result.isSuccess);
+ var compiler = result.compiler;
+ var typesInferrer = compiler.globalInference.typesInferrerInternal;
+ var closedWorld = typesInferrer.closedWorld;
+ var commonMasks = closedWorld.commonMasks;
- checkTypeOf(String name, TypeMask type) {
- MemberElement element = findElement(compiler, name);
- var mask = typesInferrer.getReturnTypeOfMember(element);
- Expect.equals(type, simplify(mask, closedWorld));
+ checkTypeOf(String name, TypeMask type) {
+ FunctionEntity element = findMember(closedWorld, name);
+ var mask = typesInferrer.getReturnTypeOfMember(element);
+ Expect.equals(type, simplify(mask, closedWorld));
+ }
+
+ checker(commonMasks, checkTypeOf);
}
- checker(commonMasks, checkTypeOf);
- });
-}
-
-main() {
- asyncTest(() async {
await runTest(TEST1, (t, c) => c("foo", t.stringType));
await runTest(TEST2, (t, c) => c("foo", t.stringType.nullable()));
await runTest(TEST3, (t, c) => c("foo", t.uint31Type.nullable()));
await runTest(TEST4, (t, c) => c("foo", t.uint31Type));
await runTest(TEST5, (t, c) => c("foo", t.uint31Type.nullable()));
await runTest(TEST6, (t, c) => c("foo", t.uint31Type.nullable()));
+ }
+
+ asyncTest(() async {
+ print('--test from ast---------------------------------------------------');
+ await runTests(useKernel: false);
+ print('--test from kernel------------------------------------------------');
+ await runTests(useKernel: true);
});
}
diff --git a/tests/compiler/dart2js/inference/type_mask_test_helper.dart b/tests/compiler/dart2js/inference/type_mask_test_helper.dart
index 414d259..450821c 100644
--- a/tests/compiler/dart2js/inference/type_mask_test_helper.dart
+++ b/tests/compiler/dart2js/inference/type_mask_test_helper.dart
@@ -4,9 +4,14 @@
library type_mask_test_helper;
+import 'package:compiler/src/common_elements.dart' show ElementEnvironment;
+import 'package:compiler/src/elements/entities.dart'
+ show ClassEntity, MemberEntity;
import 'package:compiler/src/types/types.dart';
import 'package:compiler/src/world.dart' show ClosedWorld;
+export 'package:compiler/src/types/types.dart';
+
TypeMask simplify(TypeMask mask, ClosedWorld closedWorld) {
if (mask is ForwardingTypeMask) {
return simplify(mask.forwardTo, closedWorld);
@@ -16,3 +21,49 @@
return mask;
}
}
+
+TypeMask interceptorOrComparable(ClosedWorld closedWorld,
+ {bool nullable: false}) {
+ // TODO(johnniwinther): The mock libraries are missing 'Comparable' and
+ // therefore consider the union of for instance 'String' and 'num' to be
+ // 'Interceptor' and not 'Comparable'. Maybe the union mask should be changed
+ // to favor 'Interceptor' when flattening.
+ if (nullable) {
+ return new TypeMask.subtype(
+ closedWorld.elementEnvironment
+ .lookupClass(closedWorld.commonElements.coreLibrary, 'Comparable'),
+ closedWorld);
+ } else {
+ return new TypeMask.nonNullSubtype(
+ closedWorld.elementEnvironment
+ .lookupClass(closedWorld.commonElements.coreLibrary, 'Comparable'),
+ closedWorld);
+ }
+}
+
+ClassEntity findClass(ClosedWorld closedWorld, String name) {
+ ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+ ClassEntity cls =
+ elementEnvironment.lookupClass(elementEnvironment.mainLibrary, name);
+ assert(cls != null, "Class '$name' not found.");
+ return cls;
+}
+
+MemberEntity findClassMember(
+ ClosedWorld closedWorld, String className, String memberName) {
+ ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+ ClassEntity cls =
+ elementEnvironment.lookupClass(elementEnvironment.mainLibrary, className);
+ assert(cls != null, "Class '$className' not found.");
+ MemberEntity member = elementEnvironment.lookupClassMember(cls, memberName);
+ assert(member != null, "Member '$memberName' not found in $cls.");
+ return member;
+}
+
+MemberEntity findMember(ClosedWorld closedWorld, String name) {
+ ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+ MemberEntity member = elementEnvironment.lookupLibraryMember(
+ elementEnvironment.mainLibrary, name);
+ assert(member != null, "Member '$name' not found.");
+ return member;
+}
diff --git a/tests/compiler/dart2js/kernel/compiler_helper.dart b/tests/compiler/dart2js/kernel/compiler_helper.dart
index 56d9b7d..903758a 100644
--- a/tests/compiler/dart2js/kernel/compiler_helper.dart
+++ b/tests/compiler/dart2js/kernel/compiler_helper.dart
@@ -14,11 +14,15 @@
import 'package:compiler/src/common.dart';
import 'package:compiler/src/common/tasks.dart';
import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/dart2js.dart' as dart2js;
+import 'package:compiler/src/filenames.dart';
import 'package:compiler/src/kernel/element_map.dart';
import 'package:compiler/src/library_loader.dart';
import 'package:compiler/src/universe/world_builder.dart';
import 'package:compiler/src/util/util.dart';
+import 'package:expect/expect.dart';
import 'package:kernel/ast.dart' as ir;
+import 'package:sourcemap_testing/src/stacktrace_helper.dart';
import '../memory_compiler.dart';
/// Analyze [memorySourceFiles] with [entryPoint] as entry-point using the
@@ -80,6 +84,47 @@
return entryPoint;
}
+Future<Compiler> runWithD8(
+ {Uri entryPoint,
+ Map<String, String> memorySourceFiles: const <String, String>{},
+ List<String> options: const <String>[],
+ String expectedOutput,
+ bool printJs: false}) async {
+ entryPoint ??= Uri.parse('memory:main.dart');
+ Uri mainFile =
+ await createTemp(entryPoint, memorySourceFiles, printSteps: true);
+ String output = uriPathToNative(mainFile.resolve('out.js').path);
+ List<String> dart2jsArgs = [
+ mainFile.toString(),
+ '-o$output',
+ '--packages=${Platform.packageConfig}',
+ ]..addAll(options);
+ print('Running: dart2js ${dart2jsArgs.join(' ')}');
+
+ CompilationResult result = await dart2js.internalMain(dart2jsArgs);
+ Expect.isTrue(result.isSuccess);
+ if (printJs) {
+ print('dart2js output:');
+ print(new File(output).readAsStringSync());
+ }
+
+ List<String> d8Args = [
+ 'sdk/lib/_internal/js_runtime/lib/preambles/d8.js',
+ output
+ ];
+ print('Running: d8 ${d8Args.join(' ')}');
+ ProcessResult runResult = Process.runSync(d8executable, d8Args);
+ String out = '${runResult.stderr}\n${runResult.stdout}';
+ print('d8 output:');
+ print(out);
+ if (expectedOutput != null) {
+ Expect.equals(0, runResult.exitCode);
+ Expect.stringEquals(
+ expectedOutput, runResult.stdout.replaceAll('\r\n', '\n'));
+ }
+ return result.compiler;
+}
+
Future<Compiler> compileWithDill(
{Uri entryPoint,
Map<String, String> memorySourceFiles: const <String, String>{},
diff --git a/tests/compiler/dart2js/kernel/run_from_dill_test.dart b/tests/compiler/dart2js/kernel/run_from_dill_test.dart
index 77243cc..6012caf 100644
--- a/tests/compiler/dart2js/kernel/run_from_dill_test.dart
+++ b/tests/compiler/dart2js/kernel/run_from_dill_test.dart
@@ -6,14 +6,9 @@
library dart2js.kernel.run_from_dill_test;
import 'dart:async';
-import 'dart:io';
import 'package:async_helper/async_helper.dart';
-import 'package:expect/expect.dart';
import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/dart2js.dart' as dart2js;
-import 'package:compiler/src/filenames.dart';
-import 'package:sourcemap_testing/src/stacktrace_helper.dart';
import 'compiler_helper.dart';
import '../serialization/helper.dart';
@@ -104,28 +99,11 @@
memorySourceFiles = SOURCE;
}
- Uri mainFile =
- await createTemp(entryPoint, memorySourceFiles, printSteps: true);
- String output = uriPathToNative(mainFile.resolve('out.js').path);
- List<String> dart2jsArgs = [
- mainFile.toString(),
- '-o$output',
- Flags.useKernel,
- Flags.enableAssertMessage,
- '--packages=${Platform.packageConfig}',
- ];
- print('Running: dart2js ${dart2jsArgs.join(' ')}');
-
- await dart2js.internalMain(dart2jsArgs);
-
- print('---- run from dill --------------------------------------------');
- ProcessResult runResult = Process.runSync(d8executable,
- ['sdk/lib/_internal/js_runtime/lib/preambles/d8.js', output]);
- String out = '${runResult.stderr}\n${runResult.stdout}';
- print('d8 output:');
- print(out);
- Expect.equals(0, runResult.exitCode);
- Expect.equals(OUTPUT, runResult.stdout.replaceAll('\r\n', '\n'));
+ await runWithD8(
+ entryPoint: entryPoint,
+ memorySourceFiles: memorySourceFiles,
+ options: [Flags.useKernel, Flags.enableAssertMessage],
+ expectedOutput: OUTPUT);
return ResultKind.success;
}
diff --git a/tests/compiler/dart2js/rti/data/closure.dart b/tests/compiler/dart2js/rti/data/closure.dart
new file mode 100644
index 0000000..408d0ae
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/closure.dart
@@ -0,0 +1,16 @@
+// 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.
+
+/*element: A.:classNeedsRti*/
+class A<T> {
+ /*element: A.m:*/
+ m() {
+ return /*methodNeedsRti*/ (T t) {};
+ }
+}
+
+/*element: main:*/
+main() {
+ new A<int>().m() is void Function(int);
+}
diff --git a/tests/compiler/dart2js/rti/data/dependency.dart b/tests/compiler/dart2js/rti/data/dependency.dart
new file mode 100644
index 0000000..5c0a3e1
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/dependency.dart
@@ -0,0 +1,17 @@
+// 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.
+
+/*element: A.:*/
+class A<T> {
+ /*element: A.m:*/
+ m() => new B<T>();
+}
+
+/*element: B.:deps=[A]*/
+class B<T> {}
+
+/*element: main:*/
+main() {
+ new A<int>().m();
+}
diff --git a/tests/compiler/dart2js/rti/data/direct.dart b/tests/compiler/dart2js/rti/data/direct.dart
new file mode 100644
index 0000000..6b322cf
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/direct.dart
@@ -0,0 +1,11 @@
+// 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.
+
+/*element: A.:classNeedsRti,explicit=[A<int>]*/
+class A<T> {}
+
+/*element: main:*/
+main() {
+ new A<int>() is A<int>;
+}
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable.dart b/tests/compiler/dart2js/rti/data/is_type_variable.dart
new file mode 100644
index 0000000..ba682ba
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/is_type_variable.dart
@@ -0,0 +1,14 @@
+// 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.
+
+/*element: A.:classNeedsRti,test,explicit=[A.T]*/
+class A<T> {
+ /*element: A.m:*/
+ m(T t) => t is T;
+}
+
+/*element: main:*/
+main() {
+ new A<int>().m(0);
+}
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable_super.dart b/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
new file mode 100644
index 0000000..a4569b8
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
@@ -0,0 +1,17 @@
+// 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.
+
+/*element: A.:*/
+class A<T> {}
+
+/*element: B.:classNeedsRti,test,explicit=[B.T],implicit=[B.T]*/
+class B<T> extends A<T> {
+ /*element: B.m:*/
+ m(T t) => t is T;
+}
+
+/*element: main:*/
+main() {
+ new B<int>().m(0);
+}
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart b/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
new file mode 100644
index 0000000..c0d1f0a
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
@@ -0,0 +1,17 @@
+// 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.
+
+/*element: A.:*/
+class A<T> {}
+
+/*element: B.:classNeedsRti,test,explicit=[B.T],implicit=[List<B.T>]*/
+class B<T> extends A<List<T>> {
+ /*element: B.m:*/
+ m(T t) => t is T;
+}
+
+/*element: main:*/
+main() {
+ new B<int>().m(0);
+}
diff --git a/tests/compiler/dart2js/rti/data/subclass.dart b/tests/compiler/dart2js/rti/data/subclass.dart
new file mode 100644
index 0000000..8bb50fb
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/subclass.dart
@@ -0,0 +1,14 @@
+// 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.
+
+/*element: A.:classNeedsRti,explicit=[A<int>]*/
+class A<T> {}
+
+/*element: B.:classNeedsRti*/
+class B<T> extends A<T> {}
+
+/*element: main:*/
+main() {
+ new B<int>() is A<int>;
+}
diff --git a/tests/compiler/dart2js/rti/data/subclass_fixed.dart b/tests/compiler/dart2js/rti/data/subclass_fixed.dart
new file mode 100644
index 0000000..b0c5b26
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/subclass_fixed.dart
@@ -0,0 +1,14 @@
+// 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.
+
+/*element: A.:classNeedsRti,explicit=[A<int>]*/
+class A<T> {}
+
+/*element: B.:*/
+class B extends A<int> {}
+
+/*element: main:*/
+main() {
+ new B() is A<int>;
+}
diff --git a/tests/compiler/dart2js/rti/data/superclass.dart b/tests/compiler/dart2js/rti/data/superclass.dart
new file mode 100644
index 0000000..49e1430
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/superclass.dart
@@ -0,0 +1,14 @@
+// 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.
+
+/*element: A.:*/
+class A<T> {}
+
+/*element: B.:classNeedsRti,explicit=[B<int>]*/
+class B<T> extends A<T> {}
+
+/*element: main:*/
+main() {
+ new B<int>() is B<int>;
+}
diff --git a/tests/compiler/dart2js/rti/data/tear_off.dart b/tests/compiler/dart2js/rti/data/tear_off.dart
new file mode 100644
index 0000000..d3175aa
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/tear_off.dart
@@ -0,0 +1,14 @@
+// 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.
+
+/*element: A.:classNeedsRti*/
+class A<T> {
+ /*element: A.m:methodNeedsRti*/
+ void m(T t) {}
+}
+
+/*element: main:*/
+main() {
+ new A<int>().m is void Function(int);
+}
diff --git a/tests/compiler/dart2js/rti/data/type_literal.dart b/tests/compiler/dart2js/rti/data/type_literal.dart
new file mode 100644
index 0000000..58cf810
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/type_literal.dart
@@ -0,0 +1,14 @@
+// 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.
+
+/*element: A.:classNeedsRti,exp*/
+class A<T> {
+ /*element: A.m:*/
+ m() => T;
+}
+
+/*element: main:*/
+main() {
+ new A<int>().m();
+}
diff --git a/tests/compiler/dart2js/rti/rti_need_test.dart b/tests/compiler/dart2js/rti/rti_need_test.dart
new file mode 100644
index 0000000..4586b74
--- /dev/null
+++ b/tests/compiler/dart2js/rti/rti_need_test.dart
@@ -0,0 +1,287 @@
+// 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:io';
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/closure.dart';
+import 'package:compiler/src/common.dart';
+import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
+import 'package:compiler/src/elements/elements.dart';
+import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/elements/types.dart';
+import 'package:compiler/src/tree/nodes.dart' as ast;
+import 'package:compiler/src/js_backend/runtime_types.dart';
+import 'package:compiler/src/kernel/element_map.dart';
+import 'package:compiler/src/kernel/kernel_backend_strategy.dart';
+import 'package:compiler/src/ssa/builder.dart' as ast;
+import 'package:compiler/src/universe/world_builder.dart';
+import 'package:kernel/ast.dart' as ir;
+import '../equivalence/id_equivalence.dart';
+import '../equivalence/id_equivalence_helper.dart';
+
+main(List<String> args) {
+ asyncTest(() async {
+ Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
+ await checkTests(dataDir, computeAstRtiNeed, computeKernelRtiNeed,
+ args: args);
+ });
+}
+
+/// Compute RTI need data for [_member] as a [MemberElement].
+///
+/// Fills [actualMap] with the data.
+void computeAstRtiNeed(
+ Compiler compiler, MemberEntity _member, Map<Id, ActualData> actualMap,
+ {bool verbose: false, bool forBackend}) {
+ MemberElement member = _member;
+ ResolvedAst resolvedAst = member.resolvedAst;
+ compiler.reporter.withCurrentElement(member.implementation, () {
+ new RtiNeedAstComputer(compiler.reporter, actualMap, resolvedAst, compiler)
+ .run();
+ });
+}
+
+abstract class ComputeValueMixin<T> {
+ Compiler get compiler;
+
+ ResolutionWorldBuilder get resolutionWorldBuilder =>
+ compiler.resolutionWorldBuilder;
+ RuntimeTypesNeedBuilderImpl get rtiNeedBuilder =>
+ compiler.frontendStrategy.runtimeTypesNeedBuilderForTesting;
+ RuntimeTypesNeed get rtiNeed => compiler.backendClosedWorldForTesting.rtiNeed;
+
+ MemberEntity getFrontendMember(MemberEntity member);
+ Local getFrontendClosure(MemberEntity member);
+
+ String getMemberValue(MemberEntity backendMember) {
+ MemberEntity frontendMember = getFrontendMember(backendMember);
+ Local frontendClosure = getFrontendClosure(backendMember);
+
+ StringBuffer sb = new StringBuffer();
+ String comma = '';
+
+ void findChecks(String prefix, Entity entity, Set<DartType> checks) {
+ Set<DartType> types = new Set<DartType>();
+ FindTypeVisitor finder = new FindTypeVisitor(entity);
+ for (DartType type in checks) {
+ if (type.accept(finder, null)) {
+ types.add(type);
+ }
+ }
+ List<String> list = types.map((t) => t.toString()).toList()..sort();
+ if (list.isNotEmpty) {
+ sb.write('${comma}$prefix=[${list.join('')}]');
+ comma = ',';
+ }
+ }
+
+ if (backendMember is ConstructorEntity &&
+ backendMember.isGenerativeConstructor) {
+ ClassEntity backendClass = backendMember.enclosingClass;
+ if (rtiNeed.classNeedsRti(backendClass)) {
+ sb.write('${comma}classNeedsRti');
+ comma = ',';
+ }
+ ClassEntity frontendClass = frontendMember?.enclosingClass;
+ Iterable<String> dependencies;
+ if (rtiNeedBuilder.rtiDependencies.containsKey(frontendClass)) {
+ dependencies = rtiNeedBuilder.rtiDependencies[frontendClass]
+ .map((d) => d.name)
+ .toList()
+ ..sort();
+ }
+ if (dependencies != null && dependencies.isNotEmpty) {
+ sb.write('${comma}deps=[${dependencies.join(',')}]');
+ comma = ',';
+ }
+ if (rtiNeedBuilder.classesUsingTypeVariableExpression
+ .contains(frontendClass)) {
+ sb.write('${comma}exp');
+ comma = ',';
+ }
+ if (rtiNeedBuilder.classesUsingTypeVariableTests
+ .contains(frontendClass)) {
+ sb.write('${comma}test');
+ comma = ',';
+ }
+ findChecks('explicit', frontendClass, rtiNeedBuilder.isChecks);
+ findChecks('implicit', frontendClass, rtiNeedBuilder.implicitIsChecks);
+ }
+ if (backendMember is FunctionEntity) {
+ if (rtiNeed.methodNeedsRti(backendMember)) {
+ sb.write('${comma}methodNeedsRti');
+ comma = ',';
+ }
+ if (frontendClosure != null &&
+ rtiNeed.localFunctionNeedsRti(frontendClosure)) {
+ sb.write('${comma}methodNeedsRti');
+ comma = ',';
+ }
+ findChecks('explicit', frontendMember, rtiNeedBuilder.isChecks);
+ findChecks('implicit', frontendMember, rtiNeedBuilder.implicitIsChecks);
+ }
+ return sb.toString();
+ }
+}
+
+/// Visitor that determines whether a type refers to [entity].
+class FindTypeVisitor extends BaseDartTypeVisitor<bool, Null> {
+ final Entity entity;
+
+ FindTypeVisitor(this.entity);
+
+ bool visitTypes(List<DartType> types) {
+ for (DartType type in types) {
+ if (type.accept(this, null)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @override
+ bool visitType(DartType type, _) => false;
+
+ @override
+ bool visitInterfaceType(InterfaceType type, _) {
+ if (type.element == entity) return true;
+ return visitTypes(type.typeArguments);
+ }
+
+ @override
+ bool visitFunctionType(FunctionType type, _) {
+ if (type.returnType.accept(this, null)) return true;
+ if (visitTypes(type.typeVariables)) return true;
+ if (visitTypes(type.parameterTypes)) return true;
+ if (visitTypes(type.optionalParameterTypes)) return true;
+ if (visitTypes(type.namedParameterTypes)) return true;
+ return false;
+ }
+
+ @override
+ bool visitTypeVariableType(TypeVariableType type, _) {
+ return type.element.typeDeclaration == entity;
+ }
+}
+
+/// AST visitor for computing inlining data for a member.
+class RtiNeedAstComputer extends AstDataExtractor
+ with ComputeValueMixin<ast.Node> {
+ final Compiler compiler;
+
+ RtiNeedAstComputer(DiagnosticReporter reporter, Map<Id, ActualData> actualMap,
+ ResolvedAst resolvedAst, this.compiler)
+ : super(reporter, actualMap, resolvedAst);
+
+ @override
+ MemberEntity getFrontendMember(MemberEntity member) {
+ return member;
+ }
+
+ @override
+ Local getFrontendClosure(MemberEntity member) {
+ if (member is SynthesizedCallMethodElementX) return member.expression;
+ return null;
+ }
+
+ @override
+ String computeElementValue(Id id, AstElement element) {
+ if (element.isParameter) {
+ return null;
+ } else if (element.isLocal && element.isFunction) {
+ LocalFunctionElement localFunction = element;
+ return getMemberValue(localFunction.callMethod);
+ } else {
+ MemberElement member = element.declaration;
+ return getMemberValue(member);
+ }
+ }
+
+ @override
+ String computeNodeValue(Id id, ast.Node node, [AstElement element]) {
+ if (element != null && element.isLocal && element.isFunction) {
+ return computeElementValue(id, element);
+ }
+ return null;
+ }
+}
+
+/// Compute RTI need data for [member] from the new frontend.
+///
+/// Fills [actualMap] with the data.
+void computeKernelRtiNeed(
+ Compiler compiler, MemberEntity member, Map<Id, ActualData> actualMap,
+ {bool verbose: false, bool forBackend}) {
+ KernelBackendStrategy backendStrategy = compiler.backendStrategy;
+ KernelToElementMapForBuilding elementMap = backendStrategy.elementMap;
+ MemberDefinition definition = elementMap.getMemberDefinition(member);
+ new RtiNeedIrComputer(
+ compiler.reporter,
+ actualMap,
+ elementMap,
+ member,
+ compiler,
+ backendStrategy.closureDataLookup as ClosureDataLookup<ir.Node>)
+ .run(definition.node);
+}
+
+/// AST visitor for computing inference data for a member.
+class RtiNeedIrComputer extends IrDataExtractor
+ with ComputeValueMixin<ir.Node> {
+ final KernelToElementMapForBuilding _elementMap;
+ final ClosureDataLookup<ir.Node> _closureDataLookup;
+ final Compiler compiler;
+
+ RtiNeedIrComputer(
+ DiagnosticReporter reporter,
+ Map<Id, ActualData> actualMap,
+ this._elementMap,
+ MemberEntity member,
+ this.compiler,
+ this._closureDataLookup)
+ : super(reporter, actualMap);
+
+ @override
+ MemberEntity getFrontendMember(MemberEntity backendMember) {
+ ElementEnvironment elementEnvironment = compiler
+ .resolutionWorldBuilder.closedWorldForTesting.elementEnvironment;
+ LibraryEntity frontendLibrary =
+ elementEnvironment.lookupLibrary(backendMember.library.canonicalUri);
+ if (backendMember.enclosingClass != null) {
+ if (backendMember.enclosingClass.isClosure) return null;
+ ClassEntity frontendClass = elementEnvironment.lookupClass(
+ frontendLibrary, backendMember.enclosingClass.name);
+ if (backendMember is ConstructorEntity) {
+ return elementEnvironment.lookupConstructor(
+ frontendClass, backendMember.name);
+ } else {
+ return elementEnvironment.lookupClassMember(
+ frontendClass, backendMember.name,
+ setter: backendMember.isSetter);
+ }
+ }
+ return elementEnvironment.lookupLibraryMember(
+ frontendLibrary, backendMember.name,
+ setter: backendMember.isSetter);
+ }
+
+ @override
+ Local getFrontendClosure(MemberEntity member) => null;
+
+ @override
+ String computeMemberValue(Id id, ir.Member node) {
+ return getMemberValue(_elementMap.getMember(node));
+ }
+
+ @override
+ String computeNodeValue(Id id, ir.TreeNode node) {
+ if (node is ir.FunctionExpression || node is ir.FunctionDeclaration) {
+ ClosureRepresentationInfo info = _closureDataLookup.getClosureInfo(node);
+ return getMemberValue(info.callMethod);
+ }
+ return null;
+ }
+}
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index d77b085..eeb49d4 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -6,13 +6,20 @@
recursive_import_test: Skip # Issue 27441
[ $compiler == dart2js ]
+21579_test: Crash # Issue 31762
class_test: Fail
constant_javascript_semantics4_test: Fail, OK
+constant_javascript_semantics_test/01: Crash # Issue 31762
+constant_javascript_semantics_test/02: Crash # Issue 31762
+constant_javascript_semantics_test/03: Crash # Issue 31762
+constant_javascript_semantics_test/04: Crash # Issue 31762
+constant_javascript_semantics_test/none: Crash # Issue 31762
dummy_compiler_test: Slow, Pass
mirror_printer_test: Pass, Slow # Issue 25940, 16473
mirrors_used_closure_test: Fail # Issue 17939
no_such_method_test: Fail # Wrong Invocation.memberName.
recursive_import_test: Slow, Pass
+round_constant_folding_test: Crash # Issue 31762
statements_test: Fail
typed_locals_test: Fail
@@ -125,8 +132,15 @@
js_interop_test: RuntimeError # Issue 31082
[ $compiler == dart2js && $dart2js_with_kernel ]
+21579_test: CompileTimeError # Large integer literal
+constant_javascript_semantics_test/01: Pass # Issue 31762
+constant_javascript_semantics_test/02: Pass # Issue 31762
+constant_javascript_semantics_test/03: CompileTimeError # Large integer literal
+constant_javascript_semantics_test/04: CompileTimeError # Large integer literal
+constant_javascript_semantics_test/none: CompileTimeError # Large integer literal
dummy_compiler_test: Crash # Issue 31715
recursive_import_test: Crash # Issue 31715
+round_constant_folding_test: CompileTimeError # Large integer literal
[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
23056_test: Pass
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_a.dart b/tests/compiler/dart2js_extra/deferred/shared_constant_a.dart
new file mode 100644
index 0000000..388f0d3
--- /dev/null
+++ b/tests/compiler/dart2js_extra/deferred/shared_constant_a.dart
@@ -0,0 +1,10 @@
+// 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 'shared_constant_shared.dart' deferred as d;
+
+doA() async {
+ await d.loadLibrary();
+ return d.constant;
+}
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_b.dart b/tests/compiler/dart2js_extra/deferred/shared_constant_b.dart
new file mode 100644
index 0000000..177f50e
--- /dev/null
+++ b/tests/compiler/dart2js_extra/deferred/shared_constant_b.dart
@@ -0,0 +1,10 @@
+// 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 'shared_constant_shared.dart' deferred as d;
+
+doB() async {
+ await d.loadLibrary();
+ return d.constant;
+}
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_c.dart b/tests/compiler/dart2js_extra/deferred/shared_constant_c.dart
new file mode 100644
index 0000000..b64972e
--- /dev/null
+++ b/tests/compiler/dart2js_extra/deferred/shared_constant_c.dart
@@ -0,0 +1,8 @@
+// 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.
+
+class C {
+ const C();
+ method() => print("1");
+}
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_shared.dart b/tests/compiler/dart2js_extra/deferred/shared_constant_shared.dart
new file mode 100644
index 0000000..a801718
--- /dev/null
+++ b/tests/compiler/dart2js_extra/deferred/shared_constant_shared.dart
@@ -0,0 +1,7 @@
+// 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 'shared_constant_c.dart';
+
+const constant = const C(); // using `var` eludes the problem.
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_test.dart b/tests/compiler/dart2js_extra/deferred/shared_constant_test.dart
new file mode 100644
index 0000000..3614147
--- /dev/null
+++ b/tests/compiler/dart2js_extra/deferred/shared_constant_test.dart
@@ -0,0 +1,17 @@
+// 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.
+
+/// Regression test for issue https://github.com/dart-lang/sdk/issues/31306.
+///
+/// When 1 constant was imported in two libraries by using the same exact
+/// deferred import URI, the deferred-constant initializer was incorrectly moved
+/// to the main output unit.
+
+import 'shared_constant_a.dart';
+import 'shared_constant_b.dart';
+
+main() async {
+ (await doA()).method();
+ await doB();
+}
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index cb88d10..e418d9e 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -12,7 +12,33 @@
string_test: StaticWarning, OK # Test generates error on purpose.
[ $compiler == dart2js ]
+bit_twiddling_bigint_test: Crash # Issue 31762
+bit_twiddling_test: Crash # Issue 31762
+double_ceil_test: Crash # Issue 31762
+double_floor_test: Crash # Issue 31762
+double_round_test: Crash # Issue 31762
+double_truncate_test: Crash # Issue 31762
+int_ceil_test: Crash # Issue 31762
+int_ceil_to_double_test: Crash # Issue 31762
+int_floor_test: Crash # Issue 31762
+int_floor_to_double_test: Crash # Issue 31762
+int_from_environment_test: Crash # Issue 31762
+int_modulo_arith_test/bignum: Crash # Issue 31762
+int_modulo_arith_test/modPow: Crash # Issue 31762
+int_modulo_arith_test/none: Crash # Issue 31762
+int_parse_radix_test/02: Crash # Issue 31762
+int_round_test: Crash # Issue 31762
+int_round_to_double_test: Crash # Issue 31762
+int_to_int_test: Crash # Issue 31762
+int_truncate_test: Crash # Issue 31762
+int_truncate_to_double_test: Crash # Issue 31762
+integer_to_radix_string_test: Crash # Issue 31762
+integer_to_string_test/01: Crash # Issue 31762
+num_parse_test/01: Crash # Issue 31762
+num_parse_test/none: Crash # Issue 31762
+num_sign_test: Crash # Issue 31762
regexp/pcre_test: Pass, Slow # Issue 21593
+regress_r21715_test: Crash # Issue 31762
[ $compiler == precompiler ]
apply3_test: SkipByDesign # Imports dart:mirrors
@@ -378,10 +404,40 @@
*: Skip
[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
+big_integer_parsed_arith_vm_test: RuntimeError # Large integers
+big_integer_parsed_div_rem_vm_test: RuntimeError # Large integers
+big_integer_parsed_mul_div_vm_test: RuntimeError # Large integers
regexp/capture-3: Pass, Slow, Timeout # Issues 21593 and 22008
regexp/global_test: Skip # Timeout. Issue 21709 and 21708
regexp/pcre_test: Pass, Slow, Timeout # Issues 21593 and 22008
+[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm || ($compiler == dart2js && $dart2js_with_kernel) ]
+big_integer_arith_vm_test: CompileTimeError # Large integer literal
+bit_twiddling_bigint_test: CompileTimeError # Large integer literal
+bit_twiddling_test: CompileTimeError # Large integer literal
+double_ceil_test: CompileTimeError # Large integer literal
+double_floor_test: CompileTimeError # Large integer literal
+double_round_test: CompileTimeError # Large integer literal
+double_truncate_test: CompileTimeError # Large integer literal
+int_ceil_test: CompileTimeError # Large integer literal
+int_ceil_to_double_test: CompileTimeError # Large integer literal
+int_floor_test: CompileTimeError # Large integer literal
+int_floor_to_double_test: CompileTimeError # Large integer literal
+int_from_environment_test: CompileTimeError # Large integer literal
+int_modulo_arith_test: CompileTimeError # Large integer literal
+int_parse_radix_test/02: CompileTimeError # Large integer literal
+int_round_test: CompileTimeError # Large integer literal
+int_round_to_double_test: CompileTimeError # Large integer literal
+int_to_int_test: CompileTimeError # Large integer literal
+int_truncate_test: CompileTimeError # Large integer literal
+int_truncate_to_double_test: CompileTimeError # Large integer literal
+integer_to_radix_string_test: CompileTimeError # Large integer literal
+integer_to_string_test/01: CompileTimeError # Large integer literal
+num_parse_test/01: CompileTimeError # Large integer literal
+num_parse_test/none: CompileTimeError # Large integer literal
+num_sign_test: CompileTimeError # Large integer literal
+regress_r21715_test: CompileTimeError # Large integer literal
+
# Firefox takes advantage of the ECMAScript number parsing cop-out clause
# (presumably added to allow Mozilla's existing behavior)
# and only looks at the first 20 significant digits.
diff --git a/tests/corelib_2/cast_test.dart b/tests/corelib_2/cast_test.dart
new file mode 100644
index 0000000..b4e805c
--- /dev/null
+++ b/tests/corelib_2/cast_test.dart
@@ -0,0 +1,180 @@
+// Copyright (c) 2011, 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:collection";
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+void main() {
+ testIterable();
+ testList();
+}
+
+final elements = <C>[c, d, e, f, null];
+
+void testIterable() {
+ var iterable = new Iterable<C>.generate(elements.length, (n) => elements[n]);
+ // Down-cast
+ {
+ // An iterable that (likely) can do direct access.
+ var dIterable = Iterable.castTo<C, D>(iterable);
+
+ Expect.throws(() => dIterable.first, null, "1.first");
+ Expect.equals(d, dIterable.elementAt(1));
+ Expect.throws(() => dIterable.elementAt(2), null, "1.2"); // E is not D.
+ Expect.equals(f, dIterable.skip(3).first); // Skip does not access element.
+ Expect.equals(null, dIterable.skip(3).elementAt(1));
+
+ Expect.throws(() => dIterable.toList(), null, "1.toList");
+ }
+
+ {
+ // An iterable that cannot do direct access.
+ var dIterable2 = Iterable.castTo<C, D>(iterable.where((_) => true));
+
+ Expect.throws(() => dIterable2.first, null, "2.first");
+ Expect.equals(d, dIterable2.elementAt(1));
+ Expect.throws(() => dIterable2.elementAt(2), null, "2.2"); // E is not D.
+ Expect.equals(f, dIterable2.skip(3).first); // Skip does not access element.
+ Expect.equals(null, dIterable2.skip(3).elementAt(1));
+
+ Expect.throws(() => dIterable2.toList(), null, "2.toList");
+ }
+
+ {
+ // Iterable that definitely won't survive accessing element 2.
+ var iterable3 = new Iterable<C>.generate(
+ elements.length, (n) => n == 3 ? throw "untouchable" : elements[n]);
+ var dIterable3 = Iterable.castTo<C, D>(iterable3);
+
+ Expect.throws(() => dIterable3.first, null, "3.first");
+ Expect.equals(d, dIterable3.elementAt(1));
+ Expect.throws(() => dIterable3.elementAt(3), null, "3.3");
+ // Skip does not access element.
+ Expect.equals(null, dIterable3.skip(4).first);
+ Expect.equals(null, dIterable3.skip(3).elementAt(1));
+
+ Expect.throws(() => dIterable3.toList(), null, "3.toList");
+ }
+
+ // Up-cast.
+ {
+ var oIterable4 = Iterable.castTo<C, Object>(iterable);
+ Expect.listEquals(elements, oIterable4.toList());
+ }
+}
+
+void testList() {
+ // Down-cast.
+ var list = new List<C>.from(elements);
+ var dList = List.castTo<C, D>(list);
+
+ Expect.throws(() => dList.first); // C is not D.
+ Expect.equals(d, dList[1]);
+ Expect.throws(() => dList[2]); // E is not D.
+ Expect.equals(f, dList[3]);
+ Expect.equals(null, dList.last);
+
+ Expect.throws(() => dList.toList());
+
+ dList[2] = d;
+ Expect.equals(d, dList[2]); // Setting works.
+
+ // Up-cast.
+ var list2 = new List<C>.from(elements);
+ var dList2 = List.castTo<C, Object>(list2);
+ Expect.listEquals(elements, dList2);
+ Expect.throws(() => dList2[2] = new Object()); // Cannot set non-C.
+ Expect.listEquals(elements, dList2);
+}
+
+void testSet() {
+ var set = new Set<C>.from(elements); // Linked HashSet.
+ Expect.listEquals(elements, set.toList()); // Preserves order.
+
+ var dSet = Set.castTo<C, D>(set);
+
+ // Preserves order.
+ Expect.throws(() => dSet.first); // C is not D.
+ Expect.equals(d, dSet.elementAt(1));
+ Expect.throws(() => dSet.elementAt(2)); // E is not D.
+
+ Expect.throws(() => dSet.toList());
+
+ // Contains is not typed.
+ var newC = new C();
+ Expect.isFalse(dSet.contains(newC));
+ dSet.add(newC);
+ Expect.isTrue(dSet.contains(newC));
+
+ Expect.equals(5, dSet.length);
+ dSet.remove(newC);
+ Expect.equals(5, dSet.length);
+ dSet.remove(c); // Success, no type checks.
+ Expect.equals(4, dSet.length);
+
+ // Up-cast
+ var set2 = new Set<C>.from(elements);
+ var dSet2 = Set.castTo<C, Object>(set2);
+
+ var newObject = new Object();
+ Expect.throws(() => dSet2.add(newObject));
+ Expect.isFalse(dSet.contains(newObject));
+
+ var toSet2 = dSet2.toSet();
+ Expect.isTrue(toSet2 is LinkedHashSet<Object>);
+ Expect.isTrue(toSet2 is! LinkedHashSet<C>);
+
+ // Custom emptySet.
+
+ var set3 = new Set<C>.from(elements);
+ var dSet3 = Set.castTo<C, Object>(set3, newSet: <T>() => new HashSet<T>());
+
+ var toSet3 = dSet3.toSet();
+ Expect.isTrue(toSet3 is HashSet<Object>);
+ Expect.isTrue(toSet3 is HashSet<C>);
+ Expect.isTrue(toSet3 is! LinkedHashSet<Object>);
+}
+
+void testMap() {
+ var map = new Map.fromIterables(elements, elements);
+
+ var dMap = Map.castTo<C, C, D, D>(map);
+
+ Expect.isTrue(dMap is Map<D, D>);
+
+ Expect.equals(null, dMap[new C()]);
+ Expect.throws(() => dMap[c]);
+ Expect.isTrue(dMap.containsKey(c));
+ Expect.equals(d, dMap[d]);
+ Expect.throws(() => dMap[e]);
+ Expect.equals(null, dMap[null]);
+
+ Expect.equals(5, dMap.length);
+ dMap.remove(c); // Success, no type checks along the way.
+ Expect.equals(4, dMap.length);
+ Expect.equals(null, dMap[c]);
+
+ Expect.throws(() => dMap[c] = d);
+ Expect.throws(() => dMap[d] = c);
+ Expect.equals(4, dMap.length);
+
+ Expect.isTrue(dMap.keys is Iterable<D>);
+ Expect.isTrue(dMap.values is Iterable<D>);
+ Expect.throws(() => dMap.keys.toList());
+ Expect.throws(() => dMap.values.toList());
+}
+
+class C {}
+
+class D extends C {}
+
+class E extends C {}
+
+class F implements D, E {}
+
+final c = new C();
+final d = new D();
+final e = new E();
+final f = new F();
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 1455b3e..cc9dfb9 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -5,10 +5,20 @@
[ $compiler == dart2analyzer ]
int_parse_radix_bad_handler_test: MissingCompileTimeError
iterable_element_at_test/static: Pass
+num_sign_test: Crash, Pass # Issue 31768
[ $compiler == dart2js ]
date_time11_test: RuntimeError, Pass # Fails when US is on winter time, issue 31285.
+double_ceil_test/int64: Crash # Issue 31762
+double_floor_test/int64: Crash # Issue 31762
+double_round_test/int64: Crash # Issue 31762
+double_truncate_test/int64: Crash # Issue 31762
hash_set_test/01: RuntimeError # Issue 11551
+int_from_environment_test: Crash # Issue 31762
+int_parse_radix_test/01: Crash # Issue 31762
+int_parse_radix_test/02: Crash # Issue 31762
+int_parse_radix_test/badTypes: Crash # Issue 31762
+int_parse_radix_test/none: Crash # Issue 31762
integer_to_radix_string_test: RuntimeError # Issue 29921
string_static_test: MissingCompileTimeError
@@ -106,6 +116,9 @@
[ $runtime == vm ]
string_case_test/01: RuntimeError
+[ !$strong ]
+cast_test: SkipByDesign # Uses generic method parameters.
+
[ $arch == simarmv5te && ($runtime == dart_precompiled || $runtime == vm) ]
int_parse_radix_test/*: Pass, Slow
integer_parsed_mul_div_vm_test: Pass, Slow
@@ -235,6 +248,10 @@
symbol_test/02: MissingCompileTimeError
symbol_test/03: MissingCompileTimeError
+[ $compiler == dart2js && $dart2js_with_kernel ]
+int_from_environment_test: Pass # Issue 31762
+int_parse_radix_test/none: Pass # Issue 31762
+
[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
iterable_return_type_test/01: RuntimeError
iterable_return_type_test/02: RuntimeError
@@ -314,9 +331,12 @@
date_time10_test: RuntimeError # Issue 29921
error_stack_trace_test/nullThrown: RuntimeError # .stackTrace not present for exception caught from 'throw null;'
hash_set_test/01: RuntimeError # Issue 29921
+int_from_environment_test: RuntimeError # Issue 31763
int_modulo_arith_test/none: RuntimeError # Issue 29921
int_parse_radix_test/01: RuntimeError # Issue 29921
int_parse_radix_test/02: RuntimeError # Issue 29921
+int_parse_radix_test/badTypes: RuntimeError # Issue 31763
+int_parse_radix_test/none: RuntimeError # Issue 31763
int_parse_with_limited_ints_test: Skip # dartdevc doesn't know about --limit-ints-to-64-bits
integer_arith_vm_test/modPow: RuntimeError # Issue 30170
integer_parsed_arith_vm_test: RuntimeError # Issue 29921
diff --git a/tests/isolate/count_test.dart b/tests/isolate/count_test.dart
index e4f88e9..d2a203c 100644
--- a/tests/isolate/count_test.dart
+++ b/tests/isolate/count_test.dart
@@ -12,7 +12,7 @@
int count = 0;
var port = new ReceivePort();
replyTo.send(["init", port.sendPort]);
- port.listen((int message) {
+ port.listen((message) {
if (message == -1) {
expect(count, 10);
replyTo.send(["done"]);
diff --git a/tests/isolate/function_send1_test.dart b/tests/isolate/function_send1_test.dart
index b1a9aea..d766656 100644
--- a/tests/isolate/function_send1_test.dart
+++ b/tests/isolate/function_send1_test.dart
@@ -97,7 +97,7 @@
// Creates a new isolate and a pair of ports that expect a single message
// to be sent to the other isolate and back to the callback function.
Future<SendPort> echoPort(callback(value)) {
- Completer completer = new Completer<SendPort>();
+ Completer<SendPort> completer = new Completer<SendPort>();
SendPort replyPort = singleMessagePort(callback);
RawReceivePort initPort;
initPort = new RawReceivePort((p) {
@@ -121,7 +121,7 @@
// Creates other isolate that waits for a single message, `msg`, on the returned
// port, and executes it as `msg[0](msg[1],msg[2])` in the other isolate.
Future<SendPort> callPort() {
- Completer completer = new Completer<SendPort>();
+ Completer<SendPort> completer = new Completer<SendPort>();
SendPort initPort = singleMessagePort(completer.complete);
return Isolate.spawn(_call, initPort).then((_) => completer.future);
}
diff --git a/tests/isolate/function_send_test.dart b/tests/isolate/function_send_test.dart
index 8e08da0..4fbe3a4 100644
--- a/tests/isolate/function_send_test.dart
+++ b/tests/isolate/function_send_test.dart
@@ -138,7 +138,7 @@
// Creates a new isolate and a pair of ports that expect a single message
// to be sent to the other isolate and back to the callback function.
Future<SendPort> echoPort(callback(value)) {
- Completer completer = new Completer<SendPort>();
+ Completer<SendPort> completer = new Completer<SendPort>();
SendPort replyPort = singleMessagePort(callback);
RawReceivePort initPort;
initPort = new RawReceivePort((p) {
@@ -162,7 +162,7 @@
// Creates other isolate that waits for a single message, `msg`, on the returned
// port, and executes it as `msg[0](msg[1],msg[2])` in the other isolate.
Future<SendPort> callPort() {
- Completer completer = new Completer<SendPort>();
+ Completer<SendPort> completer = new Completer<SendPort>();
SendPort initPort = singleMessagePort(completer.complete);
return Isolate.spawn(_call, initPort).then((_) => completer.future);
}
diff --git a/tests/isolate/handle_error2_test.dart b/tests/isolate/handle_error2_test.dart
index 508690b..5a9b908 100644
--- a/tests/isolate/handle_error2_test.dart
+++ b/tests/isolate/handle_error2_test.dart
@@ -33,7 +33,7 @@
/// Returns a list of `[isolate, commandPort]` in a future.
Future spawn(entry) {
ReceivePort reply = new ReceivePort();
- Future isolate = Isolate.spawn(entry, reply.sendPort, paused: true);
+ Future<Isolate> isolate = Isolate.spawn(entry, reply.sendPort, paused: true);
return isolate.then((Isolate isolate) {
isolate.setErrorsFatal(false);
isolate.resume(isolate.pauseCapability);
diff --git a/tests/isolate/handle_error3_test.dart b/tests/isolate/handle_error3_test.dart
index eeac985..580f19c 100644
--- a/tests/isolate/handle_error3_test.dart
+++ b/tests/isolate/handle_error3_test.dart
@@ -33,7 +33,7 @@
/// Returns a list of `[isolate, commandPort]` in a future.
Future spawn(entry) {
ReceivePort reply = new ReceivePort();
- Future isolate = Isolate.spawn(entry, reply.sendPort, paused: true);
+ Future<Isolate> isolate = Isolate.spawn(entry, reply.sendPort, paused: true);
return isolate.then((Isolate isolate) {
isolate.setErrorsFatal(false);
isolate.resume(isolate.pauseCapability);
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 2c49cf8..99e1c9f 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -4,7 +4,6 @@
[ $compiler == dart2analyzer ]
browser/typed_data_message_test: StaticWarning
-mint_maker_test: StaticWarning
[ $compiler == dart2js ]
browser/issue_12474_test: CompileTimeError # Issue 22529
@@ -105,53 +104,24 @@
isolate_stress_test: Pass, Slow # Issue 10697
[ $compiler == dartk && $strong ]
-checked_test: RuntimeError
-count_test: CompileTimeError
-cross_isolate_message_test: CompileTimeError
-error_at_spawnuri_test: RuntimeError
-error_exit_at_spawnuri_test: RuntimeError
-exit_at_spawnuri_test: RuntimeError
-function_send1_test: CompileTimeError
-function_send_test: CompileTimeError
-handle_error2_test: CompileTimeError
-handle_error3_test: CompileTimeError
-illegal_msg_function_test: CompileTimeError
-illegal_msg_mirror_test: CompileTimeError
-isolate_complex_messages_test: CompileTimeError
-isolate_current_test: CompileTimeError
+isolate_complex_messages_test: Crash
issue_21398_parent_isolate1_test: RuntimeError
-issue_21398_parent_isolate_test: RuntimeError
issue_22778_test: Crash
-issue_24243_parent_isolate_test: RuntimeError
-kill_self_synchronously_test: RuntimeError
-kill_test: CompileTimeError
-mandel_isolate_test: CompileTimeError
-message2_test: CompileTimeError
-message3_test/byteBuffer: CompileTimeError
-message3_test/constInstance: CompileTimeError
-message3_test/constList: CompileTimeError
-message3_test/constList_identical: CompileTimeError
-message3_test/constMap: CompileTimeError
-message3_test/fun: CompileTimeError
-message3_test/int32x4: CompileTimeError
-message3_test/none: CompileTimeError
+message3_test/byteBuffer: RuntimeError
+message3_test/constInstance: RuntimeError
+message3_test/constList: RuntimeError
+message3_test/constList_identical: RuntimeError
+message3_test/constMap: RuntimeError
+message3_test/fun: RuntimeError
+message3_test/int32x4: RuntimeError
+message3_test/none: RuntimeError
message_test: CompileTimeError
mint_maker_test: CompileTimeError
-nested_spawn2_test: CompileTimeError
-nested_spawn_test: CompileTimeError
-raw_port_test: CompileTimeError
-request_reply_test: CompileTimeError
spawn_function_custom_class_test: CompileTimeError
-spawn_function_test: CompileTimeError
-spawn_uri_exported_main_test: RuntimeError
-spawn_uri_multi_test/none: CompileTimeError
spawn_uri_nested_vm_test: CompileTimeError
-spawn_uri_test: CompileTimeError
-spawn_uri_vm_test: CompileTimeError
static_function_test: CompileTimeError
-timer_isolate_test: CompileTimeError
typed_message_test: CompileTimeError
-unresolved_ports_test: CompileTimeError
+unresolved_ports_test: Pass, Timeout
# Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
# are to be triaged. Isolate tests are skipped on purpose due to the usage of
diff --git a/tests/isolate/isolate_current_test.dart b/tests/isolate/isolate_current_test.dart
index e2e2d99..a277897 100644
--- a/tests/isolate/isolate_current_test.dart
+++ b/tests/isolate/isolate_current_test.dart
@@ -51,7 +51,7 @@
void testSpawnReturnVsCurrent(bool asList) {
asyncStart();
Function transform = asList ? l2i : id;
- Completer response = new Completer();
+ Completer<Isolate> response = new Completer<Isolate>();
var p = new RawReceivePort();
p.handler = (v) {
response.complete(transform(v));
@@ -81,7 +81,7 @@
asyncStart();
Function transform = asList ? i2l : id;
- Completer response = new Completer();
+ Completer<SendPort> response = new Completer<SendPort>();
var p = new RawReceivePort();
int state = 0;
p.handler = (v) {
diff --git a/tests/isolate/kill_self_synchronously_test.dart b/tests/isolate/kill_self_synchronously_test.dart
index 9b91d4b..cf60fa4 100644
--- a/tests/isolate/kill_self_synchronously_test.dart
+++ b/tests/isolate/kill_self_synchronously_test.dart
@@ -13,7 +13,7 @@
throw "QQQ Should not be reached";
} else {
var exec = Platform.resolvedExecutable;
- var args = new List();
+ var args = new List<String>();
args.addAll(Platform.executableArguments);
args.add(Platform.script.toFilePath());
args.add("--child");
diff --git a/tests/isolate/kill_test.dart b/tests/isolate/kill_test.dart
index 01ebf71..44d55ad 100644
--- a/tests/isolate/kill_test.dart
+++ b/tests/isolate/kill_test.dart
@@ -18,7 +18,8 @@
void main() {
asyncStart();
- var completer = new Completer(); // Completed by first reply from isolate.
+ // Completed by first reply from isolate.
+ var completer = new Completer<SendPort>();
RawReceivePort reply = new RawReceivePort(completer.complete);
Isolate.spawn(isomain1, reply.sendPort).then((Isolate isolate) {
completer.future.then((SendPort echoPort) {
diff --git a/tests/isolate/mandel_isolate_test.dart b/tests/isolate/mandel_isolate_test.dart
index 16db3c0..ee21f1e 100644
--- a/tests/isolate/mandel_isolate_test.dart
+++ b/tests/isolate/mandel_isolate_test.dart
@@ -107,8 +107,8 @@
void processLine(int y) {
ReceivePort reply = new ReceivePort();
_port.send([y, reply.sendPort]);
- reply.first.then((List<int> message) {
- _state.notifyProcessedLine(this, y, message);
+ reply.first.then((message) {
+ _state.notifyProcessedLine(this, y, message as List<int>);
});
}
diff --git a/tests/isolate/message3_test.dart b/tests/isolate/message3_test.dart
index 74028c8..7d10afc 100644
--- a/tests/isolate/message3_test.dart
+++ b/tests/isolate/message3_test.dart
@@ -42,7 +42,7 @@
}
class C extends B {
- var field = 33;
+ dynamic field = 33;
get superField => super.field;
get superField2 => super.field2;
@@ -459,7 +459,8 @@
Isolate
.spawn(echoMain, [initialReplyPort.sendPort, testPort.sendPort])
.then((_) => initialReplyPort.first)
- .then((SendPort ping) {
+ .then((arg) {
+ SendPort ping = arg as SendPort;
runTests(ping, checks);
Expect.isTrue(checks.length > 0);
completer.future.then((_) => ping.send("halt")).then((_) => asyncEnd());
diff --git a/tests/isolate/mint_maker_test.dart b/tests/isolate/mint_maker_test.dart
index d9346d0..f906beb 100644
--- a/tests/isolate/mint_maker_test.dart
+++ b/tests/isolate/mint_maker_test.dart
@@ -44,8 +44,8 @@
void createPurse(int balance, handlePurse(PurseWrapper purse)) {
ReceivePort reply = new ReceivePort();
- reply.first.then((SendPort purse) {
- handlePurse(new PurseWrapper(purse));
+ reply.first.then((purse) {
+ handlePurse(new PurseWrapper(purse as SendPort));
});
_mint.send([balance, reply.sendPort]);
}
@@ -77,7 +77,7 @@
replyTo.send(result.port);
} else {
// TODO: Send an exception back.
- throw UnsupportedError("Unsupported commend: $command");
+ throw new UnsupportedError("Unsupported commend: $command");
}
});
}
@@ -114,8 +114,8 @@
}
void sproutPurse(handleSprouted(PurseWrapper sprouted)) {
- _sendReceive("sprout", (SendPort sprouted) {
- handleSprouted(new PurseWrapper(sprouted));
+ _sendReceive("sprout", (sprouted) {
+ handleSprouted(new PurseWrapper(sprouted as SendPort));
});
}
@@ -127,9 +127,9 @@
mintMakerWrapper(SendPort replyPort) {
ReceivePort receiver = new ReceivePort();
replyPort.send(receiver.sendPort);
- receiver.listen((SendPort replyTo) {
+ receiver.listen((replyTo) {
Mint mint = new Mint();
- replyTo.send(mint.port);
+ (replyTo as SendPort).send(mint.port);
});
}
@@ -147,8 +147,8 @@
void makeMint(handleMint(MintWrapper mint)) {
ReceivePort reply = new ReceivePort();
- reply.first.then((SendPort mint) {
- handleMint(new MintWrapper(mint));
+ reply.first.then((mint) {
+ handleMint(new MintWrapper(mint as SendPort));
});
_port.send(reply.sendPort);
}
diff --git a/tests/kernel/kernel.status b/tests/kernel/kernel.status
index 3f36f5d..095c6fa 100644
--- a/tests/kernel/kernel.status
+++ b/tests/kernel/kernel.status
@@ -7,6 +7,7 @@
unsorted/invocation_errors_test: Pass
unsorted/loop_test: Skip
unsorted/nsm_dispatcher_test: Skip # The test uses Symbol without MirrorsUsed
+unsorted/simple_literal_test: Crash # Issue 31762
unsorted/super_initializer_test: Skip
unsorted/super_mixin_test: CompileTimeError
@@ -24,3 +25,8 @@
[ $runtime == dart_precompiled && $minified ]
unsorted/symbol_literal_test: Skip # Expects unobfuscated Symbol.toString.
+
+[ $runtime == dart_precompiled || $runtime == vm || ($compiler == dart2js && $dart2js_with_kernel) ]
+unsorted/loop_test: CompileTimeError # Large integer literal
+unsorted/simple_literal_test: CompileTimeError # Large integer literal
+
diff --git a/tests/language/language.status b/tests/language/language.status
index fcc41e1..dfa920b 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -459,7 +459,19 @@
vm/causal_async_exception_stack_test: SkipByDesign # Causal async stacks are not supported in product mode
[ $runtime == dart_precompiled || $runtime == vm ]
+arithmetic_test: CompileTimeError # Large integer literal
+bit_operations_test: CompileTimeError # Large integer literal
+deopt_inlined_function_lazy_test: CompileTimeError # Large integer literal
+guess_cid_test: CompileTimeError # Large integer literal
+identical_closure2_test: CompileTimeError # Large integer literal
+int2_test: CompileTimeError # Large integer literal
+mint_compares_test: CompileTimeError # Large integer literal
+number_identity_test: CompileTimeError # Large integer literal
+regress_24283_test: RuntimeError # Large integers
vm/load_to_load_unaligned_forwarding_vm_test: Pass, Crash # Unaligned offset. Issue 22151
+vm/regress_14903_test: CompileTimeError # Large integer literal
+vm/regress_23117_vm_test: RuntimeError # Large integers
+vm/regress_23238_test: RuntimeError # Large integers
vm/unaligned_float_access_literal_index_test: Pass, Crash # Unaligned offset. Issue 22151
[ $hot_reload || $hot_reload_rollback ]
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index b6b3e96..a2d26dd 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -7,8 +7,21 @@
# VM specific tests that should not be run by dart2js.
[ $compiler == dart2js ]
+arithmetic_test: Crash # Issue 31762
assertion_initializer_test: Crash
+bit_operations_test/01: Crash # Issue 31762
+bit_operations_test/02: Crash # Issue 31762
+bit_operations_test/03: Crash # Issue 31762
+bit_operations_test/04: Crash # Issue 31762
+bit_operations_test/none: Crash # Issue 31762
+deopt_inlined_function_lazy_test: Crash # Issue 31762
+deopt_smi_op_test: RuntimeError # Issue 31762
generalized_void_syntax_test: CompileTimeError
+guess_cid_test: Crash # Issue 31762
+identical_closure2_test: Crash # Issue 31762
+int2_test: Crash # Issue 31762
+mint_compares_test: Crash # Issue 31762
+number_identity_test: Crash # Issue 31762
vm/*: Skip # Issue 12699
[ $arch == ia32 && $compiler == dart2js && $runtime == d8 ]
@@ -486,6 +499,17 @@
[ $compiler == dart2js && !$checked && $enable_asserts ]
bool_check_test: RuntimeError # Issue 29647
+[ $compiler == dart2js && $dart2js_with_kernel ]
+arithmetic_test: CompileTimeError # Large integer literal
+bit_operations_test: CompileTimeError # Large integer literal
+deopt_inlined_function_lazy_test: CompileTimeError # Large integer literal
+guess_cid_test: CompileTimeError # Large integer literal
+identical_closure2_test: CompileTimeError # Large integer literal
+int2_test: CompileTimeError # Large integer literal
+mint_compares_test: CompileTimeError # Large integer literal
+number_identity_test: CompileTimeError # Large integer literal
+vm/regress_14903_test: CompileTimeError # Large integer literal
+
[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
arithmetic_canonicalization_test: RuntimeError
assertion_initializer_const_error2_test/none: CompileTimeError
diff --git a/tests/language_2/hello_dart_test.dart b/tests/language_2/hello_dart_test.dart
index be260af..0af0005 100644
--- a/tests/language_2/hello_dart_test.dart
+++ b/tests/language_2/hello_dart_test.dart
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
// Simple test program invoked with an option to eagerly
// compile all code that is loaded in the isolate.
-// VMOptions=--compile_all --error-on-bad-type --error-on-bad-override
+// VMOptions=--compile_all --error-on-bad-type
class HelloDartTest {
static testMain() {
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index e93ae0d..1c6d1db 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -9,8 +9,6 @@
abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError # Issue #30568
assertion_initializer_const_function_test/01: MissingCompileTimeError
async_return_types_test/nestedFuture: MissingCompileTimeError
-await_test: Crash # Issue 31540
-bad_initializer1_negative_test: CompileTimeError # Issue 14529
bad_initializer2_negative_test: Fail # Issue 14880
black_listed_test/none: Fail # Issue 14228
built_in_identifier_prefix_test: CompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index ec5c30a..3268b3d 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -20,6 +20,7 @@
argument_assignability_function_typed_test/03: RuntimeError
argument_assignability_function_typed_test/04: RuntimeError
argument_assignability_function_typed_test/05: RuntimeError
+arithmetic_test: Crash # Issue 31762
assign_static_type_test/01: MissingCompileTimeError
assign_static_type_test/02: MissingCompileTimeError
assign_static_type_test/03: MissingCompileTimeError
@@ -133,6 +134,7 @@
default_factory2_test/01: MissingCompileTimeError
default_factory_test/01: MissingCompileTimeError
deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
+deopt_smi_op_test: RuntimeError # Issue 31762
dynamic_field_test/01: MissingCompileTimeError
dynamic_field_test/02: MissingCompileTimeError
dynamic_prefix_core_test/01: MissingCompileTimeError
@@ -254,6 +256,7 @@
getter_no_setter_test/03: MissingCompileTimeError
getter_override_test/03: MissingCompileTimeError
getters_setters2_test/02: MissingCompileTimeError
+guess_cid_test: RuntimeError # Issue 31762
identical_const_test/01: MissingCompileTimeError
identical_const_test/02: MissingCompileTimeError
identical_const_test/03: MissingCompileTimeError
@@ -415,6 +418,7 @@
method_override7_test/03: MissingCompileTimeError
method_override8_test/03: MissingCompileTimeError
method_override_test: RuntimeError
+mint_compares_test: Crash # Issue 31762
mixin_illegal_constructor_test/13: MissingCompileTimeError
mixin_illegal_constructor_test/14: MissingCompileTimeError
mixin_illegal_constructor_test/15: MissingCompileTimeError
@@ -1582,6 +1586,7 @@
function_subtype_inline2_test: RuntimeError
[ $compiler == dart2js && $dart2js_with_kernel ]
+arithmetic_test: Pass # Issue 31762
bug31436_test: RuntimeError
built_in_identifier_type_annotation_test/22: Crash # Issue 28815
built_in_identifier_type_annotation_test/52: MissingCompileTimeError # Issue 28815
@@ -1629,6 +1634,7 @@
invalid_cast_test/10: MissingCompileTimeError
invalid_cast_test/11: MissingCompileTimeError
library_env_test/has_no_mirror_support: Pass
+mint_compares_test: Pass # Issue 31762
object_has_no_call_method_test/02: MissingCompileTimeError
object_has_no_call_method_test/05: MissingCompileTimeError
object_has_no_call_method_test/08: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 8845ee6..db124f7 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -11,13 +11,13 @@
accessor_conflict_import_prefixed_test: CompileTimeError # Issue 25626
accessor_conflict_import_test: CompileTimeError # Issue 25626
additional_interface_adds_optional_args_test: CompileTimeError # Issue #30568
+arithmetic_test: RuntimeError # Issue 31763
assertion_initializer_const_error2_test/*: Crash # Issue #27809
assertion_initializer_const_error2_test/cc10: Pass # Issue #31319
assertion_initializer_const_error2_test/cc11: Pass # Issue #31319
assertion_initializer_const_error2_test/none: Pass
assertion_initializer_const_function_test/01: Crash
assertion_initializer_test: CompileTimeError
-await_test: Crash # Issue 31540
black_listed_test/none: Fail # Issue 14228
bug31436_test: CompileTimeError
built_in_identifier_prefix_test: CompileTimeError
@@ -65,6 +65,7 @@
interface_test/00: MissingCompileTimeError
internal_library_test/01: MissingCompileTimeError # Issue 29920
method_override_test: CompileTimeError # Negative test
+mint_compares_test: RuntimeError # Issue 31763
mixin_super_2_test/01: MissingCompileTimeError
mixin_super_2_test/03: MissingCompileTimeError
mixin_supertype_subclass_test/02: MissingCompileTimeError
@@ -130,6 +131,7 @@
additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
+arithmetic_test: RuntimeError # Issue 31763
assert_message_test: CompileTimeError
assertion_initializer_const_error2_test/cc01: MissingCompileTimeError
assertion_initializer_const_error2_test/cc02: MissingCompileTimeError
@@ -253,7 +255,8 @@
cyclic_type_variable_test/02: MissingCompileTimeError
cyclic_type_variable_test/03: MissingCompileTimeError
cyclic_type_variable_test/04: MissingCompileTimeError
-cyclic_typedef_test/13: MissingCompileTimeError
+cyclic_typedef_test/10: Crash
+cyclic_typedef_test/11: Crash
default_factory2_test/01: MissingCompileTimeError
default_factory_test/01: MissingCompileTimeError
deferred_constraints_constants_test/default_argument2: MissingCompileTimeError
@@ -305,7 +308,6 @@
final_attempt_reinitialization_test/02: Crash
final_syntax_test/09: Crash
function_propagation_test: CompileTimeError
-function_subtype_bound_closure7_test: Crash
function_type/function_type10_test: CompileTimeError
function_type/function_type11_test: CompileTimeError
function_type/function_type14_test: CompileTimeError
@@ -376,12 +378,9 @@
function_type_parameter_negative_test: Fail
generalized_void_syntax_test: CompileTimeError
generic_function_bounds_test: CompileTimeError
-generic_function_dcall_test: Crash
generic_methods_bounds_test/01: MissingCompileTimeError
generic_methods_generic_function_result_test/01: MissingCompileTimeError
generic_methods_recursive_bound_test/02: MissingCompileTimeError
-generic_methods_tearoff_specialization_test: Crash
-generic_methods_unused_parameter_test: Crash
generic_no_such_method_dispatcher_simple_test: CompileTimeError # Warning: Superclass has no method named 'foo'.
generic_no_such_method_dispatcher_test: CompileTimeError # Issue 31533
getter_override2_test/02: MissingCompileTimeError
@@ -398,9 +397,7 @@
initializing_formal_type_annotation_test/01: MissingCompileTimeError
initializing_formal_type_annotation_test/02: MissingCompileTimeError
instance_call_wrong_argument_count_negative_test: Fail
-instantiate_tearoff_after_contravariance_check_test: Crash
-instantiate_tearoff_of_call_test: Crash
-instantiate_tearoff_test: Crash
+instantiate_tearoff_of_call_test: CompileTimeError
invocation_mirror_test: CompileTimeError # Issue 31402 Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Invocation'.
issue13179_test: CompileTimeError # Issue 31537
issue18628_2_test/01: MissingCompileTimeError
@@ -433,6 +430,8 @@
method_override8_test/00: MissingCompileTimeError
method_override8_test/01: MissingCompileTimeError
method_override8_test/03: MissingCompileTimeError
+method_override_test: CompileTimeError # Issue 31616
+mint_compares_test: RuntimeError # Issue 31763
mixin_black_listed_test/02: MissingCompileTimeError
mixin_forwarding_constructor4_test/01: MissingCompileTimeError
mixin_forwarding_constructor4_test/02: MissingCompileTimeError
@@ -586,19 +585,11 @@
override_inheritance_field_test/48: MissingCompileTimeError
override_inheritance_field_test/53: MissingCompileTimeError
override_inheritance_field_test/54: MissingCompileTimeError
-override_inheritance_generic_test/04: MissingCompileTimeError
-override_inheritance_generic_test/06: MissingCompileTimeError
-override_inheritance_generic_test/07: MissingCompileTimeError
-override_inheritance_generic_test/08: MissingCompileTimeError
-override_inheritance_generic_test/09: MissingCompileTimeError
-override_inheritance_generic_test/10: MissingCompileTimeError
+override_inheritance_generic_test/02: CompileTimeError # Issue 31616
override_inheritance_method_test/17: CompileTimeError
override_inheritance_method_test/18: CompileTimeError
-override_inheritance_method_test/27: MissingCompileTimeError
-override_inheritance_method_test/30: MissingCompileTimeError
-override_inheritance_method_test/31: MissingCompileTimeError
-override_inheritance_method_test/32: MissingCompileTimeError
-override_inheritance_method_test/33: MissingCompileTimeError
+override_inheritance_method_test/28: CompileTimeError # Issue 31616
+override_inheritance_method_test/29: CompileTimeError # Issue 31616
override_inheritance_mixed_test/01: MissingCompileTimeError
override_inheritance_mixed_test/02: MissingCompileTimeError
override_inheritance_mixed_test/03: MissingCompileTimeError
@@ -621,7 +612,7 @@
redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
redirecting_factory_malbounded_test/01: MissingCompileTimeError
regress_22976_test/01: CompileTimeError
-regress_23089_test: MissingCompileTimeError
+regress_23089_test: Crash
regress_23408_test: CompileTimeError # Issue 31533
regress_25550_test: CompileTimeError
regress_29025_test: CompileTimeError
@@ -636,6 +627,8 @@
setter_override_test/02: MissingCompileTimeError
setter_override_test/03: MissingCompileTimeError
string_interpolate_test: CompileTimeError # Issue 31533
+string_split_test: CompileTimeError # Issue 31616
+string_supertype_checked_test: CompileTimeError # Issue 31616
super_bound_closure_test/none: CompileTimeError # Issue 31533
super_call4_test: CompileTimeError
super_from_constructor_test: Crash
@@ -712,6 +705,7 @@
first_class_types_test: RuntimeError, OK # Strong mode reifies inferred type argument.
forwarding_stub_tearoff_generic_test: RuntimeError
fuzzy_arrows_test/03: RuntimeError # Issue 29630
+generic_methods_overriding_test/03: MissingCompileTimeError # Issue 29920
getter_closure_execution_order_test: RuntimeError # Issue 29920
implicit_downcast_during_compound_assignment_test: RuntimeError
implicit_downcast_during_indexed_compound_assignment_test: RuntimeError
@@ -787,9 +781,13 @@
function_type_alias_test: RuntimeError # Expect.isTrue(false) fails.
generic_closure_test/01: RuntimeError # ReferenceError: TToT is not defined
generic_closure_test/none: RuntimeError # ReferenceError: TToT is not defined
+generic_function_dcall_test: RuntimeError
generic_list_checked_test: RuntimeError # Expect.throws fails: Did not throw
+generic_methods_tearoff_specialization_test: RuntimeError
generic_methods_unused_parameter_test: RuntimeError # Expect.isTrue(false) fails.
generic_test: RuntimeError # ReferenceError: BOfT is not defined
+instantiate_tearoff_after_contravariance_check_test: RuntimeError
+instantiate_tearoff_test: RuntimeError
library_env_test/has_io_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
library_env_test/has_mirror_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
library_env_test/has_no_html_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
@@ -947,7 +945,6 @@
generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 29920
generic_list_checked_test: CompileTimeError
generic_methods_overriding_test/01: MissingCompileTimeError # Issue 29920
-generic_methods_overriding_test/03: MissingCompileTimeError # Issue 29920
generic_tearoff_test: CompileTimeError
int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
internal_library_test/02: Crash
diff --git a/tests/language_2/language_2_flutter.status b/tests/language_2/language_2_flutter.status
index 70037b4..2953d2c 100644
--- a/tests/language_2/language_2_flutter.status
+++ b/tests/language_2/language_2_flutter.status
@@ -4,8 +4,9 @@
# Sections in this file should contain "$runtime == flutter".
# What tests does this comment apply to? Please add it to each test's line
# or file an issue an put it there, and add the issue to the relevant tests:
-# flutter uses --error_on_bad_type, --error_on_bad_override
-# and --await_is_keyword so the following tests fail with a Compilation Error
+# flutter uses --error_on_bad_type and --await_is_keyword so the following tests
+# fail with a Compilation Error.
+# Note that --error_on_bad_override is ignored in strong mode.
[ $runtime == flutter ]
async_await_syntax_test/a05c: CompileTimeError
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index f6b4071..ab95ff9 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -366,7 +366,8 @@
cyclic_type_variable_test/02: MissingCompileTimeError
cyclic_type_variable_test/03: MissingCompileTimeError
cyclic_type_variable_test/04: MissingCompileTimeError
-cyclic_typedef_test/13: MissingCompileTimeError
+cyclic_typedef_test/10: Crash
+cyclic_typedef_test/11: Crash
default_factory2_test/01: MissingCompileTimeError
default_factory_test/01: MissingCompileTimeError
deferred_call_empty_before_load_test: RuntimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
@@ -647,7 +648,6 @@
generic_list_checked_test: CompileTimeError # Issue 31402 (Variable declaration)
generic_methods_bounds_test/01: MissingCompileTimeError
generic_methods_overriding_test/01: MissingCompileTimeError
-generic_methods_overriding_test/03: MissingCompileTimeError
generic_methods_recursive_bound_test/02: MissingCompileTimeError
generic_methods_tearoff_specialization_test: CompileTimeError # Issue 31402 (Variable declaration)
generic_methods_tearoff_specialization_test: RuntimeError
@@ -683,8 +683,6 @@
instantiate_tearoff_after_contravariance_check_test: CompileTimeError
instantiate_tearoff_of_call_test: CompileTimeError
instantiate_tearoff_test: CompileTimeError
-int64_literal_test/03: MissingCompileTimeError # http://dartbug.com/31479
-int64_literal_test/30: MissingCompileTimeError # http://dartbug.com/31479
interface_test/00: MissingCompileTimeError
invocation_mirror_test: CompileTimeError # Issue 31402 (Invocation arguments)
is_malformed_type_test/95: MissingCompileTimeError
@@ -817,6 +815,7 @@
method_override6_test/03: MissingCompileTimeError
method_override7_test/03: MissingCompileTimeError
method_override8_test/03: MissingCompileTimeError
+method_override_test: CompileTimeError # Issue 31616
mixin_illegal_constructor_test/13: MissingCompileTimeError
mixin_illegal_constructor_test/14: MissingCompileTimeError
mixin_illegal_constructor_test/15: MissingCompileTimeError
@@ -955,12 +954,7 @@
override_inheritance_field_test/48: MissingCompileTimeError
override_inheritance_field_test/53: MissingCompileTimeError
override_inheritance_field_test/54: MissingCompileTimeError
-override_inheritance_generic_test/04: MissingCompileTimeError
-override_inheritance_generic_test/06: MissingCompileTimeError
-override_inheritance_generic_test/07: MissingCompileTimeError
-override_inheritance_generic_test/08: MissingCompileTimeError
-override_inheritance_generic_test/09: MissingCompileTimeError
-override_inheritance_generic_test/10: MissingCompileTimeError
+override_inheritance_generic_test/02: CompileTimeError # Issue 31616
override_inheritance_method_test/04: MissingCompileTimeError
override_inheritance_method_test/05: MissingCompileTimeError
override_inheritance_method_test/06: MissingCompileTimeError
@@ -971,11 +965,8 @@
override_inheritance_method_test/19: MissingCompileTimeError
override_inheritance_method_test/20: MissingCompileTimeError
override_inheritance_method_test/21: MissingCompileTimeError
-override_inheritance_method_test/27: MissingCompileTimeError
-override_inheritance_method_test/30: MissingCompileTimeError
-override_inheritance_method_test/31: MissingCompileTimeError
-override_inheritance_method_test/32: MissingCompileTimeError
-override_inheritance_method_test/33: MissingCompileTimeError
+override_inheritance_method_test/28: CompileTimeError # Issue 31616
+override_inheritance_method_test/29: CompileTimeError # Issue 31616
override_inheritance_mixed_test/06: MissingCompileTimeError
override_inheritance_mixed_test/07: MissingCompileTimeError
override_inheritance_mixed_test/09: MissingCompileTimeError
@@ -1016,7 +1007,7 @@
regress_22443_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
regress_22936_test: MissingCompileTimeError
regress_22976_test/01: CompileTimeError # Issue 31402 (Variable declaration)
-regress_23089_test: MissingCompileTimeError
+regress_23089_test: Crash
regress_23408_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
regress_23408_test: RuntimeError
regress_25550_test: CompileTimeError # Issue 31402 (Variable declaration)
@@ -1043,6 +1034,8 @@
static_setter_get_test/01: MissingCompileTimeError
string_interpolate_test: CompileTimeError # Issue 31533
string_interpolation_and_buffer_test: RuntimeError # Issue 31402 (Return and yield statements)
+string_split_test: CompileTimeError # Issue 31616
+string_supertype_checked_test: CompileTimeError # Issue 31616
super_bound_closure_test/none: CompileTimeError # Issue 31533
super_call4_test/01: MissingCompileTimeError
super_call4_test/02: MissingCompileTimeError
@@ -1194,8 +1187,6 @@
duplicate_implements_test/03: MissingCompileTimeError # Please triage.
duplicate_implements_test/04: MissingCompileTimeError # Please triage.
generic_methods_generic_function_result_test/01: MissingCompileTimeError # Please triage.
-int64_literal_test/03: Pass
-int64_literal_test/30: Pass
issue23244_test: RuntimeError # Please triage.
least_upper_bound_expansive_test/none: RuntimeError # Please triage.
mixin_black_listed_test/02: MissingCompileTimeError # Please triage.
@@ -1583,7 +1574,8 @@
cyclic_type_variable_test/02: MissingCompileTimeError
cyclic_type_variable_test/03: MissingCompileTimeError
cyclic_type_variable_test/04: MissingCompileTimeError
-cyclic_typedef_test/13: MissingCompileTimeError
+cyclic_typedef_test/10: Crash
+cyclic_typedef_test/11: Crash
deep_nesting1_negative_test: Skip # Issue 31158
deep_nesting2_negative_test: Skip # Issue 31158
default_factory2_test/01: MissingCompileTimeError
@@ -1881,7 +1873,6 @@
generic_methods_optional_parameters_test: Pass
generic_methods_optional_parameters_test: RuntimeError
generic_methods_overriding_test/01: MissingCompileTimeError
-generic_methods_overriding_test/03: MissingCompileTimeError
generic_methods_recursive_bound_test/02: Crash
generic_methods_recursive_bound_test/02: MissingCompileTimeError
generic_methods_recursive_bound_test/03: Pass
@@ -2102,6 +2093,7 @@
method_override6_test/none: Pass
method_override7_test/03: MissingCompileTimeError
method_override8_test/03: MissingCompileTimeError
+method_override_test: CompileTimeError # Issue 31616
mixin_black_listed_test/02: MissingCompileTimeError
mixin_illegal_constructor_test/13: MissingCompileTimeError
mixin_illegal_constructor_test/14: MissingCompileTimeError
@@ -2253,12 +2245,7 @@
override_inheritance_field_test/48: MissingCompileTimeError
override_inheritance_field_test/53: MissingCompileTimeError
override_inheritance_field_test/54: MissingCompileTimeError
-override_inheritance_generic_test/04: MissingCompileTimeError
-override_inheritance_generic_test/06: MissingCompileTimeError
-override_inheritance_generic_test/07: MissingCompileTimeError
-override_inheritance_generic_test/08: MissingCompileTimeError
-override_inheritance_generic_test/09: MissingCompileTimeError
-override_inheritance_generic_test/10: MissingCompileTimeError
+override_inheritance_generic_test/02: CompileTimeError # Issue 31616
override_inheritance_method_test/04: MissingCompileTimeError
override_inheritance_method_test/05: MissingCompileTimeError
override_inheritance_method_test/06: MissingCompileTimeError
@@ -2269,11 +2256,8 @@
override_inheritance_method_test/19: MissingCompileTimeError
override_inheritance_method_test/20: MissingCompileTimeError
override_inheritance_method_test/21: MissingCompileTimeError
-override_inheritance_method_test/27: MissingCompileTimeError
-override_inheritance_method_test/30: MissingCompileTimeError
-override_inheritance_method_test/31: MissingCompileTimeError
-override_inheritance_method_test/32: MissingCompileTimeError
-override_inheritance_method_test/33: MissingCompileTimeError
+override_inheritance_method_test/28: CompileTimeError # Issue 31616
+override_inheritance_method_test/29: CompileTimeError # Issue 31616
override_inheritance_mixed_test/06: MissingCompileTimeError
override_inheritance_mixed_test/07: MissingCompileTimeError
override_inheritance_mixed_test/08: MissingCompileTimeError
@@ -2319,7 +2303,7 @@
regress_22443_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
regress_22936_test: MissingCompileTimeError
regress_22976_test/01: CompileTimeError # Issue 31402 (Variable declaration)
-regress_23089_test: MissingCompileTimeError
+regress_23089_test: Crash
regress_23408_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
regress_23408_test: RuntimeError
regress_25550_test: CompileTimeError # Issue 31402 (Variable declaration)
@@ -2351,6 +2335,8 @@
static_setter_get_test/01: MissingCompileTimeError
string_interpolate_test: CompileTimeError # Issue 31533
string_interpolation_and_buffer_test: RuntimeError # Issue 31402 (Return and yield statements)
+string_split_test: CompileTimeError # Issue 31616
+string_supertype_checked_test: CompileTimeError # Issue 31616
super_bound_closure_test/none: CompileTimeError # Issue 31533
super_call4_test: CompileTimeError
super_call4_test: RuntimeError
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index ffdb31d..627c0be 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -27,9 +27,12 @@
[ $compiler == dart2js ]
async/schedule_microtask6_test: RuntimeError # global error handling is not supported. Issue 5958
convert/base64_test/01: Fail, OK # Uses bit-wise operations to detect invalid values. Some large invalid values accepted by dart2js.
+convert/base64_test/01: Crash # Issue 31762
convert/chunked_conversion_utf88_test: Slow, Pass
+convert/utf82_test: Crash # Issue 31762
convert/utf85_test: Slow, Pass
developer/timeline_test: Skip # Not supported
+math/double_pow_test: Crash # Issue 31762
math/double_pow_test: RuntimeError
math/low_test: RuntimeError
mirrors/class_declarations_test/none: RuntimeError # Issue 13440
@@ -121,6 +124,7 @@
mirrors/typevariable_mirror_metadata_test: RuntimeError # Issue 10905
mirrors/variable_is_const_test/none: RuntimeError # Issue 14671
profiler/metrics_num_test: Skip # Because of a int / double type test.
+typed_data/int32x4_bigint_test: Crash # Issue 31762
typed_data/int32x4_bigint_test: RuntimeError # Issue 1533
typed_data/int64_list_load_store_test: RuntimeError # Issue 10275
typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 10275
@@ -471,10 +475,17 @@
[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
async/timer_not_available_test: Fail, OK
+convert/json_utf8_chunk_test: RuntimeError # Large integers
js/*: Skip
mirrors/deferred_type_test: CompileTimeError, OK # Don't have a multitest marker for dynamic compile time errors.
mirrors/native_class_test: Fail, OK # This test is meant to run in a browser.
+[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm || ($compiler == dart2js && $dart2js_with_kernel) ]
+convert/base64_test/01: CompileTimeError # Large integer literal
+convert/utf82_test: CompileTimeError # Large integer literal
+math/double_pow_test: CompileTimeError # Large integer literal
+typed_data/int32x4_bigint_test: CompileTimeError # Large integer literal
+
[ $runtime == safari || $runtime == safarimobilesim ]
convert/json_test: Fail # https://bugs.webkit.org/show_bug.cgi?id=134920
typed_data/float32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index 7b6db9d..c9203ed 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -35,6 +35,7 @@
async/async_await_sync_completer_test: RuntimeError
async/future_or_only_in_async_test/00: MissingCompileTimeError
async/future_or_strong_test: RuntimeError
+async/future_value_chain4_test: CompileTimeError # Issue 31616
async/slow_consumer2_test: CompileTimeError # Issue 31402 (Invocation arguments)
async/slow_consumer3_test: CompileTimeError # Issue 31402 (Invocation arguments)
async/slow_consumer_test: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -52,12 +53,8 @@
html/*: SkipByDesign # dart:html not supported on VM.
isolate/compile_time_error_test/01: MissingCompileTimeError
isolate/count_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/cross_isolate_message_test: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/deferred_in_isolate2_test: Skip # Times out. Deferred loading kernel issue 28335.
isolate/deferred_in_isolate_test: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/error_at_spawnuri_test: RuntimeError # Issue 31402 (Return and yield statements)
-isolate/error_exit_at_spawnuri_test: RuntimeError # Issue 31402 (Return and yield statements)
-isolate/exit_at_spawnuri_test: RuntimeError # Issue 31402 (Return and yield statements)
isolate/handle_error2_test: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/handle_error3_test: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/illegal_msg_function_test: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -65,10 +62,8 @@
isolate/isolate_current_test: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/issue_21398_parent_isolate1_test: RuntimeError # Issue 31402 (List literal)
isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/issue_21398_parent_isolate_test: RuntimeError # Issue 31402 (Return and yield statements)
isolate/kill_test: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/mandel_isolate_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/message2_test: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/message3_test/byteBuffer: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/message3_test/constInstance: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/message3_test/constList: CompileTimeError # Issue 31402 (Invocation arguments)
@@ -79,21 +74,11 @@
isolate/message3_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/message_test: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/mint_maker_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/nested_spawn2_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/nested_spawn_test: RuntimeError # Issue 31402 (Invocation arguments)
isolate/ping_pause_test: Pass, Timeout
-isolate/raw_port_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/request_reply_test: RuntimeError # Issue 31402 (Invocation arguments)
-isolate/spawn_function_custom_class_test: RuntimeError # Issue 31402 (Invocation arguments)
-isolate/spawn_function_test: RuntimeError # Issue 31402 (Invocation arguments)
-isolate/spawn_uri_exported_main_test: RuntimeError # Issue 31402 (Return and yield statements)
-isolate/spawn_uri_multi_test/none: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/spawn_uri_nested_vm_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/spawn_uri_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/spawn_uri_vm_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/static_function_test: RuntimeError # Issue 31402 (Invocation arguments)
+isolate/spawn_function_custom_class_test: Pass, Timeout
+isolate/spawn_uri_nested_vm_test: Pass, Timeout
+isolate/static_function_test: CompileTimeError # Issue 31402 (Invocation arguments)
isolate/typed_message_test: CompileTimeError # Issue 31402 (Invocation arguments)
-isolate/unresolved_ports_test: CompileTimeError # Issue 31402 (Invocation arguments)
js/datetime_roundtrip_test: CompileTimeError
js/null_test: CompileTimeError
js/prototype_access_test: CompileTimeError
@@ -283,17 +268,14 @@
async/zone_run_unary_test: RuntimeError
convert/json_toEncodable_reviver_test: CompileTimeError
isolate/count_test: Timeout
-isolate/cross_isolate_message_test: RuntimeError
isolate/illegal_msg_function_test: RuntimeError
isolate/illegal_msg_mirror_test: RuntimeError
isolate/isolate_current_test: RuntimeError
isolate/isolate_import_test/01: MissingCompileTimeError
isolate/issue_22778_test: Crash
-isolate/issue_24243_parent_isolate_test: RuntimeError
isolate/kill_self_synchronously_test: RuntimeError
isolate/kill_test: RuntimeError
isolate/mandel_isolate_test: RuntimeError
-isolate/message2_test: RuntimeError
isolate/message3_test/byteBuffer: RuntimeError
isolate/message3_test/constInstance: RuntimeError
isolate/message3_test/constList: RuntimeError
@@ -304,20 +286,11 @@
isolate/message3_test/none: RuntimeError
isolate/message_test: RuntimeError
isolate/mint_maker_test: RuntimeError
-isolate/nested_spawn2_test: RuntimeError
-isolate/nested_spawn_test: Timeout
isolate/ping_pause_test: RuntimeError
-isolate/raw_port_test: RuntimeError
-isolate/request_reply_test: Timeout
-isolate/spawn_function_test: Timeout
-isolate/spawn_uri_multi_test/none: RuntimeError
-isolate/spawn_uri_nested_vm_test: RuntimeError
-isolate/spawn_uri_test: RuntimeError
-isolate/spawn_uri_vm_test: RuntimeError
+isolate/request_reply_test: Pass, Timeout
isolate/stacktrace_message_test: RuntimeError
-isolate/static_function_test: Timeout
isolate/typed_message_test: RuntimeError
-isolate/unresolved_ports_test: RuntimeError
+isolate/unresolved_ports_test: Pass, Timeout
mirrors/class_mirror_type_variables_test: RuntimeError
mirrors/closures_test: RuntimeError
mirrors/constructors_test: RuntimeError
@@ -396,6 +369,7 @@
async/future_or_strong_test: RuntimeError
async/future_test/01: RuntimeError
async/future_test/none: RuntimeError
+async/future_value_chain4_test: CompileTimeError # Issue 31616
async/slow_consumer2_test: CompileTimeError # Issue 31402 (Invocation arguments)
async/slow_consumer3_test: CompileTimeError # Issue 31402 (Invocation arguments)
async/slow_consumer_test: CompileTimeError # Issue 31402 (Invocation arguments)
diff --git a/tools/VERSION b/tools/VERSION
index 18ad238..d5d15b0 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 0
PATCH 0
-PRERELEASE 15
+PRERELEASE 16
PRERELEASE_PATCH 0
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 3b03d8c..b55c6ef 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -217,7 +217,6 @@
},
{
"builders": [
- "vm-asan-linux-release-ia32",
"vm-asan-linux-release-x64"
],
"meta": {
@@ -350,7 +349,7 @@
"exclude_tests": ["language_2","corelib_2","lib_2","standalone_2"]
},
{
- "name": "checked vm tests",
+ "name": "strong vm tests",
"arguments": ["--runtime=vm","--compiler=dartk","--strong"],
"tests": ["language_2","corelib_2","lib_2","standalone_2"]
}
diff --git a/tools/buildtools/update.py b/tools/buildtools/update.py
index 43560c0..8658059 100755
--- a/tools/buildtools/update.py
+++ b/tools/buildtools/update.py
@@ -14,7 +14,6 @@
DART_ROOT = os.path.abspath(os.path.join(THIS_DIR, '..', '..'))
BUILDTOOLS = os.path.join(DART_ROOT, 'buildtools')
TOOLS_BUILDTOOLS = os.path.join(DART_ROOT, 'tools', 'buildtools')
-TOOLCHAIN = os.path.join(BUILDTOOLS, 'toolchain')
sys.path.insert(0, os.path.join(DART_ROOT, 'tools'))
import find_depot_tools
@@ -24,7 +23,7 @@
def Update():
path = os.path.join(BUILDTOOLS, 'update.sh')
- command = ['/bin/bash', path, '--toolchain', '--gn']
+ command = ['/bin/bash', path, '--clang', '--gn']
return subprocess.call(command, cwd=DART_ROOT)
@@ -74,17 +73,19 @@
def CopyClangFormat():
if sys.platform == 'darwin':
platform = 'darwin'
- subdir = 'mac'
+ tools = 'mac'
+ toolchain = 'mac-x64'
elif sys.platform.startswith('linux'):
platform = 'linux'
- subdir = 'linux64'
+ tools = 'linux64'
+ toolchain = 'linux-x64'
else:
print 'Unknown platform: ' + sys.platform
return 1
clang_format = os.path.join(
- TOOLCHAIN, 'clang+llvm-x86_64-' + platform, 'bin', 'clang-format')
- dest = os.path.join(BUILDTOOLS, subdir, 'clang-format')
+ BUILDTOOLS, toolchain, 'clang', 'bin', 'clang-format')
+ dest = os.path.join(BUILDTOOLS, tools, 'clang-format')
shutil.copy2(clang_format, dest)
return 0
diff --git a/tools/run_dart.py b/tools/run_dart.py
old mode 100644
new mode 100755
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 73470e5..aa61803 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -124,7 +124,10 @@
}
List<String> computeCompilerArguments(
- List<String> vmOptions, List<String> sharedOptions, List<String> args) {
+ List<String> vmOptions,
+ List<String> sharedOptions,
+ List<String> dart2jsOptions,
+ List<String> args) {
return sharedOptions.toList()..addAll(args);
}
@@ -341,7 +344,8 @@
allCommands, artifact.filename, artifact.mimeType);
}
- List<String> computeCompilerArguments(vmOptions, sharedOptions, args) {
+ List<String> computeCompilerArguments(
+ vmOptions, sharedOptions, dart2jsOptions, args) {
// The result will be passed as an input to [extractArguments]
// (i.e. the arguments to the [PipelineCommand]).
return <String>[]..addAll(vmOptions)..addAll(sharedOptions)..addAll(args);
@@ -433,6 +437,17 @@
return multiplier;
}
+ List<String> computeCompilerArguments(
+ List<String> vmOptions,
+ List<String> sharedOptions,
+ List<String> dart2jsOptions,
+ List<String> args) {
+ return <String>[]
+ ..addAll(sharedOptions)
+ ..addAll(dart2jsOptions)
+ ..addAll(args);
+ }
+
CommandArtifact computeCompilationArtifact(String tempDir,
List<String> arguments, Map<String, String> environmentOverrides) {
var compilerArguments = arguments.toList()
@@ -470,7 +485,10 @@
}
List<String> computeCompilerArguments(
- List<String> vmOptions, List<String> sharedOptions, List<String> args) {
+ List<String> vmOptions,
+ List<String> sharedOptions,
+ List<String> dart2jsOptions,
+ List<String> args) {
var result = sharedOptions.toList();
// The file being compiled is the last argument.
@@ -554,7 +572,10 @@
}
List<String> computeCompilerArguments(
- List<String> vmOptions, List<String> sharedOptions, List<String> args) {
+ List<String> vmOptions,
+ List<String> sharedOptions,
+ List<String> dart2jsOptions,
+ List<String> args) {
var result = sharedOptions.toList();
// The file being compiled is the last argument.
@@ -571,12 +592,18 @@
.absolute
.toNativePath();
+ var summaryInputDir = new Path(_configuration.buildDirectory)
+ .append("/gen/utils/dartdevc/pkg")
+ .absolute
+ .toNativePath();
+
args.addAll([
"--dart-sdk-summary",
sdkSummary,
"-o",
outputFile,
inputFile,
+ "--summary-input-dir=$summaryInputDir",
]);
// Link to the summaries for the available packages, so that they don't
@@ -822,7 +849,7 @@
}
List<String> computeCompilerArguments(
- vmOptions, sharedOptions, originalArguments) {
+ vmOptions, sharedOptions, dart2jsOptions, originalArguments) {
List<String> args = [];
if (_isChecked) {
args.add('--enable_asserts');
@@ -898,7 +925,7 @@
}
List<String> computeCompilerArguments(
- vmOptions, sharedOptions, originalArguments) {
+ vmOptions, sharedOptions, dart2jsOptions, originalArguments) {
var args = <String>[];
if (_isChecked) {
args.add('--enable_asserts');
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 6d71dc0..cca9e4e 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -851,12 +851,13 @@
var commands = <Command>[];
var compilerConfiguration = configuration.compilerConfiguration;
var sharedOptions = info.optionsFromFile['sharedOptions'] as List<String>;
+ var dart2jsOptions = info.optionsFromFile['dart2jsOptions'] as List<String>;
var compileTimeArguments = <String>[];
String tempDir;
if (compilerConfiguration.hasCompiler) {
compileTimeArguments = compilerConfiguration.computeCompilerArguments(
- vmOptions, sharedOptions, args);
+ vmOptions, sharedOptions, dart2jsOptions, args);
// Avoid doing this for analyzer.
var path = info.filePath;
if (vmOptionsVariant != 0) {
@@ -1236,6 +1237,9 @@
var options = optionsFromFile['sharedOptions'] as List<String>;
if (options != null) args.addAll(options);
+ options = optionsFromFile['dart2jsOptions'] as List<String>;
+ if (options != null) args.addAll(options);
+ print('options = ${args}');
return Command.compilation(Compiler.dart2js.name, outputFile,
dart2JsBootstrapDependencies, compilerPath, args, environmentOverrides,
@@ -1309,11 +1313,15 @@
*
* // VMOptions=--flag1 --flag2
*
- * - Flags can be passed to dart2js or vm by adding a comment
- * to the test file:
+ * - Flags can be passed to dart2js, vm or dartdevc by adding a comment to
+ * the test file:
*
* // SharedOptions=--flag1 --flag2
*
+ * - Flags can be passed to dart2js by adding a comment to the test file:
+ *
+ * // dart2jsOptions=--flag1 --flag2
+ *
* - Flags can be passed to the dart script that contains the test also
* using comments, as follows:
*
@@ -1376,8 +1384,6 @@
return readOptionsFromCo19File(filePath);
}
RegExp testOptionsRegExp = new RegExp(r"// VMOptions=(.*)");
- RegExp sharedOptionsRegExp = new RegExp(r"// SharedOptions=(.*)");
- RegExp dartOptionsRegExp = new RegExp(r"// DartOptions=(.*)");
RegExp environmentRegExp = new RegExp(r"// Environment=(.*)");
RegExp otherScriptsRegExp = new RegExp(r"// OtherScripts=(.*)");
RegExp otherResourcesRegExp = new RegExp(r"// OtherResources=(.*)");
@@ -1397,33 +1403,36 @@
var result = <List<String>>[];
List<String> dartOptions;
List<String> sharedOptions;
+ List<String> dart2jsOptions;
Map<String, String> environment;
String packageRoot;
String packages;
+ List<String> wordSplit(String s) =>
+ s.split(' ').where((e) => e != '').toList();
+
+ List<String> singleListOfOptions(String name) {
+ var matches = new RegExp('// $name=(.*)').allMatches(contents);
+ var options;
+ for (var match in matches) {
+ if (options != null) {
+ throw new Exception(
+ 'More than one "// $name=" line in test $filePath');
+ }
+ options = wordSplit(match[1]);
+ }
+ return options;
+ }
+
var matches = testOptionsRegExp.allMatches(contents);
for (var match in matches) {
- result.add(match[1].split(' ').where((e) => e != '').toList());
+ result.add(wordSplit(match[1]));
}
if (result.isEmpty) result.add([]);
- matches = dartOptionsRegExp.allMatches(contents);
- for (var match in matches) {
- if (dartOptions != null) {
- throw new Exception(
- 'More than one "// DartOptions=" line in test $filePath');
- }
- dartOptions = match[1].split(' ').where((e) => e != '').toList();
- }
-
- matches = sharedOptionsRegExp.allMatches(contents);
- for (var match in matches) {
- if (sharedOptions != null) {
- throw new Exception(
- 'More than one "// SharedOptions=" line in test $filePath');
- }
- sharedOptions = match[1].split(' ').where((e) => e != '').toList();
- }
+ dartOptions = singleListOfOptions('DartOptions');
+ sharedOptions = singleListOfOptions('SharedOptions');
+ dart2jsOptions = singleListOfOptions('dart2jsOptions');
matches = environmentRegExp.allMatches(contents);
for (var match in matches) {
@@ -1468,13 +1477,13 @@
var otherScripts = <String>[];
matches = otherScriptsRegExp.allMatches(contents);
for (var match in matches) {
- otherScripts.addAll(match[1].split(' ').where((e) => e != '').toList());
+ otherScripts.addAll(wordSplit(match[1]));
}
var otherResources = <String>[];
matches = otherResourcesRegExp.allMatches(contents);
for (var match in matches) {
- otherResources.addAll(match[1].split(' ').where((e) => e != '').toList());
+ otherResources.addAll(wordSplit(match[1]));
}
var isMultitest = multiTestRegExp.hasMatch(contents);
@@ -1519,7 +1528,8 @@
return {
"vmOptions": result,
- "sharedOptions": sharedOptions ?? [],
+ "sharedOptions": sharedOptions ?? <String>[],
+ "dart2jsOptions": dart2jsOptions ?? <String>[],
"dartOptions": dartOptions,
"environment": environment,
"packageRoot": packageRoot,
@@ -1540,8 +1550,9 @@
Map<String, dynamic> optionsFromKernelFile() {
return const {
- "vmOptions": const [const []],
- "sharedOptions": const [],
+ "vmOptions": const [const <String>[]],
+ "sharedOptions": const <String>[],
+ "dart2jsOptions": const <String>[],
"dartOptions": null,
"packageRoot": null,
"packages": null,
@@ -1609,6 +1620,7 @@
return {
"vmOptions": <List>[[]],
"sharedOptions": <String>[],
+ "dart2jsOptions": <String>[],
"dartOptions": null,
"packageRoot": null,
"hasSyntaxError": hasSyntaxError,
diff --git a/tools/testing/dart/utils.dart b/tools/testing/dart/utils.dart
index b2ca746..0e458ba 100644
--- a/tools/testing/dart/utils.dart
+++ b/tools/testing/dart/utils.dart
@@ -387,13 +387,17 @@
}
/**
+ * Keep a map of files copied to avoid race conditions.
+ */
+ static Map<String, Future> _copyFilesMap = {};
+
+ /**
* Copy a [source] file to a new place.
* Assumes that the directory for [dest] already exists.
*/
static Future copyFile(Path source, Path dest) {
- return new File(source.toNativePath())
- .openRead()
- .pipe(new File(dest.toNativePath()).openWrite());
+ return _copyFilesMap.putIfAbsent(dest.toNativePath(),
+ () => new File(source.toNativePath()).copy(dest.toNativePath()));
}
static Future copyDirectory(String source, String dest) {
diff --git a/utils/bazel/kernel_summary_worker.dart b/utils/bazel/kernel_summary_worker.dart
index 7935027..55589f9 100644
--- a/utils/bazel/kernel_summary_worker.dart
+++ b/utils/bazel/kernel_summary_worker.dart
@@ -16,6 +16,7 @@
import 'package:bazel_worker/bazel_worker.dart';
import 'package:front_end/src/api_unstable/summary_worker.dart' as fe;
import 'package:front_end/src/multi_root_file_system.dart';
+import 'package:kernel/ast.dart' show Program, Library;
import 'package:kernel/target/targets.dart';
main(List<String> args) async {
@@ -82,6 +83,10 @@
/// An [ArgParser] for generating kernel summaries.
final summaryArgsParser = new ArgParser()
..addFlag('help', negatable: false)
+ ..addFlag('exclude-non-sources',
+ negatable: false,
+ help: 'Whether source files loaded implicitly should be included as '
+ 'part of the summary.')
..addOption('dart-sdk-summary')
..addOption('input-summary', allowMultiple: true)
..addOption('multi-root', allowMultiple: true)
@@ -115,14 +120,15 @@
if (multiRoots.isEmpty) multiRoots.add(Uri.base);
var fileSystem = new MultiRootFileSystem(parsedArgs['multi-root-scheme'],
multiRoots, fe.PhysicalFileSystem.instance);
-
+ var sources = parsedArgs['source'].map(Uri.parse).toList();
var state = await fe.initializeCompiler(
// TODO(sigmund): pass an old state once we can make use of it.
null,
Uri.base.resolve(parsedArgs['dart-sdk-summary']),
Uri.base.resolve(parsedArgs['packages-file']),
parsedArgs['input-summary'].map(Uri.base.resolve).toList(),
- new NoneTarget(new TargetFlags()),
+ new SummaryTarget(sources, parsedArgs['exclude-non-sources'],
+ new TargetFlags(strongMode: true)),
fileSystem);
void onProblem(problem, severity, String formatted, line, column) {
@@ -136,7 +142,6 @@
}
}
- var sources = parsedArgs['source'].map(Uri.parse).toList();
var summary = await fe.compile(state, sources, onProblem);
if (summary != null) {
@@ -149,3 +154,44 @@
return succeeded;
}
+
+/// A target that transforms outlines to meet the requirements of summaries in
+/// bazel and package-build.
+///
+/// Build systems like package-build may provide the same input file twice to
+/// the summary worker, but only intends to have it in one output summary. The
+/// convention is that if it is listed as a source, it is intended to be part of
+/// the output, if the source file was loaded as a dependency, then it was
+/// already included in a different summary. The transformation below ensures
+/// that the output summary doesn't include those implicit inputs.
+///
+/// Note: this transformation is destructive and is only intended to be used
+/// when generating summaries.
+class SummaryTarget extends NoneTarget {
+ final List<Uri> sources;
+ final bool excludeNonSources;
+
+ SummaryTarget(this.sources, this.excludeNonSources, TargetFlags flags)
+ : super(flags);
+
+ @override
+ void performOutlineTransformations(Program program) {
+ if (!excludeNonSources) return;
+
+ List<Library> libraries = new List.from(program.libraries);
+ program.libraries.clear();
+ Set<Uri> include = sources.toSet();
+ for (var lib in libraries) {
+ if (include.contains(lib.importUri)) {
+ program.libraries.add(lib);
+ } else {
+ // Excluding the library also means that their canonical names will not
+ // be computed as part of serialization, so we need to do that
+ // preemtively here to avoid errors when serializing references to
+ // elements of these libraries.
+ program.root.getChildFromUri(lib.importUri).bindTo(lib.reference);
+ lib.computeCanonicalNames();
+ }
+ }
+ }
+}