Version 2.10.0-102.0.dev
Merge commit '0c1b39bac6aeea4e87d62d4d91c7298fae01d07c' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 011e3ca..9b56ce5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -75,6 +75,13 @@
* Fix: Avoid exponential behaviour of error reporting from the solver.
* Fix: Refresh binstubs after recompile in global run.
+## 2.9.3 - 2020-09-08
+
+This is a patch release that fixes DDC to handle a breaking change in Chrome
+(issue [#43193][]).
+
+[#43193]: https://github.com/dart-lang/sdk/issues/43193
+
## 2.9.2 - 2020-08-26
This is a patch release that fixes transient StackOverflow exceptions when
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index cd62848..da4182e 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -191,6 +191,7 @@
intType,
"index",
finalMask | hasInitializerMask,
+ /* isTopLevel = */ false,
parent,
charOffset,
charOffset,
@@ -203,6 +204,7 @@
stringType,
"_name",
finalMask | hasInitializerMask,
+ /* isTopLevel = */ false,
parent,
charOffset,
charOffset,
@@ -234,6 +236,7 @@
listType,
"values",
constMask | staticMask | hasInitializerMask,
+ /* isTopLevel = */ false,
parent,
charOffset,
charOffset,
@@ -308,6 +311,7 @@
selfType,
name,
constMask | staticMask | hasInitializerMask,
+ /* isTopLevel = */ false,
parent,
enumConstantInfo.charOffset,
enumConstantInfo.charOffset,
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 156f55c..9f0a936 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -101,11 +101,18 @@
bool hasBodyBeenBuilt = false;
+ // TODO(johnniwinther): [parent] is not trust-worthy for determining
+ // properties since it is changed after the creation of the builder. For now
+ // we require it has an argument here. A follow-up should clean up the
+ // misuse of parent.
+ final bool isTopLevel;
+
SourceFieldBuilder(
this.metadata,
this.type,
this.name,
this.modifiers,
+ this.isTopLevel,
SourceLibraryBuilder libraryBuilder,
int charOffset,
int charEndOffset,
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index f8b81ce..6a9bacf 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -1742,7 +1742,12 @@
if (fieldInfos == null) return;
String documentationComment = getDocumentationComment(beginToken);
libraryBuilder.addFields(
- documentationComment, metadata, modifiers, type, fieldInfos);
+ documentationComment,
+ metadata,
+ modifiers,
+ /* isTopLevel = */ true,
+ type,
+ fieldInfos);
}
@override
@@ -1804,7 +1809,12 @@
if (fieldInfos == null) return;
String documentationComment = getDocumentationComment(beginToken);
libraryBuilder.addFields(
- documentationComment, metadata, modifiers, type, fieldInfos);
+ documentationComment,
+ metadata,
+ modifiers,
+ /* isTopLevel = */ false,
+ type,
+ fieldInfos);
}
List<FieldInfo> popFieldInfos(int count) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 066cf2b..6df5e4c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -747,8 +747,13 @@
}
}
- void addFields(String documentationComment, List<MetadataBuilder> metadata,
- int modifiers, TypeBuilder type, List<FieldInfo> fieldInfos) {
+ void addFields(
+ String documentationComment,
+ List<MetadataBuilder> metadata,
+ int modifiers,
+ bool isTopLevel,
+ TypeBuilder type,
+ List<FieldInfo> fieldInfos) {
for (FieldInfo info in fieldInfos) {
bool isConst = modifiers & constMask != 0;
bool isFinal = modifiers & finalMask != 0;
@@ -765,8 +770,17 @@
new Token.eof(startToken.previous.offset).setNext(startToken);
}
bool hasInitializer = info.initializerToken != null;
- addField(documentationComment, metadata, modifiers, type, info.name,
- info.charOffset, info.charEndOffset, startToken, hasInitializer,
+ addField(
+ documentationComment,
+ metadata,
+ modifiers,
+ isTopLevel,
+ type,
+ info.name,
+ info.charOffset,
+ info.charEndOffset,
+ startToken,
+ hasInitializer,
constInitializerToken:
potentiallyNeedInitializerInOutline ? startToken : null);
}
@@ -1955,6 +1969,7 @@
String documentationComment,
List<MetadataBuilder> metadata,
int modifiers,
+ bool isTopLevel,
TypeBuilder type,
String name,
int charOffset,
@@ -2054,6 +2069,7 @@
type,
name,
modifiers,
+ isTopLevel,
this,
charOffset,
charEndOffset,
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
index 369a202..2e1cf37 100644
--- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.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 fasta.function_type_alias_builder;
+library fasta.source_type_alias_builder;
import 'package:kernel/ast.dart'
show
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 9c03dae..a0e7fca 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -663,6 +663,7 @@
migration
mime
min
+misuse
mixers
mk
mm
@@ -1250,6 +1251,7 @@
with1
wn
worthwhile
+worthy
writeln
wrt
wtf
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart b/pkg/front_end/testcases/static_field_lowering/enum.dart
new file mode 100644
index 0000000..b55e257
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2020, 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.
+
+enum A {
+ a,
+ b,
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect
new file mode 100644
index 0000000..b42a46f
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+enum A {
+ a,
+ b,
+}
+main() {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b42a46f
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+enum A {
+ a,
+ b,
+}
+main() {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
new file mode 100644
index 0000000..1fcfe08
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*isEnum*/ {
+ final field core::int index;
+ final field core::String _name;
+ static const field core::List<self::A> values = #C7;
+ static const field self::A a = #C3;
+ static const field self::A b = #C6;
+ const constructor •(core::int index, core::String _name) → self::A
+ : self::A::index = index, self::A::_name = _name, super core::Object::•()
+ ;
+ method toString() → core::String
+ return this.{=self::A::_name};
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 0
+ #C2 = "A.a"
+ #C3 = self::A {index:#C1, _name:#C2}
+ #C4 = 1
+ #C5 = "A.b"
+ #C6 = self::A {index:#C4, _name:#C5}
+ #C7 = <self::A*>[#C3, #C6]
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
new file mode 100644
index 0000000..1fcfe08
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*isEnum*/ {
+ final field core::int index;
+ final field core::String _name;
+ static const field core::List<self::A> values = #C7;
+ static const field self::A a = #C3;
+ static const field self::A b = #C6;
+ const constructor •(core::int index, core::String _name) → self::A
+ : self::A::index = index, self::A::_name = _name, super core::Object::•()
+ ;
+ method toString() → core::String
+ return this.{=self::A::_name};
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 0
+ #C2 = "A.a"
+ #C3 = self::A {index:#C1, _name:#C2}
+ #C4 = 1
+ #C5 = "A.b"
+ #C6 = self::A {index:#C4, _name:#C5}
+ #C7 = <self::A*>[#C3, #C6]
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart b/pkg/front_end/testcases/static_field_lowering/opt_in.dart
index 2b45286..c549cad 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart
@@ -38,6 +38,9 @@
static int? staticFieldWithoutInitializer;
+ int nonNullableInstanceFieldWithInitializer = init(55);
+ int? nullableInstanceFieldWithInitializer = init(17);
+
static int nonNullableStaticFieldWithInitializer1 = init(55);
static int? nullableStaticFieldWithInitializer1 = init(17);
@@ -121,6 +124,11 @@
throws(() => Class.nullableStaticFinalFieldWithInitializer2,
'Read nullableStaticFinalFieldWithInitializer2');
+
+ var c = new Class();
+ expect(17, lastInit);
+ expect(55, c.nonNullableInstanceFieldWithInitializer);
+ expect(17, c.nullableInstanceFieldWithInitializer);
}
expect(expected, actual) {
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
index f578832..c20a2c2 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline.expect
@@ -22,6 +22,8 @@
class Class {
static const int staticConstField = 123;
static int? staticFieldWithoutInitializer;
+ int nonNullableInstanceFieldWithInitializer = init(55);
+ int? nullableInstanceFieldWithInitializer = init(17);
static int nonNullableStaticFieldWithInitializer1 = init(55);
static int? nullableStaticFieldWithInitializer1 = init(17);
static int nonNullableStaticFieldWithInitializer2 = init(55);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
index d41b0be..c292f45 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.textual_outline_modelled.expect
@@ -1,6 +1,8 @@
T init<T>(T value) {}
class Class {
+ int? nullableInstanceFieldWithInitializer = init(17);
+ int nonNullableInstanceFieldWithInitializer = init(55);
static const int staticConstField = 123;
static final int? nullableStaticFinalFieldWithInitializer1 = init(19);
static final int? nullableStaticFinalFieldWithInitializer2 =
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
index 39e6731..d53be31 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.expect
@@ -6,6 +6,8 @@
class Class extends core::Object {
static const field core::int staticConstField = #C1;
static field core::int? staticFieldWithoutInitializer = null;
+ field core::int nonNullableInstanceFieldWithInitializer = self::init<core::int>(55);
+ field core::int? nullableInstanceFieldWithInitializer = self::init<core::int?>(17);
static field core::int? _#nonNullableStaticFieldWithInitializer1 = null;
static field core::int? _#nullableStaticFieldWithInitializer1 = null;
static field core::bool _#nullableStaticFieldWithInitializer1#isSet = false;
@@ -211,6 +213,10 @@
self::expect(19, self::lastInit);
self::throws(() → core::int => self::Class::nonNullableStaticFinalFieldWithInitializer2, "Read nonNullableStaticFinalFieldWithInitializer2");
self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
+ self::Class c = new self::Class::•();
+ self::expect(17, self::lastInit);
+ self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer});
+ self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
if(!expected.{core::Object::==}(actual))
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
index 39e6731..d53be31 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.transformed.expect
@@ -6,6 +6,8 @@
class Class extends core::Object {
static const field core::int staticConstField = #C1;
static field core::int? staticFieldWithoutInitializer = null;
+ field core::int nonNullableInstanceFieldWithInitializer = self::init<core::int>(55);
+ field core::int? nullableInstanceFieldWithInitializer = self::init<core::int?>(17);
static field core::int? _#nonNullableStaticFieldWithInitializer1 = null;
static field core::int? _#nullableStaticFieldWithInitializer1 = null;
static field core::bool _#nullableStaticFieldWithInitializer1#isSet = false;
@@ -211,6 +213,10 @@
self::expect(19, self::lastInit);
self::throws(() → core::int => self::Class::nonNullableStaticFinalFieldWithInitializer2, "Read nonNullableStaticFinalFieldWithInitializer2");
self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
+ self::Class c = new self::Class::•();
+ self::expect(17, self::lastInit);
+ self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer});
+ self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
if(!expected.{core::Object::==}(actual))
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart b/pkg/front_end/testcases/static_field_lowering/opt_out.dart
index 9ccd9b4..7ca4c56 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart
@@ -30,6 +30,8 @@
class Class {
static const int staticConstField = 123;
+ int instanceFieldWithInitializer = init(55);
+
static int staticFieldWithoutInitializer;
static int staticFieldWithInitializer1 = init(55);
@@ -79,6 +81,10 @@
throws(() => Class.staticFinalFieldWithInitializer2,
'Read staticFinalFieldWithInitializer2');
+
+ var c = new Class();
+ expect(55, lastInit);
+ expect(55, c.instanceFieldWithInitializer);
}
expect(expected, actual) {
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
index e20bb46..a23e5df 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline.expect
@@ -14,6 +14,7 @@
class Class {
static const int staticConstField = 123;
+ int instanceFieldWithInitializer = init(55);
static int staticFieldWithoutInitializer;
static int staticFieldWithInitializer1 = init(55);
static int staticFieldWithInitializer2 = init(55);
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
index 8a89bd3..44c72d7 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.textual_outline_modelled.expect
@@ -2,6 +2,7 @@
T init<T>(T value) {}
class Class {
+ int instanceFieldWithInitializer = init(55);
static const int staticConstField = 123;
static final int staticFinalFieldWithInitializer1 = init(73);
static final int staticFinalFieldWithInitializer2 =
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
index 3b4d666..7fcf775 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.expect
@@ -4,6 +4,7 @@
class Class extends core::Object {
static const field core::int* staticConstField = #C1;
+ field core::int* instanceFieldWithInitializer = self::init<core::int*>(55);
static field core::int* staticFieldWithoutInitializer = null;
static field core::int* staticFieldWithInitializer1 = self::init<core::int*>(55);
static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
@@ -60,6 +61,9 @@
self::expect(73, self::Class::staticFinalFieldWithInitializer1);
self::expect(73, self::lastInit);
self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
+ self::Class* c = new self::Class::•();
+ self::expect(55, self::lastInit);
+ self::expect(55, c.{self::Class::instanceFieldWithInitializer});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
if(!expected.{core::Object::==}(actual))
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
index 3b4d666..7fcf775 100644
--- a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.transformed.expect
@@ -4,6 +4,7 @@
class Class extends core::Object {
static const field core::int* staticConstField = #C1;
+ field core::int* instanceFieldWithInitializer = self::init<core::int*>(55);
static field core::int* staticFieldWithoutInitializer = null;
static field core::int* staticFieldWithInitializer1 = self::init<core::int*>(55);
static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
@@ -60,6 +61,9 @@
self::expect(73, self::Class::staticFinalFieldWithInitializer1);
self::expect(73, self::lastInit);
self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
+ self::Class* c = new self::Class::•();
+ self::expect(55, self::lastInit);
+ self::expect(55, c.{self::Class::instanceFieldWithInitializer});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
if(!expected.{core::Object::==}(actual))
diff --git a/tools/VERSION b/tools/VERSION
index a5cb519..fb4ad25 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 10
PATCH 0
-PRERELEASE 101
+PRERELEASE 102
PRERELEASE_PATCH 0
\ No newline at end of file