Version 2.14.0-337.0.dev
Merge commit '8e1fbc9ab3ab69add46054828ad2f380a4b46b3a' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 673386c..ded9980 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
"constraint, update this by running tools/generate_package_config.dart."
],
"configVersion": 2,
- "generated": "2021-07-16T15:43:40.485506",
+ "generated": "2021-07-19T10:44:52.605499",
"generator": "tools/generate_package_config.dart",
"packages": [
{
@@ -755,7 +755,7 @@
"name": "vm",
"rootUri": "../pkg/vm",
"packageUri": "lib/",
- "languageVersion": "2.7"
+ "languageVersion": "2.12"
},
{
"name": "vm_service",
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 fe9e63c..1462633 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
@@ -72,39 +72,42 @@
@override
Class get actualCls => cls;
- void addMember(Member member) {
- if (member is Field) {
- DillFieldBuilder builder = new DillFieldBuilder(member, this);
- String name = member.name.text;
- scopeBuilder.addMember(name, builder);
- } else if (member is Procedure) {
- String name = member.name.text;
- switch (member.kind) {
- case ProcedureKind.Factory:
- constructorScopeBuilder.addMember(
- name, new DillFactoryBuilder(member, this));
- break;
- case ProcedureKind.Setter:
- scopeBuilder.addSetter(name, new DillSetterBuilder(member, this));
- break;
- case ProcedureKind.Getter:
- scopeBuilder.addMember(name, new DillGetterBuilder(member, this));
- break;
- case ProcedureKind.Operator:
- scopeBuilder.addMember(name, new DillOperatorBuilder(member, this));
- break;
- case ProcedureKind.Method:
- scopeBuilder.addMember(name, new DillMethodBuilder(member, this));
- break;
- }
- } else if (member is Constructor) {
- DillConstructorBuilder builder =
- new DillConstructorBuilder(member, null, this);
- String name = member.name.text;
- constructorScopeBuilder.addMember(name, builder);
- } else {
- throw new UnsupportedError(
- "Unexpected class member ${member} (${member.runtimeType})");
+ void addField(Field field) {
+ DillFieldBuilder builder = new DillFieldBuilder(field, this);
+ String name = field.name.text;
+ scopeBuilder.addMember(name, builder);
+ }
+
+ void addConstructor(Constructor constructor, Procedure? constructorTearOff) {
+ DillConstructorBuilder builder =
+ new DillConstructorBuilder(constructor, constructorTearOff, this);
+ String name = constructor.name.text;
+ constructorScopeBuilder.addMember(name, builder);
+ }
+
+ void addFactory(Procedure factory, Procedure? factoryTearOff) {
+ String name = factory.name.text;
+ constructorScopeBuilder.addMember(
+ name, new DillFactoryBuilder(factory, factoryTearOff, this));
+ }
+
+ void addProcedure(Procedure procedure) {
+ String name = procedure.name.text;
+ switch (procedure.kind) {
+ case ProcedureKind.Factory:
+ throw new UnsupportedError("Use addFactory for adding factories");
+ case ProcedureKind.Setter:
+ scopeBuilder.addSetter(name, new DillSetterBuilder(procedure, this));
+ break;
+ case ProcedureKind.Getter:
+ scopeBuilder.addMember(name, new DillGetterBuilder(procedure, this));
+ break;
+ case ProcedureKind.Operator:
+ scopeBuilder.addMember(name, new DillOperatorBuilder(procedure, this));
+ break;
+ case ProcedureKind.Method:
+ scopeBuilder.addMember(name, new DillMethodBuilder(procedure, this));
+ break;
}
}
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index c899e3df..e52ce9a 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -10,6 +10,7 @@
show
Class,
ConstantExpression,
+ Constructor,
DartType,
DynamicType,
Expression,
@@ -48,6 +49,7 @@
templateTypeNotFound,
templateUnspecified;
+import '../kernel/constructor_tearoff_lowering.dart';
import '../kernel/redirecting_factory_body.dart'
show RedirectingFactoryBody, isRedirectingFactoryField;
@@ -167,10 +169,28 @@
}
void addClass(Class cls) {
- DillClassBuilder classBulder = new DillClassBuilder(cls, this);
- addBuilder(cls.name, classBulder, cls.fileOffset);
- cls.procedures.forEach(classBulder.addMember);
- cls.constructors.forEach(classBulder.addMember);
+ DillClassBuilder classBuilder = new DillClassBuilder(cls, this);
+ addBuilder(cls.name, classBuilder, cls.fileOffset);
+ Map<String, Procedure> tearOffs = {};
+ List<Procedure> nonTearOffs = [];
+ for (Procedure procedure in cls.procedures) {
+ String? name = extractConstructorNameFromTearOff(procedure.name);
+ if (name != null) {
+ tearOffs[name] = procedure;
+ } else {
+ nonTearOffs.add(procedure);
+ }
+ }
+ for (Procedure procedure in nonTearOffs) {
+ if (procedure.kind == ProcedureKind.Factory) {
+ classBuilder.addFactory(procedure, tearOffs[procedure.name.text]);
+ } else {
+ classBuilder.addProcedure(procedure);
+ }
+ }
+ for (Constructor constructor in cls.constructors) {
+ classBuilder.addConstructor(constructor, tearOffs[constructor.name.text]);
+ }
for (Field field in cls.fields) {
if (isRedirectingFactoryField(field)) {
ListLiteral initializer = field.initializer as ListLiteral;
@@ -179,7 +199,7 @@
RedirectingFactoryBody.restoreFromDill(get.target as Procedure);
}
} else {
- classBulder.addMember(field);
+ classBuilder.addField(field);
}
}
}
@@ -215,10 +235,6 @@
addBuilder(name, new DillFieldBuilder(member, this), member.fileOffset);
} else if (member is Procedure) {
switch (member.kind) {
- case ProcedureKind.Factory:
- addBuilder(
- name, new DillFactoryBuilder(member, this), member.fileOffset);
- break;
case ProcedureKind.Setter:
addBuilder(
name, new DillSetterBuilder(member, this), member.fileOffset);
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index d076161..54a3158 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -188,13 +188,15 @@
class DillFactoryBuilder extends DillMemberBuilder {
final Procedure procedure;
+ final Procedure? _factoryTearOff;
- DillFactoryBuilder(this.procedure, Builder parent) : super(procedure, parent);
+ DillFactoryBuilder(this.procedure, this._factoryTearOff, Builder parent)
+ : super(procedure, parent);
Member get member => procedure;
@override
- Member? get readTarget => null;
+ Member? get readTarget => _factoryTearOff ?? procedure;
@override
Member? get writeTarget => null;
diff --git a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
index d5c0140..f9863ea 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
@@ -8,14 +8,36 @@
import '../builder/member_builder.dart';
import '../source/source_library_builder.dart';
-/// Creates the synthesized name to use for the lowering of a generative
-/// constructor by the given [constructorName] in [library].
-Name constructorTearOffName(String constructorName, Library library) {
+const String _constructorTearOffNamePrefix = '_#';
+const String _constructorTearOffNameSuffix = '#tearOff';
+
+/// Creates the synthesized name to use for the lowering of the tear off of a
+/// constructor or factory by the given [name] in [library].
+Name constructorTearOffName(String name, Library library) {
return new Name(
- '_#${constructorName.isEmpty ? 'new' : constructorName}#tearOff',
+ '$_constructorTearOffNamePrefix'
+ '${name.isEmpty ? 'new' : name}'
+ '$_constructorTearOffNameSuffix',
library);
}
+/// Returns the name of the corresponding constructor or factory if [name] is
+/// the synthesized name of a lowering of the tear off of a constructor or
+/// factory. Returns `null` otherwise.
+String? extractConstructorNameFromTearOff(Name name) {
+ if (name.text.startsWith(_constructorTearOffNamePrefix) &&
+ name.text.endsWith(_constructorTearOffNameSuffix) &&
+ name.text.length >
+ _constructorTearOffNamePrefix.length +
+ _constructorTearOffNameSuffix.length) {
+ String text = name.text
+ .substring(0, name.text.length - _constructorTearOffNameSuffix.length);
+ text = text.substring(_constructorTearOffNamePrefix.length);
+ return text == 'new' ? '' : text;
+ }
+ return null;
+}
+
/// Creates the [Procedure] for the lowering of a generative constructor of
/// the given [name] in [compilationUnit].
///
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 6f4a1af..07ed5c1 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -142,7 +142,6 @@
bslash
buffered
builder`s
-bulder
bulk
bump
bypassing
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index c241a42..4d4aa59 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -121,9 +121,13 @@
c3d
c4a
c4b
+c4c
+c4d
c59cdee365b94ce066344840f9e3412d642019b
c5a
c5b
+c5c
+c5d
c6a
c6b
c6c
@@ -331,6 +335,7 @@
f4
f4a
f4b
+f4c
f5a
f5b
f6a
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart
new file mode 100644
index 0000000..e9ac4b7
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart
@@ -0,0 +1,107 @@
+// Copyright (c) 2021, 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 'main_lib.dart';
+
+final bool inSoundMode = <int?>[] is! List<int>;
+
+main() {
+ var f1a = Class1.new;
+ var c1a = f1a();
+ expect(true, c1a is Class1);
+
+ dynamic f1b = Class1.new;
+ var c1b = f1b();
+ expect(true, c1b is Class1);
+
+ expect(true, identical(f1a, f1b));
+
+ var f2a = Class2.named;
+ var c2a = f2a();
+ expect(true, c2a is Class2);
+
+ dynamic f2b = Class2.named;
+ var c2b = f2b();
+ expect(true, c2b is Class2);
+
+ expect(true, identical(f2a, f2b));
+
+ var f3a = Class3.new;
+ var c3a = f3a(42);
+ expect(42, c3a.field);
+ () {
+ f3a(); // error
+ f3a(42, 87); // error
+ };
+
+ dynamic f3b = Class3.new;
+ var c3b = f3b(87);
+ expect(87, c3b.field);
+ throws(() => f3b());
+ throws(() => f3b(42, 87));
+
+ var f4a = Class4.new;
+ var c4a = f4a();
+ expect(true, c4a is Class4<dynamic>);
+ expect(false, c4a is Class4<int>);
+ var c4b = f4a<int>();
+ expect(true, c4b is Class4<int>);
+ expect(false, c4b is Class4<String>);
+ () {
+ f4a<int, String>(); // error
+ };
+
+ var f4b = f4a<int>;
+ var c4c = f4b();
+ expect(true, c4c is Class4<int>);
+ expect(false, c4c is Class4<String>);
+ () {
+ f4b<int>(); // error
+ };
+
+ dynamic f4c = Class4.new;
+ var c4d = f4c();
+ expect(true, c4d is Class4<dynamic>);
+ expect(false, c4d is Class4<int>);
+ throws(() => f4c<int, String>());
+
+ var f5a = Class5.new;
+ var c5a = f5a();
+ expect(true, c5a is Class5<num>);
+ expect(false, c5a is Class5<int>);
+ var c5b = f5a<int>();
+ expect(true, c5b is Class5<int>);
+ expect(false, c5b is Class5<double>);
+ () {
+ f5a<String>(); // error
+ f5a<int, String>(); // error
+ };
+
+ dynamic f5b = Class5.new;
+ var c5c = f5b();
+ expect(true, c5c is Class5<num>);
+ expect(false, c5c is Class5<int>);
+ var c5d = f5b<int>();
+ expect(true, c5d is Class5<int>);
+ expect(false, c5d is Class5<double>);
+ throws(() => f5b<String>());
+ throws(() => f5b<int, String>());
+}
+
+expect(expected, actual) {
+ if (expected != actual) throw 'Expected $expected, actual $actual';
+}
+
+throws(Function() f, {bool inSoundModeOnly: false}) {
+ try {
+ f();
+ } catch (e) {
+ print('Thrown: $e');
+ return;
+ }
+ if (!inSoundMode && inSoundModeOnly) {
+ return;
+ }
+ throw 'Expected exception';
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
new file mode 100644
index 0000000..d1c7116
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
@@ -0,0 +1,193 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:34:8: Error: Too few positional arguments: 1 required, 0 given.
+// f3a(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:35:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// f3a(42, 87); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:52:8: Error: Expected 1 type arguments.
+// f4a<int, String>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:60:8: Error: Expected 0 type arguments.
+// f4b<int>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:77:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+// f5a<String>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:78:8: Error: Expected 1 type arguments.
+// f5a<int, String>(); // error
+// ^
+//
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+ () → mai::Class1 f1a = #C1;
+ mai::Class1 c1a = f1a(){() → mai::Class1};
+ self::expect(true, c1a is{ForNonNullableByDefault} mai::Class1);
+ dynamic f1b = #C1;
+ dynamic c1b = f1b{dynamic}.call();
+ self::expect(true, c1b is{ForNonNullableByDefault} mai::Class1);
+ self::expect(true, core::identical(f1a, f1b));
+ () → mai::Class2 f2a = #C2;
+ mai::Class2 c2a = f2a(){() → mai::Class2};
+ self::expect(true, c2a is{ForNonNullableByDefault} mai::Class2);
+ dynamic f2b = #C2;
+ dynamic c2b = f2b{dynamic}.call();
+ self::expect(true, c2b is{ForNonNullableByDefault} mai::Class2);
+ self::expect(true, core::identical(f2a, f2b));
+ (core::int) → mai::Class3 f3a = #C3;
+ mai::Class3 c3a = f3a(42){(core::int) → mai::Class3};
+ self::expect(42, c3a.{mai::Class3::field}{core::int});
+ () → Null {
+ let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:34:8: Error: Too few positional arguments: 1 required, 0 given.
+ f3a(); // error
+ ^" in f3a{<inapplicable>}.();
+ let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:35:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+ f3a(42, 87); // error
+ ^" in f3a{<inapplicable>}.(42, 87);
+ };
+ dynamic f3b = #C3;
+ dynamic c3b = f3b{dynamic}.call(87);
+ self::expect(87, c3b{dynamic}.field);
+ self::throws(() → dynamic => f3b{dynamic}.call());
+ self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
+ <T extends core::Object? = dynamic>() → mai::Class4<T%> f4a = #C4;
+ mai::Class4<dynamic> c4a = f4a<dynamic>(){() → mai::Class4<dynamic>};
+ self::expect(true, c4a is{ForNonNullableByDefault} mai::Class4<dynamic>);
+ self::expect(false, c4a is{ForNonNullableByDefault} mai::Class4<core::int>);
+ mai::Class4<core::int> c4b = f4a<core::int>(){() → mai::Class4<core::int>};
+ self::expect(true, c4b is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::expect(false, c4b is{ForNonNullableByDefault} mai::Class4<core::String>);
+ () → Null {
+ let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:52:8: Error: Expected 1 type arguments.
+ f4a<int, String>(); // error
+ ^" in f4a{<inapplicable>}.<core::int, core::String>();
+ };
+ () → mai::Class4<core::int> f4b = f4a<core::int>;
+ mai::Class4<core::int> c4c = f4b(){() → mai::Class4<core::int>};
+ self::expect(true, c4c is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::expect(false, c4c is{ForNonNullableByDefault} mai::Class4<core::String>);
+ () → Null {
+ let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:60:8: Error: Expected 0 type arguments.
+ f4b<int>(); // error
+ ^" in f4b{<inapplicable>}.<core::int>();
+ };
+ dynamic f4c = #C4;
+ dynamic c4d = f4c{dynamic}.call();
+ self::expect(true, c4d is{ForNonNullableByDefault} mai::Class4<dynamic>);
+ self::expect(false, c4d is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::throws(() → dynamic => f4c{dynamic}.call<core::int, core::String>());
+ <T extends core::num>() → mai::Class5<T> f5a = #C5;
+ mai::Class5<core::num> c5a = f5a<core::num>(){() → mai::Class5<core::num>};
+ self::expect(true, c5a is{ForNonNullableByDefault} mai::Class5<core::num>);
+ self::expect(false, c5a is{ForNonNullableByDefault} mai::Class5<core::int>);
+ mai::Class5<core::int> c5b = f5a<core::int>(){() → mai::Class5<core::int>};
+ self::expect(true, c5b is{ForNonNullableByDefault} mai::Class5<core::int>);
+ self::expect(false, c5b is{ForNonNullableByDefault} mai::Class5<core::double>);
+ () → Null {
+ f5a<core::String>(){() → mai::Class5<core::String>};
+ let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:78:8: Error: Expected 1 type arguments.
+ f5a<int, String>(); // error
+ ^" in f5a{<inapplicable>}.<core::int, core::String>();
+ };
+ dynamic f5b = #C5;
+ dynamic c5c = f5b{dynamic}.call();
+ self::expect(true, c5c is{ForNonNullableByDefault} mai::Class5<core::num>);
+ self::expect(false, c5c is{ForNonNullableByDefault} mai::Class5<core::int>);
+ dynamic c5d = f5b{dynamic}.call<core::int>();
+ self::expect(true, c5d is{ForNonNullableByDefault} mai::Class5<core::int>);
+ self::expect(false, c5d is{ForNonNullableByDefault} mai::Class5<core::double>);
+ self::throws(() → dynamic => f5b{dynamic}.call<core::String>());
+ self::throws(() → dynamic => f5b{dynamic}.call<core::int, core::String>());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
+ try {
+ f(){() → dynamic};
+ }
+ on core::Object catch(final core::Object e) {
+ core::print("Thrown: ${e}");
+ return;
+ }
+ if(!self::inSoundMode && inSoundModeOnly) {
+ return;
+ }
+ throw "Expected exception";
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+ synthetic constructor •() → mai::Class1
+ : super core::Object::•()
+ ;
+ static method _#new#tearOff() → mai::Class1
+ return new mai::Class1::•();
+}
+class Class2 extends core::Object {
+ constructor named() → mai::Class2
+ : super core::Object::•()
+ ;
+ static method _#named#tearOff() → mai::Class2
+ return new mai::Class2::named();
+}
+class Class3 extends core::Object {
+ final field core::int field;
+ constructor •(core::int field) → mai::Class3
+ : mai::Class3::field = field, super core::Object::•()
+ ;
+ static method _#new#tearOff(core::int field) → mai::Class3
+ return new mai::Class3::•(field);
+}
+class Class4<T extends core::Object? = dynamic> extends core::Object {
+ constructor _() → mai::Class4<mai::Class4::T%>
+ : super core::Object::•()
+ ;
+ static method _#_#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#_#tearOff::T%>
+ return new mai::Class4::_<mai::Class4::_#_#tearOff::T%>();
+ static factory •<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::•::T%>
+ return new mai::Class4::_<mai::Class4::•::T%>();
+ static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
+ return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
+}
+class Class5<T extends core::num> extends core::Object {
+ constructor _() → mai::Class5<mai::Class5::T>
+ : super core::Object::•()
+ ;
+ static method _#_#tearOff<T extends core::num>() → mai::Class5<mai::Class5::_#_#tearOff::T>
+ return new mai::Class5::_<mai::Class5::_#_#tearOff::T>();
+ static factory •<T extends core::num>() → mai::Class5<mai::Class5::•::T>
+ return new mai::Class5::_<mai::Class5::•::T>();
+ static method _#new#tearOff<T extends core::num>() → mai::Class5<mai::Class5::_#new#tearOff::T>
+ return mai::Class5::•<mai::Class5::_#new#tearOff::T>();
+}
+
+constants {
+ #C1 = tearoff mai::Class1::_#new#tearOff
+ #C2 = tearoff mai::Class2::_#named#tearOff
+ #C3 = tearoff mai::Class3::_#new#tearOff
+ #C4 = tearoff mai::Class4::_#new#tearOff
+ #C5 = tearoff mai::Class5::_#new#tearOff
+ #C6 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..f476c02
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
@@ -0,0 +1,193 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:34:8: Error: Too few positional arguments: 1 required, 0 given.
+// f3a(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:35:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// f3a(42, 87); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:52:8: Error: Expected 1 type arguments.
+// f4a<int, String>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:60:8: Error: Expected 0 type arguments.
+// f4b<int>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:77:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+// f5a<String>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:78:8: Error: Expected 1 type arguments.
+// f5a<int, String>(); // error
+// ^
+//
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+ () → mai::Class1 f1a = #C1;
+ mai::Class1 c1a = f1a(){() → mai::Class1};
+ self::expect(true, c1a is{ForNonNullableByDefault} mai::Class1);
+ dynamic f1b = #C1;
+ dynamic c1b = f1b{dynamic}.call();
+ self::expect(true, c1b is{ForNonNullableByDefault} mai::Class1);
+ self::expect(true, core::identical(f1a, f1b));
+ () → mai::Class2 f2a = #C2;
+ mai::Class2 c2a = f2a(){() → mai::Class2};
+ self::expect(true, c2a is{ForNonNullableByDefault} mai::Class2);
+ dynamic f2b = #C2;
+ dynamic c2b = f2b{dynamic}.call();
+ self::expect(true, c2b is{ForNonNullableByDefault} mai::Class2);
+ self::expect(true, core::identical(f2a, f2b));
+ (core::int) → mai::Class3 f3a = #C3;
+ mai::Class3 c3a = f3a(42){(core::int) → mai::Class3};
+ self::expect(42, c3a.{mai::Class3::field}{core::int});
+ () → Null {
+ let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:34:8: Error: Too few positional arguments: 1 required, 0 given.
+ f3a(); // error
+ ^" in f3a{<inapplicable>}.();
+ let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:35:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+ f3a(42, 87); // error
+ ^" in f3a{<inapplicable>}.(42, 87);
+ };
+ dynamic f3b = #C3;
+ dynamic c3b = f3b{dynamic}.call(87);
+ self::expect(87, c3b{dynamic}.field);
+ self::throws(() → dynamic => f3b{dynamic}.call());
+ self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
+ <T extends core::Object? = dynamic>() → mai::Class4<T%> f4a = #C4;
+ mai::Class4<dynamic> c4a = f4a<dynamic>(){() → mai::Class4<dynamic>};
+ self::expect(true, c4a is{ForNonNullableByDefault} mai::Class4<dynamic>);
+ self::expect(false, c4a is{ForNonNullableByDefault} mai::Class4<core::int>);
+ mai::Class4<core::int> c4b = f4a<core::int>(){() → mai::Class4<core::int>};
+ self::expect(true, c4b is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::expect(false, c4b is{ForNonNullableByDefault} mai::Class4<core::String>);
+ () → Null {
+ let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:52:8: Error: Expected 1 type arguments.
+ f4a<int, String>(); // error
+ ^" in f4a{<inapplicable>}.<core::int, core::String>();
+ };
+ () → mai::Class4<core::int> f4b = f4a<core::int>;
+ mai::Class4<core::int> c4c = f4b(){() → mai::Class4<core::int>};
+ self::expect(true, c4c is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::expect(false, c4c is{ForNonNullableByDefault} mai::Class4<core::String>);
+ () → Null {
+ let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:60:8: Error: Expected 0 type arguments.
+ f4b<int>(); // error
+ ^" in f4b{<inapplicable>}.<core::int>();
+ };
+ dynamic f4c = #C4;
+ dynamic c4d = f4c{dynamic}.call();
+ self::expect(true, c4d is{ForNonNullableByDefault} mai::Class4<dynamic>);
+ self::expect(false, c4d is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::throws(() → dynamic => f4c{dynamic}.call<core::int, core::String>());
+ <T extends core::num>() → mai::Class5<T> f5a = #C5;
+ mai::Class5<core::num> c5a = f5a<core::num>(){() → mai::Class5<core::num>};
+ self::expect(true, c5a is{ForNonNullableByDefault} mai::Class5<core::num>);
+ self::expect(false, c5a is{ForNonNullableByDefault} mai::Class5<core::int>);
+ mai::Class5<core::int> c5b = f5a<core::int>(){() → mai::Class5<core::int>};
+ self::expect(true, c5b is{ForNonNullableByDefault} mai::Class5<core::int>);
+ self::expect(false, c5b is{ForNonNullableByDefault} mai::Class5<core::double>);
+ () → Null {
+ f5a<core::String>(){() → mai::Class5<core::String>};
+ let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:78:8: Error: Expected 1 type arguments.
+ f5a<int, String>(); // error
+ ^" in f5a{<inapplicable>}.<core::int, core::String>();
+ };
+ dynamic f5b = #C5;
+ dynamic c5c = f5b{dynamic}.call();
+ self::expect(true, c5c is{ForNonNullableByDefault} mai::Class5<core::num>);
+ self::expect(false, c5c is{ForNonNullableByDefault} mai::Class5<core::int>);
+ dynamic c5d = f5b{dynamic}.call<core::int>();
+ self::expect(true, c5d is{ForNonNullableByDefault} mai::Class5<core::int>);
+ self::expect(false, c5d is{ForNonNullableByDefault} mai::Class5<core::double>);
+ self::throws(() → dynamic => f5b{dynamic}.call<core::String>());
+ self::throws(() → dynamic => f5b{dynamic}.call<core::int, core::String>());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
+ try {
+ f(){() → dynamic};
+ }
+ on core::Object catch(final core::Object e) {
+ core::print("Thrown: ${e}");
+ return;
+ }
+ if(!self::inSoundMode && inSoundModeOnly) {
+ return;
+ }
+ throw "Expected exception";
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+ synthetic constructor •() → mai::Class1
+ : super core::Object::•()
+ ;
+ static method _#new#tearOff() → mai::Class1
+ return new mai::Class1::•();
+}
+class Class2 extends core::Object {
+ constructor named() → mai::Class2
+ : super core::Object::•()
+ ;
+ static method _#named#tearOff() → mai::Class2
+ return new mai::Class2::named();
+}
+class Class3 extends core::Object {
+ final field core::int field;
+ constructor •(core::int field) → mai::Class3
+ : mai::Class3::field = field, super core::Object::•()
+ ;
+ static method _#new#tearOff(core::int field) → mai::Class3
+ return new mai::Class3::•(field);
+}
+class Class4<T extends core::Object? = dynamic> extends core::Object {
+ constructor _() → mai::Class4<mai::Class4::T%>
+ : super core::Object::•()
+ ;
+ static method _#_#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#_#tearOff::T%>
+ return new mai::Class4::_<mai::Class4::_#_#tearOff::T%>();
+ static factory •<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::•::T%>
+ return new mai::Class4::_<mai::Class4::•::T%>();
+ static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
+ return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
+}
+class Class5<T extends core::num> extends core::Object {
+ constructor _() → mai::Class5<mai::Class5::T>
+ : super core::Object::•()
+ ;
+ static method _#_#tearOff<T extends core::num>() → mai::Class5<mai::Class5::_#_#tearOff::T>
+ return new mai::Class5::_<mai::Class5::_#_#tearOff::T>();
+ static factory •<T extends core::num>() → mai::Class5<mai::Class5::•::T>
+ return new mai::Class5::_<mai::Class5::•::T>();
+ static method _#new#tearOff<T extends core::num>() → mai::Class5<mai::Class5::_#new#tearOff::T>
+ return mai::Class5::•<mai::Class5::_#new#tearOff::T>();
+}
+
+constants {
+ #C1 = tearoff mai::Class1::_#new#tearOff
+ #C2 = tearoff mai::Class2::_#named#tearOff
+ #C3 = tearoff mai::Class3::_#new#tearOff
+ #C4 = tearoff mai::Class4::_#new#tearOff
+ #C5 = tearoff mai::Class5::_#new#tearOff
+ #C6 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.textual_outline.expect
new file mode 100644
index 0000000..4166ca7
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+import 'main_lib.dart';
+
+final bool inSoundMode = <int?>[] is! List<int>;
+main() {}
+expect(expected, actual) {}
+throws(Function() f, {bool inSoundModeOnly: false}) {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..26f0c41
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+import 'main_lib.dart';
+
+expect(expected, actual) {}
+final bool inSoundMode = <int?>[] is! List<int>;
+main() {}
+throws(Function() f, {bool inSoundModeOnly: false}) {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
new file mode 100644
index 0000000..d1c7116
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
@@ -0,0 +1,193 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:34:8: Error: Too few positional arguments: 1 required, 0 given.
+// f3a(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:35:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// f3a(42, 87); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:52:8: Error: Expected 1 type arguments.
+// f4a<int, String>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:60:8: Error: Expected 0 type arguments.
+// f4b<int>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:77:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+// f5a<String>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:78:8: Error: Expected 1 type arguments.
+// f5a<int, String>(); // error
+// ^
+//
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+ () → mai::Class1 f1a = #C1;
+ mai::Class1 c1a = f1a(){() → mai::Class1};
+ self::expect(true, c1a is{ForNonNullableByDefault} mai::Class1);
+ dynamic f1b = #C1;
+ dynamic c1b = f1b{dynamic}.call();
+ self::expect(true, c1b is{ForNonNullableByDefault} mai::Class1);
+ self::expect(true, core::identical(f1a, f1b));
+ () → mai::Class2 f2a = #C2;
+ mai::Class2 c2a = f2a(){() → mai::Class2};
+ self::expect(true, c2a is{ForNonNullableByDefault} mai::Class2);
+ dynamic f2b = #C2;
+ dynamic c2b = f2b{dynamic}.call();
+ self::expect(true, c2b is{ForNonNullableByDefault} mai::Class2);
+ self::expect(true, core::identical(f2a, f2b));
+ (core::int) → mai::Class3 f3a = #C3;
+ mai::Class3 c3a = f3a(42){(core::int) → mai::Class3};
+ self::expect(42, c3a.{mai::Class3::field}{core::int});
+ () → Null {
+ let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:34:8: Error: Too few positional arguments: 1 required, 0 given.
+ f3a(); // error
+ ^" in f3a{<inapplicable>}.();
+ let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:35:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+ f3a(42, 87); // error
+ ^" in f3a{<inapplicable>}.(42, 87);
+ };
+ dynamic f3b = #C3;
+ dynamic c3b = f3b{dynamic}.call(87);
+ self::expect(87, c3b{dynamic}.field);
+ self::throws(() → dynamic => f3b{dynamic}.call());
+ self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
+ <T extends core::Object? = dynamic>() → mai::Class4<T%> f4a = #C4;
+ mai::Class4<dynamic> c4a = f4a<dynamic>(){() → mai::Class4<dynamic>};
+ self::expect(true, c4a is{ForNonNullableByDefault} mai::Class4<dynamic>);
+ self::expect(false, c4a is{ForNonNullableByDefault} mai::Class4<core::int>);
+ mai::Class4<core::int> c4b = f4a<core::int>(){() → mai::Class4<core::int>};
+ self::expect(true, c4b is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::expect(false, c4b is{ForNonNullableByDefault} mai::Class4<core::String>);
+ () → Null {
+ let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:52:8: Error: Expected 1 type arguments.
+ f4a<int, String>(); // error
+ ^" in f4a{<inapplicable>}.<core::int, core::String>();
+ };
+ () → mai::Class4<core::int> f4b = f4a<core::int>;
+ mai::Class4<core::int> c4c = f4b(){() → mai::Class4<core::int>};
+ self::expect(true, c4c is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::expect(false, c4c is{ForNonNullableByDefault} mai::Class4<core::String>);
+ () → Null {
+ let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:60:8: Error: Expected 0 type arguments.
+ f4b<int>(); // error
+ ^" in f4b{<inapplicable>}.<core::int>();
+ };
+ dynamic f4c = #C4;
+ dynamic c4d = f4c{dynamic}.call();
+ self::expect(true, c4d is{ForNonNullableByDefault} mai::Class4<dynamic>);
+ self::expect(false, c4d is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::throws(() → dynamic => f4c{dynamic}.call<core::int, core::String>());
+ <T extends core::num>() → mai::Class5<T> f5a = #C5;
+ mai::Class5<core::num> c5a = f5a<core::num>(){() → mai::Class5<core::num>};
+ self::expect(true, c5a is{ForNonNullableByDefault} mai::Class5<core::num>);
+ self::expect(false, c5a is{ForNonNullableByDefault} mai::Class5<core::int>);
+ mai::Class5<core::int> c5b = f5a<core::int>(){() → mai::Class5<core::int>};
+ self::expect(true, c5b is{ForNonNullableByDefault} mai::Class5<core::int>);
+ self::expect(false, c5b is{ForNonNullableByDefault} mai::Class5<core::double>);
+ () → Null {
+ f5a<core::String>(){() → mai::Class5<core::String>};
+ let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:78:8: Error: Expected 1 type arguments.
+ f5a<int, String>(); // error
+ ^" in f5a{<inapplicable>}.<core::int, core::String>();
+ };
+ dynamic f5b = #C5;
+ dynamic c5c = f5b{dynamic}.call();
+ self::expect(true, c5c is{ForNonNullableByDefault} mai::Class5<core::num>);
+ self::expect(false, c5c is{ForNonNullableByDefault} mai::Class5<core::int>);
+ dynamic c5d = f5b{dynamic}.call<core::int>();
+ self::expect(true, c5d is{ForNonNullableByDefault} mai::Class5<core::int>);
+ self::expect(false, c5d is{ForNonNullableByDefault} mai::Class5<core::double>);
+ self::throws(() → dynamic => f5b{dynamic}.call<core::String>());
+ self::throws(() → dynamic => f5b{dynamic}.call<core::int, core::String>());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
+ try {
+ f(){() → dynamic};
+ }
+ on core::Object catch(final core::Object e) {
+ core::print("Thrown: ${e}");
+ return;
+ }
+ if(!self::inSoundMode && inSoundModeOnly) {
+ return;
+ }
+ throw "Expected exception";
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+ synthetic constructor •() → mai::Class1
+ : super core::Object::•()
+ ;
+ static method _#new#tearOff() → mai::Class1
+ return new mai::Class1::•();
+}
+class Class2 extends core::Object {
+ constructor named() → mai::Class2
+ : super core::Object::•()
+ ;
+ static method _#named#tearOff() → mai::Class2
+ return new mai::Class2::named();
+}
+class Class3 extends core::Object {
+ final field core::int field;
+ constructor •(core::int field) → mai::Class3
+ : mai::Class3::field = field, super core::Object::•()
+ ;
+ static method _#new#tearOff(core::int field) → mai::Class3
+ return new mai::Class3::•(field);
+}
+class Class4<T extends core::Object? = dynamic> extends core::Object {
+ constructor _() → mai::Class4<mai::Class4::T%>
+ : super core::Object::•()
+ ;
+ static method _#_#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#_#tearOff::T%>
+ return new mai::Class4::_<mai::Class4::_#_#tearOff::T%>();
+ static factory •<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::•::T%>
+ return new mai::Class4::_<mai::Class4::•::T%>();
+ static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
+ return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
+}
+class Class5<T extends core::num> extends core::Object {
+ constructor _() → mai::Class5<mai::Class5::T>
+ : super core::Object::•()
+ ;
+ static method _#_#tearOff<T extends core::num>() → mai::Class5<mai::Class5::_#_#tearOff::T>
+ return new mai::Class5::_<mai::Class5::_#_#tearOff::T>();
+ static factory •<T extends core::num>() → mai::Class5<mai::Class5::•::T>
+ return new mai::Class5::_<mai::Class5::•::T>();
+ static method _#new#tearOff<T extends core::num>() → mai::Class5<mai::Class5::_#new#tearOff::T>
+ return mai::Class5::•<mai::Class5::_#new#tearOff::T>();
+}
+
+constants {
+ #C1 = tearoff mai::Class1::_#new#tearOff
+ #C2 = tearoff mai::Class2::_#named#tearOff
+ #C3 = tearoff mai::Class3::_#new#tearOff
+ #C4 = tearoff mai::Class4::_#new#tearOff
+ #C5 = tearoff mai::Class5::_#new#tearOff
+ #C6 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
new file mode 100644
index 0000000..2591204
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+static final field core::bool inSoundMode;
+static method main() → dynamic
+ ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+ ;
+static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+ ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+ synthetic constructor •() → self2::Class1
+ ;
+ static method _#new#tearOff() → self2::Class1
+ return new self2::Class1::•();
+}
+class Class2 extends core::Object {
+ constructor named() → self2::Class2
+ ;
+ static method _#named#tearOff() → self2::Class2
+ return new self2::Class2::named();
+}
+class Class3 extends core::Object {
+ final field core::int field;
+ constructor •(core::int field) → self2::Class3
+ ;
+ static method _#new#tearOff(core::int field) → self2::Class3
+ return new self2::Class3::•(field);
+}
+class Class4<T extends core::Object? = dynamic> extends core::Object {
+ constructor _() → self2::Class4<self2::Class4::T%>
+ ;
+ static method _#_#tearOff<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::_#_#tearOff::T%>
+ return new self2::Class4::_<self2::Class4::_#_#tearOff::T%>();
+ static factory •<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::•::T%>
+ ;
+ static method _#new#tearOff<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::_#new#tearOff::T%>
+ return self2::Class4::•<self2::Class4::_#new#tearOff::T%>();
+}
+class Class5<T extends core::num> extends core::Object {
+ constructor _() → self2::Class5<self2::Class5::T>
+ ;
+ static method _#_#tearOff<T extends core::num>() → self2::Class5<self2::Class5::_#_#tearOff::T>
+ return new self2::Class5::_<self2::Class5::_#_#tearOff::T>();
+ static factory •<T extends core::num>() → self2::Class5<self2::Class5::•::T>
+ ;
+ static method _#new#tearOff<T extends core::num>() → self2::Class5<self2::Class5::_#new#tearOff::T>
+ return self2::Class5::•<self2::Class5::_#new#tearOff::T>();
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..f476c02
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
@@ -0,0 +1,193 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:34:8: Error: Too few positional arguments: 1 required, 0 given.
+// f3a(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:35:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+// f3a(42, 87); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:52:8: Error: Expected 1 type arguments.
+// f4a<int, String>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:60:8: Error: Expected 0 type arguments.
+// f4b<int>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:77:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+// f5a<String>(); // error
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:78:8: Error: Expected 1 type arguments.
+// f5a<int, String>(); // error
+// ^
+//
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+ () → mai::Class1 f1a = #C1;
+ mai::Class1 c1a = f1a(){() → mai::Class1};
+ self::expect(true, c1a is{ForNonNullableByDefault} mai::Class1);
+ dynamic f1b = #C1;
+ dynamic c1b = f1b{dynamic}.call();
+ self::expect(true, c1b is{ForNonNullableByDefault} mai::Class1);
+ self::expect(true, core::identical(f1a, f1b));
+ () → mai::Class2 f2a = #C2;
+ mai::Class2 c2a = f2a(){() → mai::Class2};
+ self::expect(true, c2a is{ForNonNullableByDefault} mai::Class2);
+ dynamic f2b = #C2;
+ dynamic c2b = f2b{dynamic}.call();
+ self::expect(true, c2b is{ForNonNullableByDefault} mai::Class2);
+ self::expect(true, core::identical(f2a, f2b));
+ (core::int) → mai::Class3 f3a = #C3;
+ mai::Class3 c3a = f3a(42){(core::int) → mai::Class3};
+ self::expect(42, c3a.{mai::Class3::field}{core::int});
+ () → Null {
+ let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:34:8: Error: Too few positional arguments: 1 required, 0 given.
+ f3a(); // error
+ ^" in f3a{<inapplicable>}.();
+ let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:35:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+ f3a(42, 87); // error
+ ^" in f3a{<inapplicable>}.(42, 87);
+ };
+ dynamic f3b = #C3;
+ dynamic c3b = f3b{dynamic}.call(87);
+ self::expect(87, c3b{dynamic}.field);
+ self::throws(() → dynamic => f3b{dynamic}.call());
+ self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
+ <T extends core::Object? = dynamic>() → mai::Class4<T%> f4a = #C4;
+ mai::Class4<dynamic> c4a = f4a<dynamic>(){() → mai::Class4<dynamic>};
+ self::expect(true, c4a is{ForNonNullableByDefault} mai::Class4<dynamic>);
+ self::expect(false, c4a is{ForNonNullableByDefault} mai::Class4<core::int>);
+ mai::Class4<core::int> c4b = f4a<core::int>(){() → mai::Class4<core::int>};
+ self::expect(true, c4b is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::expect(false, c4b is{ForNonNullableByDefault} mai::Class4<core::String>);
+ () → Null {
+ let final Never #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:52:8: Error: Expected 1 type arguments.
+ f4a<int, String>(); // error
+ ^" in f4a{<inapplicable>}.<core::int, core::String>();
+ };
+ () → mai::Class4<core::int> f4b = f4a<core::int>;
+ mai::Class4<core::int> c4c = f4b(){() → mai::Class4<core::int>};
+ self::expect(true, c4c is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::expect(false, c4c is{ForNonNullableByDefault} mai::Class4<core::String>);
+ () → Null {
+ let final Never #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:60:8: Error: Expected 0 type arguments.
+ f4b<int>(); // error
+ ^" in f4b{<inapplicable>}.<core::int>();
+ };
+ dynamic f4c = #C4;
+ dynamic c4d = f4c{dynamic}.call();
+ self::expect(true, c4d is{ForNonNullableByDefault} mai::Class4<dynamic>);
+ self::expect(false, c4d is{ForNonNullableByDefault} mai::Class4<core::int>);
+ self::throws(() → dynamic => f4c{dynamic}.call<core::int, core::String>());
+ <T extends core::num>() → mai::Class5<T> f5a = #C5;
+ mai::Class5<core::num> c5a = f5a<core::num>(){() → mai::Class5<core::num>};
+ self::expect(true, c5a is{ForNonNullableByDefault} mai::Class5<core::num>);
+ self::expect(false, c5a is{ForNonNullableByDefault} mai::Class5<core::int>);
+ mai::Class5<core::int> c5b = f5a<core::int>(){() → mai::Class5<core::int>};
+ self::expect(true, c5b is{ForNonNullableByDefault} mai::Class5<core::int>);
+ self::expect(false, c5b is{ForNonNullableByDefault} mai::Class5<core::double>);
+ () → Null {
+ f5a<core::String>(){() → mai::Class5<core::String>};
+ let final Never #t5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:78:8: Error: Expected 1 type arguments.
+ f5a<int, String>(); // error
+ ^" in f5a{<inapplicable>}.<core::int, core::String>();
+ };
+ dynamic f5b = #C5;
+ dynamic c5c = f5b{dynamic}.call();
+ self::expect(true, c5c is{ForNonNullableByDefault} mai::Class5<core::num>);
+ self::expect(false, c5c is{ForNonNullableByDefault} mai::Class5<core::int>);
+ dynamic c5d = f5b{dynamic}.call<core::int>();
+ self::expect(true, c5d is{ForNonNullableByDefault} mai::Class5<core::int>);
+ self::expect(false, c5d is{ForNonNullableByDefault} mai::Class5<core::double>);
+ self::throws(() → dynamic => f5b{dynamic}.call<core::String>());
+ self::throws(() → dynamic => f5b{dynamic}.call<core::int, core::String>());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
+ try {
+ f(){() → dynamic};
+ }
+ on core::Object catch(final core::Object e) {
+ core::print("Thrown: ${e}");
+ return;
+ }
+ if(!self::inSoundMode && inSoundModeOnly) {
+ return;
+ }
+ throw "Expected exception";
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+ synthetic constructor •() → mai::Class1
+ : super core::Object::•()
+ ;
+ static method _#new#tearOff() → mai::Class1
+ return new mai::Class1::•();
+}
+class Class2 extends core::Object {
+ constructor named() → mai::Class2
+ : super core::Object::•()
+ ;
+ static method _#named#tearOff() → mai::Class2
+ return new mai::Class2::named();
+}
+class Class3 extends core::Object {
+ final field core::int field;
+ constructor •(core::int field) → mai::Class3
+ : mai::Class3::field = field, super core::Object::•()
+ ;
+ static method _#new#tearOff(core::int field) → mai::Class3
+ return new mai::Class3::•(field);
+}
+class Class4<T extends core::Object? = dynamic> extends core::Object {
+ constructor _() → mai::Class4<mai::Class4::T%>
+ : super core::Object::•()
+ ;
+ static method _#_#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#_#tearOff::T%>
+ return new mai::Class4::_<mai::Class4::_#_#tearOff::T%>();
+ static factory •<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::•::T%>
+ return new mai::Class4::_<mai::Class4::•::T%>();
+ static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
+ return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
+}
+class Class5<T extends core::num> extends core::Object {
+ constructor _() → mai::Class5<mai::Class5::T>
+ : super core::Object::•()
+ ;
+ static method _#_#tearOff<T extends core::num>() → mai::Class5<mai::Class5::_#_#tearOff::T>
+ return new mai::Class5::_<mai::Class5::_#_#tearOff::T>();
+ static factory •<T extends core::num>() → mai::Class5<mai::Class5::•::T>
+ return new mai::Class5::_<mai::Class5::•::T>();
+ static method _#new#tearOff<T extends core::num>() → mai::Class5<mai::Class5::_#new#tearOff::T>
+ return mai::Class5::•<mai::Class5::_#new#tearOff::T>();
+}
+
+constants {
+ #C1 = tearoff mai::Class1::_#new#tearOff
+ #C2 = tearoff mai::Class2::_#named#tearOff
+ #C3 = tearoff mai::Class3::_#new#tearOff
+ #C4 = tearoff mai::Class4::_#new#tearOff
+ #C5 = tearoff mai::Class5::_#new#tearOff
+ #C6 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main_lib.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main_lib.dart
new file mode 100644
index 0000000..f50d3cd
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main_lib.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, 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 Class1 {}
+
+class Class2 {
+ Class2.named();
+}
+
+class Class3 {
+ final int field;
+
+ Class3(this.field);
+}
+
+class Class4<T> {
+ Class4._();
+ factory Class4() => new Class4<T>._();
+}
+
+class Class5<T extends num> {
+ Class5._();
+ factory Class5() => new Class5<T>._();
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/test.options b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/test.options
new file mode 100644
index 0000000..bfe6dc8
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/test.options
@@ -0,0 +1 @@
+main_lib.dart
\ No newline at end of file
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 3f78529..03628bb 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -13477,7 +13477,7 @@
/// Write List<Byte> into the sink.
void writeByteList(List<int> bytes);
- void writeNullAllowedCanonicalNameReference(CanonicalName name);
+ void writeNullAllowedCanonicalNameReference(CanonicalName? name);
void writeStringReference(String str);
void writeName(Name node);
void writeDartType(DartType type);
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index 8d01d1f..7c4b76b 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -256,7 +256,7 @@
Map<String, String>? environmentDefines,
DiagnosticReporter diagnosticReporter,
ReferenceFromIndex? referenceFromIndex,
- {void logger(String msg),
+ {void Function(String msg)? logger,
ChangedStructureNotifier? changedStructureNotifier});
/// Perform target-specific modular transformations on the given program.
diff --git a/pkg/vm/bin/gen_kernel.dart b/pkg/vm/bin/gen_kernel.dart
index ed2ab26..5545e18 100644
--- a/pkg/vm/bin/gen_kernel.dart
+++ b/pkg/vm/bin/gen_kernel.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:async';
import 'dart:io' as io;
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index 4c46e9e..eb69ce4 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// This is an interface to the Dart Kernel parser and Kernel binary generator.
///
/// It is used by the kernel-isolate to load Dart source code and generate
diff --git a/pkg/vm/bin/protobuf_aware_treeshaker.dart b/pkg/vm/bin/protobuf_aware_treeshaker.dart
index 69aa466..8ee0887 100644
--- a/pkg/vm/bin/protobuf_aware_treeshaker.dart
+++ b/pkg/vm/bin/protobuf_aware_treeshaker.dart
@@ -3,6 +3,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// This program will take a .dill file and do a protobuf aware tree-shaking.
///
/// All fields of GeneratedMessage subclasses that are not accessed with their
diff --git a/pkg/vm/lib/dominators.dart b/pkg/vm/lib/dominators.dart
index 19c5d84..f3b71ed 100644
--- a/pkg/vm/lib/dominators.dart
+++ b/pkg/vm/lib/dominators.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.
-library vm.dominators;
+// @dart=2.9
class Vertex<T extends Vertex<T>> {
// Input: vertices directly reachable from this vertex.
diff --git a/pkg/vm/lib/http_filesystem.dart b/pkg/vm/lib/http_filesystem.dart
index cd8e42a..401d859 100644
--- a/pkg/vm/lib/http_filesystem.dart
+++ b/pkg/vm/lib/http_filesystem.dart
@@ -1,3 +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.
+
+// @dart=2.9
+
import 'dart:async';
import 'dart:io' as io;
diff --git a/pkg/vm/lib/incremental_compiler.dart b/pkg/vm/lib/incremental_compiler.dart
index f2f483f..5179a44 100644
--- a/pkg/vm/lib/incremental_compiler.dart
+++ b/pkg/vm/lib/incremental_compiler.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// Defines wrapper class around incremental compiler to support
/// the flow, where incremental deltas can be rejected by VM.
import 'dart:async';
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 0458451..43d5a59 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// Defines the VM-specific translation of Dart source code to kernel binaries.
library vm.kernel_front_end;
diff --git a/pkg/vm/lib/metadata/direct_call.dart b/pkg/vm/lib/metadata/direct_call.dart
index 8e4298b..3539978 100644
--- a/pkg/vm/lib/metadata/direct_call.dart
+++ b/pkg/vm/lib/metadata/direct_call.dart
@@ -14,7 +14,7 @@
DirectCallMetadata(Member target, bool checkReceiverForNull)
: this.byReference(
- getMemberReferenceGetter(target), checkReceiverForNull);
+ getNonNullableMemberReferenceGetter(target), checkReceiverForNull);
DirectCallMetadata.byReference(
this._targetReference, this.checkReceiverForNull);
diff --git a/pkg/vm/lib/metadata/inferred_type.dart b/pkg/vm/lib/metadata/inferred_type.dart
index 4d609fd..6f23f6e 100644
--- a/pkg/vm/lib/metadata/inferred_type.dart
+++ b/pkg/vm/lib/metadata/inferred_type.dart
@@ -9,8 +9,8 @@
/// Metadata for annotating nodes with an inferred type information.
class InferredType {
- final Reference _concreteClassReference;
- final Constant _constantValue;
+ final Reference? _concreteClassReference;
+ final Constant? _constantValue;
final int _flags;
static const int flagNullable = 1 << 0;
@@ -31,11 +31,11 @@
//
// Otherwise, a non-null type argument indicates that that particular type
// argument (in the runtime type) is always exactly a particular `DartType`.
- final List<DartType> exactTypeArguments;
+ final List<DartType?>? exactTypeArguments;
InferredType(
- Class concreteClass, bool nullable, bool isInt, Constant constantValue,
- {List<DartType> exactTypeArguments,
+ Class? concreteClass, bool nullable, bool isInt, Constant? constantValue,
+ {List<DartType?>? exactTypeArguments,
bool skipCheck: false,
bool receiverNotInt: false})
: this._byReference(
@@ -54,9 +54,9 @@
assert(_constantValue == null || _concreteClassReference != null);
}
- Class get concreteClass => _concreteClassReference?.asClass;
+ Class? get concreteClass => _concreteClassReference?.asClass;
- Constant get constantValue => _constantValue;
+ Constant? get constantValue => _constantValue;
bool get nullable => (_flags & flagNullable) != 0;
bool get isInt => (_flags & flagInt) != 0;
@@ -69,7 +69,7 @@
String toString() {
final StringBuffer buf = new StringBuffer();
if (concreteClass != null) {
- buf.write(concreteClass.toText(astTextStrategyForTesting));
+ buf.write(concreteClass!.toText(astTextStrategyForTesting));
} else if (isInt) {
buf.write('int');
} else {
@@ -80,7 +80,7 @@
}
if (exactTypeArguments != null) {
buf.write('<');
- buf.write(exactTypeArguments
+ buf.write(exactTypeArguments!
.map(
(t) => t != null ? "${t.toText(astTextStrategyForTesting)}" : "?")
.join(", "));
@@ -91,7 +91,7 @@
}
if (_constantValue != null) {
buf.write(
- ' (value: ${_constantValue.toText(astTextStrategyForTesting)})');
+ ' (value: ${_constantValue!.toText(astTextStrategyForTesting)})');
}
if (receiverNotInt) {
buf.write(' (receiver not int)');
@@ -115,11 +115,11 @@
// TODO(sjindel/tfa): Implement serialization of type arguments when can use
// them for optimizations.
sink.writeNullAllowedCanonicalNameReference(metadata.concreteClass != null
- ? getCanonicalNameOfClass(metadata.concreteClass)
+ ? getCanonicalNameOfClass(metadata.concreteClass!)
: null);
sink.writeByte(metadata._flags);
if (metadata.constantValue != null) {
- sink.writeConstantReference(metadata.constantValue);
+ sink.writeConstantReference(metadata.constantValue!);
}
}
diff --git a/pkg/vm/lib/metadata/unboxing_info.dart b/pkg/vm/lib/metadata/unboxing_info.dart
index 7069c05..64646a7 100644
--- a/pkg/vm/lib/metadata/unboxing_info.dart
+++ b/pkg/vm/lib/metadata/unboxing_info.dart
@@ -14,11 +14,12 @@
final List<int> unboxedArgsInfo;
int returnInfo;
- UnboxingInfoMetadata(int argsLen) : unboxedArgsInfo = [] {
+ UnboxingInfoMetadata(int argsLen)
+ : unboxedArgsInfo = [],
+ returnInfo = kUnboxingCandidate {
for (int i = 0; i < argsLen; i++) {
unboxedArgsInfo.add(kUnboxingCandidate);
}
- returnInfo = kUnboxingCandidate;
}
UnboxingInfoMetadata.readFromBinary(BinarySource source)
diff --git a/pkg/vm/lib/target/dart_runner.dart b/pkg/vm/lib/target/dart_runner.dart
index 928863c..c1df052 100644
--- a/pkg/vm/lib/target/dart_runner.dart
+++ b/pkg/vm/lib/target/dart_runner.dart
@@ -1,7 +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.
-library vm.target.dart_runner;
+
+// @dart=2.9
import 'package:kernel/target/targets.dart';
import 'package:vm/target/vm.dart' show VmTarget;
diff --git a/pkg/vm/lib/target/flutter.dart b/pkg/vm/lib/target/flutter.dart
index 7746e98..3ffdc12 100644
--- a/pkg/vm/lib/target/flutter.dart
+++ b/pkg/vm/lib/target/flutter.dart
@@ -1,7 +1,8 @@
// 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.
-library vm.target.flutter;
+
+// @dart=2.9
import 'package:kernel/ast.dart' show Component, Library;
import 'package:kernel/core_types.dart' show CoreTypes;
@@ -56,7 +57,7 @@
CoreTypes coreTypes,
List<Library> libraries,
DiagnosticReporter diagnosticReporter,
- {void logger(String msg),
+ {void Function(String msg) logger,
ChangedStructureNotifier changedStructureNotifier}) {
super.performPreConstantEvaluationTransformations(
component, coreTypes, libraries, diagnosticReporter,
diff --git a/pkg/vm/lib/target/flutter_runner.dart b/pkg/vm/lib/target/flutter_runner.dart
index 9a2b477..a9c41ac 100644
--- a/pkg/vm/lib/target/flutter_runner.dart
+++ b/pkg/vm/lib/target/flutter_runner.dart
@@ -1,7 +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.
-library vm.target.flutter_runner;
+
+// @dart=2.9
import 'package:kernel/target/targets.dart';
import 'package:vm/target/vm.dart' show VmTarget;
diff --git a/pkg/vm/lib/target/install.dart b/pkg/vm/lib/target/install.dart
index 4973418..d691d28 100644
--- a/pkg/vm/lib/target/install.dart
+++ b/pkg/vm/lib/target/install.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.
-library vm.target.install;
+// @dart=2.9
import 'package:kernel/target/targets.dart' show targets, TargetFlags;
import 'package:vm/target/dart_runner.dart' show DartRunnerTarget;
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 3230605..07a1b8c 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -1,7 +1,8 @@
// 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.
-library vm.target.vm;
+
+// @dart=2.9
import 'package:kernel/ast.dart';
import 'package:kernel/clone.dart';
@@ -111,9 +112,9 @@
// support patching fields.
// See http://dartbug.com/32836 for the background.
final Field host =
- coreTypes.index.getMember('dart:typed_data', 'Endian', 'host');
+ coreTypes.index.getField('dart:typed_data', 'Endian', 'host');
final Field little =
- coreTypes.index.getMember('dart:typed_data', 'Endian', 'little');
+ coreTypes.index.getField('dart:typed_data', 'Endian', 'little');
host.isConst = true;
host.initializer = new CloneVisitorNotMembers().clone(little.initializer)
..parent = host;
@@ -125,7 +126,7 @@
CoreTypes coreTypes,
List<Library> libraries,
DiagnosticReporter diagnosticReporter,
- {void logger(String msg),
+ {void Function(String msg) logger,
ChangedStructureNotifier changedStructureNotifier}) {
super.performPreConstantEvaluationTransformations(
component, coreTypes, libraries, diagnosticReporter,
@@ -154,7 +155,7 @@
Map<String, String> environmentDefines,
DiagnosticReporter diagnosticReporter,
ReferenceFromIndex referenceFromIndex,
- {void logger(String msg),
+ {void Function(String msg) logger,
ChangedStructureNotifier changedStructureNotifier}) {
transformMixins.transformLibraries(
this, coreTypes, hierarchy, libraries, referenceFromIndex);
@@ -204,7 +205,7 @@
ClassHierarchy hierarchy,
Procedure procedure,
Map<String, String> environmentDefines,
- {void logger(String msg)}) {
+ {void Function(String msg) logger}) {
bool productMode = environmentDefines["dart.vm.product"] == "true";
transformAsync.transformProcedure(
new TypeEnvironment(coreTypes, hierarchy), procedure,
diff --git a/pkg/vm/lib/transformations/deferred_loading.dart b/pkg/vm/lib/transformations/deferred_loading.dart
index 03bb9c2..ce46af7 100644
--- a/pkg/vm/lib/transformations/deferred_loading.dart
+++ b/pkg/vm/lib/transformations/deferred_loading.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
library vm.transformations.deferred_loading;
import 'package:kernel/ast.dart';
diff --git a/pkg/vm/lib/transformations/devirtualization.dart b/pkg/vm/lib/transformations/devirtualization.dart
index 38de80f..559dcb2 100644
--- a/pkg/vm/lib/transformations/devirtualization.dart
+++ b/pkg/vm/lib/transformations/devirtualization.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
library vm.transformations.cha_devirtualization;
import 'package:kernel/ast.dart';
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi_definitions.dart
index 7271f50..340f2b9 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi_definitions.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
library vm.transformations.ffi_definitions;
import 'dart:math' as math;
diff --git a/pkg/vm/lib/transformations/ffi_native.dart b/pkg/vm/lib/transformations/ffi_native.dart
index 7a85d36..945f66e 100644
--- a/pkg/vm/lib/transformations/ffi_native.dart
+++ b/pkg/vm/lib/transformations/ffi_native.dart
@@ -12,7 +12,7 @@
/// Transform @FfiNative annotated functions into FFI native function pointer
/// functions.
void transformLibraries(Component component, List<Library> libraries,
- ReferenceFromIndex referenceFromIndex) {
+ ReferenceFromIndex? referenceFromIndex) {
final index = LibraryIndex(component, ['dart:ffi']);
// Skip if dart:ffi isn't loaded (e.g. during incremental compile).
if (index.tryGetClass('dart:ffi', 'FfiNative') == null) {
diff --git a/pkg/vm/lib/transformations/ffi_use_sites.dart b/pkg/vm/lib/transformations/ffi_use_sites.dart
index 4600fde..7ee4ecc 100644
--- a/pkg/vm/lib/transformations/ffi_use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi_use_sites.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
library vm.transformations.ffi_use_sites;
import 'package:front_end/src/api_unstable/vm.dart'
diff --git a/pkg/vm/lib/transformations/list_literals_lowering.dart b/pkg/vm/lib/transformations/list_literals_lowering.dart
index e6b5e13..c7f6739 100644
--- a/pkg/vm/lib/transformations/list_literals_lowering.dart
+++ b/pkg/vm/lib/transformations/list_literals_lowering.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'package:front_end/src/api_unstable/vm.dart'
show isRedirectingFactoryField;
import 'package:kernel/ast.dart';
diff --git a/pkg/vm/lib/transformations/lowering.dart b/pkg/vm/lib/transformations/lowering.dart
index 4b320ad..72932d9 100644
--- a/pkg/vm/lib/transformations/lowering.dart
+++ b/pkg/vm/lib/transformations/lowering.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'package:kernel/ast.dart';
import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
import 'package:kernel/core_types.dart' show CoreTypes;
diff --git a/pkg/vm/lib/transformations/no_dynamic_invocations_annotator.dart b/pkg/vm/lib/transformations/no_dynamic_invocations_annotator.dart
index 5e9600e..75b566f 100644
--- a/pkg/vm/lib/transformations/no_dynamic_invocations_annotator.dart
+++ b/pkg/vm/lib/transformations/no_dynamic_invocations_annotator.dart
@@ -46,7 +46,6 @@
case Action.invoke:
return '${target}';
}
- return '?';
}
}
diff --git a/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart b/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
index 98592ef..b4eeab7 100644
--- a/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
+++ b/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
@@ -28,7 +28,7 @@
void _addIfEntryPoint(
List<Expression> annotations, String name, TreeNode node) {
for (var ann in annotations) {
- ParsedPragma pragma = parser.parsePragma(ann);
+ ParsedPragma? pragma = parser.parsePragma(ann);
if (pragma is ParsedEntryPointPragma) {
metadata.protectedNames.add(name);
if (node is Field) {
diff --git a/pkg/vm/lib/transformations/pragma.dart b/pkg/vm/lib/transformations/pragma.dart
index cde363a..dfac713 100644
--- a/pkg/vm/lib/transformations/pragma.dart
+++ b/pkg/vm/lib/transformations/pragma.dart
@@ -2,8 +2,6 @@
// 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 vm.transformations.pragma;
-
import 'package:kernel/ast.dart';
import 'package:kernel/core_types.dart' show CoreTypes;
@@ -54,7 +52,7 @@
abstract class PragmaAnnotationParser {
/// May return 'null' if the annotation does not represent a recognized
/// @pragma.
- ParsedPragma parsePragma(Expression annotation);
+ ParsedPragma? parsePragma(Expression annotation);
}
class ConstantPragmaAnnotationParser extends PragmaAnnotationParser {
@@ -62,8 +60,8 @@
ConstantPragmaAnnotationParser(this.coreTypes);
- ParsedPragma parsePragma(Expression annotation) {
- InstanceConstant pragmaConstant;
+ ParsedPragma? parsePragma(Expression annotation) {
+ InstanceConstant? pragmaConstant;
if (annotation is ConstantExpression) {
Constant constant = annotation.constant;
if (constant is InstanceConstant) {
@@ -79,7 +77,7 @@
if (pragmaConstant == null) return null;
String pragmaName;
- Constant name =
+ Constant? name =
pragmaConstant.fieldValues[coreTypes.pragmaName.getterReference];
if (name is StringConstant) {
pragmaName = name.value;
@@ -88,12 +86,11 @@
}
Constant options =
- pragmaConstant.fieldValues[coreTypes.pragmaOptions.getterReference];
- assert(options != null);
+ pragmaConstant.fieldValues[coreTypes.pragmaOptions.getterReference]!;
switch (pragmaName) {
case kEntryPointPragmaName:
- PragmaEntryPointType type;
+ PragmaEntryPointType? type;
if (options is NullConstant) {
type = PragmaEntryPointType.Default;
} else if (options is BoolConstant && options.value == true) {
@@ -113,7 +110,6 @@
}
return type != null ? new ParsedEntryPointPragma(type) : null;
case kExactResultTypePragmaName:
- if (options == null) return null;
if (options is TypeLiteralConstant) {
return new ParsedResultTypeByTypePragma(options.type, false);
} else if (options is StringConstant) {
@@ -132,7 +128,7 @@
case kNonNullableResultType:
return new ParsedNonNullableResultType();
case kRecognizedPragmaName:
- PragmaRecognizedType type;
+ PragmaRecognizedType? type;
if (options is StringConstant) {
if (options.value == "asm-intrinsic") {
type = PragmaRecognizedType.AsmIntrinsic;
diff --git a/pkg/vm/lib/transformations/to_string_transformer.dart b/pkg/vm/lib/transformations/to_string_transformer.dart
index 10e7575..0cd1b5f 100644
--- a/pkg/vm/lib/transformations/to_string_transformer.dart
+++ b/pkg/vm/lib/transformations/to_string_transformer.dart
@@ -13,7 +13,7 @@
/// `super.toString()`.
class ToStringVisitor extends RecursiveVisitor {
/// The [packageUris] must not be null.
- ToStringVisitor(this._packageUris) : assert(_packageUris != null);
+ ToStringVisitor(this._packageUris);
/// A set of package URIs to apply this transformer to, e.g. 'dart:ui' and
/// 'package:flutter/foundation.dart'.
@@ -42,7 +42,7 @@
if (className == 'pragma' && libraryUri == 'dart:core') {
for (var fieldRef in constant.fieldValues.keys) {
if (fieldRef.asField.name.text == 'name') {
- Constant name = constant.fieldValues[fieldRef];
+ Constant? name = constant.fieldValues[fieldRef];
return name is StringConstant &&
name.value == 'flutter:keep-to-string';
}
@@ -57,13 +57,12 @@
void visitProcedure(Procedure node) {
if (node.name.text == 'toString' &&
node.enclosingClass != null &&
- node.enclosingLibrary != null &&
!node.isStatic &&
!node.isAbstract &&
- !node.enclosingClass.isEnum &&
+ !node.enclosingClass!.isEnum &&
_isInTargetPackage(node) &&
!_hasKeepAnnotation(node)) {
- node.function.body.replaceWith(
+ node.function.body!.replaceWith(
ReturnStatement(
SuperMethodInvocation(
node.name,
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index 502fe14..ac1c9ad 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// Global type flow analysis.
library kernel.transformations.analysis;
diff --git a/pkg/vm/lib/transformations/type_flow/calls.dart b/pkg/vm/lib/transformations/type_flow/calls.dart
index 6fa64e8..060500a 100644
--- a/pkg/vm/lib/transformations/type_flow/calls.dart
+++ b/pkg/vm/lib/transformations/type_flow/calls.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// Declares classes which describe a call: selectors and arguments.
library vm.transformations.type_flow.calls;
diff --git a/pkg/vm/lib/transformations/type_flow/native_code.dart b/pkg/vm/lib/transformations/type_flow/native_code.dart
index ebecc27..7a5baf9 100644
--- a/pkg/vm/lib/transformations/type_flow/native_code.dart
+++ b/pkg/vm/lib/transformations/type_flow/native_code.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// Handling of native code and entry points.
library vm.transformations.type_flow.native_code;
diff --git a/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart b/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart
index 5bd8db7..a4b0bbc 100644
--- a/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart
+++ b/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'package:kernel/ast.dart';
import 'package:kernel/clone.dart' show CloneVisitorNotMembers;
import 'package:kernel/core_types.dart' show CoreTypes;
diff --git a/pkg/vm/lib/transformations/type_flow/signature_shaking.dart b/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
index f24d9af..a61e222 100644
--- a/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
+++ b/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'package:kernel/ast.dart';
import 'package:kernel/external_name.dart';
import 'package:kernel/type_environment.dart';
diff --git a/pkg/vm/lib/transformations/type_flow/summary.dart b/pkg/vm/lib/transformations/type_flow/summary.dart
index 002acc1..1c9ae91 100644
--- a/pkg/vm/lib/transformations/type_flow/summary.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// Type flow summary of a member, function or initializer.
library vm.transformations.type_flow.summary;
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index 1527a11..b5b213f 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// Creation of type flow summaries out of kernel AST.
library vm.transformations.type_flow.summary_collector;
diff --git a/pkg/vm/lib/transformations/type_flow/table_selector_assigner.dart b/pkg/vm/lib/transformations/type_flow/table_selector_assigner.dart
index 2cfe329..f1901e7 100644
--- a/pkg/vm/lib/transformations/type_flow/table_selector_assigner.dart
+++ b/pkg/vm/lib/transformations/type_flow/table_selector_assigner.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'package:kernel/ast.dart';
import 'utils.dart' show UnionFind;
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index fb4dec7..5fb8cc5 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// Transformations based on type flow analysis.
library vm.transformations.type_flow.transformer;
diff --git a/pkg/vm/lib/transformations/type_flow/types.dart b/pkg/vm/lib/transformations/type_flow/types.dart
index a5e9561..4d13774 100644
--- a/pkg/vm/lib/transformations/type_flow/types.dart
+++ b/pkg/vm/lib/transformations/type_flow/types.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// Declares the type system used by global type flow analysis.
library vm.transformations.type_flow.types;
diff --git a/pkg/vm/lib/transformations/type_flow/unboxing_info.dart b/pkg/vm/lib/transformations/type_flow/unboxing_info.dart
index 03f7ef2..723e673 100644
--- a/pkg/vm/lib/transformations/type_flow/unboxing_info.dart
+++ b/pkg/vm/lib/transformations/type_flow/unboxing_info.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'package:kernel/ast.dart';
import 'package:kernel/core_types.dart';
import 'package:kernel/external_name.dart' show getExternalName;
diff --git a/pkg/vm/lib/transformations/type_flow/utils.dart b/pkg/vm/lib/transformations/type_flow/utils.dart
index 815736c..b04e69e 100644
--- a/pkg/vm/lib/transformations/type_flow/utils.dart
+++ b/pkg/vm/lib/transformations/type_flow/utils.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
/// Declares miscellaneous utility functions and constants for type flow
/// analysis.
library vm.transformations.type_flow.utils;
diff --git a/pkg/vm/pubspec.yaml b/pkg/vm/pubspec.yaml
index 95341eb..f57cf389 100644
--- a/pkg/vm/pubspec.yaml
+++ b/pkg/vm/pubspec.yaml
@@ -4,7 +4,7 @@
publish_to: none
environment:
- sdk: "^2.7.0"
+ sdk: '>=2.12.0 <3.0.0'
dependencies:
args: ^1.4.4
diff --git a/pkg/vm/test/common_test_utils.dart b/pkg/vm/test/common_test_utils.dart
index a45a95d..3f8bf9c 100644
--- a/pkg/vm/test/common_test_utils.dart
+++ b/pkg/vm/test/common_test_utils.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:async';
import 'dart:io';
diff --git a/pkg/vm/test/dominators_test.dart b/pkg/vm/test/dominators_test.dart
index f9e6ee6..15163b2 100644
--- a/pkg/vm/test/dominators_test.dart
+++ b/pkg/vm/test/dominators_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'package:expect/expect.dart';
import 'package:vm/dominators.dart';
diff --git a/pkg/vm/test/incremental_compiler_test.dart b/pkg/vm/test/incremental_compiler_test.dart
index 2fc1928..cdde7fc 100644
--- a/pkg/vm/test/incremental_compiler_test.dart
+++ b/pkg/vm/test/incremental_compiler_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:async';
import 'dart:convert';
import 'dart:io';
diff --git a/pkg/vm/test/kernel_front_end_test.dart b/pkg/vm/test/kernel_front_end_test.dart
index 711b616..182ba38 100644
--- a/pkg/vm/test/kernel_front_end_test.dart
+++ b/pkg/vm/test/kernel_front_end_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:io';
import 'package:front_end/src/api_unstable/vm.dart'
diff --git a/pkg/vm/test/modular_kernel_plus_aot_test.dart b/pkg/vm/test/modular_kernel_plus_aot_test.dart
index 8d9419d..95354c9 100644
--- a/pkg/vm/test/modular_kernel_plus_aot_test.dart
+++ b/pkg/vm/test/modular_kernel_plus_aot_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
diff --git a/pkg/vm/test/transformations/deferred_loading_test.dart b/pkg/vm/test/transformations/deferred_loading_test.dart
index f36b610..88e8ee2 100644
--- a/pkg/vm/test/transformations/deferred_loading_test.dart
+++ b/pkg/vm/test/transformations/deferred_loading_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:io';
import 'package:kernel/target/targets.dart';
diff --git a/pkg/vm/test/transformations/protobuf_aware_treeshaker/treeshaker_test.dart b/pkg/vm/test/transformations/protobuf_aware_treeshaker/treeshaker_test.dart
index 023c93e..cf39848 100644
--- a/pkg/vm/test/transformations/protobuf_aware_treeshaker/treeshaker_test.dart
+++ b/pkg/vm/test/transformations/protobuf_aware_treeshaker/treeshaker_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:io';
import 'package:kernel/target/targets.dart';
diff --git a/pkg/vm/test/transformations/to_string_transformer_test.dart b/pkg/vm/test/transformations/to_string_transformer_test.dart
index ef94ca8..936f13f 100644
--- a/pkg/vm/test/transformations/to_string_transformer_test.dart
+++ b/pkg/vm/test/transformations/to_string_transformer_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:io';
import 'package:kernel/ast.dart';
diff --git a/pkg/vm/test/transformations/type_flow/summary_collector_test.dart b/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
index cad4936..f9ea8d7 100644
--- a/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
+++ b/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:io';
import 'package:kernel/ast.dart';
diff --git a/pkg/vm/test/transformations/type_flow/transformer_test.dart b/pkg/vm/test/transformations/type_flow/transformer_test.dart
index b1e876fe..9735223 100644
--- a/pkg/vm/test/transformations/type_flow/transformer_test.dart
+++ b/pkg/vm/test/transformations/type_flow/transformer_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:io';
import 'package:kernel/target/targets.dart';
diff --git a/pkg/vm/test/transformations/type_flow/types_test.dart b/pkg/vm/test/transformations/type_flow/types_test.dart
index 0945917..3a9987c 100644
--- a/pkg/vm/test/transformations/type_flow/types_test.dart
+++ b/pkg/vm/test/transformations/type_flow/types_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:core' hide Type;
import 'package:kernel/ast.dart';
diff --git a/pkg/vm/test/transformations/unreachable_code_elimination_test.dart b/pkg/vm/test/transformations/unreachable_code_elimination_test.dart
index d1471bb..7330168 100644
--- a/pkg/vm/test/transformations/unreachable_code_elimination_test.dart
+++ b/pkg/vm/test/transformations/unreachable_code_elimination_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:io';
import 'package:kernel/target/targets.dart';
diff --git a/pkg/vm/test/unlinked_ast_to_text_test.dart b/pkg/vm/test/unlinked_ast_to_text_test.dart
index 8b03a2c..49f8529 100644
--- a/pkg/vm/test/unlinked_ast_to_text_test.dart
+++ b/pkg/vm/test/unlinked_ast_to_text_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:io';
import 'package:args/args.dart';
diff --git a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
index 0d07eae..328e71f 100644
--- a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
+++ b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
@@ -46,12 +46,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/a.dart" as a;
static method j() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
@@ -62,12 +62,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
@@ -77,12 +77,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/g.dart" as g;
static method h() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
@@ -93,12 +93,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
@@ -109,12 +109,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/b.dart" as b;
static method i() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
@@ -130,12 +130,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
@@ -145,12 +145,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/h.dart" as h;
static method g() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
@@ -161,12 +161,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
@@ -177,12 +177,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/i.dart" deferred as i;
static method f() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
@@ -202,12 +202,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
@@ -217,12 +217,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/g.dart" deferred as g;
static method e() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
@@ -238,12 +238,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
@@ -254,12 +254,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/f.dart" deferred as f;
static method c() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
@@ -275,12 +275,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
@@ -290,12 +290,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/e.dart" as e;
static method d() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
@@ -308,12 +308,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
@@ -323,12 +323,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/c.dart" as c;
static method b() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
@@ -341,12 +341,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
@@ -356,12 +356,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/d.dart" deferred as d;
static method a() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
@@ -377,12 +377,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
@@ -393,12 +393,12 @@
import "#pkg/vm/testcases/transformations/deferred_loading/b.dart";
static method main() → dynamic /* originally async */ {
- final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
+ final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
dart.core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
- dart.core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
+ dart.core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
@@ -413,12 +413,12 @@
dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
dart.async::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
:async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart
index a22bad2..d4a77af 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
dynamic foo() => null;
bool bar() => null;
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart b/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart
index 06cf7ea..1f4d7da 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
abstract class A {
void foo1(Object x) {}
dynamic get foo2;
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/class_generics_basic.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/class_generics_basic.dart.expect
index 9a4772b..18d97a8 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/class_generics_basic.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/class_generics_basic.dart.expect
@@ -4,21 +4,21 @@
RESULT: _T {}?
------------ C.foo ------------
%this = _Parameter #0 [_T (#lib::C)+]
-t1 = _Extract (%this[#lib::C/0]*)
+t1 = _Extract (%this[#lib::C/0])
t2 = _CreateConcreteType (#lib::D @ (t1))
t3* = _Call direct [#lib::D.] (t2)
RESULT: t3
------------ C.id1 ------------
%this = _Parameter #0 [_T (#lib::C)+]
%x = _Parameter #1
-t2 = _Extract (%this[#lib::C/0]*)
-t3 = _TypeCheck (%x against t2) (for #lib::C.T* x;)
+t2 = _Extract (%this[#lib::C/0])
+t3 = _TypeCheck (%x against t2) (for #lib::C.T% x;)
RESULT: t3
------------ C.id2 ------------
%this = _Parameter #0 [_T (#lib::C)+]
%x = _Parameter #1
-t2 = _Extract (%this[#lib::C/0]*)
-t3 = _TypeCheck (%x against t2) (for #lib::C.T* x;)
+t2 = _Extract (%this[#lib::C/0])
+t3 = _TypeCheck (%x against t2) (for #lib::C.T% x;)
RESULT: t3
------------ D. ------------
%this = _Parameter #0 [_T (#lib::D)+]
@@ -34,13 +34,13 @@
RESULT: t1
------------ E.bar ------------
%this = _Parameter #0 [_T (#lib::E)+]
-t1 = _Extract (%this[#lib::E/0]*)
+t1 = _Extract (%this[#lib::E/0])
t2 = _CreateConcreteType (#lib::D @ (t1))
t3* = _Call direct [#lib::D.] (t2)
RESULT: t3
------------ E.baz ------------
%this = _Parameter #0 [_T (#lib::E)+]
-t1 = _Extract (%this[#lib::E/1]*)
+t1 = _Extract (%this[#lib::E/1])
t2 = _CreateConcreteType (#lib::D @ (t1))
t3* = _Call direct [#lib::D.] (t2)
RESULT: t3
@@ -75,34 +75,34 @@
------------ C2.id3 ------------
%this = _Parameter #0 [_T (#lib::C2)+]
%x = _Parameter #1
-t2 = _Extract (%this[#lib::C2/0]*)
-t3 = _CreateRuntimeType (dart.core::Comparable @ (t2)*)
-t4 = _TypeCheck (%x against t3) (for dart.core::Comparable<#lib::C2.T*>* x;)
+t2 = _Extract (%this[#lib::C2/0])
+t3 = _CreateRuntimeType (dart.core::Comparable @ (t2))
+t4 = _TypeCheck (%x against t3) (for dart.core::Comparable<#lib::C2.T%> x;)
RESULT: t4
------------ C2.id4 ------------
%this = _Parameter #0 [_T (#lib::C2)+]
%x = _Parameter #1
-t2 = _Extract (%this[#lib::C2/0]*)
-t3 = _CreateRuntimeType (#lib::I @ (t2)*)
-t4 = _CreateRuntimeType (#lib::K @ (t3)*)
-t5 = _TypeCheck (%x against t4) (for #lib::K<#lib::I<#lib::C2.T*>*>* x;)
+t2 = _Extract (%this[#lib::C2/0])
+t3 = _CreateRuntimeType (#lib::I @ (t2))
+t4 = _CreateRuntimeType (#lib::K @ (t3))
+t5 = _TypeCheck (%x against t4) (for #lib::K<#lib::I<#lib::C2.T%>> x;)
RESULT: t5
------------ main ------------
-t0* = _Call direct [#lib::C.] (_T (#lib::C<dart.core::int*>))
+t0* = _Call direct [#lib::C.] (_T (#lib::C<dart.core::int>))
t1 = _Call [#lib::C.foo] (t0)
-t2* = _Call direct [#lib::E.] (_T (#lib::E<dart.core::int*, dart.core::String*>))
+t2* = _Call direct [#lib::E.] (_T (#lib::E<dart.core::int, dart.core::String>))
t3 = _Call [#lib::E.foo] (t2)
-t4* = _Call direct [#lib::E.] (_T (#lib::E<dart.core::int*, dart.core::String*>))
+t4* = _Call direct [#lib::E.] (_T (#lib::E<dart.core::int, dart.core::String>))
t5 = _Call [#lib::E.bar] (t4)
-t6* = _Call direct [#lib::E.] (_T (#lib::E<dart.core::int*, dart.core::String*>))
+t6* = _Call direct [#lib::E.] (_T (#lib::E<dart.core::int, dart.core::String>))
t7* = _Call [#lib::E.baz] (t6)
-t8* = _Call direct [#lib::C.] (_T (#lib::C<#lib::Y*>))
+t8* = _Call direct [#lib::C.] (_T (#lib::C<#lib::Y>))
t9* = _Call direct [#lib::Y.] (_T (#lib::Y))
t10 = _Call [#lib::C.id1] (t8, t9)
t11* = _Call direct [#lib::Z.] (_T (#lib::Z))
t12 = _Call [#lib::C.id2] (t8, t11)
-t13* = _Call direct [#lib::C2.] (_T (#lib::C2<dart.core::num*>))
+t13* = _Call direct [#lib::C2.] (_T (#lib::C2<dart.core::num>))
t14 = _Call [#lib::C2.id3] (t13, _T (dart.core::_Double, 3.0))
-t15* = _Call direct [#lib::K.] (_T (#lib::K<#lib::J*>))
+t15* = _Call direct [#lib::K.] (_T (#lib::K<#lib::J>))
t16 = _Call [#lib::C2.id4] (t13, t15)
RESULT: t7
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/class_generics_case1.dart b/pkg/vm/testcases/transformations/type_flow/summary_collector/class_generics_case1.dart
index 3b211f3..1140e51 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/class_generics_case1.dart
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/class_generics_case1.dart
@@ -11,6 +11,8 @@
// call, and we want to make sure there is only one call-site in this example
// (call-site level info is not available yet).
+// @dart=2.9
+
import 'dart:collection';
class Element {}
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect
index a894b41..010aa92 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect
@@ -13,7 +13,7 @@
RESULT: t1
------------ indexingIntoConstantList2 ------------
%i = _Parameter #0 [_T (dart.core::int)+?]
-t1 = _Join [dart.core::Object*] (_T (dart.core::_OneByteString, "hi"), _T (dart.core::_Smi, 33), _T {}?, _T (dart.core::_Smi, -5))
+t1 = _Join [dart.core::Object?] (_T (dart.core::_OneByteString, "hi"), _T (dart.core::_Smi, 33), _T {}?, _T (dart.core::_Smi, -5))
RESULT: t1
------------ main ------------
@@ -23,4 +23,4 @@
RESULT: _T (dart.core::_ImmutableList, const <dart.core::int*>[1, 2, 3])
------------ _constList2 ------------
-RESULT: _T (dart.core::_ImmutableList, const <dart.core::Object*>["hi", 33, null, -5])
+RESULT: _T (dart.core::_ImmutableList, const <dart.core::Object?>["hi", 33, null, -5])
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
index e434ee3..54aa62d 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
@@ -71,10 +71,10 @@
t2 = _Call direct [#lib::C1.] (_T (#lib::C1))
t3* = _Call direct [#lib::C2.] (_T (#lib::C2))
t4* = _Call direct [#lib::foo] (t3)
-t5 = _TypeCheck (t4 against dart.core::bool*) (for #lib::foo(x = new #lib::C2()) as dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2()) as dart.core::bool)
t6* = _Call direct [#lib::C3.] (_T (#lib::C3))
t7* = _Call direct [#lib::foo] (t6)
-t8 = _TypeCheck (t7 against dart.core::bool*) (for #lib::foo(x = new #lib::C3()) as dart.core::bool*)
+t8 = _TypeCheck (t7 against dart.core::bool) (for #lib::foo(x = new #lib::C3()) as dart.core::bool)
x_0 = _Join [dynamic] (t3, t6)
t10 = _Call direct [#lib::bar] (x_0)
RESULT: x_0
@@ -82,10 +82,10 @@
t0 = _Call direct [#lib::C1.] (_T (#lib::C1))
t1* = _Call direct [#lib::C2.] (_T (#lib::C2))
t2* = _Call direct [#lib::foo] (t1)
-t3 = _TypeCheck (t2 against dart.core::bool*) (for #lib::foo(x = new #lib::C2()) as dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2()) as dart.core::bool)
t4* = _Call direct [#lib::C3.] (_T (#lib::C3))
t5* = _Call direct [#lib::foo] (t4)
-t6 = _TypeCheck (t5 against dart.core::bool*) (for #lib::foo(x = new #lib::C3()) as dart.core::bool*)
+t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::foo(x = new #lib::C3()) as dart.core::bool)
t7 = _Call direct [#lib::bar] (t4)
x_0 = _Join [dynamic] (t1, t4)
RESULT: x_0
@@ -99,12 +99,12 @@
%x = _Parameter #0 [_T (dart.core::bool)+?]
t1 = _Call direct [#lib::foo] (_T (dart.core::bool, true))
t2 = _Call direct [#lib::bar] (_T (dart.core::bool, false))
-x_0 = _Join [dart.core::bool*] (_T (dart.core::bool, true), _T (dart.core::bool, false))
+x_0 = _Join [dart.core::bool] (_T (dart.core::bool, true), _T (dart.core::bool, false))
t4 = _Call direct [#lib::baz] (x_0)
RESULT: _T {}?
------------ if6b ------------
%x = _Parameter #0 [_T ANY?]
-t1 = _TypeCheck (%x against dart.core::bool*) (for x as dart.core::bool*)
+t1 = _TypeCheck (%x against dart.core::bool) (for x as dart.core::bool)
t2 = _Call direct [#lib::foo] (_T (dart.core::bool, true))
t3 = _Call direct [#lib::bar] (_T (dart.core::bool, false))
x_0 = _Join [dynamic] (_T (dart.core::bool, true), _T (dart.core::bool, false))
@@ -129,7 +129,7 @@
RESULT: _T {}?
------------ if9 ------------
%x = _Parameter #0 [_T (#lib::TestEnum)+?]
-t1* = _Call [#lib::TestEnum.==] (%x, _T (#lib::TestEnum, const #lib::TestEnum{#lib::TestEnum.index: 0, #lib::TestEnum._name: "TestEnum.v1"}))
+t1* = _Call [dart.core::Object.==] (%x, _T (#lib::TestEnum, const #lib::TestEnum{#lib::TestEnum.index: 0, #lib::TestEnum._name: "TestEnum.v1"}))
t2 = _Call direct [#lib::foo] (_T (#lib::TestEnum, const #lib::TestEnum{#lib::TestEnum.index: 0, #lib::TestEnum._name: "TestEnum.v1"}))
RESULT: _T {}?
------------ conditional1 ------------
@@ -138,12 +138,12 @@
t2 = _Call direct [#lib::C1.] (_T (#lib::C1))
t3* = _Call direct [#lib::C2.] (_T (#lib::C2))
t4* = _Call direct [#lib::foo] (t3)
-t5 = _TypeCheck (t4 against dart.core::bool*) (for #lib::foo(x = new #lib::C2()) as dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2()) as dart.core::bool)
t6* = _Call direct [#lib::C3.] (_T (#lib::C3))
t7* = _Call direct [#lib::C4.] (_T (#lib::C4))
x_0 = _Join [dynamic] (t6, t7)
t9 = _Call direct [#lib::foo] (x_0)
-t10 = _Join [dart.core::Object*] (t6, t7)
+t10 = _Join [dart.core::Object] (t6, t7)
t11 = _Narrow (t10 to _T (dart.core::Object)+?)
t12 = _Call direct [#lib::bar] (t11)
RESULT: _T {}?
@@ -153,10 +153,10 @@
t2 = _Call direct [#lib::C1.] (_T (#lib::C1))
t3* = _Call direct [#lib::C2.] (_T (#lib::C2))
t4* = _Call direct [#lib::foo] (t3)
-t5 = _TypeCheck (t4 against dart.core::bool*) (for #lib::foo(x = new #lib::C2()) as dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2()) as dart.core::bool)
t6* = _Call direct [#lib::C3.] (_T (#lib::C3))
t7* = _Call direct [#lib::C4.] (_T (#lib::C4))
-t8* = _Call direct [dart.core::_GrowableList._literal2] (#lib::C4*, t7, _T {})
+t8* = _Call direct [dart.core::_GrowableList._literal2] (#lib::C4, t7, _T {})
t9* = _Call direct [#lib::foo] (t8)
t10 = _Call direct [#lib::foo] (t6)
t11 = _Join [dynamic] (t6, t9)
@@ -167,7 +167,7 @@
t1* = _Call direct [#lib::C2.] (_T (#lib::C2))
x_0 = _Join [dynamic] (t0, t1)
t3* = _Call direct [#lib::foo] (x_0)
-t4 = _TypeCheck (t3 against dart.core::bool*) (for #lib::foo(x) as dart.core::bool*)
+t4 = _TypeCheck (t3 against dart.core::bool) (for #lib::foo(x) as dart.core::bool)
t5 = _Call direct [#lib::bar] (x_0)
RESULT: x_0
------------ loop2 ------------
@@ -178,13 +178,13 @@
t4* = _Call direct [#lib::C2.] (_T (#lib::C2))
t5 = _Call direct [#lib::bar] (t4)
t6* = _Call direct [#lib::bar] (t1)
-t7 = _TypeCheck (t6 against dart.core::bool*) (for #lib::bar(x = new #lib::C3()) as dart.core::bool*)
+t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x = new #lib::C3()) as dart.core::bool)
RESULT: t1
------------ loop3 ------------
t0 = _Call direct [#lib::C1.] (_T (#lib::C1))
t1* = _Call direct [#lib::C2.] (_T (#lib::C2))
t2* = _Call direct [#lib::foo] (t1)
-t3 = _TypeCheck (t2 against dart.core::bool*) (for #lib::foo(x = new #lib::C2()) as dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2()) as dart.core::bool)
t4 = _Call direct [#lib::C3.] (_T (#lib::C3))
t5 = _Call direct [#lib::bar] (t1)
RESULT: t1
@@ -206,10 +206,10 @@
t1* = _Call direct [#lib::C3.] (_T (#lib::C3))
x_0 = _Join [dynamic] (t0, t1)
t3* = _Call direct [#lib::foo] (x_0)
-t4 = _TypeCheck (t3 against dart.core::bool*) (for #lib::foo(x) as dart.core::bool*)
+t4 = _TypeCheck (t3 against dart.core::bool) (for #lib::foo(x) as dart.core::bool)
t5* = _Call direct [#lib::C2.] (_T (#lib::C2))
t6* = _Call direct [#lib::bar] (t5)
-t7 = _TypeCheck (t6 against dart.core::bool*) (for #lib::bar(x) as dart.core::bool*)
+t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x) as dart.core::bool)
x_1 = _Join [dynamic] (x_0, t5)
RESULT: x_1
------------ loop6 ------------
@@ -219,9 +219,9 @@
x_1 = _Join [dynamic] (t1, t2)
x_0 = _Join [dynamic] (t0, x_1)
t5* = _Call direct [#lib::foo] (x_0)
-t6 = _TypeCheck (t5 against dart.core::bool*) (for #lib::foo(x) as dart.core::bool*)
+t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::foo(x) as dart.core::bool)
t7* = _Call direct [#lib::bar] (t2)
-t8 = _TypeCheck (t7 against dart.core::bool*) (for #lib::bar(x) as dart.core::bool*)
+t8 = _TypeCheck (t7 against dart.core::bool) (for #lib::bar(x) as dart.core::bool)
RESULT: x_0
------------ try1 ------------
t0* = _Call direct [#lib::C1.] (_T (#lib::C1))
@@ -273,7 +273,7 @@
RESULT: x_2
------------ cast1 ------------
%x = _Parameter #0 [_T ANY?]
-t1 = _TypeCheck (%x against #lib::C1*) (for x as #lib::C1*)
+t1 = _TypeCheck (%x against #lib::C1) (for x as #lib::C1)
t2 = _Call direct [#lib::foo] (t1)
t3 = _Call direct [#lib::bar] (t1)
RESULT: _T {}?
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart b/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart
index 11518c5..9526505 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
class T {}
empty1() {}
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart
index 753486f..b52da4f 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
bool someStatic;
class A {}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/abstract_class_entry_point.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/abstract_class_entry_point.dart.expect
index 02a29c4..46131e7 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/abstract_class_entry_point.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/abstract_class_entry_point.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart b/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart
index b5b68eb..cf61eb7 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/annotation.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
class ClassAnnotation {
const ClassAnnotation();
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
index 6e5364a..fc5a260 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
@@ -1,19 +1,19 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
class A extends core::Object {
- synthetic constructor •() → self::A*
+ synthetic constructor •() → self::A
: super core::Object::•()
;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method bar(dynamic x) → asy::Future<dynamic>* /* originally async */ {
- final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method bar(dynamic x) → asy::Future<dynamic> /* originally async */ {
+ final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
- core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (core::Object, core::StackTrace) → dynamic :async_op_error;
+ core::int :await_jump_var = 0;
dynamic :await_ctx_var;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
@@ -25,30 +25,30 @@
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = asy::_asyncThenWrapperHelper(:async_op);
:async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
}
class B extends core::Object {
- synthetic constructor •() → self::B*
+ synthetic constructor •() → self::B
: super core::Object::•()
;
}
static method foo() → dynamic
return new self::A::•();
-static method baz() → asy::Future<dynamic>* /* originally async */ {
- final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+static method baz() → asy::Future<dynamic> /* originally async */ {
+ final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
- core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (core::Object, core::StackTrace) → dynamic :async_op_error;
+ core::int :await_jump_var = 0;
dynamic :await_ctx_var;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
@@ -60,22 +60,22 @@
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = asy::_asyncThenWrapperHelper(:async_op);
:async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
static method main() → dynamic /* originally async */ {
- final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+ final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
core::bool* :is_sync = false;
- FutureOr<dynamic>* :return_value;
- (dynamic) →* dynamic :async_op_then;
- (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
- core::int* :await_jump_var = 0;
+ FutureOr<dynamic>? :return_value;
+ (dynamic) → dynamic :async_op_then;
+ (core::Object, core::StackTrace) → dynamic :async_op_error;
+ core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
dynamic :async_temporary_0;
@@ -91,12 +91,12 @@
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
}
- on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+ on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
}
:async_op_then = asy::_asyncThenWrapperHelper(:async_op);
:async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op(){() →* dynamic};
+ :async_op(){() → dynamic};
:is_sync = true;
return :async_future;
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
index dc738d5..0a0c97a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
@@ -1,43 +1,43 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
-[@vm.unboxing-info.metadata=(i)->b]static method isPrime([@vm.inferred-type.metadata=int] dynamic n) → core::bool* {
- if(_in::unsafeCast<core::bool*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool] n{dynamic}.<(2)))
+[@vm.unboxing-info.metadata=(i)->b]static method isPrime([@vm.inferred-type.metadata=int] dynamic n) → core::bool {
+ if(_in::unsafeCast<core::bool>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool] n{dynamic}.<(2)))
return false;
- for (core::int* i = 2; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<=] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.*] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::*}(i){(core::num*) →* core::int*}.{core::num::<=}(_in::unsafeCast<core::num*>(n)){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*}) {
- if([@vm.direct-call.metadata=dart.core::_IntegerImplementation.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.%] [@vm.inferred-type.metadata=int] n{dynamic}.%(i) =={core::Object::==}{(core::Object*) →* core::bool*} 0)
+ for (core::int i = 2; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<=] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.*] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::*}(i){(core::num) → core::int}.{core::num::<=}(_in::unsafeCast<core::num>(n)){(core::num) → core::bool}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num) → core::int}) {
+ if([@vm.direct-call.metadata=dart.core::_IntegerImplementation.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.%] [@vm.inferred-type.metadata=int] n{dynamic}.%(i) =={core::Object::==}{(core::Object) → core::bool} 0)
return false;
}
return true;
}
-static method nThPrimeNumber() → core::int* {
- core::int* counter = 0;
- for (core::int* i = 1; ; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*}) {
+static method nThPrimeNumber() → core::int {
+ core::int counter = 0;
+ for (core::int i = 1; ; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num) → core::int}) {
if([@vm.inferred-type.metadata=dart.core::bool] self::isPrime(i))
- counter = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.inferred-type.metadata=int (skip check)] counter.{core::num::+}(1){(core::num*) →* core::int*};
- if([@vm.inferred-type.metadata=dart.core::bool] counter =={core::num::==}{(core::Object*) →* core::bool*} (#C1)) {
+ counter = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.inferred-type.metadata=int (skip check)] counter.{core::num::+}(1){(core::num) → core::int};
+ if([@vm.inferred-type.metadata=dart.core::bool] counter =={core::num::==}{(core::Object) → core::bool} (#C1)) {
return i;
}
}
}
static method run() → void {
- core::int* e = 611953;
- core::int* p = [@vm.inferred-type.metadata=int?] self::nThPrimeNumber();
- if(!([@vm.inferred-type.metadata=dart.core::bool] p =={core::num::==}{(core::Object*) →* core::bool*} e)) {
+ core::int e = 611953;
+ core::int p = [@vm.inferred-type.metadata=int?] self::nThPrimeNumber();
+ if(!([@vm.inferred-type.metadata=dart.core::bool] p =={core::num::==}{(core::Object) → core::bool} e)) {
throw core::Exception::•("Unexpected result: ${p} != ${e}");
}
}
-static method main(core::List<core::String*>* args) → dynamic {
- core::Stopwatch* timer = let final core::Stopwatch* #t1 = new core::Stopwatch::•() in block {
- [@vm.direct-call.metadata=dart.core::Stopwatch.start] [@vm.inferred-type.metadata=!? (skip check)] #t1.{core::Stopwatch::start}(){() →* void};
+static method main(core::List<core::String> args) → dynamic {
+ core::Stopwatch timer = let final core::Stopwatch #t1 = new core::Stopwatch::•() in block {
+ [@vm.direct-call.metadata=dart.core::Stopwatch.start] [@vm.inferred-type.metadata=!? (skip check)] #t1.{core::Stopwatch::start}(){() → void};
} =>#t1;
- for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*}) {
+ for (core::int i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100){(core::num) → core::bool}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num) → core::int}) {
self::run();
}
- [@vm.direct-call.metadata=dart.core::Stopwatch.stop] [@vm.inferred-type.metadata=!? (skip check)] timer.{core::Stopwatch::stop}(){() →* void};
- core::print("Elapsed ${[@vm.direct-call.metadata=dart.core::Stopwatch.elapsedMilliseconds] timer.{core::Stopwatch::elapsedMilliseconds}{core::int*}}ms");
+ [@vm.direct-call.metadata=dart.core::Stopwatch.stop] [@vm.inferred-type.metadata=!? (skip check)] timer.{core::Stopwatch::stop}(){() → void};
+ core::print("Elapsed ${[@vm.direct-call.metadata=dart.core::Stopwatch.elapsedMilliseconds] timer.{core::Stopwatch::elapsedMilliseconds}{core::int}}ms");
}
constants {
#C1 = 50000
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
index 599ca03..370e042 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:typed_data" as typ;
@@ -6,38 +6,38 @@
import "dart:typed_data";
class _Vector extends core::Object {
-[@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i] final field core::int* _offset;
-[@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] final field core::int* _length;
-[@vm.inferred-type.metadata=dart.typed_data::_Float64List] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] final field core::List<core::double*>* _elements;
- constructor •() → self::_Vector*
+[@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i] final field core::int _offset;
+[@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] final field core::int _length;
+[@vm.inferred-type.metadata=dart.typed_data::_Float64List] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] final field core::List<core::double> _elements;
+ constructor •() → self::_Vector
: self::_Vector::_offset = 0, self::_Vector::_length = #C1, self::_Vector::_elements = [@vm.inferred-type.metadata=dart.typed_data::_Float64List] typ::Float64List::•(#C1), super core::Object::•()
;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:4] [@vm.unboxing-info.metadata=(b)->d] operator []([@vm.inferred-type.metadata=!] core::int* i) → core::double*
- return [@vm.direct-call.metadata=dart.typed_data::_Float64List.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector._elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}{core::List<core::double*>*}.{core::List::[]}([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector._offset] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] this.{self::_Vector::_offset}{core::int*}){(core::num*) →* core::int*}){(core::int*) →* core::double*};
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5] operator []=([@vm.inferred-type.metadata=dart.core::_OneByteString] core::int* i, core::double* value) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:4] [@vm.unboxing-info.metadata=(b)->d] operator []([@vm.inferred-type.metadata=!] core::int i) → core::double
+ return [@vm.direct-call.metadata=dart.typed_data::_Float64List.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector._elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}{core::List<core::double>}.{core::List::[]}([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector._offset] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] this.{self::_Vector::_offset}{core::int}){(core::num) → core::int}){(core::int) → core::double};
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5] operator []=([@vm.inferred-type.metadata=dart.core::_OneByteString] core::int i, core::double value) → void {
block {
- [@vm.direct-call.metadata=#lib::_Vector._elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}{core::List<core::double*>*};
- [@vm.direct-call.metadata=#lib::_Vector._offset] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] this.{self::_Vector::_offset}{core::int*};
+ [@vm.direct-call.metadata=#lib::_Vector._elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}{core::List<core::double>};
+ [@vm.direct-call.metadata=#lib::_Vector._offset] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] this.{self::_Vector::_offset}{core::int};
} =>throw "Attempt to execute code removed by Dart AOT compiler (TFA)";
}
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6] [@vm.unboxing-info.metadata=(b)->d] operator *([@vm.inferred-type.metadata=#lib::_Vector?] self::_Vector* a) → core::double* {
- core::double* result = 0.0;
- for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=#lib::_Vector._length] [@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] this.{self::_Vector::_length}{core::int*}){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*})
- result = [@vm.direct-call.metadata=dart.core::_Double.+??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] result.{core::double::+}([@vm.direct-call.metadata=dart.core::_Double.*] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] this.{self::_Vector::[]}(i){(core::int*) →* core::double*}.{core::double::*}([@vm.direct-call.metadata=#lib::_Vector.[]??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] a.{self::_Vector::[]}(i){(core::int*) →* core::double*}){(core::num*) →* core::double*}){(core::num*) →* core::double*};
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6] [@vm.unboxing-info.metadata=(b)->d] operator *([@vm.inferred-type.metadata=#lib::_Vector?] self::_Vector a) → core::double {
+ core::double result = 0.0;
+ for (core::int i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=#lib::_Vector._length] [@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] this.{self::_Vector::_length}{core::int}){(core::num) → core::bool}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num) → core::int})
+ result = [@vm.direct-call.metadata=dart.core::_Double.+??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] result.{core::double::+}([@vm.direct-call.metadata=dart.core::_Double.*] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] this.{self::_Vector::[]}(i){(core::int) → core::double}.{core::double::*}([@vm.direct-call.metadata=#lib::_Vector.[]??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] a.{self::_Vector::[]}(i){(core::int) → core::double}){(core::num) → core::double}){(core::num) → core::double};
return result;
}
}
-[@vm.inferred-type.metadata=#lib::_Vector?]static field self::_Vector* v = new self::_Vector::•();
-[@vm.inferred-type.metadata=dart.core::_Double?]static field core::double* x = 0.0;
-static method main(core::List<core::String*>* args) → dynamic {
- core::Stopwatch* timer = let final core::Stopwatch* #t1 = new core::Stopwatch::•() in block {
- [@vm.direct-call.metadata=dart.core::Stopwatch.start] [@vm.inferred-type.metadata=!? (skip check)] #t1.{core::Stopwatch::start}(){() →* void};
+[@vm.inferred-type.metadata=#lib::_Vector?]static field self::_Vector v = new self::_Vector::•();
+[@vm.inferred-type.metadata=dart.core::_Double?]static field core::double x = 0.0;
+static method main(core::List<core::String> args) → dynamic {
+ core::Stopwatch timer = let final core::Stopwatch #t1 = new core::Stopwatch::•() in block {
+ [@vm.direct-call.metadata=dart.core::Stopwatch.start] [@vm.inferred-type.metadata=!? (skip check)] #t1.{core::Stopwatch::start}(){() → void};
} =>#t1;
- for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100000000){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*}) {
- self::x = [@vm.direct-call.metadata=dart.core::_Double.+??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.inferred-type.metadata=dart.core::_Double?] self::x.{core::double::+}([@vm.direct-call.metadata=#lib::_Vector.*??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.inferred-type.metadata=#lib::_Vector?] self::v.{self::_Vector::*}([@vm.inferred-type.metadata=#lib::_Vector?] self::v){(self::_Vector*) →* core::double*}){(core::num*) →* core::double*};
+ for (core::int i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100000000){(core::num) → core::bool}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num) → core::int}) {
+ self::x = [@vm.direct-call.metadata=dart.core::_Double.+??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.inferred-type.metadata=dart.core::_Double?] self::x.{core::double::+}([@vm.direct-call.metadata=#lib::_Vector.*??] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.inferred-type.metadata=#lib::_Vector?] self::v.{self::_Vector::*}([@vm.inferred-type.metadata=#lib::_Vector?] self::v){(self::_Vector) → core::double}){(core::num) → core::double};
}
- [@vm.direct-call.metadata=dart.core::Stopwatch.stop] [@vm.inferred-type.metadata=!? (skip check)] timer.{core::Stopwatch::stop}(){() →* void};
- core::print("Elapsed ${[@vm.direct-call.metadata=dart.core::Stopwatch.elapsedMilliseconds] timer.{core::Stopwatch::elapsedMilliseconds}{core::int*}}ms, result ${self::x}");
+ [@vm.direct-call.metadata=dart.core::Stopwatch.stop] [@vm.inferred-type.metadata=!? (skip check)] timer.{core::Stopwatch::stop}(){() → void};
+ core::print("Elapsed ${[@vm.direct-call.metadata=dart.core::Stopwatch.elapsedMilliseconds] timer.{core::Stopwatch::elapsedMilliseconds}{core::int}}ms, result ${self::x}");
}
constants {
#C1 = 10
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
index 00cfa5c..c42f78c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
@@ -1,76 +1,76 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
-class C<T extends core::Object* = dynamic> extends core::Object {
- synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::C<self::C::T%>
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method foo() → dynamic
- return new self::D::•<self::C::T*>();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method id1([@vm.inferred-type.metadata=#lib::Y (skip check)] generic-covariant-impl self::C::T* x) → dynamic
+ return new self::D::•<self::C::T%>();
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method id1([@vm.inferred-type.metadata=#lib::Y (skip check)] generic-covariant-impl self::C::T% x) → dynamic
return x;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method id2([@vm.inferred-type.metadata=#lib::Z] generic-covariant-impl self::C::T* x) → dynamic
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method id2([@vm.inferred-type.metadata=#lib::Z] generic-covariant-impl self::C::T% x) → dynamic
return x;
}
-class D<T extends core::Object* = dynamic> extends core::Object {
- synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::D<self::D::T%>
: super core::Object::•()
;
}
-class E<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::C<self::E::T*> {
- synthetic constructor •() → self::E<self::E::S*, self::E::T*>*
+class E<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends self::C<self::E::T%> {
+ synthetic constructor •() → self::E<self::E::S%, self::E::T%>
: super self::C::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method foo() → dynamic
- return [@vm.inferred-type.metadata=#lib::D<dart.core::String*>] super.{self::C::foo}();
+ return [@vm.inferred-type.metadata=#lib::D<dart.core::String>] super.{self::C::foo}();
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method bar() → dynamic
- return new self::D::•<self::E::S*>();
+ return new self::D::•<self::E::S%>();
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method baz() → dynamic
- return new self::D::•<self::E::T*>();
+ return new self::D::•<self::E::T%>();
}
abstract class X extends core::Object {
- synthetic constructor •() → self::X*
+ synthetic constructor •() → self::X
: super core::Object::•()
;
}
class Y extends self::X {
- synthetic constructor •() → self::Y*
+ synthetic constructor •() → self::Y
: super self::X::•()
;
}
class Z extends self::X {
- synthetic constructor •() → self::Z*
+ synthetic constructor •() → self::Z
: super self::X::•()
;
}
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
}
-abstract class J extends self::I<core::int*> {
+abstract class J extends self::I<core::int> {
}
-class K<T extends core::Object* = dynamic> extends core::Object {
- synthetic constructor •() → self::K<self::K::T*>*
+class K<T extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::K<self::K::T%>
: super core::Object::•()
;
}
-class C2<T extends core::Object* = dynamic> extends core::Object {
- synthetic constructor •() → self::C2<self::C2::T*>*
+class C2<T extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::C2<self::C2::T%>
: super core::Object::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(d)->d] method id3([@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.0)] generic-covariant-impl core::Comparable<self::C2::T*>* x) → dynamic
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(d)->d] method id3([@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.0)] generic-covariant-impl core::Comparable<self::C2::T%> x) → dynamic
return x;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method id4([@vm.inferred-type.metadata=#lib::K<#lib::J*> (skip check)] generic-covariant-impl self::K<self::I<self::C2::T*>*>* x) → dynamic
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method id4([@vm.inferred-type.metadata=#lib::K<#lib::J> (skip check)] generic-covariant-impl self::K<self::I<self::C2::T%>> x) → dynamic
return x;
}
static method main() → dynamic {
- core::print([@vm.direct-call.metadata=#lib::C.foo] [@vm.inferred-type.metadata=#lib::D<dart.core::int*> (skip check)] new self::C::•<core::int*>().{self::C::foo}(){() →* dynamic});
- core::print([@vm.direct-call.metadata=#lib::E.foo] [@vm.inferred-type.metadata=#lib::D<dart.core::String*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::foo}(){() →* dynamic});
- core::print([@vm.direct-call.metadata=#lib::E.bar] [@vm.inferred-type.metadata=#lib::D<dart.core::int*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::bar}(){() →* dynamic});
- core::print([@vm.direct-call.metadata=#lib::E.baz] [@vm.inferred-type.metadata=#lib::D<dart.core::String*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::baz}(){() →* dynamic});
- self::C<self::X*>* c = new self::C::•<self::Y*>();
- [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X*>*] [@vm.direct-call.metadata=#lib::C.id1] [@vm.inferred-type.metadata=!? (skip check)] c.{self::C::id1}(new self::Y::•()){(self::X*) →* dynamic};
- [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X*>*] [@vm.direct-call.metadata=#lib::C.id2] c.{self::C::id2}(new self::Z::•()){(self::X*) →* dynamic};
- self::C2<core::num*>* c2 = new self::C2::•<core::num*>();
- [@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num*>*] [@vm.direct-call.metadata=#lib::C2.id3] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id3}(3.0){(core::Comparable<core::num*>*) →* dynamic};
- [@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num*>*] [@vm.direct-call.metadata=#lib::C2.id4] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id4}(new self::K::•<self::J*>()){(self::K<self::I<core::num*>*>*) →* dynamic};
+ core::print([@vm.direct-call.metadata=#lib::C.foo] [@vm.inferred-type.metadata=#lib::D<dart.core::int> (skip check)] new self::C::•<core::int>().{self::C::foo}(){() → dynamic});
+ core::print([@vm.direct-call.metadata=#lib::E.foo] [@vm.inferred-type.metadata=#lib::D<dart.core::String> (skip check)] new self::E::•<core::int, core::String>().{self::E::foo}(){() → dynamic});
+ core::print([@vm.direct-call.metadata=#lib::E.bar] [@vm.inferred-type.metadata=#lib::D<dart.core::int> (skip check)] new self::E::•<core::int, core::String>().{self::E::bar}(){() → dynamic});
+ core::print([@vm.direct-call.metadata=#lib::E.baz] [@vm.inferred-type.metadata=#lib::D<dart.core::String> (skip check)] new self::E::•<core::int, core::String>().{self::E::baz}(){() → dynamic});
+ self::C<self::X> c = new self::C::•<self::Y>();
+ [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X>] [@vm.direct-call.metadata=#lib::C.id1] [@vm.inferred-type.metadata=!? (skip check)] c.{self::C::id1}(new self::Y::•()){(self::X) → dynamic};
+ [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X>] [@vm.direct-call.metadata=#lib::C.id2] c.{self::C::id2}(new self::Z::•()){(self::X) → dynamic};
+ self::C2<core::num> c2 = new self::C2::•<core::num>();
+ [@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num>] [@vm.direct-call.metadata=#lib::C2.id3] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id3}(3.0){(core::Comparable<core::num>) → dynamic};
+ [@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num>] [@vm.direct-call.metadata=#lib::C2.id4] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id4}(new self::K::•<self::J>()){(self::K<self::I<core::num>>) → dynamic};
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart
index c211e10..121201d 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:collection';
class Element {}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
index 1a8dce9..685989f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
@@ -1,21 +1,21 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object {
- synthetic constructor •() → self::A*
+ synthetic constructor •() → self::A
: super core::Object::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get foo() → core::String*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get foo() → core::String
return "foo";
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] method getBar() → core::String*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] method getBar() → core::String
return "bar";
}
class B extends core::Object implements core::Enum /*isEnum*/ {
-[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] [@vm.unboxing-info.metadata=()->i] final field core::int* index;
-[@vm.inferred-type.metadata=dart.core::_OneByteString (value: "B.b2")] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5] final field core::String* _name;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7] method toString() → core::String*
- return [@vm.direct-call.metadata=#lib::B._name] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "B.b2")] this.{self::B::_name}{core::String*};
+[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] [@vm.unboxing-info.metadata=()->i] final field core::int index;
+[@vm.inferred-type.metadata=dart.core::_OneByteString (value: "B.b2")] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5] final field core::String _name;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7] method toString() → core::String
+ return [@vm.direct-call.metadata=#lib::B._name] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "B.b2")] this.{self::B::_name}{core::String};
}
static method test0() → void {
core::print(#C1);
@@ -32,9 +32,9 @@
core::print(#C4);
core::print([@vm.inferred-type.metadata=dart.core::_Double (value: 100.0)] self::getD);
}
-static method testStrings([@vm.inferred-type.metadata=#lib::A] self::A* a0) → void {
- core::print([@vm.direct-call.metadata=#lib::A.foo] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "foo")] a0.{self::A::foo}{core::String*});
- core::print([@vm.direct-call.metadata=#lib::A.getBar] [@vm.inferred-type.metadata=dart.core::_OneByteString (skip check) (value: "bar")] a0.{self::A::getBar}(){() →* core::String*});
+static method testStrings([@vm.inferred-type.metadata=#lib::A] self::A a0) → void {
+ core::print([@vm.direct-call.metadata=#lib::A.foo] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "foo")] a0.{self::A::foo}{core::String});
+ core::print([@vm.direct-call.metadata=#lib::A.getBar] [@vm.inferred-type.metadata=dart.core::_OneByteString (skip check) (value: "bar")] a0.{self::A::getBar}(){() → core::String});
core::print(#C5);
}
static method testPassEnum() → void {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart
index 515824c..8356b38 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
abstract class A {
int foo();
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart b/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart
index 5f51fa3..bd09bf6 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart
@@ -1,3 +1,5 @@
+// @dart=2.9
+
main() {
dynamic x = List<int>.filled(10, null);
x[0] + 10;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect
index ac4bbc2..34740ea 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect
@@ -1,24 +1,21 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
abstract class Enum extends core::Object implements core::Enum {
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] abstract get index() → core::int*;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] abstract get /*isLegacy*/ index() → core::int;
}
class Class extends core::Object {
- synthetic constructor •() → self::Class*
+ synthetic constructor •() → self::Class
: super core::Object::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] method method() → core::int*
- return [@vm.inferred-type.metadata=!](#C1).{self::Enum::index}{core::int*};
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
+ return [@vm.inferred-type.metadata=!] e.{self::Enum::index}{core::int};
}
static method main() → dynamic {
- core::List<dynamic>* list = [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::•<dynamic>(0);
- if([@vm.direct-call.metadata=dart.core::_GrowableList.isNotEmpty] [@vm.inferred-type.metadata=dart.core::bool] list.{core::Iterable::isNotEmpty}{core::bool*}) {
- let final self::Class* #t1 = new self::Class::•() in let final self::Enum* #t2 = _in::unsafeCast<self::Enum*>(_in::unsafeCast<dynamic>(null)) in [@vm.direct-call.metadata=#lib::Class.method] [@vm.inferred-type.metadata=!? (skip check)] #t1.{self::Class::method}(){(self::Enum*) →* core::int*};
+ core::List<dynamic> list = [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::•<dynamic>(0);
+ if([@vm.direct-call.metadata=dart.core::_GrowableList.isNotEmpty] [@vm.inferred-type.metadata=dart.core::bool] list.{core::Iterable::isNotEmpty}{core::bool}) {
+ [@vm.direct-call.metadata=#lib::Class.method] [@vm.inferred-type.metadata=!? (skip check)] new self::Class::•().{self::Class::method}(_in::unsafeCast<self::Enum>(_in::unsafeCast<dynamic>(null))){(self::Enum) → core::int};
}
}
-constants {
- #C1 = null
-}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart b/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart
index fcdd2df..cfe006d 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:ffi';
/// Retained because of being by-value return type in FFI call.
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
index 8a43ab1..a0447e5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
@@ -1,35 +1,35 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
import "dart:async";
-class C<T extends core::Object* = dynamic> extends core::Object {
- synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::C<self::C::T%>
: super core::Object::•()
;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->b] method test2c([@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] generic-covariant-impl FutureOr<self::C::T*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method test3c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*> (skip check)] generic-covariant-impl asy::Future<self::C::T*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*> (skip check)] generic-covariant-impl FutureOr<self::C::T*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method test2r([@vm.inferred-type.metadata=#lib::C<dart.core::int*> (skip check)] generic-covariant-impl self::C<FutureOr<self::C::T*>*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method test3r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int*>*> (skip check)] generic-covariant-impl self::C<asy::Future<self::C::T*>*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method test4r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int*>*> (skip check)] generic-covariant-impl self::C<FutureOr<self::C::T*>*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method test5r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int*>?>] generic-covariant-impl self::C<asy::Future<self::C::T*>*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method test6r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int*>?> (skip check)] generic-covariant-impl self::C<FutureOr<self::C::T*>*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method test7r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int*>?>] generic-covariant-impl self::C<self::C::T*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method test8r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int*>*>] generic-covariant-impl self::C<self::C::T*>* x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->b] method test2c([@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] generic-covariant-impl FutureOr<self::C::T%>x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method test3c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int> (skip check)] generic-covariant-impl asy::Future<self::C::T%> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int> (skip check)] generic-covariant-impl FutureOr<self::C::T%>x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method test2r([@vm.inferred-type.metadata=#lib::C<dart.core::int> (skip check)] generic-covariant-impl self::C<FutureOr<self::C::T%>> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method test3r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int>> (skip check)] generic-covariant-impl self::C<asy::Future<self::C::T%>> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method test4r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int>> (skip check)] generic-covariant-impl self::C<FutureOr<self::C::T%>> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method test5r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int>?>] generic-covariant-impl self::C<asy::Future<self::C::T%>> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method test6r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int>?> (skip check)] generic-covariant-impl self::C<FutureOr<self::C::T%>> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method test7r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int>?>] generic-covariant-impl self::C<self::C::T%> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method test8r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int>>] generic-covariant-impl self::C<self::C::T%> x) → void {}
}
static method main() → dynamic {
- dynamic c = new self::C::•<core::int*>();
+ dynamic c = new self::C::•<core::int>();
[@vm.direct-call.metadata=#lib::C.test2c] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test2c(3);
- [@vm.direct-call.metadata=#lib::C.test3c] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test3c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*>] asy::Future::value<core::int*>(3));
- [@vm.direct-call.metadata=#lib::C.test4c] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*>] asy::Future::value<core::int*>(3));
- [@vm.direct-call.metadata=#lib::C.test2r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test2r(new self::C::•<core::int*>());
- [@vm.direct-call.metadata=#lib::C.test3r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test3r(new self::C::•<asy::Future<core::int*>*>());
- [@vm.direct-call.metadata=#lib::C.test4r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test4r(new self::C::•<asy::Future<core::int*>*>());
- [@vm.direct-call.metadata=#lib::C.test5r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test5r(new self::C::•<FutureOr<core::int*>*>());
- [@vm.direct-call.metadata=#lib::C.test6r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test6r(new self::C::•<FutureOr<core::int*>*>());
- [@vm.direct-call.metadata=#lib::C.test7r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test7r(new self::C::•<FutureOr<core::int*>*>());
- [@vm.direct-call.metadata=#lib::C.test8r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test8r(new self::C::•<asy::Future<core::int*>*>());
+ [@vm.direct-call.metadata=#lib::C.test3c] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test3c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int>] asy::Future::value<core::int>(3));
+ [@vm.direct-call.metadata=#lib::C.test4c] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int>] asy::Future::value<core::int>(3));
+ [@vm.direct-call.metadata=#lib::C.test2r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test2r(new self::C::•<core::int>());
+ [@vm.direct-call.metadata=#lib::C.test3r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test3r(new self::C::•<asy::Future<core::int>>());
+ [@vm.direct-call.metadata=#lib::C.test4r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test4r(new self::C::•<asy::Future<core::int>>());
+ [@vm.direct-call.metadata=#lib::C.test5r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test5r(new self::C::•<FutureOr<core::int>>());
+ [@vm.direct-call.metadata=#lib::C.test6r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test6r(new self::C::•<FutureOr<core::int>>());
+ [@vm.direct-call.metadata=#lib::C.test7r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test7r(new self::C::•<FutureOr<core::int>>());
+ [@vm.direct-call.metadata=#lib::C.test8r] [@vm.inferred-type.metadata=!? (receiver not int)] c{dynamic}.test8r(new self::C::•<asy::Future<core::int>>());
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart
index f253547..03e65ae 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:async';
dynamic usedObject;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/hello.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/hello.dart.expect
index 2296f5b..7b1f705 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/hello.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/hello.dart.expect
@@ -1,14 +1,14 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object {
- synthetic constructor •() → self::A*
+ synthetic constructor •() → self::A
: super core::Object::•()
;
}
-static method foo() → core::Object*
+static method foo() → core::Object
return new self::A::•();
-static method main(core::List<core::String*>* args) → dynamic {
+static method main(core::List<core::String> args) → dynamic {
core::print([@vm.inferred-type.metadata=#lib::A] self::foo());
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart
index da1f458..7420b2c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart
@@ -11,6 +11,8 @@
// self-induced invalidations.
//
+// @dart=2.9
+
class StreamSubscription {}
class _BufferingStreamSubscription extends StreamSubscription {}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart
index c4e949c..b0ca102 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
class T1 {}
class T2 {}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart
index b70a6cf..844a585 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
class T1 {}
class T2 {}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart
index 5248ac9..d7a751a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
class T1 {}
class T2 {}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart
index cd5d128..b91b3a3 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
class T1 {}
class T2 {}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart
index 7fb845e..9a5df63 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
class T1 {}
class T2 {}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect
index ffc08fe..918c5ae 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect
@@ -1,43 +1,43 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class T1 extends core::Object {
- synthetic constructor •() → self::T1*
+ synthetic constructor •() → self::T1
: super core::Object::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method go() → self::T3*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method go() → self::T3
return new self::T3::•();
}
class T2 extends core::Object {
- synthetic constructor •() → self::T2*
+ synthetic constructor •() → self::T2
: super core::Object::•()
;
}
class T3 extends core::Object {
- synthetic constructor •() → self::T3*
+ synthetic constructor •() → self::T3
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method run() → dynamic {
core::print("hi");
}
}
-class Q<T extends core::Object* = dynamic> extends core::Object {
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5] final field self::Q::T* result;
- constructor •(self::Q::T* result) → self::Q<self::Q::T*>*
+class Q<T extends core::Object? = dynamic> extends core::Object {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5] final field self::Q::T% result;
+ constructor •(self::Q::T% result) → self::Q<self::Q::T%>
: self::Q::result = result, super core::Object::•()
;
}
-static method foo1([@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::T1*>] core::List<self::T1*>* list) → dynamic {
- [@vm.direct-call.metadata=#lib::T3.run] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::T1.go??] [@vm.inferred-type.metadata=#lib::T3 (skip check)] [@vm.direct-call.metadata=#lib::Q.result??] [@vm.direct-call.metadata=dart._internal::ListIterable.first] [@vm.inferred-type.metadata=#lib::Q?] [@vm.direct-call.metadata=dart.collection::_ListBase&Object&ListMixin.map] [@vm.inferred-type.metadata=dart._internal::MappedListIterable<#lib::T1*, ?> (skip check)] list.{core::Iterable::map}<self::Q<self::T1*>*>((self::T1* t1) → self::Q<self::T1*>* => new self::Q::•<self::T1*>(t1)){((self::T1*) →* self::Q<self::T1*>*) →* core::Iterable<self::Q<self::T1*>*>*}.{core::Iterable::first}{self::Q<self::T1*>*}.{self::Q::result}{self::T1*}.{self::T1::go}(){() →* self::T3*}.{self::T3::run}(){() →* dynamic};
+static method foo1([@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::T1>] core::List<self::T1> list) → dynamic {
+ [@vm.direct-call.metadata=#lib::T3.run] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::T1.go??] [@vm.inferred-type.metadata=#lib::T3 (skip check)] [@vm.direct-call.metadata=#lib::Q.result??] [@vm.direct-call.metadata=dart._internal::ListIterable.first] [@vm.inferred-type.metadata=#lib::Q?] [@vm.direct-call.metadata=dart.collection::_ListBase&Object&ListMixin.map] [@vm.inferred-type.metadata=dart._internal::MappedListIterable<#lib::T1, ?> (skip check)] list.{core::Iterable::map}<self::Q<self::T1>>((self::T1 t1) → self::Q<self::T1> => new self::Q::•<self::T1>(t1)){((self::T1) → self::Q<self::T1>) → core::Iterable<self::Q<self::T1>>}.{core::Iterable::first}{self::Q<self::T1>}.{self::Q::result}{self::T1}.{self::T1::go}(){() → self::T3}.{self::T3::run}(){() → dynamic};
}
-static method foo2NewValue() → self::Q<dynamic>*
- return new self::Q::•<self::T2*>(new self::T2::•());
+static method foo2NewValue() → self::Q<dynamic>
+ return new self::Q::•<self::T2>(new self::T2::•());
static method foo3NewT1() → dynamic {
new self::T1::•();
}
-static method main(core::List<core::String*>* args) → dynamic {
- self::foo1([@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::T1*>] core::_GrowableList::•<self::T1*>(0));
+static method main(core::List<core::String> args) → dynamic {
+ self::foo1([@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::T1>] core::_GrowableList::•<self::T1>(0));
self::foo2NewValue();
self::foo3NewT1();
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect
index 74df479..84447db 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_while_processing.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
@@ -6,35 +6,35 @@
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] abstract method foo() → void;
}
class T1 extends core::Object implements self::I {
- synthetic constructor •() → self::T1*
+ synthetic constructor •() → self::T1
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method foo() → void {}
}
class T2 extends core::Object implements self::I {
- synthetic constructor •() → self::T2*
+ synthetic constructor •() → self::T2
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method foo() → void {}
}
class Point extends core::Object /*hasConstConstructor*/ {
-[@vm.inferred-type.metadata=!] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] final field self::I* x;
- const constructor •([@vm.inferred-type.metadata=!] self::I* x) → self::Point*
+[@vm.inferred-type.metadata=!] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] final field self::I x;
+ const constructor •([@vm.inferred-type.metadata=!] self::I x) → self::Point
: self::Point::x = x, super core::Object::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] method newPoint1() → self::Point*
- return new self::Point::•([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] this.{self::Point::x}{self::I*});
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7] method newPoint2() → self::Point*
- return new self::Point::•([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] this.{self::Point::x}{self::I*});
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] method newPoint1() → self::Point
+ return new self::Point::•([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] this.{self::Point::x}{self::I});
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7] method newPoint2() → self::Point
+ return new self::Point::•([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] this.{self::Point::x}{self::I});
}
static method getX([@vm.inferred-type.metadata=#lib::Point] dynamic point) → dynamic {
[@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!? (receiver not int)] point{dynamic}.x;
}
static method main() → dynamic {
- self::Point* a = new self::Point::•(new self::T1::•());
- core::print([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] a.{self::Point::x}{self::I*});
- self::Point* c = new self::Point::•(new self::T2::•());
- [@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] c.{self::Point::x}{self::I*}.{self::I::foo}(){() →* void};
- self::getX([@vm.direct-call.metadata=#lib::Point.newPoint1] [@vm.inferred-type.metadata=#lib::Point (skip check)] a.{self::Point::newPoint1}(){() →* self::Point*});
- self::getX([@vm.direct-call.metadata=#lib::Point.newPoint2] [@vm.inferred-type.metadata=#lib::Point (skip check)] a.{self::Point::newPoint2}(){() →* self::Point*});
+ self::Point a = new self::Point::•(new self::T1::•());
+ core::print([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] a.{self::Point::x}{self::I});
+ self::Point c = new self::Point::•(new self::T2::•());
+ [@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] c.{self::Point::x}{self::I}.{self::I::foo}(){() → void};
+ self::getX([@vm.direct-call.metadata=#lib::Point.newPoint1] [@vm.inferred-type.metadata=#lib::Point (skip check)] a.{self::Point::newPoint1}(){() → self::Point});
+ self::getX([@vm.direct-call.metadata=#lib::Point.newPoint2] [@vm.inferred-type.metadata=#lib::Point (skip check)] a.{self::Point::newPoint2}(){() → self::Point});
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart b/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart
index 62e1f09..355f41d3 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
nonConstant() => int.parse('1') == 1;
class A {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/named_params_shaking_test.dart b/pkg/vm/testcases/transformations/type_flow/transformer/named_params_shaking_test.dart
index b941651..b180b60 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/named_params_shaking_test.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/named_params_shaking_test.dart
@@ -4,6 +4,8 @@
//
// Test that optimization of named parameters doesn't change evaluation order.
+// @dart=2.9
+
import 'dart:math';
import 'package:expect/expect.dart';
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart
index a85118e..e0ab4922 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
class T1 {}
class T2 {}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination.dart b/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination.dart
index 98488d3..121f842 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination.dart
@@ -4,6 +4,8 @@
// Tests elimination of null tests.
+// @dart=2.9
+
class A {
String nonNullable;
String nullable;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart
index b60d23b..4065205 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart
@@ -5,6 +5,8 @@
// This test verifies that inferred types of parameters are valid *before*
// applying strong mode argument type checks.
+// @dart=2.9
+
abstract class T0 {
void foo();
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect
index b832065..9578649 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/pragmas.dart.expect
@@ -1,30 +1,30 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object /*hasConstConstructor*/ {
-[@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i] final field core::int* x;
+[@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i] final field core::int x;
}
class B extends core::Object /*hasConstConstructor*/ {
-[@vm.inferred-type.metadata=dart.core::_Smi (value: 11)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] final field core::int* y;
+[@vm.inferred-type.metadata=dart.core::_Smi (value: 11)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] final field core::int y;
}
class C extends core::Object /*hasConstConstructor*/ {
-[@vm.inferred-type.metadata=dart.core::_Smi (value: 12)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] [@vm.unboxing-info.metadata=()->i] final field core::int* z;
+[@vm.inferred-type.metadata=dart.core::_Smi (value: 12)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] [@vm.unboxing-info.metadata=()->i] final field core::int z;
}
@#C4
class Foo extends core::Object {
- synthetic constructor •() → self::Foo*
+ synthetic constructor •() → self::Foo
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] @#C13
method bar() → void {
@#C17
function bazz() → void {}
- bazz(){() →* void};
+ bazz(){() → void};
}
}
static method main() → dynamic {
- [@vm.direct-call.metadata=#lib::Foo.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::Foo::•().{self::Foo::bar}(){() →* void};
+ [@vm.direct-call.metadata=#lib::Foo.bar] [@vm.inferred-type.metadata=!? (skip check)] new self::Foo::•().{self::Foo::bar}(){() → void};
}
constants {
#C1 = "test1"
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart
index 1912459..929945f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart
@@ -13,7 +13,7 @@
..aKeep = 43;
test('retrieving values', () {
expect(foo.barKeep.aKeep, 5);
- expect(foo.mapKeep['foo'].aKeep, 2);
+ expect(foo.mapKeep['foo']!.aKeep, 2);
expect(foo.hasHasKeep(), false);
expect(foo.aKeep, 43);
foo.clearClearKeep();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
index 9dae16a..d1e617c0 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "generated/foo.pb.dart" as pb;
import "dart:core" as core;
@@ -9,21 +9,21 @@
import "file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart";
static method main() → dynamic {
- pb::FooKeep* foo = let final pb::FooKeep* #t1 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep::•() in block {
- [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep* #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+ pb::FooKeep foo = let final pb::FooKeep #t1 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep::•() in block {
+ [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
} =>#t2;
- [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+ [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]=}("foo", let final pb::BarKeep #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pb::BarKeep::aKeep} = 2;
- } =>#t3){(core::String*, pb::BarKeep*) →* void};
+ } =>#t3){(core::String, pb::BarKeep) → void};
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
} =>#t1;
sca::test(() → Null {
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}{pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 5);
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]}("foo"){(core::Object*) →* pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 2);
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() →* core::bool*}, false);
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int*}, 43);
- [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() →* void};
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}{pb::BarKeep}.{pb::BarKeep::aKeep}{core::int}, 5);
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]}("foo"){(core::Object?) → pb::BarKeep?}!.{pb::BarKeep::aKeep}{core::int}, 2);
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() → core::bool}, false);
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int}, 43);
+ [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() → void};
});
}
library foo.pb.dart /*isNonNullableByDefault*/;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart
index d33289f..7e96839 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart
@@ -19,7 +19,7 @@
main() {
FooKeep foo = FooKeep.fromBuffer(buffer);
test('Kept values are restored correctly', () {
- expect(foo.mapKeep['foo'].aKeep, 42);
+ expect(foo.mapKeep['foo']!.aKeep, 42);
expect(foo.barKeep.aKeep, 5);
expect(foo.aKeep, 43);
expect(foo.hasHasKeep(), true);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
index 133c846..7b743f8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "generated/foo.pb.dart" as pb;
import "package:test_core/scaffolding.dart" as sca;
@@ -8,15 +8,15 @@
import "package:test/test.dart";
import "file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart";
-[@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::int*>]static field core::List<core::int*>* buffer = <core::int*>[10, 4, 8, 5, 16, 4, 26, 9, 10, 3, 102, 111, 111, 18, 2, 8, 42, 34, 9, 10, 3, 122, 111, 112, 18, 2, 8, 3, 40, 43, 50, 0, 58, 0];
+[@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::int>]static field core::List<core::int> buffer = <core::int>[10, 4, 8, 5, 16, 4, 26, 9, 10, 3, 102, 111, 111, 18, 2, 8, 42, 34, 9, 10, 3, 122, 111, 112, 18, 2, 8, 3, 40, 43, 50, 0, 58, 0];
static method main() → dynamic {
- pb::FooKeep* foo = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep::fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::int*>] self::buffer);
+ pb::FooKeep foo = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep::fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::int>] self::buffer);
sca::test(() → Null {
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]}("foo"){(core::Object*) →* pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 42);
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}{pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 5);
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int*}, 43);
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() →* core::bool*}, true);
- [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() →* void};
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]}("foo"){(core::Object?) → pb::BarKeep?}!.{pb::BarKeep::aKeep}{core::int}, 42);
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}{pb::BarKeep}.{pb::BarKeep::aKeep}{core::int}, 5);
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int}, 43);
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() → core::bool}, true);
+ [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() → void};
});
}
library foo.pb.dart /*isNonNullableByDefault*/;
@@ -41,7 +41,7 @@
constructor _() → self::FooKeep
: super pro::GeneratedMessage::•()
;
- static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::int*>] core::List<core::int> i) → self::FooKeep
+ static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::int>] core::List<core::int> i) → self::FooKeep
return let final self::FooKeep #t2 = [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::create() in block {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::GeneratedMessage::mergeFromBuffer}(i){(core::List<core::int>, [pro::ExtensionRegistry]) → void};
} =>#t2;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
index f223e18..4b3811a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "generated/foo.pb.dart" as pb;
import "dart:core" as core;
@@ -10,26 +10,26 @@
import "file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart";
static method main() → dynamic {
- pb::FooKeep* foo = let final pb::FooKeep* #t1 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep::•() in block {
- [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep* #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+ pb::FooKeep foo = let final pb::FooKeep #t1 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep::•() in block {
+ [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.bDrop] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::bDrop} = 4;
} =>#t2;
- [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+ [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]=}("foo", let final pb::BarKeep #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pb::BarKeep::aKeep} = 42;
- } =>#t3){(core::String*, pb::BarKeep*) →* void};
- [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapDrop] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapDrop}{core::Map<core::String*, pb::ZopDrop*>*}.{core::Map::[]=}("zop", let final pb::ZopDrop* #t4 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop] pb::ZopDrop::•() in block {
+ } =>#t3){(core::String, pb::BarKeep) → void};
+ [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapDrop] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapDrop}{core::Map<core::String, pb::ZopDrop>}.{core::Map::[]=}("zop", let final pb::ZopDrop #t4 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop] pb::ZopDrop::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop.aDrop] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pb::ZopDrop::aDrop} = 3;
- } =>#t4){(core::String*, pb::ZopDrop*) →* void};
+ } =>#t4){(core::String, pb::ZopDrop) → void};
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::hasKeep} = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::HasKeep] pb::HasKeep::•();
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::clearKeep} = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ClearKeep] pb::ClearKeep::•();
} =>#t1;
- final typ::Uint8List* buffer = [@vm.direct-call.metadata=protobuf::GeneratedMessage.writeToBuffer] [@vm.inferred-type.metadata=dart.typed_data::_Uint8List (skip check)] foo.{pro::GeneratedMessage::writeToBuffer}(){() →* typ::Uint8List*};
+ final typ::Uint8List buffer = [@vm.direct-call.metadata=protobuf::GeneratedMessage.writeToBuffer] [@vm.inferred-type.metadata=dart.typed_data::_Uint8List (skip check)] foo.{pro::GeneratedMessage::writeToBuffer}(){() → typ::Uint8List};
core::print("List<int> buffer = <int>[");
- for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=dart.typed_data::_TypedListBase.length] [@vm.inferred-type.metadata=dart.core::_Smi] buffer.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(5){(core::num*) →* core::int*}) {
- final core::String* numbers = [@vm.direct-call.metadata=dart.typed_data::_TypedListBase.join] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=dart.typed_data::__Uint8List&_TypedList&_IntListMixin&_TypedIntListMixin.sublist] [@vm.inferred-type.metadata=dart.typed_data::_Uint8List (skip check)] buffer.{typ::Uint8List::sublist}(i, [@vm.inferred-type.metadata=int] math::min<core::int*>([@vm.direct-call.metadata=dart.typed_data::_TypedListBase.length] [@vm.inferred-type.metadata=dart.core::_Smi] buffer.{core::List::length}{core::int*}, [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(5){(core::num*) →* core::int*})){(core::int*, [core::int*]) →* typ::Uint8List*}.{core::Iterable::join}(", "){([core::String*]) →* core::String*};
- core::print(" ${numbers},${[@vm.direct-call.metadata=dart.core::_IntegerImplementation.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::String*} " //" : ""}");
+ for (core::int i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=dart.typed_data::_TypedListBase.length] [@vm.inferred-type.metadata=dart.core::_Smi] buffer.{core::List::length}{core::int}){(core::num) → core::bool}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(5){(core::num) → core::int}) {
+ final core::String numbers = [@vm.direct-call.metadata=dart.typed_data::_TypedListBase.join] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=dart.typed_data::__Uint8List&_TypedList&_IntListMixin&_TypedIntListMixin.sublist] [@vm.inferred-type.metadata=dart.typed_data::_Uint8List (skip check)] buffer.{typ::Uint8List::sublist}(i, [@vm.inferred-type.metadata=int] math::min<core::int>([@vm.direct-call.metadata=dart.typed_data::_TypedListBase.length] [@vm.inferred-type.metadata=dart.core::_Smi] buffer.{core::List::length}{core::int}, [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(5){(core::num) → core::int})){(core::int, [core::int?]) → typ::Uint8List}.{core::Iterable::join}(", "){([core::String]) → core::String};
+ core::print(" ${numbers},${[@vm.direct-call.metadata=dart.core::_IntegerImplementation.==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i =={core::num::==}{(core::Object) → core::bool} 0 ?{core::String} " //" : ""}");
}
core::print("];");
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart
index 0529e4a..8d7567e 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart
@@ -14,7 +14,7 @@
test('Freezing a message works', () {
foo.freeze();
expect(foo.barKeep.aKeep, 5);
- expect(foo.mapKeep['foo'].aKeep, 2);
+ expect(foo.mapKeep['foo']!.aKeep, 2);
expect(foo.hasHasKeep(), false);
expect(foo.aKeep, 43);
expect(() => foo.clearClearKeep(),
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
index ee0cdfc..aec44f7 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "generated/foo.pb.dart" as pb;
import "dart:core" as core;
@@ -11,22 +11,22 @@
import "file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart";
static method main() → dynamic {
- pb::FooKeep* foo = let final pb::FooKeep* #t1 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep::•() in block {
- [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep* #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+ pb::FooKeep foo = let final pb::FooKeep #t1 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep::•() in block {
+ [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
} =>#t2;
- [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String*, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep*>*] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]=}("foo", let final pb::BarKeep* #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+ [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]=}("foo", let final pb::BarKeep #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pb::BarKeep::aKeep} = 2;
- } =>#t3){(core::String*, pb::BarKeep*) →* void};
+ } =>#t3){(core::String, pb::BarKeep) → void};
[@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
} =>#t1;
sca::test(() → Null {
- [@vm.direct-call.metadata=protobuf::GeneratedMessage.freeze] [@vm.inferred-type.metadata=!? (skip check)] foo.{pro::GeneratedMessage::freeze}(){() →* pro::GeneratedMessage*};
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}{pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 5);
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}{core::Map<core::String*, pb::BarKeep*>*}.{core::Map::[]}("foo"){(core::Object*) →* pb::BarKeep*}.{pb::BarKeep::aKeep}{core::int*}, 2);
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() →* core::bool*}, false);
- exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int*}, 43);
- exp::expect(() → void => [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() →* void}, [@vm.inferred-type.metadata=library package:test_api/src/expect/throws_matcher.dart::Throws] thr::throwsA());
+ [@vm.direct-call.metadata=protobuf::GeneratedMessage.freeze] [@vm.inferred-type.metadata=!? (skip check)] foo.{pro::GeneratedMessage::freeze}(){() → pro::GeneratedMessage};
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep??] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] foo.{pb::FooKeep::barKeep}{pb::BarKeep}.{pb::BarKeep::aKeep}{core::int}, 5);
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep?] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=!] foo.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]}("foo"){(core::Object?) → pb::BarKeep?}!.{pb::BarKeep::aKeep}{core::int}, 2);
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() → core::bool}, false);
+ exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int}, 43);
+ exp::expect(() → void => [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=!? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() → void}, [@vm.inferred-type.metadata=library package:test_api/src/expect/throws_matcher.dart::Throws] thr::throwsA());
});
}
library foo.pb.dart /*isNonNullableByDefault*/;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
index 7489bcb..fb4225c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "generated/name_mangling.pb.dart" as pb;
import "dart:core" as core;
@@ -7,8 +7,8 @@
import "file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart";
static method main() → dynamic {
- pb::NameManglingKeep* n = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart::NameManglingKeep] pb::NameManglingKeep::fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::_GrowableList::•<core::int*>(0));
- if([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart::NameManglingKeep.hasClone_10] [@vm.inferred-type.metadata=dart.core::bool (skip check)] n.{pb::NameManglingKeep::hasClone_10}(){() →* core::bool*}) {
+ pb::NameManglingKeep n = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart::NameManglingKeep] pb::NameManglingKeep::fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::•<core::int>(0));
+ if([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart::NameManglingKeep.hasClone_10] [@vm.inferred-type.metadata=dart.core::bool (skip check)] n.{pb::NameManglingKeep::hasClone_10}(){() → core::bool}) {
core::print("Has clone field");
}
}
@@ -41,7 +41,7 @@
constructor _() → self::NameManglingKeep
: super pro::GeneratedMessage::•()
;
- static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::List<core::int> i) → self::NameManglingKeep
+ static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<core::int> i) → self::NameManglingKeep
return let final self::NameManglingKeep #t3 = [@vm.inferred-type.metadata=name_mangling.pb.dart::NameManglingKeep] self::NameManglingKeep::create() in block {
[@vm.direct-call.metadata=protobuf::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::GeneratedMessage::mergeFromBuffer}(i){(core::List<core::int>, [pro::ExtensionRegistry]) → void};
} =>#t3;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/nop_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/nop_test.dart.expect
index 7512991..0762979 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/nop_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/nop_test.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect
index 2d0f29f..7de8f83 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect
@@ -1,31 +1,31 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object {
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] final field core::List<dynamic>* afield;
- constructor •(core::List<dynamic>* afield) → self::A*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] final field core::List<dynamic> afield;
+ constructor •(core::List<dynamic> afield) → self::A
: self::A::afield = afield, super core::Object::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] method toString() → core::String*
- return [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.direct-call.metadata=#lib::A.afield] this.{self::A::afield}{core::List<dynamic>*}.{core::Object::toString}(){() →* core::String*};
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] method toString() → core::String
+ return [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.direct-call.metadata=#lib::A.afield] this.{self::A::afield}{core::List<dynamic>}.{core::Object::toString}(){() → core::String};
}
class B extends core::Object {
- synthetic constructor •() → self::B*
+ synthetic constructor •() → self::B
: super core::Object::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] method _foo([@vm.inferred-type.metadata=dart._internal::ListIterator<dart.core::int*>] core::Iterator<core::int*>* iter) → core::List<dynamic>* {
- core::List<dynamic>* result = [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::•<dynamic>(0);
- while ([@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] iter.{core::Iterator::moveNext}(){() →* core::bool*}) {
- if([@vm.direct-call.metadata=dart.core::_IntegerImplementation.<??] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart._internal::ListIterator.current] [@vm.inferred-type.metadata=int?] iter.{core::Iterator::current}{core::int*}.{core::num::<}(0){(core::num*) →* core::bool*}) {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] method _foo([@vm.inferred-type.metadata=dart._internal::ListIterator<dart.core::int>] core::Iterator<core::int> iter) → core::List<dynamic> {
+ core::List<dynamic> result = [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::•<dynamic>(0);
+ while ([@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] iter.{core::Iterator::moveNext}(){() → core::bool}) {
+ if([@vm.direct-call.metadata=dart.core::_IntegerImplementation.<??] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart._internal::ListIterator.current] [@vm.inferred-type.metadata=int?] iter.{core::Iterator::current}{core::int}.{core::num::<}(0){(core::num) → core::bool}) {
return result;
}
- [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dynamic>*] [@vm.direct-call.metadata=dart.core::_GrowableList.add] [@vm.inferred-type.metadata=!? (skip check)] result.{core::List::add}(new self::A::•([@vm.direct-call.metadata=#lib::B._foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::B::_foo}(iter){(core::Iterator<core::int*>*) →* core::List<dynamic>*})){(dynamic) →* void};
+ [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dynamic>] [@vm.direct-call.metadata=dart.core::_GrowableList.add] [@vm.inferred-type.metadata=!? (skip check)] result.{core::List::add}(new self::A::•([@vm.direct-call.metadata=#lib::B._foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::B::_foo}(iter){(core::Iterator<core::int>) → core::List<dynamic>})){(dynamic) → void};
}
return result;
}
}
static method main() → void {
- core::List<dynamic>* list = [@vm.direct-call.metadata=#lib::B._foo] [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic> (skip check)] new self::B::•().{self::B::_foo}([@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<dart.core::int*>] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*}){(core::Iterator<core::int*>*) →* core::List<dynamic>*};
+ core::List<dynamic> list = [@vm.direct-call.metadata=#lib::B._foo] [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic> (skip check)] new self::B::•().{self::B::_foo}([@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<dart.core::int>] [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::_literal3<core::int>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int>}){(core::Iterator<core::int>) → core::List<dynamic>};
core::print(list);
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect
index 577315f..35c9ce8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect
@@ -1,8 +1,8 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
-[@vm.unboxing-info.metadata=(b)->i]static method foo([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::List<core::int*>* x) → dynamic
- return [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=int? (skip check)] x.{core::List::[]}(0){(core::int*) →* core::int*}){(core::num*) →* core::int*};
+[@vm.unboxing-info.metadata=(b)->i]static method foo([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<core::int> x) → dynamic
+ return [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=dart.core::_GrowableList.[]] [@vm.inferred-type.metadata=int? (skip check)] x.{core::List::[]}(0){(core::int) → core::int}){(core::num) → core::int};
static method main() → dynamic
- return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::print([@vm.inferred-type.metadata=int] self::foo([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::_GrowableList::_literal1<core::int*>(1)));
+ return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::print([@vm.inferred-type.metadata=int] self::foo([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::_literal1<core::int>(1)));
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42413.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42413.dart.expect
index b0bcba0..e29a055 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42413.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42413.dart.expect
@@ -1,25 +1,25 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
class B extends core::Object {
- synthetic constructor •() → self::B*
+ synthetic constructor •() → self::B
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i] get x() → dynamic
return 0;
}
class A extends core::Object {
-[@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B*>] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] field dynamic list = null;
- constructor •() → self::A*
+[@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B>] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] field dynamic list = null;
+ constructor •() → self::A
: super core::Object::•() {
- [@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A::list} = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::B*>] core::_GrowableList::_literal1<self::B*>(new self::B::•());
+ [@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A::list} = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::B>] core::_GrowableList::_literal1<self::B>(new self::B::•());
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] @#C3
method forIn() → void {
{
- core::Iterator<dynamic>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator??] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::B*>] _in::unsafeCast<core::Iterable<dynamic>*>([@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B*>] this.{self::A::list}{dynamic}).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+ core::Iterator<dynamic> :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator??] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::B>] _in::unsafeCast<core::Iterable<dynamic>>([@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B>] this.{self::A::list}{dynamic}).{core::Iterable::iterator}{core::Iterator<dynamic>};
for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
dynamic e = [@vm.direct-call.metadata=dart._internal::ListIterator.current] [@vm.inferred-type.metadata=#lib::B?] :sync-for-iterator.{core::Iterator::current}{dynamic};
core::print([@vm.direct-call.metadata=#lib::B.x??] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0) (receiver not int)] e{dynamic}.x);
@@ -28,15 +28,15 @@
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7] @#C3
method cLoop() → void {
- for (core::int* i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=dart.core::_GrowableList.length??] [@vm.inferred-type.metadata=dart.core::_Smi (receiver not int)] [@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B*>] this.{self::A::list}{dynamic}{dynamic}.length)){(core::num*) →* core::bool*}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num*) →* core::int*}) {
- final dynamic e = [@vm.direct-call.metadata=dart.core::_GrowableList.[]??] [@vm.inferred-type.metadata=#lib::B? (receiver not int)] [@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B*>] this.{self::A::list}{dynamic}{dynamic}.[](i);
+ for (core::int i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(_in::unsafeCast<core::num>([@vm.direct-call.metadata=dart.core::_GrowableList.length??] [@vm.inferred-type.metadata=dart.core::_Smi (receiver not int)] [@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B>] this.{self::A::list}{dynamic}{dynamic}.length)){(core::num) → core::bool}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num) → core::int}) {
+ final dynamic e = [@vm.direct-call.metadata=dart.core::_GrowableList.[]??] [@vm.inferred-type.metadata=#lib::B? (receiver not int)] [@vm.direct-call.metadata=#lib::A.list] [@vm.inferred-type.metadata=dart.core::_GrowableList?<#lib::B>] this.{self::A::list}{dynamic}{dynamic}.[](i);
core::print([@vm.direct-call.metadata=#lib::B.x??] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0) (receiver not int)] e{dynamic}.x);
}
}
}
static method main() → void {
- [@vm.direct-call.metadata=#lib::A.forIn] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::forIn}(){() →* void};
- [@vm.direct-call.metadata=#lib::A.cLoop] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::cLoop}(){() →* void};
+ [@vm.direct-call.metadata=#lib::A.forIn] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::forIn}(){() → void};
+ [@vm.direct-call.metadata=#lib::A.cLoop] [@vm.inferred-type.metadata=!? (skip check)] new self::A::•().{self::A::cLoop}(){() → void};
}
constants {
#C1 = "vm:never-inline"
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_1_test.dart b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_1_test.dart
index 65d7485..76df937 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_1_test.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_1_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:math';
import 'package:expect/expect.dart';
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_2_test.dart b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_2_test.dart
index 824ac78..45943ff 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_2_test.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_42418_2_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
import 'dart:math';
import 'package:expect/expect.dart';
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324.dart.expect
index f097822..a7e00ed 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_45324.dart.expect
@@ -1,20 +1,20 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object /*hasConstConstructor*/ {
-[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i] final field core::int* targetPlatform;
+[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i] final field core::int targetPlatform;
}
class X extends core::Object implements self::A {
- synthetic constructor •() → self::X*
+ synthetic constructor •() → self::X
: super core::Object::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i] get targetPlatform() → core::int*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i] get targetPlatform() → core::int
return 2;
}
-[@vm.inferred-type.metadata=#lib::X?]static field self::A* a = new self::X::•();
+[@vm.inferred-type.metadata=#lib::X?]static field self::A a = new self::X::•();
static method main() → void {
- core::print([@vm.direct-call.metadata=#lib::X.targetPlatform??] [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] [@vm.inferred-type.metadata=#lib::X?] self::a.{self::A::targetPlatform}{core::int*});
+ core::print([@vm.direct-call.metadata=#lib::X.targetPlatform??] [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] [@vm.inferred-type.metadata=#lib::X?] self::a.{self::A::targetPlatform}{core::int});
core::print(#C2);
}
constants {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart
index 81c386e..fcc1c23 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart
@@ -5,6 +5,8 @@
// Regression test for https://github.com/flutter/flutter/issues/16182
// Verifies that TFA correctly handles calls via fields/getters.
+// @dart=2.9
+
import "package:expect/expect.dart";
bool ok;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter57213.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter57213.dart.expect
index 4e27a60..a079cbe 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter57213.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter57213.dart.expect
@@ -1,30 +1,30 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
@#C3
class A extends core::Object {
- constructor •() → self::A*
+ constructor •() → self::A
: super core::Object::•()
;
}
class B extends self::A {
- constructor •() → self::B*
+ constructor •() → self::B
: super self::A::•()
;
}
abstract class C extends core::Object {
- constructor •() → self::C*
+ constructor •() → self::C
: super core::Object::•()
;
}
abstract class D extends self::C {
- constructor •() → self::D*
+ constructor •() → self::D
: super self::C::•()
;
}
class E extends self::D {
- constructor •() → self::E*
+ constructor •() → self::E
: super self::D::•()
;
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
index a63904b..82edbf6 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
@@ -1,41 +1,41 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
import "dart:async";
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
- synthetic constructor •() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::A<self::A::T%>
: super core::Object::•()
;
}
-class B<T extends core::Object* = dynamic> extends self::A<core::String*> implements asy::Future<self::B::T*> {
- synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<core::String> implements asy::Future<self::B::T%> {
+ synthetic constructor •() → self::B<self::B::T%>
: super self::A::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method noSuchMethod(core::Invocation* i) → dynamic
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method noSuchMethod(core::Invocation i) → dynamic
return throw "Not implemented";
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] no-such-method-forwarder method then<R extends core::Object* = dynamic>((self::B::T*) →* FutureOr<self::B::then::R*>* onValue, {core::Function* onError = #C1}) → asy::Future<self::B::then::R*>*
- return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, core::List::unmodifiable<core::Type*>([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Type*>] core::_GrowableList::_literal1<core::Type*>(self::B::then::R*)), core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onValue)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C3: onError}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::B::then::R*>*;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] no-such-method-forwarder method catchError(core::Function* onError, {[@vm.inferred-type.metadata=dart.core::Null? (value: null)] (core::Object*) →* core::bool* test = #C1}) → asy::Future<self::B::T*>*
- return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 0, #C5, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onError)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::B::T*>*;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::B::T*>*
- return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C5, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(action)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C9))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::B::T*>*;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {[@vm.inferred-type.metadata=dart.core::Null? (value: null)] (core::Object) →? core::bool test = #C1}) → asy::Future<self::B::T%>
+ return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onError)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::T%>;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::B::T%>
+ return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(action)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::T%>;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::B::T%) → FutureOr<self::B::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::B::then::R%>
+ return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, core::List::unmodifiable<core::Type*>([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Type*>] core::_GrowableList::_literal1<core::Type*>(self::B::then::R%)), core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onValue)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::then::R%>;
}
-static method createB<T extends core::Object* = dynamic>() → self::B<dynamic>*
- return new self::B::•<self::createB::T*>();
+static method createB<T extends core::Object? = dynamic>() → self::B<dynamic>
+ return new self::B::•<self::createB::T%>();
static method main() → void {
- core::print([@vm.inferred-type.metadata=#lib::B<?>] self::createB<core::int*>() as FutureOr<core::double*>*);
+ core::print([@vm.inferred-type.metadata=#lib::B<?>] self::createB<core::int>() as{ForNonNullableByDefault} FutureOr<core::double>);
}
constants {
#C1 = null
- #C2 = #then
- #C3 = #onError
- #C4 = #catchError
- #C5 = <core::Type*>[]
- #C6 = #test
- #C7 = #whenComplete
- #C8 = <dynamic>[]
- #C9 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C8}
+ #C2 = #catchError
+ #C3 = <core::Type*>[]
+ #C4 = #test
+ #C5 = #whenComplete
+ #C6 = <dynamic>[]
+ #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
+ #C8 = #then
+ #C9 = #onError
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/selector_id_assignments.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/selector_id_assignments.dart.expect
index 39043c5..bba93d0 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/selector_id_assignments.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/selector_id_assignments.dart.expect
@@ -1,11 +1,11 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
abstract class X extends core::Object {
}
class A1 extends core::Object {
- synthetic constructor •() → self::A1*
+ synthetic constructor •() → self::A1
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method foo() → void {
@@ -13,12 +13,12 @@
}
}
class B1 extends self::A1 {
- synthetic constructor •() → self::B1*
+ synthetic constructor •() → self::B1
: super self::A1::•()
;
}
class C1 extends self::B1 {
- synthetic constructor •() → self::C1*
+ synthetic constructor •() → self::C1
: super self::B1::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method foo() → void {
@@ -26,7 +26,7 @@
}
}
class A2 extends core::Object {
- synthetic constructor •() → self::A2*
+ synthetic constructor •() → self::A2
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method foo() → void {
@@ -34,7 +34,7 @@
}
}
class B2 extends self::A2 implements self::X {
- synthetic constructor •() → self::B2*
+ synthetic constructor •() → self::B2
: super self::A2::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method foo() → void {
@@ -42,13 +42,13 @@
}
}
abstract class A3 extends core::Object {
- synthetic constructor •() → self::A3*
+ synthetic constructor •() → self::A3
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] abstract method foo() → void;
}
class B3 extends self::A3 implements self::X {
- synthetic constructor •() → self::B3*
+ synthetic constructor •() → self::B3
: super self::A3::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method foo() → void {
@@ -56,7 +56,7 @@
}
}
class C3 extends core::Object implements self::A3 {
- synthetic constructor •() → self::C3*
+ synthetic constructor •() → self::C3
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method foo() → void {
@@ -64,7 +64,7 @@
}
}
class A4 extends core::Object {
- synthetic constructor •() → self::A4*
+ synthetic constructor •() → self::A4
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method foo() → void {
@@ -72,7 +72,7 @@
}
}
class B4 extends core::Object {
- synthetic constructor •() → self::B4*
+ synthetic constructor •() → self::B4
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method foo() → void {
@@ -80,7 +80,7 @@
}
}
class C4 extends core::Object {
- synthetic constructor •() → self::C4*
+ synthetic constructor •() → self::C4
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method foo() → void {
@@ -88,7 +88,7 @@
}
}
class D4 extends self::A4 implements self::B4 {
- synthetic constructor •() → self::D4*
+ synthetic constructor •() → self::D4
: super self::A4::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method foo() → void {
@@ -96,57 +96,57 @@
}
}
class E4 extends self::C4 implements self::B4 {
- synthetic constructor •() → self::E4*
+ synthetic constructor •() → self::E4
: super self::C4::•()
;
}
static method main() → dynamic {
- core::List<self::A1*>* x1 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A1*>] core::_GrowableList::_literal3<self::A1*>(new self::A1::•(), new self::B1::•(), new self::C1::•());
+ core::List<self::A1> x1 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A1>] core::_GrowableList::_literal3<self::A1>(new self::A1::•(), new self::B1::•(), new self::C1::•());
{
- core::Iterator<self::A1*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A1*>] x1.{core::Iterable::iterator}{core::Iterator<self::A1*>*};
+ core::Iterator<self::A1> :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A1>] x1.{core::Iterable::iterator}{core::Iterator<self::A1>};
for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
- self::A1* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::A1*};
- o.{self::A1::foo}(){() →* void};
+ self::A1 o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::A1};
+ o.{self::A1::foo}(){() → void};
}
}
- core::List<self::A2*>* x2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A2*>] core::_GrowableList::_literal2<self::A2*>(new self::A2::•(), new self::B2::•());
+ core::List<self::A2> x2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A2>] core::_GrowableList::_literal2<self::A2>(new self::A2::•(), new self::B2::•());
{
- core::Iterator<self::A2*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A2*>] x2.{core::Iterable::iterator}{core::Iterator<self::A2*>*};
+ core::Iterator<self::A2> :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A2>] x2.{core::Iterable::iterator}{core::Iterator<self::A2>};
for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
- self::A2* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::A2*};
- o.{self::A2::foo}(){() →* void};
+ self::A2 o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::A2};
+ o.{self::A2::foo}(){() → void};
}
}
- core::List<self::A3*>* x3 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A3*>] core::_GrowableList::_literal2<self::A3*>(new self::B3::•(), new self::C3::•());
+ core::List<self::A3> x3 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A3>] core::_GrowableList::_literal2<self::A3>(new self::B3::•(), new self::C3::•());
{
- core::Iterator<self::A3*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A3*>] x3.{core::Iterable::iterator}{core::Iterator<self::A3*>*};
+ core::Iterator<self::A3> :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A3>] x3.{core::Iterable::iterator}{core::Iterator<self::A3>};
for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
- self::A3* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::A3*};
- o.{self::A3::foo}(){() →* void};
+ self::A3 o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::A3};
+ o.{self::A3::foo}(){() → void};
}
}
- core::List<self::A4*>* x4 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A4*>] core::_GrowableList::_literal2<self::A4*>(new self::A4::•(), new self::D4::•());
+ core::List<self::A4> x4 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A4>] core::_GrowableList::_literal2<self::A4>(new self::A4::•(), new self::D4::•());
{
- core::Iterator<self::A4*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A4*>] x4.{core::Iterable::iterator}{core::Iterator<self::A4*>*};
+ core::Iterator<self::A4> :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::A4>] x4.{core::Iterable::iterator}{core::Iterator<self::A4>};
for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
- self::A4* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::A4*};
- o.{self::A4::foo}(){() →* void};
+ self::A4 o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::A4};
+ o.{self::A4::foo}(){() → void};
}
}
- core::List<self::B4*>* y4 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::B4*>] core::_GrowableList::_literal3<self::B4*>(new self::B4::•(), new self::D4::•(), new self::E4::•());
+ core::List<self::B4> y4 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::B4>] core::_GrowableList::_literal3<self::B4>(new self::B4::•(), new self::D4::•(), new self::E4::•());
{
- core::Iterator<self::B4*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::B4*>] y4.{core::Iterable::iterator}{core::Iterator<self::B4*>*};
+ core::Iterator<self::B4> :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::B4>] y4.{core::Iterable::iterator}{core::Iterator<self::B4>};
for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
- self::B4* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::B4*};
- o.{self::B4::foo}(){() →* void};
+ self::B4 o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::B4};
+ o.{self::B4::foo}(){() → void};
}
}
- core::List<self::C4*>* z4 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::C4*>] core::_GrowableList::_literal2<self::C4*>(new self::C4::•(), new self::E4::•());
+ core::List<self::C4> z4 = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::C4>] core::_GrowableList::_literal2<self::C4>(new self::C4::•(), new self::E4::•());
{
- core::Iterator<self::C4*>* :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::C4*>] z4.{core::Iterable::iterator}{core::Iterator<self::C4*>*};
+ core::Iterator<self::C4> :sync-for-iterator = [@vm.direct-call.metadata=dart.core::_GrowableList.iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<#lib::C4>] z4.{core::Iterable::iterator}{core::Iterator<self::C4>};
for (; [@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
- self::C4* o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::C4*};
- [@vm.direct-call.metadata=#lib::C4.foo??] [@vm.inferred-type.metadata=!? (skip check)] o.{self::C4::foo}(){() →* void};
+ self::C4 o = [@vm.direct-call.metadata=dart._internal::ListIterator.current] :sync-for-iterator.{core::Iterator::current}{self::C4};
+ [@vm.direct-call.metadata=#lib::C4.foo??] [@vm.inferred-type.metadata=!? (skip check)] o.{self::C4::foo}(){() → void};
}
}
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/set_map_constructor_concrete.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/set_map_constructor_concrete.dart.expect
index 76714d7..464d851 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/set_map_constructor_concrete.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/set_map_constructor_concrete.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:collection" as col;
@@ -6,29 +6,29 @@
import "dart:collection";
import "dart:core";
-[@vm.inferred-type.metadata=dart.collection::_CompactLinkedHashSet?<dynamic>]static field core::Set<dynamic>* globalSet = new col::_CompactLinkedHashSet::•<dynamic>();
-[@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashSet?<dynamic>]static field core::Set<dynamic>* identitySet = [@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashSet<dynamic>] col::LinkedHashSet::identity<dynamic>();
-[@vm.inferred-type.metadata=dart.collection::_CompactLinkedHashSet?<dart.core::String*>]static field core::Set<core::String*>* linkedSet = new col::_CompactLinkedHashSet::•<core::String*>();
-static field core::Set<core::String*>* linkedIdentitySet = [@vm.inferred-type.metadata=!] col::LinkedHashSet::•<core::String*>(#C1, #C2);
-static field core::Set<core::String*>* linkedCustomSet = let final (core::String*, core::String*) →* core::bool* #t1 = (core::String* a, core::String* b) → core::bool* => [@vm.inferred-type.metadata=!? (receiver not int)] a =={core::String::==}{(core::Object*) →* core::bool*} b in let final (core::String*) →* core::int* #t2 = (core::String* o) → core::int* => o.{core::String::hashCode}{core::int*} in let final (dynamic) →* core::bool* #t3 = (dynamic o) → core::bool* => true in [@vm.inferred-type.metadata=!] col::LinkedHashSet::•<core::String*>(#t1, #t2, isValidKey: #t3);
-[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dynamic, dynamic>]static field core::Map<dynamic, dynamic>* globalMap = [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<dynamic, dynamic>] core::Map::•<dynamic, dynamic>();
-[@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashMap?<dynamic, dynamic>]static field core::Map<dynamic, dynamic>* identityMap = [@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashMap<dynamic, dynamic>] col::LinkedHashMap::identity<dynamic, dynamic>();
-[@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView?<dynamic, dynamic>]static field core::Map<dynamic, dynamic>* unmodifiableMap = [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dynamic, dynamic>] core::Map::unmodifiable<dynamic, dynamic>([@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashMap?<dynamic, dynamic>] self::identityMap);
-[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dynamic, dynamic>]static field core::Map<dynamic, dynamic>* globalMapLiteral = <dynamic, dynamic>{};
-[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dart.core::String*, dart.core::String*>]static field core::Map<core::String*, core::String*>* linkedMap = new col::_InternalLinkedHashMap::•<core::String*, core::String*>();
-static field core::Map<core::String*, core::String*>* linkedIdentityMap = [@vm.inferred-type.metadata=!] col::LinkedHashMap::•<core::String*, core::String*>(#C1, #C2);
-static field core::Map<core::String*, core::String*>* linkedCustomMap = let final (core::String*, core::String*) →* core::bool* #t4 = (core::String* a, core::String* b) → core::bool* => [@vm.inferred-type.metadata=!? (receiver not int)] a =={core::String::==}{(core::Object*) →* core::bool*} b in let final (core::String*) →* core::int* #t5 = (core::String* o) → core::int* => o.{core::String::hashCode}{core::int*} in let final (dynamic) →* core::bool* #t6 = (dynamic o) → core::bool* => true in [@vm.inferred-type.metadata=!] col::LinkedHashMap::•<core::String*, core::String*>(#t4, #t5, isValidKey: #t6);
+[@vm.inferred-type.metadata=dart.collection::_CompactLinkedHashSet?<dynamic>]static field core::Set<dynamic> globalSet = new col::_CompactLinkedHashSet::•<dynamic>();
+[@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashSet?<dynamic>]static field core::Set<dynamic> identitySet = [@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashSet<dynamic>] col::LinkedHashSet::identity<dynamic>();
+[@vm.inferred-type.metadata=dart.collection::_CompactLinkedHashSet?<dart.core::String>]static field core::Set<core::String> linkedSet = new col::_CompactLinkedHashSet::•<core::String>();
+static field core::Set<core::String> linkedIdentitySet = [@vm.inferred-type.metadata=!] col::LinkedHashSet::•<core::String>(#C1, #C2);
+static field core::Set<core::String> linkedCustomSet = let final (core::String, core::String) → core::bool #t1 = (core::String a, core::String b) → core::bool => [@vm.inferred-type.metadata=!? (receiver not int)] a =={core::String::==}{(core::Object) → core::bool} b in let final (core::String) → core::int #t2 = (core::String o) → core::int => o.{core::String::hashCode}{core::int} in let final (dynamic) → core::bool #t3 = (dynamic o) → core::bool => true in [@vm.inferred-type.metadata=!] col::LinkedHashSet::•<core::String>(#t1, #t2, isValidKey: #t3);
+[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dynamic, dynamic>]static field core::Map<dynamic, dynamic> globalMap = [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<dynamic, dynamic>] core::Map::•<dynamic, dynamic>();
+[@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashMap?<dynamic, dynamic>]static field core::Map<dynamic, dynamic> identityMap = [@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashMap<dynamic, dynamic>] col::LinkedHashMap::identity<dynamic, dynamic>();
+[@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView?<dynamic, dynamic>]static field core::Map<dynamic, dynamic> unmodifiableMap = [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dynamic, dynamic>] core::Map::unmodifiable<dynamic, dynamic>([@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashMap?<dynamic, dynamic>] self::identityMap);
+[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dynamic, dynamic>]static field core::Map<dynamic, dynamic> globalMapLiteral = <dynamic, dynamic>{};
+[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dart.core::String, dart.core::String>]static field core::Map<core::String, core::String> linkedMap = new col::_InternalLinkedHashMap::•<core::String, core::String>();
+static field core::Map<core::String, core::String> linkedIdentityMap = [@vm.inferred-type.metadata=!] col::LinkedHashMap::•<core::String, core::String>(#C1, #C2);
+static field core::Map<core::String, core::String> linkedCustomMap = let final (core::String, core::String) → core::bool #t4 = (core::String a, core::String b) → core::bool => [@vm.inferred-type.metadata=!? (receiver not int)] a =={core::String::==}{(core::Object) → core::bool} b in let final (core::String) → core::int #t5 = (core::String o) → core::int => o.{core::String::hashCode}{core::int} in let final (dynamic) → core::bool #t6 = (dynamic o) → core::bool => true in [@vm.inferred-type.metadata=!] col::LinkedHashMap::•<core::String, core::String>(#t4, #t5, isValidKey: #t6);
static method main() → dynamic {
core::print([@vm.inferred-type.metadata=dart.collection::_CompactLinkedHashSet?<dynamic>] self::globalSet);
core::print([@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashSet?<dynamic>] self::identitySet);
- core::print([@vm.inferred-type.metadata=dart.collection::_CompactLinkedHashSet?<dart.core::String*>] self::linkedSet);
+ core::print([@vm.inferred-type.metadata=dart.collection::_CompactLinkedHashSet?<dart.core::String>] self::linkedSet);
core::print(self::linkedIdentitySet);
core::print(self::linkedCustomSet);
core::print([@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dynamic, dynamic>] self::globalMap);
core::print([@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dynamic, dynamic>] self::globalMapLiteral);
core::print([@vm.inferred-type.metadata=dart.collection::_CompactLinkedIdentityHashMap?<dynamic, dynamic>] self::identityMap);
core::print([@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView?<dynamic, dynamic>] self::unmodifiableMap);
- core::print([@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dart.core::String*, dart.core::String*>] self::linkedMap);
+ core::print([@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap?<dart.core::String, dart.core::String>] self::linkedMap);
core::print(self::linkedIdentityMap);
core::print(self::linkedCustomMap);
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart
index 2d22fe6..717504a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
A aa = new B();
dynamic knownResult() => new B();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart
index 5ce46d8..74cf279 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
A aa = new B();
dynamic knownResult() => new B();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart
index ebe01db..a63ec2a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
A aa = new B();
dynamic knownResult() => new B();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination.dart.expect
index 7f83b39..c5846d8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/type_cast_elimination.dart.expect
@@ -1,58 +1,58 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
-class A<T extends core::Object* = dynamic> extends core::Object {
- synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+ synthetic constructor •() → self::A<self::A::T%>
: super core::Object::•()
;
}
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
- synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+ synthetic constructor •() → self::B<self::B::T%>
: super self::A::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] method testT1() → dynamic
- return _in::unsafeCast<self::B::T*>(#C1);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method testT2negative([@vm.inferred-type.metadata=#lib::A<dart.core::String*>] dynamic x) → dynamic
- return x as self::B::T*;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method testAOfT1([@vm.inferred-type.metadata=#lib::A<#lib::A<dart.core::int*>*>] dynamic x) → dynamic
- return _in::unsafeCast<self::A<self::B::T*>*>(x);
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method testAOfT2negative([@vm.inferred-type.metadata=#lib::A<#lib::A<dart.core::num*>*>] dynamic x) → dynamic
- return x as self::A<self::B::T*>*;
+ return _in::unsafeCast<self::B::T%>(#C1);
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method testT2negative([@vm.inferred-type.metadata=#lib::A<dart.core::String>] dynamic x) → dynamic
+ return x as{ForNonNullableByDefault} self::B::T%;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method testAOfT1([@vm.inferred-type.metadata=#lib::A<#lib::A<dart.core::int>>] dynamic x) → dynamic
+ return _in::unsafeCast<self::A<self::B::T%>>(x);
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method testAOfT2negative([@vm.inferred-type.metadata=#lib::A<#lib::A<dart.core::num>>] dynamic x) → dynamic
+ return x as{ForNonNullableByDefault} self::A<self::B::T%>;
}
[@vm.unboxing-info.metadata=()->i]static method testInt1() → dynamic
- return _in::unsafeCast<core::int*>(#C1);
+ return _in::unsafeCast<core::int>(#C1);
static method testInt2() → dynamic
- return _in::unsafeCast<core::int*>(#C2);
+ return _in::unsafeCast<core::int>(#C2);
static method testDynamic() → dynamic
return _in::unsafeCast<dynamic>(#C3);
static method testObject() → dynamic
return #C4;
-static method testBOfInt([@vm.inferred-type.metadata=#lib::B<dart.core::int*>] dynamic x) → dynamic
- return _in::unsafeCast<self::B<core::int*>*>(x);
-static method testAOfInt([@vm.inferred-type.metadata=#lib::B<dart.core::int*>] dynamic x) → dynamic
- return _in::unsafeCast<self::A<core::int*>*>(x);
-static method testAOfNum([@vm.inferred-type.metadata=#lib::B<dart.core::int*>] dynamic x) → dynamic
- return _in::unsafeCast<self::A<core::num*>*>(x);
-static method testAOfAOfB1([@vm.inferred-type.metadata=#lib::A<#lib::A<#lib::B<dynamic>*>*>] dynamic x) → dynamic
- return _in::unsafeCast<self::A<self::A<self::B<dynamic>*>*>*>(x);
-static method testAOfAOfB2negative([@vm.inferred-type.metadata=#lib::A<#lib::A<#lib::A<dynamic>*>*>] dynamic x) → dynamic
- return x as self::A<self::A<self::B<dynamic>*>*>*;
+static method testBOfInt([@vm.inferred-type.metadata=#lib::B<dart.core::int>] dynamic x) → dynamic
+ return _in::unsafeCast<self::B<core::int>>(x);
+static method testAOfInt([@vm.inferred-type.metadata=#lib::B<dart.core::int>] dynamic x) → dynamic
+ return _in::unsafeCast<self::A<core::int>>(x);
+static method testAOfNum([@vm.inferred-type.metadata=#lib::B<dart.core::int>] dynamic x) → dynamic
+ return _in::unsafeCast<self::A<core::num>>(x);
+static method testAOfAOfB1([@vm.inferred-type.metadata=#lib::A<#lib::A<#lib::B<dynamic>>>] dynamic x) → dynamic
+ return _in::unsafeCast<self::A<self::A<self::B<dynamic>>>>(x);
+static method testAOfAOfB2negative([@vm.inferred-type.metadata=#lib::A<#lib::A<#lib::A<dynamic>>>] dynamic x) → dynamic
+ return x as{ForNonNullableByDefault} self::A<self::A<self::B<dynamic>>>;
static method main() → void {
self::testInt1();
self::testInt2();
self::testDynamic();
self::testObject();
- self::testBOfInt(new self::B::•<core::int*>());
- self::testAOfInt(new self::B::•<core::int*>());
- self::testAOfNum(new self::B::•<core::int*>());
- self::testAOfAOfB1(new self::A::•<self::A<self::B<dynamic>*>*>());
- self::testAOfAOfB2negative(new self::A::•<self::A<self::A<dynamic>*>*>());
- [@vm.direct-call.metadata=#lib::B.testT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int*>().{self::B::testT1}(){(dynamic) →* dynamic};
- [@vm.direct-call.metadata=#lib::B.testT2negative] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int*>*>().{self::B::testT2negative}(new self::A::•<core::String*>()){(dynamic) →* dynamic};
- [@vm.direct-call.metadata=#lib::B.testAOfT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int*>*>().{self::B::testAOfT1}(new self::A::•<self::A<core::int*>*>()){(dynamic) →* dynamic};
- [@vm.direct-call.metadata=#lib::B.testAOfT2negative] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int*>*>().{self::B::testAOfT2negative}(new self::A::•<self::A<core::num*>*>()){(dynamic) →* dynamic};
+ self::testBOfInt(new self::B::•<core::int>());
+ self::testAOfInt(new self::B::•<core::int>());
+ self::testAOfNum(new self::B::•<core::int>());
+ self::testAOfAOfB1(new self::A::•<self::A<self::B<dynamic>>>());
+ self::testAOfAOfB2negative(new self::A::•<self::A<self::A<dynamic>>>());
+ [@vm.direct-call.metadata=#lib::B.testT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<core::int>().{self::B::testT1}(){(dynamic) → dynamic};
+ [@vm.direct-call.metadata=#lib::B.testT2negative] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int>>().{self::B::testT2negative}(new self::A::•<core::String>()){(dynamic) → dynamic};
+ [@vm.direct-call.metadata=#lib::B.testAOfT1] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int>>().{self::B::testAOfT1}(new self::A::•<self::A<core::int>>()){(dynamic) → dynamic};
+ [@vm.direct-call.metadata=#lib::B.testAOfT2negative] [@vm.inferred-type.metadata=!? (skip check)] new self::B::•<self::A<core::int>>().{self::B::testAOfT2negative}(new self::A::•<self::A<core::num>>()){(dynamic) → dynamic};
}
constants {
#C1 = 42
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_getters.dart b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_getters.dart
index 726b6c9..65a5a2d 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_getters.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_getters.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
final bool kTrue = int.parse('1') == 1 ? true : false;
final bool kFalse = int.parse('1') == 2 ? true : false;
int get mint => 0xaabbccddaabbccdd;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_fields.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_fields.dart.expect
index a3d1769b..4cddb45 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_fields.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_fields.dart.expect
@@ -1,9 +1,9 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class X extends core::Object {
- synthetic constructor •() → self::X*
+ synthetic constructor •() → self::X
: super core::Object::•()
;
}
@@ -17,30 +17,30 @@
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] field dynamic boxedNullableIntOrDouble;
[@vm.inferred-type.metadata=#lib::X?] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] field dynamic boxedNullableX;
[@vm.inferred-type.metadata=#lib::X] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] field dynamic boxedX;
-[@vm.unboxing-info.metadata=(i,i,d,b,b,b,b,b,b)->b] constructor •([@vm.inferred-type.metadata=dart.core::_Smi] dynamic unboxedSmi, [@vm.inferred-type.metadata=int] dynamic unboxedInt, [@vm.inferred-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=!] dynamic boxedNonNullableIntOrDouble, dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX) → self::A*
+[@vm.unboxing-info.metadata=(i,i,d,b,b,b,b,b,b)->b] constructor •([@vm.inferred-type.metadata=dart.core::_Smi] dynamic unboxedSmi, [@vm.inferred-type.metadata=int] dynamic unboxedInt, [@vm.inferred-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=!] dynamic boxedNonNullableIntOrDouble, dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX) → self::A
: self::A::unboxedSmi = unboxedSmi, self::A::unboxedInt = unboxedInt, self::A::unboxedDouble = unboxedDouble, self::A::boxedNullableInt = boxedNullableInt, self::A::boxedNullableDouble = boxedNullableDouble, self::A::boxedNonNullableIntOrDouble = boxedNonNullableIntOrDouble, self::A::boxedNullableIntOrDouble = boxedNullableIntOrDouble, self::A::boxedNullableX = boxedNullableX, self::A::boxedX = boxedX, super core::Object::•()
;
}
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kTrue = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::bool*} true : false;
-[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool* kFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::bool*} true : false;
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool kTrue = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object) → core::bool} 1 ?{core::bool} true : false;
+[@vm.inferred-type.metadata=dart.core::bool?]static final field core::bool kFalse = [@vm.inferred-type.metadata=dart.core::bool] [@vm.inferred-type.metadata=int?] core::int::parse("1") =={core::num::==}{(core::Object) → core::bool} 2 ?{core::bool} true : false;
static field dynamic usedObject;
-[@vm.unboxing-info.metadata=()->i]static get mint() → core::int*
+[@vm.unboxing-info.metadata=()->i]static get mint() → core::int
return -6144092014192636707;
-[@vm.unboxing-info.metadata=()->i]static get smiOrMint() → core::int*
- return [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} 1 : [@vm.inferred-type.metadata=int] self::mint;
+[@vm.unboxing-info.metadata=()->i]static get smiOrMint() → core::int
+ return [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int} 1 : [@vm.inferred-type.metadata=int] self::mint;
static method use(dynamic object) → void {
self::usedObject == null ?{dynamic} self::usedObject = object : null;
}
static method main() → dynamic {
- final self::A* a = new self::A::•([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} 1 : 2, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} [@vm.inferred-type.metadata=int] self::smiOrMint : 2, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::double*} 1.1 : 2.2, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} [@vm.inferred-type.metadata=int] self::smiOrMint : null, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::double*} 1.1 : null, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num*} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num*} [@vm.inferred-type.metadata=dart.core::bool?] self::kFalse ?{core::num*} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1 : null, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::X*} new self::X::•() : null, new self::X::•());
- [@vm.direct-call.metadata=#lib::A.unboxedSmi] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::unboxedSmi} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} 1 : 2;
- [@vm.direct-call.metadata=#lib::A.unboxedInt] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::unboxedInt} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} [@vm.inferred-type.metadata=int] self::smiOrMint : 2;
- [@vm.direct-call.metadata=#lib::A.unboxedDouble] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::unboxedDouble} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::double*} 1.1 : 2.2;
- [@vm.direct-call.metadata=#lib::A.boxedNullableInt] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNullableInt} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int*} [@vm.inferred-type.metadata=int] self::smiOrMint : null;
- [@vm.direct-call.metadata=#lib::A.boxedNullableDouble] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNullableDouble} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::double*} 1.1 : null;
- [@vm.direct-call.metadata=#lib::A.boxedNonNullableIntOrDouble] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNonNullableIntOrDouble} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num*} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1;
- [@vm.direct-call.metadata=#lib::A.boxedNullableIntOrDouble] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNullableIntOrDouble} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num*} [@vm.inferred-type.metadata=dart.core::bool?] self::kFalse ?{core::num*} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1 : null;
- [@vm.direct-call.metadata=#lib::A.boxedNullableX] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNullableX} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::X*} new self::X::•() : null;
+ final self::A a = new self::A::•([@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int} 1 : 2, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int} [@vm.inferred-type.metadata=int] self::smiOrMint : 2, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::double} 1.1 : 2.2, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int?} [@vm.inferred-type.metadata=int] self::smiOrMint : null, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::double?} 1.1 : null, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num?} [@vm.inferred-type.metadata=dart.core::bool?] self::kFalse ?{core::num} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1 : null, [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::X?} new self::X::•() : null, new self::X::•());
+ [@vm.direct-call.metadata=#lib::A.unboxedSmi] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::unboxedSmi} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int} 1 : 2;
+ [@vm.direct-call.metadata=#lib::A.unboxedInt] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::unboxedInt} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int} [@vm.inferred-type.metadata=int] self::smiOrMint : 2;
+ [@vm.direct-call.metadata=#lib::A.unboxedDouble] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::unboxedDouble} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::double} 1.1 : 2.2;
+ [@vm.direct-call.metadata=#lib::A.boxedNullableInt] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNullableInt} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::int?} [@vm.inferred-type.metadata=int] self::smiOrMint : null;
+ [@vm.direct-call.metadata=#lib::A.boxedNullableDouble] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNullableDouble} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::double?} 1.1 : null;
+ [@vm.direct-call.metadata=#lib::A.boxedNonNullableIntOrDouble] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNonNullableIntOrDouble} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1;
+ [@vm.direct-call.metadata=#lib::A.boxedNullableIntOrDouble] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNullableIntOrDouble} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{core::num?} [@vm.inferred-type.metadata=dart.core::bool?] self::kFalse ?{core::num} [@vm.inferred-type.metadata=int] self::smiOrMint : 1.1 : null;
+ [@vm.direct-call.metadata=#lib::A.boxedNullableX] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedNullableX} = [@vm.inferred-type.metadata=dart.core::bool?] self::kTrue ?{self::X?} new self::X::•() : null;
[@vm.direct-call.metadata=#lib::A.boxedX] [@vm.inferred-type.metadata=!? (skip check)] a.{self::A::boxedX} = new self::X::•();
self::use([@vm.direct-call.metadata=#lib::A.unboxedSmi] [@vm.inferred-type.metadata=dart.core::_Smi] a.{self::A::unboxedSmi}{dynamic});
self::use([@vm.direct-call.metadata=#lib::A.unboxedInt] [@vm.inferred-type.metadata=int] a.{self::A::unboxedInt}{dynamic});
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method.dart b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method.dart
index f37b67e..63321f0 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
final bool kTrue = int.parse('1') == 1 ? true : false;
final bool kFalse = int.parse('1') == 2 ? true : false;
int get mint => 0xaabbccddaabbccdd;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method_tearoff.dart b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method_tearoff.dart
index ddbf2a0..ba97287 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method_tearoff.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_instance_method_tearoff.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
final bool kTrue = int.parse('1') == 1 ? true : false;
final bool kFalse = int.parse('1') == 2 ? true : false;
int get mint => 0xaabbccddaabbccdd;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method.dart b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method.dart
index 5151f2e..0142249 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
final bool kTrue = int.parse('1') == 1 ? true : false;
final bool kFalse = int.parse('1') == 2 ? true : false;
int get mint => 0xaabbccddaabbccdd;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method_tearoff.dart b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method_tearoff.dart
index f20e0ce..6245c0d 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method_tearoff.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unboxed_static_method_tearoff.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
final bool kTrue = int.parse('1') == 1 ? true : false;
final bool kFalse = int.parse('1') == 2 ? true : false;
int get mint => 0xaabbccddaabbccdd;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unfinished_static_field_init.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unfinished_static_field_init.dart.expect
index 74d3bb3..ed5a63a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unfinished_static_field_init.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unfinished_static_field_init.dart.expect
@@ -1,9 +1,9 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class A extends core::Object {
- synthetic constructor •() → self::A*
+ synthetic constructor •() → self::A
: super core::Object::•()
;
}
@@ -13,7 +13,7 @@
return new self::A::•();
static method bad() → dynamic
return throw "No return!";
-static method main(core::List<core::String*>* args) → dynamic {
+static method main(core::List<core::String> args) → dynamic {
core::print([@vm.inferred-type.metadata=#lib::A?] self::static_field_good);
core::print([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::static_field_bad);
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect
index 0ed46d3..96487b0 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect
@@ -1,4 +1,4 @@
-library #lib;
+library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
@@ -7,16 +7,16 @@
abstract class A extends core::Object implements self::I {
}
class B extends core::Object implements self::I {
- synthetic constructor •() → self::B*
+ synthetic constructor •() → self::B
: super core::Object::•()
;
}
-[@vm.inferred-type.metadata=#lib::B?]static field self::I* ii = new self::B::•();
-static method bar([@vm.inferred-type.metadata=#lib::B?] self::I* i) → void {
- if(i is self::A*) {
+[@vm.inferred-type.metadata=#lib::B?]static field self::I ii = new self::B::•();
+static method bar([@vm.inferred-type.metadata=#lib::B?] self::I i) → void {
+ if(i is{ForNonNullableByDefault} self::A) {
throw "Attempt to execute code removed by Dart AOT compiler (TFA)";
}
}
-static method main(core::List<core::String*>* args) → dynamic {
+static method main(core::List<core::String> args) → dynamic {
self::bar([@vm.inferred-type.metadata=#lib::B?] self::ii);
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field.dart b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field.dart
index 6abe2d5..0f85cb8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field.dart
@@ -5,6 +5,8 @@
// Tests tree shaking of field initializer for a write-only field.
// Regression test for https://github.com/dart-lang/sdk/issues/35632.
+// @dart=2.9
+
class A {
A() {
print('A');
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart
index af6a9b8..ec7e83f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart
@@ -4,6 +4,8 @@
// Test for tree shaking of write-only fields.
+// @dart=2.9
+
import "package:expect/expect.dart";
foo() {}
diff --git a/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart b/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart
index 6115eb3..41fdccc 100644
--- a/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart
+++ b/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.9
+
const bool constTrue = const bool.fromEnvironment('test.define.isTrue');
const bool constFalse = const bool.fromEnvironment('test.define.isFalse');
const bool constTrue2 = !constFalse;
diff --git a/tools/VERSION b/tools/VERSION
index b0a5cb0..4b7a145 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 14
PATCH 0
-PRERELEASE 336
+PRERELEASE 337
PRERELEASE_PATCH 0
\ No newline at end of file