Version 2.10.0-94.0.dev
Merge commit '90652bc314c12865c258ddda580493e1db173a20' into 'dev'
diff --git a/pkg/analyzer/test/verify_diagnostics_test.dart b/pkg/analyzer/test/verify_diagnostics_test.dart
index 57b16e8..815b3db 100644
--- a/pkg/analyzer/test/verify_diagnostics_test.dart
+++ b/pkg/analyzer/test/verify_diagnostics_test.dart
@@ -56,6 +56,9 @@
// Produces two diagnostics when it should only produce one (see
// https://github.com/dart-lang/sdk/issues/43051)
'HintCode.UNNECESSARY_NULL_COMPARISON_FALSE',
+ // Produces two diagnostics when it should only produce one (see
+ // https://github.com/dart-lang/sdk/issues/43263)
+ 'StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION',
];
/// The prefix used on directive lines to specify the experiments that should
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
index 42230ec..582b79e 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
@@ -119,37 +119,13 @@
return enabled;
}
-Version getExperimentEnabledVersionInLibrary(
- ExperimentalFlag flag, Uri canonicalUri,
- {AllowedExperimentalFlags allowedExperimentalFlags,
- Map<ExperimentalFlag, Version> experimentEnabledVersionForTesting,
- Map<ExperimentalFlag, Version> experimentReleasedVersionForTesting}) {
- allowedExperimentalFlags ??= defaultAllowedExperimentalFlags;
- Set<ExperimentalFlag> allowedFlags;
- if (canonicalUri.scheme == 'dart') {
- allowedFlags = allowedExperimentalFlags.forSdkLibrary(canonicalUri.path);
- } else if (canonicalUri.scheme == 'package') {
- int index = canonicalUri.path.indexOf('/');
- String packageName;
- if (index >= 0) {
- packageName = canonicalUri.path.substring(0, index);
- } else {
- packageName = canonicalUri.path;
- }
- allowedFlags = allowedExperimentalFlags.forPackage(packageName);
- }
+Version getExperimentEnabledVersion(ExperimentalFlag flag,
+ {Map<ExperimentalFlag, Version> experimentReleasedVersionForTesting}) {
Version version;
- if (allowedFlags != null && allowedFlags.contains(flag)) {
- if (experimentReleasedVersionForTesting != null) {
- version = experimentReleasedVersionForTesting[flag];
- }
- version ??= experimentReleasedVersion[flag];
- } else {
- if (experimentEnabledVersionForTesting != null) {
- version = experimentEnabledVersionForTesting[flag];
- }
- version = experimentEnabledVersion[flag];
+ if (experimentReleasedVersionForTesting != null) {
+ version = experimentReleasedVersionForTesting[flag];
}
- assert(version != null, "No version for enabling $flag in $canonicalUri.");
+ version ??= experimentReleasedVersion[flag];
+ assert(version != null, "No version for enabling $flag.");
return version;
}
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 87bf120..5e51442 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -351,12 +351,8 @@
allowedExperimentalFlags: _raw.allowedExperimentalFlagsForTesting);
}
- Version getExperimentEnabledVersionInLibrary(
- flags.ExperimentalFlag flag, Uri importUri) {
- return flags.getExperimentEnabledVersionInLibrary(flag, importUri,
- allowedExperimentalFlags: _raw.allowedExperimentalFlagsForTesting,
- experimentEnabledVersionForTesting:
- _raw.experimentEnabledVersionForTesting,
+ Version getExperimentEnabledVersion(flags.ExperimentalFlag flag) {
+ return flags.getExperimentEnabledVersion(flag,
experimentReleasedVersionForTesting:
_raw.experimentReleasedVersionForTesting);
}
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 6dcd093..156f55c 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -177,6 +177,7 @@
} else if (libraryBuilder.isNonNullableByDefault &&
libraryBuilder.loader.target.backendTarget.useStaticFieldLowering &&
(isStatic || isTopLevel) &&
+ !isConst &&
hasInitializer) {
if (isFinal) {
_fieldEncoding = new LateFinalFieldWithInitializerEncoding(
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index d7755a4..a15f7be 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -47,6 +47,7 @@
messageConstEvalStartingPoint,
messageConstEvalUnevaluated,
messageNonAgnosticConstant,
+ messageNotAConstantExpression,
noLength,
templateConstEvalCaseImplementsEqual,
templateConstEvalDeferredLibrary,
@@ -1822,7 +1823,7 @@
if (node.receiver is ThisExpression) {
// Access "this" during instance creation.
if (instanceBuilder == null) {
- return reportInvalid(node, 'Instance field access outside constructor');
+ return report(node, messageNotAConstantExpression);
}
for (final Field field in instanceBuilder.fields.keys) {
if (field.name == node.name) {
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 08bf137..066cf2b 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
@@ -338,7 +338,7 @@
bool _enableVarianceInLibrary;
bool _enableNonfunctionTypeAliasesInLibrary;
bool _enableNonNullableInLibrary;
- Version _enableNonNullableVersionInLibrary;
+ Version _enableNonNullableVersionCache;
bool _enableTripleShiftInLibrary;
bool _enableExtensionMethodsInLibrary;
@@ -360,10 +360,8 @@
loader.target.isExperimentEnabledInLibrary(
ExperimentalFlag.nonNullable, _packageUri ?? importUri);
- Version get enableNonNullableVersionInLibrary =>
- _enableNonNullableVersionInLibrary ??= loader.target
- .getExperimentEnabledVersionInLibrary(
- ExperimentalFlag.nonNullable, _packageUri ?? importUri);
+ Version get _enableNonNullableVersion => _enableNonNullableVersionCache ??=
+ loader.target.getExperimentEnabledVersion(ExperimentalFlag.nonNullable);
bool get enableTripleShiftInLibrary => _enableTripleShiftInLibrary ??=
loader.target.isExperimentEnabledInLibrary(
@@ -439,7 +437,7 @@
@override
bool get isNonNullableByDefault =>
enableNonNullableInLibrary &&
- languageVersion.version >= enableNonNullableVersionInLibrary &&
+ languageVersion.version >= _enableNonNullableVersion &&
!isOptOutTest(library.importUri);
static bool isOptOutTest(Uri uri) {
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 575f6f0..f5f0588 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -352,7 +352,8 @@
// libraries with no corresponding package config we generate a message
// per library.
Map<String, List<LibraryBuilder>> libraryByPackage = {};
- Map<Package, Version> enableNonNullableVersionByPackage = {};
+ Version enableNonNullableVersion =
+ target.getExperimentEnabledVersion(ExperimentalFlag.nonNullable);
for (LibraryBuilder libraryBuilder in _strongOptOutLibraries) {
Package package =
target.uriTranslator.getPackage(libraryBuilder.importUri);
@@ -360,11 +361,6 @@
if (package != null &&
package.languageVersion != null &&
package.languageVersion is! InvalidLanguageVersion) {
- Version enableNonNullableVersion =
- enableNonNullableVersionByPackage[package] ??=
- target.getExperimentEnabledVersionInLibrary(
- ExperimentalFlag.nonNullable,
- new Uri(scheme: 'package', path: package.name));
Version version = new Version(
package.languageVersion.major, package.languageVersion.minor);
if (version < enableNonNullableVersion) {
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart b/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
index 0e6a737..ba35905 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
@@ -14,7 +14,7 @@
import 'package:front_end/src/api_prototype/experimental_flags.dart';
import 'package:kernel/ast.dart'
- show AsyncMarker, Expression, FunctionNode, TreeNode;
+ show AsyncMarker, Expression, FunctionNode, TreeNode, Version;
import '../fasta_codes.dart';
@@ -90,11 +90,13 @@
void reportMissingNonNullableSupport(Token token) {
assert(!libraryBuilder.isNonNullableByDefault);
assert(token != null);
+ Version enableNonNullableVersion = libraryBuilder.loader.target
+ .getExperimentEnabledVersion(ExperimentalFlag.nonNullable);
if (libraryBuilder.enableNonNullableInLibrary) {
if (libraryBuilder.languageVersion.isExplicit) {
addProblem(
- templateNonNullableOptOutExplicit.withArguments(
- libraryBuilder.enableNonNullableVersionInLibrary.toText()),
+ templateNonNullableOptOutExplicit
+ .withArguments(enableNonNullableVersion.toText()),
token.charOffset,
token.charCount,
context: <LocatedMessage>[
@@ -105,19 +107,17 @@
]);
} else {
addProblem(
- templateNonNullableOptOutImplicit.withArguments(
- libraryBuilder.enableNonNullableVersionInLibrary.toText()),
+ templateNonNullableOptOutImplicit
+ .withArguments(enableNonNullableVersion.toText()),
token.charOffset,
token.charCount);
}
} else if (!libraryBuilder.loader.target
.isExperimentEnabledGlobally(ExperimentalFlag.nonNullable)) {
- if (libraryBuilder.languageVersion.version <
- libraryBuilder.enableNonNullableVersionInLibrary) {
+ if (libraryBuilder.languageVersion.version < enableNonNullableVersion) {
addProblem(
templateExperimentNotEnabledNoFlagInvalidLanguageVersion
- .withArguments(
- libraryBuilder.enableNonNullableVersionInLibrary.toText()),
+ .withArguments(enableNonNullableVersion.toText()),
token.offset,
noLength);
} else {
@@ -125,8 +125,8 @@
}
} else {
addProblem(
- templateExperimentNotEnabled.withArguments('non-nullable',
- libraryBuilder.enableNonNullableVersionInLibrary.toText()),
+ templateExperimentNotEnabled.withArguments(
+ 'non-nullable', enableNonNullableVersion.toText()),
token.offset,
noLength);
}
diff --git a/pkg/front_end/lib/src/fasta/target_implementation.dart b/pkg/front_end/lib/src/fasta/target_implementation.dart
index 57a4369..ebacbfc 100644
--- a/pkg/front_end/lib/src/fasta/target_implementation.dart
+++ b/pkg/front_end/lib/src/fasta/target_implementation.dart
@@ -61,9 +61,8 @@
return _options.isExperimentEnabledInLibrary(flag, importUri);
}
- Version getExperimentEnabledVersionInLibrary(
- ExperimentalFlag flag, Uri importUri) {
- return _options.getExperimentEnabledVersionInLibrary(flag, importUri);
+ Version getExperimentEnabledVersion(ExperimentalFlag flag) {
+ return _options.getExperimentEnabledVersion(flag);
}
bool isExperimentEnabledGlobally(ExperimentalFlag flag) {
diff --git a/pkg/front_end/testcases/general/async_function.dart.strong.transformed.expect b/pkg/front_end/testcases/general/async_function.dart.strong.transformed.expect
index 742f696..d341b2a 100644
--- a/pkg/front_end/testcases/general/async_function.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/async_function.dart.strong.transformed.expect
@@ -62,10 +62,10 @@
return :async_completer.{asy::Completer::future};
}
static method syncStarString() → core::Iterable<core::String*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::String*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::String*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = "foo";
@@ -86,10 +86,10 @@
return new core::_SyncIterable::•<core::String*>(:sync_op_gen);
}
static method syncStarString2() → core::Iterable<core::String*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::String*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::String*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = "foo";
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart.outline.expect b/pkg/front_end/testcases/general/experiment_release_version/main.dart.outline.expect
index d326d68..dbdc77e 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/main.dart.outline.expect
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart.outline.expect
@@ -9,17 +9,17 @@
// // @dart=2.8
// ^^^^^^^^^^^^
//
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:5:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:5:4: Error: This requires the null safety language feature, which is experimental.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versionedUnallowedPackage; // error
// ^
//
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.9 or higher.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versioned_2_8_AllowedPackage; // error
// ^
//
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versioned_2_9_AllowedPackage; // error
// ^
@@ -66,7 +66,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.9 or higher.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versioned_2_8_Library; // error
// ^
@@ -80,7 +80,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versioned_2_9_Library; // error
// ^
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart.strong.expect b/pkg/front_end/testcases/general/experiment_release_version/main.dart.strong.expect
index ee91545..2846fe1 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart.strong.expect
@@ -9,17 +9,17 @@
// // @dart=2.8
// ^^^^^^^^^^^^
//
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:5:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:5:4: Error: This requires the null safety language feature, which is experimental.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versionedUnallowedPackage; // error
// ^
//
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.9 or higher.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versioned_2_8_AllowedPackage; // error
// ^
//
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versioned_2_9_AllowedPackage; // error
// ^
@@ -65,7 +65,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.9 or higher.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versioned_2_8_Library; // error
// ^
@@ -79,7 +79,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versioned_2_9_Library; // error
// ^
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart.strong.transformed.expect b/pkg/front_end/testcases/general/experiment_release_version/main.dart.strong.transformed.expect
index 29a26a3..43eedc9 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart.strong.transformed.expect
@@ -34,7 +34,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.9 or higher.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versioned_2_8_Library; // error
// ^
@@ -48,7 +48,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental and requires language version of 2.10 or higher.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:7:4: Error: This requires the null safety language feature, which is experimental.
// You can enable the experiment using the '--enable-experiment=non-nullable' command line option.
// int? versioned_2_9_Library; // error
// ^
diff --git a/pkg/front_end/testcases/general/issue43290.dart b/pkg/front_end/testcases/general/issue43290.dart
new file mode 100644
index 0000000..bdd22fa
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43290.dart
@@ -0,0 +1,23 @@
+class Class {
+ final int length;
+
+ const Class({this.length});
+
+ method1a() {
+ const Class(length: this.length);
+ }
+
+ method1b() {
+ const Class(length: length);
+ }
+
+ method2a() {
+ const a = this.length;
+ }
+
+ method2b() {
+ const a = length;
+ }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue43290.dart.outline.expect b/pkg/front_end/testcases/general/issue43290.dart.outline.expect
new file mode 100644
index 0000000..51f0c9f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43290.dart.outline.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/ {
+ final field core::int* length;
+ const constructor •({core::int* length}) → self::Class*
+ : self::Class::length = length, super core::Object::•()
+ ;
+ method method1a() → dynamic
+ ;
+ method method1b() → dynamic
+ ;
+ method method2a() → dynamic
+ ;
+ method method2b() → dynamic
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/issue43290.dart.strong.expect b/pkg/front_end/testcases/general/issue43290.dart.strong.expect
new file mode 100644
index 0000000..9edb793
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43290.dart.strong.expect
@@ -0,0 +1,85 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/general/issue43290.dart:7:11: Error: Constant evaluation error:
+// const Class(length: this.length);
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:7:30: Context: Not a constant expression.
+// const Class(length: this.length);
+// ^
+//
+// pkg/front_end/testcases/general/issue43290.dart:11:11: Error: Constant evaluation error:
+// const Class(length: length);
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:11:25: Context: Not a constant expression.
+// const Class(length: length);
+// ^
+//
+// pkg/front_end/testcases/general/issue43290.dart:15:20: Error: Constant evaluation error:
+// const a = this.length;
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:15:20: Context: Not a constant expression.
+// const a = this.length;
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:15:11: Context: While analyzing:
+// const a = this.length;
+// ^
+//
+// pkg/front_end/testcases/general/issue43290.dart:19:15: Error: Constant evaluation error:
+// const a = length;
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:19:15: Context: Not a constant expression.
+// const a = length;
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:19:11: Context: While analyzing:
+// const a = length;
+// ^
+//
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue43290.dart:11:25: Error: Not a constant expression.
+// const Class(length: length);
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/issue43290.dart:19:15: Error: Not a constant expression.
+// const a = length;
+// ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/ {
+ final field core::int* length;
+ const constructor •({core::int* length = #C1}) → self::Class*
+ : self::Class::length = length, super core::Object::•()
+ ;
+ method method1a() → dynamic {
+ invalid-expression "Not a constant expression.";
+ }
+ method method1b() → dynamic {
+ invalid-expression "Not a constant expression.";
+ }
+ method method2a() → dynamic {
+ const core::int* a = invalid-expression "Not a constant expression.";
+ }
+ method method2b() → dynamic {
+ const core::int* a = invalid-expression "Not a constant expression.";
+ }
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/issue43290.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue43290.dart.strong.transformed.expect
new file mode 100644
index 0000000..9edb793
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43290.dart.strong.transformed.expect
@@ -0,0 +1,85 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/general/issue43290.dart:7:11: Error: Constant evaluation error:
+// const Class(length: this.length);
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:7:30: Context: Not a constant expression.
+// const Class(length: this.length);
+// ^
+//
+// pkg/front_end/testcases/general/issue43290.dart:11:11: Error: Constant evaluation error:
+// const Class(length: length);
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:11:25: Context: Not a constant expression.
+// const Class(length: length);
+// ^
+//
+// pkg/front_end/testcases/general/issue43290.dart:15:20: Error: Constant evaluation error:
+// const a = this.length;
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:15:20: Context: Not a constant expression.
+// const a = this.length;
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:15:11: Context: While analyzing:
+// const a = this.length;
+// ^
+//
+// pkg/front_end/testcases/general/issue43290.dart:19:15: Error: Constant evaluation error:
+// const a = length;
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:19:15: Context: Not a constant expression.
+// const a = length;
+// ^
+// pkg/front_end/testcases/general/issue43290.dart:19:11: Context: While analyzing:
+// const a = length;
+// ^
+//
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue43290.dart:11:25: Error: Not a constant expression.
+// const Class(length: length);
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/issue43290.dart:19:15: Error: Not a constant expression.
+// const a = length;
+// ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/ {
+ final field core::int* length;
+ const constructor •({core::int* length = #C1}) → self::Class*
+ : self::Class::length = length, super core::Object::•()
+ ;
+ method method1a() → dynamic {
+ invalid-expression "Not a constant expression.";
+ }
+ method method1b() → dynamic {
+ invalid-expression "Not a constant expression.";
+ }
+ method method2a() → dynamic {
+ const core::int* a = invalid-expression "Not a constant expression.";
+ }
+ method method2b() → dynamic {
+ const core::int* a = invalid-expression "Not a constant expression.";
+ }
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/issue43290.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue43290.dart.textual_outline.expect
new file mode 100644
index 0000000..d62986c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43290.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class Class {
+ final int length;
+ const Class({this.length});
+ method1a() {}
+ method1b() {}
+ method2a() {}
+ method2b() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue43290.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue43290.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..90d9993
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43290.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class Class {
+ const Class({this.length});
+ final int length;
+ method1a() {}
+ method1b() {}
+ method2a() {}
+ method2b() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/async_function.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/async_function.dart.weak.transformed.expect
index 742f696..d341b2a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/async_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/async_function.dart.weak.transformed.expect
@@ -62,10 +62,10 @@
return :async_completer.{asy::Completer::future};
}
static method syncStarString() → core::Iterable<core::String*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::String*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::String*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = "foo";
@@ -86,10 +86,10 @@
return new core::_SyncIterable::•<core::String*>(:sync_op_gen);
}
static method syncStarString2() → core::Iterable<core::String*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::String*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::String*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = "foo";
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.strong.transformed.expect
index 3ed4d9f..8ef54ea 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.strong.transformed.expect
@@ -4,10 +4,10 @@
static method main() → dynamic {
() →* core::Iterable<core::Null?>* f = () → core::Iterable<core::Null?>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::Null?>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::Null?>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = null;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.strong.transformed.expect
index dcd483a..8ba245d 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.strong.transformed.expect
@@ -4,10 +4,10 @@
static method test() → dynamic {
() →* core::Iterable<core::num*>* f = () → core::Iterable<core::num*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::num*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::num*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = 1;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect
index c081471..2cef8c5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect
@@ -139,10 +139,10 @@
return :controller_stream;
}
static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::Map<core::int*, core::int*>*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::Map<core::int*, core::int*>*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = core::Map::•<core::int*, core::int*>();
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.strong.transformed.expect
index 0a2e77a..f330a82 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.strong.transformed.expect
@@ -64,10 +64,10 @@
return :async_completer.{asy::Completer::future};
}
function f4() → core::Iterable<core::int*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::int*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::int*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = 42;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect
index 0bbb7a1..61d7ab7 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect
@@ -49,10 +49,10 @@
return :async_completer.{asy::Completer::future};
}
function c() → core::Iterable<(core::int*) →* core::int*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<(core::int*) →* core::int*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<(core::int*) →* core::int*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = (core::int* x) → core::int* => x;
@@ -65,10 +65,10 @@
return new core::_SyncIterable::•<(core::int*) →* core::int*>(:sync_op_gen);
}
function d() → core::Iterable<(core::int*) →* core::int*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<(core::int*) →* core::int*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<(core::int*) →* core::int*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = <(core::int*) →* core::int*>[(core::int* x) → core::int* => x];
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect
index 816f890..e58866d 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect
@@ -48,10 +48,10 @@
return :async_completer.{asy::Completer::future};
}
static method c() → core::Iterable<(core::int*) →* core::int*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<(core::int*) →* core::int*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<(core::int*) →* core::int*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = (core::int* x) → core::int* => x;
@@ -64,10 +64,10 @@
return new core::_SyncIterable::•<(core::int*) →* core::int*>(:sync_op_gen);
}
static method d() → core::Iterable<(core::int*) →* core::int*>* /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<(core::int*) →* core::int*>*) →* core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
core::int* :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<(core::int*) →* core::int*>* :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = <(core::int*) →* core::int*>[(core::int* x) → core::int* => x];
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
index 36cb9dd..bc6171e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
@@ -60,10 +60,10 @@
return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
}
static method getIterableBool() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = true;
@@ -76,10 +76,10 @@
return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
}
static method test1() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
@@ -96,10 +96,10 @@
static method test3() → core::bool
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
static method test4() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
@@ -122,10 +122,10 @@
static method test6() → core::Iterable<core::bool>
return self::getIterableBool();
static method test7() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
@@ -150,10 +150,10 @@
#L1:
{
function test1() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
@@ -170,10 +170,10 @@
function test3() → core::bool
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
function test4() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
@@ -196,10 +196,10 @@
function test6() → core::Iterable<core::bool>
return self::getIterableBool();
function test7() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
@@ -257,10 +257,10 @@
^" in (() → core::Iterable<dynamic> => self::getIterableNull()).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool()).call();
core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
index 36cb9dd..bc6171e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
@@ -60,10 +60,10 @@
return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
}
static method getIterableBool() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = true;
@@ -76,10 +76,10 @@
return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
}
static method test1() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
@@ -96,10 +96,10 @@
static method test3() → core::bool
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
static method test4() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
@@ -122,10 +122,10 @@
static method test6() → core::Iterable<core::bool>
return self::getIterableBool();
static method test7() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
@@ -150,10 +150,10 @@
#L1:
{
function test1() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_current} = self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
@@ -170,10 +170,10 @@
function test3() → core::bool
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
function test4() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
@@ -196,10 +196,10 @@
function test6() → core::Iterable<core::bool>
return self::getIterableBool();
function test7() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
@@ -257,10 +257,10 @@
^" in (() → core::Iterable<dynamic> => self::getIterableNull()).call() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool()).call();
core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> /* originally sync* */ {
- function :sync_op_gen() → (core::_SyncIterator<core::bool>?) → core::bool* {
+ function :sync_op_gen() → (core::_SyncIterator<dynamic>?) → core::bool* {
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- return (core::_SyncIterator<core::bool>? :iterator) → core::bool* yielding {
+ return (core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
{
{
:iterator.{core::_SyncIterator::_yieldEachIterable} = self::getIterableBool();
diff --git a/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.expect
index d4de37b..c353251 100644
--- a/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.expect
@@ -9,27 +9,14 @@
// // @dart=2.8
// ^^^^^^^^^^^^
//
-// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
-// Try removing the package language version or setting the language version to 2.10 or higher.
-// int? versionedUnallowedPackage; // error
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// Try removing the `@dart=` annotation or setting the language version to 2.9 or higher.
// int? versioned_2_8_AllowedPackage; // error
// ^
// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
// // @dart=2.8
// ^^^^^^^^^^^^
//
-// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:7:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
-// int? versioned_2_9_AllowedPackage; // error
-// ^
-// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
library /*isNonNullableByDefault*/;
import self as self;
@@ -59,7 +46,7 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// Try removing the `@dart=` annotation or setting the language version to 2.9 or higher.
// int? versioned_2_8_Library; // error
// ^
// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
@@ -71,18 +58,7 @@
static field core::int? versioned_2_8_Library;
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_9_lib.dart:7:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
-// int? versioned_2_9_Library; // error
-// ^
-// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library /*isNonNullableByDefault*/;
import self as self4;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.transformed.expect
index 65936ca..833aacd 100644
--- a/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// Try removing the `@dart=` annotation or setting the language version to 2.9 or higher.
// int? versioned_2_8_Library; // error
// ^
// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
@@ -39,18 +39,7 @@
static field core::int? versioned_2_8_Library;
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_9_lib.dart:7:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
-// int? versioned_2_9_Library; // error
-// ^
-// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library /*isNonNullableByDefault*/;
import self as self4;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart b/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart
index ff693f6..43a931e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart
+++ b/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart
@@ -4,4 +4,4 @@
// @dart=2.9
-int? versioned_2_9_AllowedPackage; // error
\ No newline at end of file
+int? versioned_2_9_AllowedPackage; // ok
\ No newline at end of file
diff --git a/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_9_lib.dart b/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_9_lib.dart
index 7a9a3ee..6df385a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_9_lib.dart
+++ b/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_9_lib.dart
@@ -4,4 +4,4 @@
// @dart=2.9
-int? versioned_2_9_Library; // error
\ No newline at end of file
+int? versioned_2_9_Library; // ok
\ No newline at end of file
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart b/pkg/front_end/testcases/static_field_lowering/opt_in.dart
index 6d9235d..2b45286 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart
@@ -9,6 +9,8 @@
return value;
}
+const int constTopLevelField = 324;
+
int? topLevelFieldWithoutInitializer;
int nonNullableTopLevelFieldWithInitializer1 = init(42);
@@ -32,6 +34,8 @@
: 32;
class Class {
+ static const int staticConstField = 123;
+
static int? staticFieldWithoutInitializer;
static int nonNullableStaticFieldWithInitializer1 = init(55);
@@ -58,7 +62,9 @@
main() {
expect(null, lastInit);
expect(null, topLevelFieldWithoutInitializer);
+ expect(324, constTopLevelField);
expect(null, Class.staticFieldWithoutInitializer);
+ expect(123, Class.staticConstField);
expect(42, nonNullableTopLevelFieldWithInitializer1);
expect(42, lastInit);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
index 93e4a3c..f578832 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
@@ -1,5 +1,6 @@
dynamic lastInit;
T init<T>(T value) {}
+const int constTopLevelField = 324;
int? topLevelFieldWithoutInitializer;
int nonNullableTopLevelFieldWithInitializer1 = init(42);
int? nullableTopLevelFieldWithInitializer = init(123);
@@ -19,6 +20,7 @@
: 32;
class Class {
+ static const int staticConstField = 123;
static int? staticFieldWithoutInitializer;
static int nonNullableStaticFieldWithInitializer1 = init(55);
static int? nullableStaticFieldWithInitializer1 = init(17);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
index a9b7d4d..d41b0be 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
@@ -1,6 +1,7 @@
T init<T>(T value) {}
class Class {
+ static const int staticConstField = 123;
static final int? nullableStaticFinalFieldWithInitializer1 = init(19);
static final int? nullableStaticFinalFieldWithInitializer2 =
nullableStaticFinalFieldWithInitializer2Init++ == 0
@@ -20,6 +21,7 @@
static int nullableStaticFinalFieldWithInitializer2Init = 0;
}
+const int constTopLevelField = 324;
dynamic lastInit;
expect(expected, actual) {}
final int? nullableFinalTopLevelFieldWithInitializer1 = init(32);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
index b11f2bb..39e6731 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
@@ -4,6 +4,7 @@
import "dart:_internal" as _in;
class Class extends core::Object {
+ static const field core::int staticConstField = #C1;
static field core::int? staticFieldWithoutInitializer = null;
static field core::int? _#nonNullableStaticFieldWithInitializer1 = null;
static field core::int? _#nullableStaticFieldWithInitializer1 = null;
@@ -86,6 +87,7 @@
}
}
static field dynamic lastInit;
+static const field core::int constTopLevelField = #C2;
static field core::int? topLevelFieldWithoutInitializer;
static field core::int? _#nonNullableTopLevelFieldWithInitializer1 = null;
static field core::int? _#nullableTopLevelFieldWithInitializer = null;
@@ -170,7 +172,9 @@
static method main() → dynamic {
self::expect(null, self::lastInit);
self::expect(null, self::topLevelFieldWithoutInitializer);
+ self::expect(324, #C2);
self::expect(null, self::Class::staticFieldWithoutInitializer);
+ self::expect(123, #C1);
self::expect(42, self::nonNullableTopLevelFieldWithInitializer1);
self::expect(42, self::lastInit);
self::expect(123, self::nullableTopLevelFieldWithInitializer);
@@ -223,3 +227,8 @@
}
throw "${message}: ${value}";
}
+
+constants {
+ #C1 = 123
+ #C2 = 324
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
index b11f2bb..39e6731 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
@@ -4,6 +4,7 @@
import "dart:_internal" as _in;
class Class extends core::Object {
+ static const field core::int staticConstField = #C1;
static field core::int? staticFieldWithoutInitializer = null;
static field core::int? _#nonNullableStaticFieldWithInitializer1 = null;
static field core::int? _#nullableStaticFieldWithInitializer1 = null;
@@ -86,6 +87,7 @@
}
}
static field dynamic lastInit;
+static const field core::int constTopLevelField = #C2;
static field core::int? topLevelFieldWithoutInitializer;
static field core::int? _#nonNullableTopLevelFieldWithInitializer1 = null;
static field core::int? _#nullableTopLevelFieldWithInitializer = null;
@@ -170,7 +172,9 @@
static method main() → dynamic {
self::expect(null, self::lastInit);
self::expect(null, self::topLevelFieldWithoutInitializer);
+ self::expect(324, #C2);
self::expect(null, self::Class::staticFieldWithoutInitializer);
+ self::expect(123, #C1);
self::expect(42, self::nonNullableTopLevelFieldWithInitializer1);
self::expect(42, self::lastInit);
self::expect(123, self::nullableTopLevelFieldWithInitializer);
@@ -223,3 +227,8 @@
}
throw "${message}: ${value}";
}
+
+constants {
+ #C1 = 123
+ #C2 = 324
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart b/pkg/front_end/testcases/static_field_lowering/opt_out.dart
index 10bc21d..9ccd9b4 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart
@@ -11,6 +11,8 @@
return value;
}
+const int constTopLevelField = 324;
+
int topLevelFieldWithoutInitializer;
int topLevelFieldWithInitializer1 = init(42);
@@ -26,6 +28,8 @@
: 87;
class Class {
+ static const int staticConstField = 123;
+
static int staticFieldWithoutInitializer;
static int staticFieldWithInitializer1 = init(55);
@@ -44,7 +48,9 @@
main() {
expect(null, lastInit);
expect(null, topLevelFieldWithoutInitializer);
+ expect(324, constTopLevelField);
expect(null, Class.staticFieldWithoutInitializer);
+ expect(123, Class.staticConstField);
expect(42, topLevelFieldWithInitializer1);
expect(42, lastInit);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
index 3e7aff7..e20bb46 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
@@ -1,6 +1,7 @@
// @dart = 2.8
dynamic lastInit;
T init<T>(T value) {}
+const int constTopLevelField = 324;
int topLevelFieldWithoutInitializer;
int topLevelFieldWithInitializer1 = init(42);
int topLevelFieldWithInitializer2 = init(42);
@@ -12,6 +13,7 @@
: 87;
class Class {
+ static const int staticConstField = 123;
static int staticFieldWithoutInitializer;
static int staticFieldWithInitializer1 = init(55);
static int staticFieldWithInitializer2 = init(55);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
index 494c66e8..8a89bd3 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
@@ -2,6 +2,7 @@
T init<T>(T value) {}
class Class {
+ static const int staticConstField = 123;
static final int staticFinalFieldWithInitializer1 = init(73);
static final int staticFinalFieldWithInitializer2 =
staticFinalFieldWithInitializer2Init++ == 0
@@ -13,6 +14,7 @@
static int staticFinalFieldWithInitializer2Init = 0;
}
+const int constTopLevelField = 324;
dynamic lastInit;
expect(expected, actual) {}
final int finalTopLevelFieldWithInitializer1 = init(87);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
index 9f52494..3b4d666 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
@@ -3,6 +3,7 @@
import "dart:core" as core;
class Class extends core::Object {
+ static const field core::int* staticConstField = #C1;
static field core::int* staticFieldWithoutInitializer = null;
static field core::int* staticFieldWithInitializer1 = self::init<core::int*>(55);
static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
@@ -24,6 +25,7 @@
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static field dynamic lastInit;
+static const field core::int* constTopLevelField = #C2;
static field core::int* topLevelFieldWithoutInitializer;
static field core::int* topLevelFieldWithInitializer1 = self::init<core::int*>(42);
static field core::int* topLevelFieldWithInitializer2 = self::init<core::int*>(42);
@@ -37,7 +39,9 @@
static method main() → dynamic {
self::expect(null, self::lastInit);
self::expect(null, self::topLevelFieldWithoutInitializer);
+ self::expect(324, #C2);
self::expect(null, self::Class::staticFieldWithoutInitializer);
+ self::expect(123, #C1);
self::expect(42, self::topLevelFieldWithInitializer1);
self::expect(42, self::lastInit);
self::topLevelFieldWithInitializer2 = 56;
@@ -75,3 +79,8 @@
}
throw "${message}: ${value}";
}
+
+constants {
+ #C1 = 123
+ #C2 = 324
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
index 9f52494..3b4d666 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
@@ -3,6 +3,7 @@
import "dart:core" as core;
class Class extends core::Object {
+ static const field core::int* staticConstField = #C1;
static field core::int* staticFieldWithoutInitializer = null;
static field core::int* staticFieldWithInitializer1 = self::init<core::int*>(55);
static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
@@ -24,6 +25,7 @@
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static field dynamic lastInit;
+static const field core::int* constTopLevelField = #C2;
static field core::int* topLevelFieldWithoutInitializer;
static field core::int* topLevelFieldWithInitializer1 = self::init<core::int*>(42);
static field core::int* topLevelFieldWithInitializer2 = self::init<core::int*>(42);
@@ -37,7 +39,9 @@
static method main() → dynamic {
self::expect(null, self::lastInit);
self::expect(null, self::topLevelFieldWithoutInitializer);
+ self::expect(324, #C2);
self::expect(null, self::Class::staticFieldWithoutInitializer);
+ self::expect(123, #C1);
self::expect(42, self::topLevelFieldWithInitializer1);
self::expect(42, self::lastInit);
self::topLevelFieldWithInitializer2 = 56;
@@ -75,3 +79,8 @@
}
throw "${message}: ${value}";
}
+
+constants {
+ #C1 = 123
+ #C2 = 324
+}
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
index 09c16af..5ec1e6c 100644
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ b/pkg/kernel/lib/transformations/continuation.dart
@@ -392,8 +392,10 @@
VariableDeclaration(ContinuationVariables.iteratorParam)
..type = InterfaceType(
helper.syncIteratorClass, staticTypeContext.nullable, [
- ContinuationRewriterBase.elementTypeFrom(
- helper.iterableClass, enclosingFunction.returnType)
+ // Note: This is dynamic since nested iterators (of potentially
+ // different type) are handled by shared internal synthetic
+ // code.
+ const DynamicType(),
]),
super(helper, enclosingFunction, staticTypeContext);
diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index a183272..e4b4445 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -284,4 +284,7 @@
if (!dart_version_git_info) {
args += [ "--no_git_hash" ]
}
+ if (!verify_sdk_hash) {
+ args += [ "--no_sdk_hash" ]
+ }
}
diff --git a/tests/co19/co19-co19.status b/tests/co19/co19-co19.status
index a0fc6dd..76666e6 100644
--- a/tests/co19/co19-co19.status
+++ b/tests/co19/co19-co19.status
@@ -37,7 +37,6 @@
LanguageFeatures/Instantiate-to-bound/typedef/*: Skip # Not migrated to NNBD
LanguageFeatures/Instantiate-to-bound/typedef/dynamic/*: Skip # Not migrated to NNBD
LanguageFeatures/Instantiate-to-bound/typedef/static/*: Skip # Not migrated to NNBD
-LanguageFeatures/Set-literals/*: Skip # Not migrated to NNBD
LanguageFeatures/Simple-bounds/*: Skip # Not migrated to NNBD
LanguageFeatures/Simple-bounds/dynamic/*: Skip # Not migrated to NNBD
LanguageFeatures/Simple-bounds/dynamic/type-aliases/*: Skip # Not migrated to NNBD
diff --git a/tests/language/sync_star/nested_subtype_test.dart b/tests/language/sync_star/nested_subtype_test.dart
new file mode 100644
index 0000000..f5f29ca
--- /dev/null
+++ b/tests/language/sync_star/nested_subtype_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2020, the Dart Team. 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: https://github.com/dart-lang/sdk/issues/42234
+
+Iterable<Object> f() sync* {
+ yield* g();
+}
+
+Iterable<int> g() sync* {
+ yield 1;
+ yield 2;
+}
+
+main() {
+ for (var i in f()) {
+ print(i);
+ }
+}
diff --git a/tests/language_2/sync_star/nested_subtype_test.dart b/tests/language_2/sync_star/nested_subtype_test.dart
new file mode 100644
index 0000000..f5f29ca
--- /dev/null
+++ b/tests/language_2/sync_star/nested_subtype_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2020, the Dart Team. 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: https://github.com/dart-lang/sdk/issues/42234
+
+Iterable<Object> f() sync* {
+ yield* g();
+}
+
+Iterable<int> g() sync* {
+ yield 1;
+ yield 2;
+}
+
+main() {
+ for (var i in f()) {
+ print(i);
+ }
+}
diff --git a/tools/VERSION b/tools/VERSION
index fc575db..f93499e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 10
PATCH 0
-PRERELEASE 93
+PRERELEASE 94
PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/make_version.py b/tools/make_version.py
index fdae0aa..0e6e8be 100755
--- a/tools/make_version.py
+++ b/tools/make_version.py
@@ -55,10 +55,9 @@
def FormatVersionString(version,
no_git_hash,
+ no_sdk_hash,
version_file=None,
git_revision_file=None):
- use_git_hash = not no_git_hash
-
semantic_sdk_version = utils.GetSemanticSDKVersion(no_git_hash,
version_file,
git_revision_file)
@@ -71,7 +70,8 @@
version = version.replace('{{SEMANTIC_SDK_VERSION}}', semantic_sdk_version)
git_hash = None
- if use_git_hash:
+ # If we need SDK hash and git usage is not suppressed then try to get it.
+ if not no_sdk_hash and not no_git_hash:
git_hash = utils.GetShortGitHash()
if git_hash is None or len(git_hash) != 10:
git_hash = '0000000000'
@@ -81,7 +81,7 @@
version = version.replace('{{CHANNEL}}', channel)
version_time = None
- if use_git_hash:
+ if not no_git_hash:
version_time = utils.GetGitTimestamp()
if version_time == None:
version_time = 'Unknown timestamp'
@@ -104,6 +104,11 @@
default=False,
help=('Don\'t try to call git to derive things like '
'git revision hash.'))
+ parser.add_argument(
+ '--no_sdk_hash',
+ action='store_true',
+ default=False,
+ help='Use null SDK hash to disable SDK verification in the VM')
parser.add_argument('--output', help='output file name')
parser.add_argument('-q',
'--quiet',
@@ -133,7 +138,8 @@
raise 'No version template given! Set either --input or --format.'
version = FormatVersionString(version_template, args.no_git_hash,
- args.version_file, args.git_revision_file)
+ args.no_sdk_hash, args.version_file,
+ args.git_revision_file)
if args.output:
with open(args.output, 'w') as fh: