Version 2.17.0-94.0.dev
Merge commit '4fb3d2afcf424ff3f73d55fc1585c448cdaa8762' into 'dev'
diff --git a/DEPS b/DEPS
index a6780e6..17285f6 100644
--- a/DEPS
+++ b/DEPS
@@ -115,7 +115,7 @@
"fixnum_rev": "848341f061359ef7ddc0cad472c2ecbb036b28ac",
"file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
"glob_rev": "da1f4595ee2f87982cbcc663d4cac244822d9227",
- "html_rev": "00cd3c22dac0e68e6ed9e7e4945101aedb1b3109",
+ "html_rev": "3c2448108b431dd00d3a7033d9f43f19fa5d93d3",
"http_io_rev": "2fa188caf7937e313026557713f7feffedd4978b",
"http_multi_server_rev": "34bf7f04b61cce561f47f7f275c2cc811534a05a",
"http_parser_rev": "202391286ddc13c4c3c284ac5b511f04697250ed",
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 64be4e9..9b829c7 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -242,7 +242,8 @@
if (kind == engine.MatchKind.WRITE) {
return SearchResultKind.WRITE;
}
- if (kind == engine.MatchKind.INVOCATION) {
+ if (kind == engine.MatchKind.INVOCATION ||
+ kind == engine.MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS) {
return SearchResultKind.INVOCATION;
}
if (kind == engine.MatchKind.REFERENCE ||
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
index 297bf72..6f25968 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
@@ -38,6 +38,8 @@
await _forFunctionTypedFormalParameter(builder, node, parent);
} else if (node is SimpleIdentifier && parent is FieldFormalParameter) {
await _forFieldFormalParameter(builder, node, parent);
+ } else if (node is SimpleIdentifier && parent is SuperFormalParameter) {
+ await _forSuperFormalParameter(builder, node, parent);
} else if (node is Expression &&
parent is AssignmentExpression &&
parent.rightHandSide == node) {
@@ -164,6 +166,31 @@
});
}
+ /// Makes [parameter] nullable if possible.
+ Future<void> _forSuperFormalParameter(ChangeBuilder builder,
+ SimpleIdentifier name, SuperFormalParameter parameter) async {
+ if (parameter.parameters != null) {
+ // A function-typed field formal parameter.
+ if (parameter.question != null) {
+ return;
+ }
+ _variableName = parameter.identifier.name;
+ await builder.addDartFileEdit(file, (builder) {
+ // Add '?' after `)`.
+ builder.addSimpleInsertion(parameter.endToken.end, '?');
+ });
+ } else {
+ var type = parameter.type;
+ if (type == null || !_typeCanBeMadeNullable(type)) {
+ return;
+ }
+ _variableName = parameter.identifier.name;
+ await builder.addDartFileEdit(file, (builder) {
+ builder.addSimpleInsertion(type.end, '?');
+ });
+ }
+ }
+
Future<void> _forVariableDeclaration(ChangeBuilder builder, Expression node,
VariableDeclaration parent) async {
var declarationList = parent.parent;
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt b/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt
index d4e0bf5..d19627a 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt
@@ -369,7 +369,7 @@
CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER: needs evaluation
CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED: needs fix; new in 2.17
CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED: needs evaluation; new in 2.17
-CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL: needs fix; new in 2.17
+CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL: needs fix; https://github.com/dart-lang/sdk/issues/48359
CompileTimeErrorCode.SUPER_IN_EXTENSION: needs evaluation
CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT: needs evaluation
CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR: needs evaluation
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine.dart b/pkg/analysis_server/lib/src/services/search/search_engine.dart
index 362216e..09df9a4 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine.dart
@@ -23,6 +23,11 @@
/// A reference to an element in which it is being invoked.
static const MatchKind INVOCATION = MatchKind('INVOCATION');
+ /// An invocation of an enum constructor from an enum constant without
+ /// arguments.
+ static const MatchKind INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS =
+ MatchKind('INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS');
+
/// A reference to an element in which it is referenced.
static const MatchKind REFERENCE = MatchKind('REFERENCE');
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
index 059c23e98..2eda0d4 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
@@ -242,6 +242,10 @@
if (kind == SearchResultKind.INVOCATION) {
return MatchKind.INVOCATION;
}
+ if (kind ==
+ SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS) {
+ return MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS;
+ }
if (kind == SearchResultKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF) {
return MatchKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF;
}
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index 3598517..8ca77d4 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -347,19 +347,7 @@
assertHasRegion('myan // ref');
}
- Future<void> test_class_fromSDK() async {
- addTestFile('''
-int V = 42;
-''');
- await prepareNavigation();
- assertHasRegion('int V');
- var targetIndex = testTargetIndexes[0];
- var target = targets[targetIndex];
- expect(target.startLine, greaterThan(0));
- expect(target.startColumn, greaterThan(0));
- }
-
- Future<void> test_constructor_named() async {
+ Future<void> test_class_constructor_named() async {
addTestFile('''
class A {
A.named(BBB p) {}
@@ -377,7 +365,7 @@
assertHasRegionTarget('BBB p', 'BBB {}');
}
- Future<void> test_constructor_unnamed() async {
+ Future<void> test_class_constructor_unnamed() async {
addTestFile('''
class A {
A(BBB p) {}
@@ -392,7 +380,7 @@
assertHasRegionTarget('BBB p', 'BBB {}');
}
- Future<void> test_constructorReference_named() async {
+ Future<void> test_class_constructorReference_named() async {
addTestFile('''
class A {}
class B<T> {
@@ -408,7 +396,7 @@
assertHasRegionTarget('A>', 'A {}');
}
- Future<void> test_constructorReference_unnamed_declared() async {
+ Future<void> test_class_constructorReference_unnamed_declared() async {
addTestFile('''
class A {
A();
@@ -422,7 +410,7 @@
assertHasRegionTarget('new;', 'A();', targetLength: 0);
}
- Future<void> test_constructorReference_unnamed_declared_new() async {
+ Future<void> test_class_constructorReference_unnamed_declared_new() async {
addTestFile('''
class A {
A.new();
@@ -436,7 +424,7 @@
assertHasRegionTarget('new;', 'new();');
}
- Future<void> test_constructorReference_unnamed_default() async {
+ Future<void> test_class_constructorReference_unnamed_default() async {
addTestFile('''
class A {}
void f() {
@@ -448,55 +436,7 @@
assertHasRegionTarget('new;', 'A {}');
}
- Future<void> test_enum_constant() async {
- addTestFile('''
-enum E { a, b }
-void f() {
- E.a;
-}
-''');
- await prepareNavigation();
- assertHasRegion('a;');
- assertHasTarget('a,');
- }
-
- Future<void> test_enum_index() async {
- addTestFile('''
-enum E { a, b }
-void f() {
- E.a.index;
-}
-''');
- await prepareNavigation();
- assertHasRegion('index');
- assertHasTarget('E {');
- }
-
- Future<void> test_enum_values() async {
- addTestFile('''
-enum E { a, b }
-void f() {
- E.values;
-}
-''');
- await prepareNavigation();
- assertHasRegion('values');
- assertHasTarget('E');
- }
-
- Future<void> test_extension_on() async {
- addTestFile('''
-class C //1
-{}
-extension E on C //2
-{}
-''');
- await prepareNavigation();
- assertHasRegion('C //2');
- assertHasTarget('C //1');
- }
-
- Future<void> test_factoryRedirectingConstructor_implicit() async {
+ Future<void> test_class_factoryRedirectingConstructor_implicit() async {
addTestFile('''
class A {
factory A() = B;
@@ -510,7 +450,7 @@
}
Future<void>
- test_factoryRedirectingConstructor_implicit_withTypeArgument() async {
+ test_class_factoryRedirectingConstructor_implicit_withTypeArgument() async {
addTestFile('''
class A {}
class B {
@@ -529,7 +469,7 @@
}
}
- Future<void> test_factoryRedirectingConstructor_named() async {
+ Future<void> test_class_factoryRedirectingConstructor_named() async {
addTestFile('''
class A {
factory A() = B.named;
@@ -550,7 +490,7 @@
}
Future<void>
- test_factoryRedirectingConstructor_named_withTypeArgument() async {
+ test_class_factoryRedirectingConstructor_named_withTypeArgument() async {
addTestFile('''
class A {}
class B {
@@ -575,7 +515,7 @@
}
}
- Future<void> test_factoryRedirectingConstructor_unnamed() async {
+ Future<void> test_class_factoryRedirectingConstructor_unnamed() async {
addTestFile('''
class A {
factory A() = B;
@@ -590,7 +530,7 @@
}
Future<void>
- test_factoryRedirectingConstructor_unnamed_withTypeArgument() async {
+ test_class_factoryRedirectingConstructor_unnamed_withTypeArgument() async {
addTestFile('''
class A {}
class B {
@@ -611,7 +551,7 @@
}
}
- Future<void> test_factoryRedirectingConstructor_unresolved() async {
+ Future<void> test_class_factoryRedirectingConstructor_unresolved() async {
addTestFile('''
class A {
factory A() = B;
@@ -621,7 +561,7 @@
// don't check regions, but there should be no exceptions
}
- Future<void> test_fieldFormalParameter() async {
+ Future<void> test_class_fieldFormalParameter() async {
addTestFile('''
class AAA {
int fff = 123;
@@ -632,7 +572,7 @@
assertHasRegionTarget('fff);', 'fff = 123');
}
- Future<void> test_fieldFormalParameter_unresolved() async {
+ Future<void> test_class_fieldFormalParameter_unresolved() async {
addTestFile('''
class AAA {
AAA(this.fff);
@@ -642,6 +582,113 @@
assertNoRegion('fff);', 3);
}
+ Future<void> test_class_fromSDK() async {
+ addTestFile('''
+int V = 42;
+''');
+ await prepareNavigation();
+ assertHasRegion('int V');
+ var targetIndex = testTargetIndexes[0];
+ var target = targets[targetIndex];
+ expect(target.startLine, greaterThan(0));
+ expect(target.startColumn, greaterThan(0));
+ }
+
+ Future<void> test_enum_constant() async {
+ addTestFile('''
+enum E { a, b }
+void f() {
+ E.a;
+}
+''');
+ await prepareNavigation();
+ assertHasRegion('a;');
+ assertHasTarget('a,');
+ }
+
+ Future<void> test_enum_constructor_named() async {
+ addTestFile('''
+const a = 0;
+
+enum E<T> {
+ v<int>.named(a); // 1
+ E.named(int _) {}
+}
+''');
+ await prepareNavigation();
+
+ assertHasRegionTarget('v<int', 'named(int');
+ assertHasRegion('int>');
+ assertHasRegionTarget('named(a); // 1', 'named(int');
+ assertHasRegionTarget('a); // 1', 'a = 0');
+
+ assertHasRegion('int _');
+ }
+
+ Future<void> test_enum_constructor_unnamed() async {
+ addTestFile('''
+enum E {
+ v1,
+ v2(),
+ v3.new();
+ const E();
+}
+''');
+ await prepareNavigation();
+
+ assertHasRegionTarget('v1', 'E();', targetLength: 0);
+ assertHasRegionTarget('v2()', 'E();', targetLength: 0);
+ assertHasRegionTarget('v3', 'E();', targetLength: 0);
+ assertHasRegionTarget('new()', 'E();', targetLength: 0);
+ }
+
+ Future<void> test_enum_index() async {
+ addTestFile('''
+enum E { a, b }
+void f() {
+ E.a.index;
+}
+''');
+ await prepareNavigation();
+ assertHasRegion('index');
+ assertHasTarget('E {');
+ }
+
+ Future<void> test_enum_typeParameter() async {
+ addTestFile('''
+enum E<T> {
+ v(0);
+ const E(T t);
+}
+''');
+ await prepareNavigation();
+ assertHasRegionTarget('T t', 'T>');
+ }
+
+ Future<void> test_enum_values() async {
+ addTestFile('''
+enum E { a, b }
+void f() {
+ E.values;
+}
+''');
+ await prepareNavigation();
+ assertHasRegion('values');
+ assertHasTarget('E');
+ }
+
+ Future<void> test_extension_on() async {
+ addTestFile('''
+class C //1
+{}
+extension E on C //2
+{}
+''');
+ await prepareNavigation();
+ assertHasRegion('C //2');
+ assertHasTarget('C //1');
+ }
+
Future<void> test_functionReference_className_staticMethod() async {
addTestFile('''
class A {
diff --git a/pkg/analysis_server/test/protocol_server_test.dart b/pkg/analysis_server/test/protocol_server_test.dart
index 83f3e8f..02e6971 100644
--- a/pkg/analysis_server/test/protocol_server_test.dart
+++ b/pkg/analysis_server/test/protocol_server_test.dart
@@ -256,6 +256,8 @@
// use SearchResultKind inside the analysis server?
EnumTester<MatchKind, SearchResultKind>()
.run(newSearchResultKind_fromEngine, exceptions: {
+ MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS:
+ SearchResultKind.INVOCATION,
MatchKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF: SearchResultKind.REFERENCE,
});
}
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index 326a8eb..85ebbb8 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -40,7 +40,7 @@
}
}
- Future<void> test_constructor_named() async {
+ Future<void> test_class_constructor_named() async {
addTestFile('''
/// [new A.named] 1
class A {
@@ -69,7 +69,7 @@
assertHasResult(SearchResultKind.REFERENCE, '.named; // 6', 6);
}
- Future<void> test_constructor_named_potential() async {
+ Future<void> test_class_constructor_named_potential() async {
// Constructors in other classes shouldn't be considered potential matches.
// Unresolved method calls should also not be considered potential matches,
// because constructor call sites are statically bound to their targets.
@@ -92,7 +92,7 @@
assertHasResult(SearchResultKind.INVOCATION, '.named(1)', 6);
}
- Future<void> test_constructor_unnamed() async {
+ Future<void> test_class_constructor_unnamed() async {
addTestFile('''
/// [new A] 1
/// [A.new] 2
@@ -123,7 +123,7 @@
assertHasResult(SearchResultKind.REFERENCE, '.new; // 7', 4);
}
- Future<void> test_constructor_unnamed_potential() async {
+ Future<void> test_class_constructor_unnamed_potential() async {
// Constructors in other classes shouldn't be considered potential matches,
// even if they are also unnamed (since constructor call sites are
// statically bound to their targets).
@@ -151,26 +151,7 @@
assertHasResult(SearchResultKind.INVOCATION, '(1)', 0);
}
- Future<void> test_extension() async {
- addTestFile('''
-extension E on int {
- static void foo() {}
- void bar() {}
-}
-
-void f() {
- E.foo();
- E(0).bar();
-}
-''');
- await findElementReferences('E on int', false);
- expect(searchElement!.kind, ElementKind.EXTENSION);
- expect(results, hasLength(2));
- assertHasResult(SearchResultKind.REFERENCE, 'E.foo();');
- assertHasResult(SearchResultKind.REFERENCE, 'E(0)');
- }
-
- Future<void> test_field_explicit() async {
+ Future<void> test_class_field_explicit() async {
addTestFile('''
class A {
var fff; // declaration
@@ -207,7 +188,7 @@
assertHasResult(SearchResultKind.READ, 'fff(); // in f()');
}
- Future<void> test_field_implicit() async {
+ Future<void> test_class_field_implicit() async {
addTestFile('''
class A {
var get fff => null;
@@ -241,7 +222,7 @@
}
}
- Future<void> test_field_inFormalParameter() async {
+ Future<void> test_class_field_inFormalParameter() async {
addTestFile('''
class A {
var fff; // declaration
@@ -260,7 +241,205 @@
assertHasResult(SearchResultKind.READ, 'fff); // in m()');
}
- Future<void> test_field_ofExtension_explicit_static() async {
+ Future<void> test_class_method() async {
+ addTestFile('''
+class A {
+ mmm(p) {}
+ m() {
+ mmm(1);
+ print(mmm); // in m()
+ }
+}
+void f(A a) {
+ a.mmm(10);
+ print(a.mmm); // in f()
+}
+''');
+ await findElementReferences('mmm(p) {}', false);
+ expect(searchElement!.kind, ElementKind.METHOD);
+ expect(results, hasLength(4));
+ assertHasResult(SearchResultKind.INVOCATION, 'mmm(1);');
+ assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in m()');
+ assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
+ assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in f()');
+ }
+
+ Future<void> test_class_method_propagatedType() async {
+ addTestFile('''
+class A {
+ mmm(p) {}
+}
+void f() {
+ var a = new A();
+ a.mmm(10);
+ print(a.mmm);
+}
+''');
+ await findElementReferences('mmm(p) {}', false);
+ expect(searchElement!.kind, ElementKind.METHOD);
+ expect(results, hasLength(2));
+ assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
+ assertHasResult(SearchResultKind.REFERENCE, 'mmm);');
+ }
+
+ Future<void> test_enum_constructor_named() async {
+ addTestFile('''
+/// [new E.named] 1
+enum E {
+ v.named(); // 2
+ const E.named(); // 3
+ const E.other() : this.named(); // 4
+}
+''');
+ await findElementReferences('named(); // 3', false);
+ expect(searchElement!.kind, ElementKind.CONSTRUCTOR);
+ expect(results, hasLength(3));
+ assertHasResult(SearchResultKind.REFERENCE, '.named] 1', 6);
+ assertHasResult(SearchResultKind.INVOCATION, '.named(); // 2', 6);
+ assertHasResult(SearchResultKind.INVOCATION, '.named(); // 4', 6);
+ }
+
+ Future<void> test_enum_constructor_unnamed() async {
+ addTestFile('''
+/// [new E] 1
+enum E {
+ v1, // 2
+ v2(), // 3
+ v3.new(); // 4
+ const E(); // 5
+ const E.other() : this(); // 6
+}
+''');
+ await findElementReferences('E(); // 5', false);
+ expect(searchElement!.kind, ElementKind.CONSTRUCTOR);
+ expect(results, hasLength(5));
+ assertHasResult(SearchResultKind.REFERENCE, '] 1', 0);
+ assertHasResult(SearchResultKind.INVOCATION, ', // 2', 0);
+ assertHasResult(SearchResultKind.INVOCATION, '(), // 3', 0);
+ assertHasResult(SearchResultKind.INVOCATION, '.new(); // 4', 4);
+ assertHasResult(SearchResultKind.INVOCATION, '(); // 6', 0);
+ }
+
+ Future<void> test_enum_field_explicit() async {
+ addTestFile('''
+enum E {
+ v;
+ var fff; // 01
+ E(this.fff); // 02
+ E.named() : fff = 0; // 03
+ void foo() {
+ fff = 0; // 04
+ fff += 0; // 05
+ fff; // 06
+ fff(); // 07
+ }
+}
+
+void f(E e) {
+ e.fff = 0; // 08
+ e.fff += 0; // 09
+ e.fff; // 10
+ e.fff(); // 11
+}
+''');
+ await findElementReferences('fff; // 01', false);
+ expect(searchElement!.kind, ElementKind.FIELD);
+ expect(results, hasLength(10));
+ assertHasResult(SearchResultKind.WRITE, 'fff); // 02');
+ assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 03');
+ // foo()
+ assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 04');
+ assertHasResult(SearchResultKind.WRITE, 'fff += 0; // 05');
+ assertHasResult(SearchResultKind.READ, 'fff; // 06');
+ assertHasResult(SearchResultKind.READ, 'fff(); // 07');
+ // f()
+ assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 08');
+ assertHasResult(SearchResultKind.WRITE, 'fff += 0; // 09');
+ assertHasResult(SearchResultKind.READ, 'fff; // 10');
+ assertHasResult(SearchResultKind.READ, 'fff(); // 11');
+ }
+
+ Future<void> test_enum_field_implicit() async {
+ addTestFile('''
+enum E {
+ v;
+ int get fff => 0;
+ void set fff(_) {}
+ void foo() {
+ fff; // 1
+ fff = 0; // 2
+ }
+}
+
+void f(E e) {
+ e.fff; // 3
+ e.fff = 0; // 4
+}
+''');
+ {
+ await findElementReferences('fff =>', false);
+ expect(searchElement!.kind, ElementKind.FIELD);
+ expect(results, hasLength(4));
+ assertHasResult(SearchResultKind.READ, 'fff; // 1');
+ assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 2');
+ assertHasResult(SearchResultKind.READ, 'fff; // 3');
+ assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 4');
+ }
+ {
+ await findElementReferences('fff(_) {}', false);
+ expect(results, hasLength(4));
+ assertHasResult(SearchResultKind.READ, 'fff; // 1');
+ assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 2');
+ assertHasResult(SearchResultKind.READ, 'fff; // 3');
+ assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 4');
+ }
+ }
+
+ Future<void> test_enum_method() async {
+ addTestFile('''
+enum E {
+ v;
+ void foo() {}
+ void bar() {
+ foo(); // 1
+ this.foo(); // 2
+ }
+}
+
+void f(E e) {
+ e.foo(); // 3
+ e.foo; // 4
+}
+''');
+ await findElementReferences('foo() {}', false);
+ expect(searchElement!.kind, ElementKind.METHOD);
+ expect(results, hasLength(4));
+ assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 1');
+ assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 2');
+ assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 3');
+ assertHasResult(SearchResultKind.REFERENCE, 'foo; // 4');
+ }
+
+ Future<void> test_extension() async {
+ addTestFile('''
+extension E on int {
+ static void foo() {}
+ void bar() {}
+}
+
+void f() {
+ E.foo();
+ E(0).bar();
+}
+''');
+ await findElementReferences('E on int', false);
+ expect(searchElement!.kind, ElementKind.EXTENSION);
+ expect(results, hasLength(2));
+ assertHasResult(SearchResultKind.REFERENCE, 'E.foo();');
+ assertHasResult(SearchResultKind.REFERENCE, 'E(0)');
+ }
+
+ Future<void> test_extension_field_explicit_static() async {
addTestFile('''
extension E on int {
static var fff; // declaration
@@ -295,7 +474,7 @@
assertHasResult(SearchResultKind.READ, 'fff(); // in f()');
}
- Future<void> test_field_ofExtension_implicit_instance() async {
+ Future<void> test_extension_field_implicit_instance() async {
addTestFile('''
extension E on int {
var get fff => null;
@@ -329,7 +508,7 @@
}
}
- Future<void> test_field_ofExtension_implicit_static() async {
+ Future<void> test_extension_field_implicit_static() async {
addTestFile('''
extension E on int {
static var get fff => null;
@@ -363,6 +542,28 @@
}
}
+ Future<void> test_extension_method() async {
+ addTestFile('''
+extension E on int {
+ void foo() {}
+}
+
+void f() {
+ E(0).foo(); // 1
+ E(0).foo; // 2
+ 0.foo(); // 3
+ 0.foo; // 4
+}
+''');
+ await findElementReferences('foo() {}', false);
+ expect(searchElement!.kind, ElementKind.METHOD);
+ expect(results, hasLength(4));
+ assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 1');
+ assertHasResult(SearchResultKind.REFERENCE, 'foo; // 2');
+ assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 3');
+ assertHasResult(SearchResultKind.REFERENCE, 'foo; // 4');
+ }
+
Future<void> test_function() async {
addTestFile('''
fff(p) {}
@@ -511,69 +712,6 @@
assertHasResult(SearchResultKind.READ, 'vvv();');
}
- Future<void> test_method() async {
- addTestFile('''
-class A {
- mmm(p) {}
- m() {
- mmm(1);
- print(mmm); // in m()
- }
-}
-void f(A a) {
- a.mmm(10);
- print(a.mmm); // in f()
-}
-''');
- await findElementReferences('mmm(p) {}', false);
- expect(searchElement!.kind, ElementKind.METHOD);
- expect(results, hasLength(4));
- assertHasResult(SearchResultKind.INVOCATION, 'mmm(1);');
- assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in m()');
- assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
- assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in f()');
- }
-
- Future<void> test_method_ofExtension() async {
- addTestFile('''
-extension E on int {
- void foo() {}
-}
-
-void f() {
- E(0).foo(); // 1
- E(0).foo; // 2
- 0.foo(); // 3
- 0.foo; // 4
-}
-''');
- await findElementReferences('foo() {}', false);
- expect(searchElement!.kind, ElementKind.METHOD);
- expect(results, hasLength(4));
- assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 1');
- assertHasResult(SearchResultKind.REFERENCE, 'foo; // 2');
- assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 3');
- assertHasResult(SearchResultKind.REFERENCE, 'foo; // 4');
- }
-
- Future<void> test_method_propagatedType() async {
- addTestFile('''
-class A {
- mmm(p) {}
-}
-void f() {
- var a = new A();
- a.mmm(10);
- print(a.mmm);
-}
-''');
- await findElementReferences('mmm(p) {}', false);
- expect(searchElement!.kind, ElementKind.METHOD);
- expect(results, hasLength(2));
- assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
- assertHasResult(SearchResultKind.REFERENCE, 'mmm);');
- }
-
Future<void> test_mixin() async {
addTestFile('''
mixin A {}
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 43637ae..a5479ae 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -344,6 +344,68 @@
assertHasOne(a, 'a');
}
+ Future<void> test_searchReferences_enum_constructor_named() async {
+ var code = '''
+enum E {
+ v.named(); // 1
+ const E.named();
+}
+''';
+ await resolveTestCode(code);
+
+ var element = findElement.constructor('named');
+ var matches = await searchEngine.searchReferences(element);
+ expect(
+ matches,
+ unorderedEquals([
+ predicate((SearchMatch m) {
+ return m.kind == MatchKind.INVOCATION &&
+ identical(m.element, findElement.field('v')) &&
+ m.sourceRange.offset == code.indexOf('.named(); // 1') &&
+ m.sourceRange.length == '.named'.length;
+ }),
+ ]),
+ );
+ }
+
+ Future<void> test_searchReferences_enum_constructor_unnamed() async {
+ var code = '''
+enum E {
+ v1, // 1
+ v2(), // 2
+ v3.new(), // 3
+}
+''';
+ await resolveTestCode(code);
+
+ var element = findElement.unnamedConstructor('E');
+ var matches = await searchEngine.searchReferences(element);
+ expect(
+ matches,
+ unorderedEquals([
+ predicate((SearchMatch m) {
+ return m.kind ==
+ MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS &&
+ identical(m.element, findElement.field('v1')) &&
+ m.sourceRange.offset == code.indexOf(', // 1') &&
+ m.sourceRange.length == 0;
+ }),
+ predicate((SearchMatch m) {
+ return m.kind == MatchKind.INVOCATION &&
+ identical(m.element, findElement.field('v2')) &&
+ m.sourceRange.offset == code.indexOf('(), // 2') &&
+ m.sourceRange.length == 0;
+ }),
+ predicate((SearchMatch m) {
+ return m.kind == MatchKind.INVOCATION &&
+ identical(m.element, findElement.field('v3')) &&
+ m.sourceRange.offset == code.indexOf('.new(), // 3') &&
+ m.sourceRange.length == '.new'.length;
+ }),
+ ]),
+ );
+ }
+
Future<void>
test_searchReferences_parameter_ofConstructor_super_named() async {
var code = '''
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
index 5a4616c..dae57ea 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
@@ -19,6 +19,110 @@
@override
FixKind get kind => DartFixKind.ADD_MISSING_PARAMETER_POSITIONAL;
+ Future<void> test_constructor_callingViaSuper() async {
+ await resolveTestCode('''
+class A {
+ A(int a);
+}
+class B extends A {
+ B() : super(1, 2.0);
+}
+''');
+ await assertHasFix('''
+class A {
+ A(int a, [double d]);
+}
+class B extends A {
+ B() : super(1, 2.0);
+}
+''');
+ }
+
+ @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48359')
+ Future<void> test_constructor_callingViaSuperParameter() async {
+ await resolveTestCode('''
+class A {
+ A(int a);
+}
+class B extends A {
+ B(super.a, super.b);
+}
+''');
+ await assertHasFix('''
+class A {
+ A(int a, [double b]);
+}
+class B extends A {
+ B(super.a, super.b);
+}
+''');
+ }
+
+ Future<void> test_constructor_hasOne() async {
+ await resolveTestCode('''
+class A {
+ A(int a);
+}
+void f() {
+ A(1, 2.0);
+}
+''');
+ await assertHasFix('''
+class A {
+ A(int a, [double d]);
+}
+void f() {
+ A(1, 2.0);
+}
+''');
+ }
+
+ Future<void> test_constructor_hasOneFieldFormalParameter() async {
+ await resolveTestCode('''
+class A {
+ int a;
+ A(this.a);
+}
+void f() {
+ A(1, 2.0);
+}
+''');
+ await assertHasFix('''
+class A {
+ int a;
+ A(this.a, [double d]);
+}
+void f() {
+ A(1, 2.0);
+}
+''');
+ }
+
+ Future<void> test_constructor_hasOneSuperParameter() async {
+ await resolveTestCode('''
+class A {
+ A(int a);
+}
+class B extends A {
+ B(super.a);
+}
+void f() {
+ B(1, 2.0);
+}
+''');
+ await assertHasFix('''
+class A {
+ A(int a);
+}
+class B extends A {
+ B(super.a, [double d]);
+}
+void f() {
+ B(1, 2.0);
+}
+''');
+ }
+
Future<void> test_function_hasNamed() async {
await resolveTestCode('''
test({int a = 0}) {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart b/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart
index 611de4e..86bdc42 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart
@@ -26,10 +26,6 @@
C({String this.s});
}
''');
- // TODO(srawlins): Remove the type if the quick fix as is would use the same
- // type as the field's type. (brianwilkerson) I would argue that removing
- // the type should be a separate fix/assist. There was a reason why the
- // user used an explicit type, and we shouldn't remove it when it's valid.
await assertHasFix('''
class C {
String? s;
@@ -208,4 +204,42 @@
void f<T>({T? s}) {}
''');
}
+
+ Future<void> test_superParameter() async {
+ await resolveTestCode('''
+class C {
+ C({String? s});
+}
+class D extends C {
+ D({String super.s});
+}
+''');
+ await assertHasFix('''
+class C {
+ C({String? s});
+}
+class D extends C {
+ D({String? super.s});
+}
+''');
+ }
+
+ Future<void> test_superParameter_functionTyped() async {
+ await resolveTestCode('''
+class C {
+ C({void s()?});
+}
+class D extends C {
+ D({void super.s()});
+}
+''');
+ await assertHasFix('''
+class C {
+ C({void s()?});
+}
+class D extends C {
+ D({void super.s()?});
+}
+''');
+ }
}
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index cdd7c72..3dbb4a0 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -534,6 +534,8 @@
List<SearchResult> results = <SearchResult>[];
await _addResults(results, element, searchedFiles, const {
IndexRelationKind.IS_INVOKED_BY: SearchResultKind.INVOCATION,
+ IndexRelationKind.IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS:
+ SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE,
IndexRelationKind.IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF:
SearchResultKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF,
@@ -787,6 +789,7 @@
READ_WRITE,
WRITE,
INVOCATION,
+ INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
REFERENCE,
REFERENCE_BY_CONSTRUCTOR_TEAR_OFF,
}
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index a6b2bef..29b2ae2 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -103,7 +103,11 @@
if (constKeyword != null) {
_validateConstructorInitializers(node);
if (node.factoryKeyword == null) {
- _validateFieldInitializers(node.parent.classMembers, constKeyword);
+ _validateFieldInitializers(
+ node.parent.classMembers,
+ constKeyword,
+ isEnumDeclaration: node.parent is EnumDeclaration,
+ );
}
}
_validateDefaultValues(node.parameters);
@@ -558,11 +562,17 @@
/// required if the class has a constant constructor, the error is reported at
/// [constKeyword], the const keyword on such a constant constructor.
void _validateFieldInitializers(
- List<ClassMember> members, Token constKeyword) {
+ List<ClassMember> members,
+ Token constKeyword, {
+ required bool isEnumDeclaration,
+ }) {
for (ClassMember member in members) {
if (member is FieldDeclaration && !member.isStatic) {
for (VariableDeclaration variableDeclaration
in member.fields.variables) {
+ if (isEnumDeclaration && variableDeclaration.name.name == 'values') {
+ continue;
+ }
var initializer = variableDeclaration.initializer;
if (initializer != null) {
// Ignore any errors produced during validation--if the constant
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 229d450..681ae44 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -394,6 +394,9 @@
super.visitChildren(visitor);
safelyVisitChildren(accessors, visitor);
safelyVisitChildren(fields, visitor);
+ safelyVisitChildren(constructors, visitor);
+ safelyVisitChildren(methods, visitor);
+ safelyVisitChildren(typeParameters, visitor);
}
/// Return an iterable containing all of the implementations of a getter with
@@ -820,14 +823,6 @@
this.linkedData = linkedData;
}
- @override
- void visitChildren(ElementVisitor visitor) {
- super.visitChildren(visitor);
- safelyVisitChildren(constructors, visitor);
- safelyVisitChildren(methods, visitor);
- safelyVisitChildren(typeParameters, visitor);
- }
-
/// Compute a list of constructors for this class, which is a mixin
/// application. If specified, [visitedClasses] is a list of the other mixin
/// application classes which have been visited on the way to reaching this
diff --git a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
index 76860af..e0e84d6 100644
--- a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -2,7 +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.
-import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/error/error.dart';
@@ -32,42 +31,14 @@
bool get _isNonNullableByDefault => _typeSystem.isNonNullableByDefault;
- void checkExtension(ExtensionDeclaration node) {
- for (var getterNode in node.members) {
- if (getterNode is MethodDeclaration && getterNode.isGetter) {
- checkGetter(getterNode.name,
- getterNode.declaredElement as PropertyAccessorElement);
+ void checkExtension(ExtensionElement element) {
+ for (var getter in element.accessors) {
+ if (getter.isGetter) {
+ _checkLocalGetter(getter);
}
}
}
- void checkGetter(
- SimpleIdentifier nameNode,
- PropertyAccessorElement getter,
- ) {
- assert(getter.isGetter);
-
- var setter = getter.correspondingSetter;
- if (setter == null) {
- return;
- }
-
- var getterType = _getGetterType(getter);
- var setterType = _getSetterType(setter);
- if (setterType == null) {
- return;
- }
-
- if (!_match(getterType, setterType)) {
- var name = nameNode.name;
- _errorReporter.reportErrorForNode(
- _errorCode,
- nameNode,
- [name, getterType, setterType, name],
- );
- }
- }
-
void checkInterface(ClassElement classElement, Interface interface) {
var libraryUri = classElement.library.source.uri;
@@ -113,6 +84,36 @@
}
}
+ void checkStaticAccessors(List<PropertyAccessorElement> accessors) {
+ for (var getter in accessors) {
+ // TODO(scheglov) Update `isStatic` instead
+ if ((getter.isStatic ||
+ getter.enclosingElement is CompilationUnitElement) &&
+ getter.isGetter) {
+ _checkLocalGetter(getter);
+ }
+ }
+ }
+
+ void _checkLocalGetter(PropertyAccessorElement getter) {
+ assert(getter.isGetter);
+ var setter = getter.correspondingSetter;
+ if (setter != null) {
+ var getterType = _getGetterType(getter);
+ var setterType = _getSetterType(setter);
+ if (setterType != null) {
+ if (!_match(getterType, setterType)) {
+ var name = getter.name;
+ _errorReporter.reportErrorForElement(
+ _errorCode,
+ getter,
+ [name, getterType, setterType, name],
+ );
+ }
+ }
+ }
+ }
+
bool _match(DartType getterType, DartType setterType) {
return _isNonNullableByDefault
? _typeSystem.isSubtypeOf(getterType, setterType)
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 4b746e6..2eafede 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -423,8 +423,9 @@
void visitClassDeclaration(ClassDeclaration node) {
var outerClass = _enclosingClass;
try {
+ var element = node.declaredElement as ClassElementImpl;
_isInNativeClass = node.nativeClause != null;
- _enclosingClass = node.declaredElement as ClassElementImpl;
+ _enclosingClass = element;
List<ClassMember> members = node.members;
_duplicateDefinitionVerifier.checkClass(node);
@@ -448,6 +449,12 @@
_checkForBadFunctionUse(node);
_checkForWrongTypeParameterVarianceInSuperinterfaces();
_checkForMainFunction(node.name);
+
+ GetterSetterTypesVerifier(
+ typeSystem: typeSystem,
+ errorReporter: errorReporter,
+ ).checkStaticAccessors(element.accessors);
+
super.visitClassDeclaration(node);
} finally {
_isInNativeClass = false;
@@ -485,10 +492,17 @@
@override
void visitCompilationUnit(CompilationUnit node) {
+ var element = node.declaredElement as CompilationUnitElement;
_featureSet = node.featureSet;
_duplicateDefinitionVerifier.checkUnit(node);
_checkForDeferredPrefixCollisions(node);
_checkForIllegalLanguageOverride(node);
+
+ GetterSetterTypesVerifier(
+ typeSystem: typeSystem,
+ errorReporter: errorReporter,
+ ).checkStaticAccessors(element.accessors);
+
super.visitCompilationUnit(node);
_featureSet = null;
}
@@ -589,6 +603,11 @@
_checkForMainFunction(node.name);
_checkForEnumInstantiatedToBoundsIsNotWellBounded(node, element);
+ GetterSetterTypesVerifier(
+ typeSystem: typeSystem,
+ errorReporter: errorReporter,
+ ).checkStaticAccessors(element.accessors);
+
super.visitEnumDeclaration(node);
} finally {
_enclosingClass = outerClass;
@@ -620,7 +639,8 @@
@override
void visitExtensionDeclaration(ExtensionDeclaration node) {
- _enclosingExtension = node.declaredElement;
+ var element = node.declaredElement!;
+ _enclosingExtension = element;
_duplicateDefinitionVerifier.checkExtension(node);
_checkForConflictingExtensionTypeVariableErrorCodes();
_checkForFinalNotInitializedInClass(node.members);
@@ -628,7 +648,7 @@
GetterSetterTypesVerifier(
typeSystem: typeSystem,
errorReporter: errorReporter,
- ).checkExtension(node);
+ ).checkExtension(element);
final name = node.name;
if (name != null) {
@@ -727,13 +747,6 @@
_withEnclosingExecutable(functionElement, () {
SimpleIdentifier identifier = node.name;
TypeAnnotation? returnType = node.returnType;
- if (node.isGetter) {
- GetterSetterTypesVerifier(
- typeSystem: typeSystem,
- errorReporter: errorReporter,
- ).checkGetter(
- node.name, node.declaredElement as PropertyAccessorElement);
- }
if (node.isSetter) {
FunctionExpression functionExpression = node.functionExpression;
_checkForWrongNumberOfParametersForSetter(
@@ -918,13 +931,6 @@
void visitMethodDeclaration(MethodDeclaration node) {
_withEnclosingExecutable(node.declaredElement!, () {
var returnType = node.returnType;
- if (node.isStatic && node.isGetter) {
- GetterSetterTypesVerifier(
- typeSystem: typeSystem,
- errorReporter: errorReporter,
- ).checkGetter(
- node.name, node.declaredElement as PropertyAccessorElement);
- }
if (node.isSetter) {
_checkForWrongNumberOfParametersForSetter(node.name, node.parameters);
_checkForNonVoidReturnTypeForSetter(returnType);
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index da1b04c..793d021 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -3131,6 +3131,13 @@
ClassElement element = node.declaredElement!;
node.metadata.accept(this);
+ nameScope = TypeParameterScope(
+ nameScope,
+ element.typeParameters,
+ );
+ _setNodeNameScope(node, nameScope);
+ visitEnumDeclarationInScope(node);
+
nameScope = ClassScope(nameScope, element);
visitEnumMembersInScope(node);
} finally {
@@ -3138,6 +3145,13 @@
}
}
+ void visitEnumDeclarationInScope(EnumDeclaration node) {
+ node.name.accept(this);
+ node.typeParameters?.accept(this);
+ node.withClause?.accept(this);
+ node.implementsClause?.accept(this);
+ }
+
void visitEnumMembersInScope(EnumDeclaration node) {
node.documentationComment?.accept(this);
node.constants.accept(this);
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 8e54e31..4e4f016 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -596,7 +596,7 @@
await _verifyReferences(element, expected);
}
- test_searchReferences_ConstructorElement_named() async {
+ test_searchReferences_ConstructorElement_class_named() async {
await resolveTestCode('''
/// [new A.named] 1
class A {
@@ -638,7 +638,7 @@
await _verifyReferences(element, expected);
}
- test_searchReferences_ConstructorElement_named_viaTypeAlias() async {
+ test_searchReferences_ConstructorElement_class_named_viaTypeAlias() async {
await resolveTestCode('''
class A<T> {
A.named();
@@ -663,7 +663,7 @@
]);
}
- test_searchReferences_ConstructorElement_unnamed_declared() async {
+ test_searchReferences_ConstructorElement_class_unnamed_declared() async {
await resolveTestCode('''
/// [new A] 1
class A {
@@ -703,7 +703,7 @@
await _verifyReferences(element, expected);
}
- test_searchReferences_ConstructorElement_unnamed_otherFile() async {
+ test_searchReferences_ConstructorElement_class_unnamed_otherFile() async {
String other = convertPath('$testPackageLibPath/other.dart');
String otherCode = '''
import 'test.dart';
@@ -733,7 +733,7 @@
await _verifyReferences(element, expected);
}
- test_searchReferences_ConstructorElement_unnamed_synthetic() async {
+ test_searchReferences_ConstructorElement_class_unnamed_synthetic() async {
await resolveTestCode('''
/// [new A] 1
class A {}
@@ -767,6 +767,91 @@
await _verifyReferences(element, expected);
}
+ test_searchReferences_ConstructorElement_enum_named() async {
+ await resolveTestCode('''
+/// [new E.named] 1
+enum E {
+ v.named(); // 2
+ const E.named();
+ const E.other() : this.named(); // 3
+}
+''');
+ var element = findElement.constructor('named');
+ var expected = [
+ _expectIdQ(
+ findElement.enum_('E'), SearchResultKind.REFERENCE, '.named] 1',
+ length: '.named'.length),
+ _expectIdQ(findElement.field('v', of: 'E'), SearchResultKind.INVOCATION,
+ '.named(); // 2',
+ length: '.named'.length),
+ _expectIdQ(findElement.constructor('other', of: 'E'),
+ SearchResultKind.INVOCATION, '.named(); // 3',
+ length: '.named'.length),
+ ];
+ await _verifyReferences(element, expected);
+ }
+
+ test_searchReferences_ConstructorElement_enum_unnamed_declared() async {
+ await resolveTestCode('''
+/// [new E] 1
+enum E {
+ v1, // 2
+ v2(), // 3
+ v3.new(); // 4
+ const E();
+ const E.other() : this(); // 5
+}
+''');
+ var element = findElement.unnamedConstructor('E');
+ var expected = [
+ _expectIdQ(findElement.enum_('E'), SearchResultKind.REFERENCE, '] 1',
+ length: 0),
+ _expectIdQ(
+ findElement.field('v1'),
+ SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
+ ', // 2',
+ length: 0),
+ _expectIdQ(
+ findElement.field('v2'), SearchResultKind.INVOCATION, '(), // 3',
+ length: 0),
+ _expectIdQ(
+ findElement.field('v3'), SearchResultKind.INVOCATION, '.new(); // 4',
+ length: '.new'.length),
+ _expectIdQ(findElement.constructor('other'), SearchResultKind.INVOCATION,
+ '(); // 5',
+ length: 0),
+ ];
+ await _verifyReferences(element, expected);
+ }
+
+ test_searchReferences_ConstructorElement_enum_unnamed_synthetic() async {
+ await resolveTestCode('''
+/// [new E] 1
+enum E {
+ v1, // 2
+ v2(), // 3
+ v3.new(); // 4
+}
+''');
+ var element = findElement.unnamedConstructor('E');
+ var expected = [
+ _expectIdQ(findElement.enum_('E'), SearchResultKind.REFERENCE, '] 1',
+ length: 0),
+ _expectIdQ(
+ findElement.field('v1'),
+ SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
+ ', // 2',
+ length: 0),
+ _expectIdQ(
+ findElement.field('v2'), SearchResultKind.INVOCATION, '(), // 3',
+ length: 0),
+ _expectIdQ(
+ findElement.field('v3'), SearchResultKind.INVOCATION, '.new(); // 4',
+ length: '.new'.length),
+ ];
+ await _verifyReferences(element, expected);
+ }
+
test_searchReferences_ExtensionElement() async {
await resolveTestCode('''
extension E on int {
@@ -788,7 +873,7 @@
await _verifyReferences(element, expected);
}
- test_searchReferences_FieldElement() async {
+ test_searchReferences_FieldElement_class() async {
await resolveTestCode('''
class A {
var field;
@@ -822,33 +907,7 @@
await _verifyReferences(element, expected);
}
- test_searchReferences_FieldElement_ofEnum() async {
- await resolveTestCode('''
-enum MyEnum {
- A, B, C
-}
-main() {
- print(MyEnum.A.index);
- print(MyEnum.values);
- print(MyEnum.A);
- print(MyEnum.B);
-}
-''');
- var enumElement = findElement.enum_('MyEnum');
- var main = findElement.function('main');
- await _verifyReferences(enumElement.getField('index')!,
- [_expectIdQ(main, SearchResultKind.READ, 'index);')]);
- await _verifyReferences(enumElement.getField('values')!,
- [_expectIdQ(main, SearchResultKind.READ, 'values);')]);
- await _verifyReferences(enumElement.getField('A')!, [
- _expectIdQ(main, SearchResultKind.READ, 'A.index);'),
- _expectIdQ(main, SearchResultKind.READ, 'A);')
- ]);
- await _verifyReferences(enumElement.getField('B')!,
- [_expectIdQ(main, SearchResultKind.READ, 'B);')]);
- }
-
- test_searchReferences_FieldElement_synthetic() async {
+ test_searchReferences_FieldElement_class_synthetic() async {
await resolveTestCode('''
class A {
get field => null;
@@ -878,6 +937,54 @@
await _verifyReferences(element, expected);
}
+ test_searchReferences_FieldElement_enum() async {
+ await resolveTestCode('''
+enum E {
+ v(field: 0);
+ final int field;
+ const E({required this.field}); // 1
+}
+
+void f(E e) {
+ e.field; // 2
+}
+''');
+ await _verifyReferences(findElement.field('field'), [
+ _expectIdQ(
+ findElement.field('v'), SearchResultKind.REFERENCE, 'field: 0'),
+ _expectIdQ(findElement.parameter('field'), SearchResultKind.WRITE,
+ 'field}); // 1'),
+ _expectIdQ(
+ findElement.topFunction('f'), SearchResultKind.READ, 'field; // 2'),
+ ]);
+ }
+
+ test_searchReferences_FieldElement_enum_values() async {
+ await resolveTestCode('''
+enum MyEnum {
+ A, B, C
+}
+main() {
+ print(MyEnum.A.index);
+ print(MyEnum.values);
+ print(MyEnum.A);
+ print(MyEnum.B);
+}
+''');
+ var enumElement = findElement.enum_('MyEnum');
+ var main = findElement.function('main');
+ await _verifyReferences(enumElement.getField('index')!,
+ [_expectIdQ(main, SearchResultKind.READ, 'index);')]);
+ await _verifyReferences(enumElement.getField('values')!,
+ [_expectIdQ(main, SearchResultKind.READ, 'values);')]);
+ await _verifyReferences(enumElement.getField('A')!, [
+ _expectIdQ(main, SearchResultKind.READ, 'A.index);'),
+ _expectIdQ(main, SearchResultKind.READ, 'A);')
+ ]);
+ await _verifyReferences(enumElement.getField('B')!,
+ [_expectIdQ(main, SearchResultKind.READ, 'B);')]);
+ }
+
test_searchReferences_FunctionElement() async {
await resolveTestCode('''
test() {}
@@ -1264,55 +1371,35 @@
await _verifyReferences(method, expected);
}
- test_searchReferences_MethodElement_extension_named() async {
+ test_searchReferences_MethodElement_enum() async {
await resolveTestCode('''
-extension E on int {
+enum E {
+ v;
void foo() {}
-
void bar() {
foo(); // 1
this.foo(); // 2
- print(foo); // 3
- print(this.foo); // 4
}
}
-''');
- var foo = findElement.method('foo');
- var bar = findElement.method('bar');
- var expected = [
- _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
- _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
- _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
- _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
- ];
- await _verifyReferences(foo, expected);
- }
- test_searchReferences_MethodElement_extension_unnamed() async {
- await resolveTestCode('''
-extension on int {
- void foo() {}
-
- void bar() {
- foo(); // 1
- this.foo(); // 2
- print(foo); // 3
- print(this.foo); // 4
- }
+void f(E e) {
+ e.foo(); // 3
+ e.foo; // 4
}
''');
- var foo = findElement.method('foo');
- var bar = findElement.method('bar');
- var expected = [
- _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
- _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
- _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
- _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
- ];
- await _verifyReferences(foo, expected);
+ await _verifyReferences(findElement.method('foo'), [
+ _expectId(findElement.method('bar'), SearchResultKind.INVOCATION,
+ 'foo(); // 1'),
+ _expectIdQ(findElement.method('bar'), SearchResultKind.INVOCATION,
+ 'foo(); // 2'),
+ _expectIdQ(findElement.topFunction('f'), SearchResultKind.INVOCATION,
+ 'foo(); // 3'),
+ _expectIdQ(findElement.topFunction('f'), SearchResultKind.REFERENCE,
+ 'foo; // 4'),
+ ]);
}
- test_searchReferences_MethodElement_ofExtension_instance() async {
+ test_searchReferences_MethodElement_extension_instance() async {
await resolveTestCode('''
extension E on int {
void foo() {}
@@ -1348,7 +1435,31 @@
await _verifyReferences(element, expected);
}
- test_searchReferences_MethodElement_ofExtension_static() async {
+ test_searchReferences_MethodElement_extension_named() async {
+ await resolveTestCode('''
+extension E on int {
+ void foo() {}
+
+ void bar() {
+ foo(); // 1
+ this.foo(); // 2
+ print(foo); // 3
+ print(this.foo); // 4
+ }
+}
+''');
+ var foo = findElement.method('foo');
+ var bar = findElement.method('bar');
+ var expected = [
+ _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
+ _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
+ _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
+ _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
+ ];
+ await _verifyReferences(foo, expected);
+ }
+
+ test_searchReferences_MethodElement_extension_static() async {
await resolveTestCode('''
extension E on int {
static void foo() {}
@@ -1376,6 +1487,30 @@
await _verifyReferences(element, expected);
}
+ test_searchReferences_MethodElement_extension_unnamed() async {
+ await resolveTestCode('''
+extension on int {
+ void foo() {}
+
+ void bar() {
+ foo(); // 1
+ this.foo(); // 2
+ print(foo); // 3
+ print(this.foo); // 4
+ }
+}
+''');
+ var foo = findElement.method('foo');
+ var bar = findElement.method('bar');
+ var expected = [
+ _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
+ _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
+ _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
+ _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
+ ];
+ await _verifyReferences(foo, expected);
+ }
+
test_searchReferences_MethodMember_class() async {
await resolveTestCode('''
class A<T> {
@@ -2024,6 +2159,29 @@
await _verifyReferences(element, expected);
}
+ test_searchReferences_TypeParameterElement_ofEnum() async {
+ await resolveTestCode('''
+enum E<T> {
+ v;
+ final T a;
+ void foo(T b) {}
+}
+''');
+ var element = findElement.typeParameter('T');
+ await _verifyReferences(element, [
+ _expectId(
+ findElement.field('a'),
+ SearchResultKind.REFERENCE,
+ 'T a',
+ ),
+ _expectId(
+ findElement.parameter('b'),
+ SearchResultKind.REFERENCE,
+ 'T b',
+ ),
+ ]);
+ }
+
test_searchReferences_TypeParameterElement_ofLocalFunction() async {
await resolveTestCode('''
main() {
diff --git a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
index d47a2dc..e37f2e8 100644
--- a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
@@ -17,6 +17,23 @@
@reflectiveTest
class SimpleIdentifierResolutionTest extends PubPackageResolutionTest
with SimpleIdentifierResolutionTestCases {
+ test_enum_typeParameter_in_method() async {
+ await assertNoErrorsInCode('''
+enum E<T> {
+ v;
+ void foo() {
+ T;
+ }
+}
+''');
+
+ assertSimpleIdentifier(
+ findNode.simple('T;'),
+ element: findElement.typeParameter('T'),
+ type: 'Type',
+ );
+ }
+
test_functionReference() async {
await assertErrorsInCode('''
// @dart = 2.7
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart
index 61fb991..179896d 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart
@@ -491,6 +491,17 @@
]);
}
+ test_constant_this_setter() async {
+ await assertErrorsInCode(r'''
+enum E {
+ foo;
+ set foo(_) {}
+}
+''', [
+ error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 11, 3),
+ ]);
+ }
+
test_constant_toString() async {
await assertErrorsInCode(r'''
enum E {
@@ -557,6 +568,17 @@
]);
}
+ test_field_this_constant() async {
+ await assertErrorsInCode(r'''
+enum E {
+ foo;
+ int get foo => 0;
+}
+''', [
+ error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 11, 3),
+ ]);
+ }
+
test_field_this_getter() async {
await assertErrorsInCode(r'''
enum E {
@@ -661,6 +683,17 @@
]);
}
+ test_method_this_constant() async {
+ await assertErrorsInCode(r'''
+enum E {
+ foo;
+ void foo() {}
+}
+''', [
+ error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 11, 3),
+ ]);
+ }
+
test_method_this_getter() async {
await assertErrorsInCode(r'''
enum E {
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart
index 3b94c24..5ef6e88 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart
@@ -16,7 +16,7 @@
@reflectiveTest
class ConstConstructorWithFieldInitializedByNonConstTest
extends PubPackageResolutionTest {
- test_factoryConstructor() async {
+ test_class_factoryConstructor() async {
await assertNoErrorsInCode(r'''
class A {
final List<int> list = f();
@@ -32,7 +32,7 @@
''');
}
- test_instanceField() async {
+ test_class_instanceField() async {
await assertErrorsInCode(r'''
class A {
final int i = f();
@@ -50,7 +50,7 @@
]);
}
- test_staticField() async {
+ test_class_staticField() async {
await assertNoErrorsInCode(r'''
class A {
static final int i = f();
@@ -61,4 +61,32 @@
}
''');
}
+
+ test_enum_instanceField() async {
+ await assertErrorsInCode(r'''
+enum E {
+ v;
+ final int i = f();
+ const E();
+}
+int f() => 0;
+''', [
+ error(
+ CompileTimeErrorCode
+ .CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST,
+ 37,
+ 5),
+ ]);
+ }
+
+ test_enum_staticField() async {
+ await assertNoErrorsInCode(r'''
+enum E {
+ v;
+ static final int i = f();
+ const E();
+}
+int f() => 0;
+''');
+ }
}
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
index 57a6e98..7fec331 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
@@ -538,7 +538,7 @@
await assertNoErrorsInCode(r'''
enum E {
foo;
- static set foo(int _) {}
+ static set foo(_) {}
}
''');
}
diff --git a/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
index ec81014..ac4c1f3 100644
--- a/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
@@ -46,6 +46,17 @@
''');
}
+ test_class_instance_field() async {
+ await assertErrorsInCode('''
+class C {
+ final num foo = 0;
+ set foo(int v) {}
+}
+''', [
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 22, 3),
+ ]);
+ }
+
test_class_instance_interfaces() async {
await assertErrorsInCode(r'''
class A {
@@ -213,6 +224,64 @@
]);
}
+ test_class_static_field() async {
+ await assertErrorsInCode('''
+class C {
+ static final num foo = 0;
+ static set foo(int v) {}
+}
+''', [
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 29, 3),
+ ]);
+ }
+
+ test_enum_instance() async {
+ await assertErrorsInCode('''
+enum E {
+ v;
+ num get foo => 0;
+ set foo(int v) {}
+}
+''', [
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 24, 3),
+ ]);
+ }
+
+ test_enum_instance_field() async {
+ await assertErrorsInCode('''
+enum E {
+ v;
+ final num foo = 0;
+ set foo(int v) {}
+}
+''', [
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 26, 3),
+ ]);
+ }
+
+ test_enum_static() async {
+ await assertErrorsInCode('''
+enum E {
+ v;
+ static num get foo => 0;
+ static set foo(int v) {}
+}
+''', [
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 31, 3),
+ ]);
+ }
+
+ test_enum_static_field() async {
+ await assertErrorsInCode('''
+enum E {
+ foo;
+ static set foo(int v) {}
+}
+''', [
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 11, 3),
+ ]);
+ }
+
test_extension_instance() async {
await assertErrorsInCode('''
extension E on Object {
@@ -235,6 +304,17 @@
]);
}
+ test_extension_static_field() async {
+ await assertErrorsInCode('''
+extension E on Object {
+ static final int foo = 0;
+ static set foo(String v) {}
+}
+''', [
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 43, 3),
+ ]);
+ }
+
test_topLevel() async {
await assertErrorsInCode('''
int get foo => 0;
@@ -266,4 +346,13 @@
set foo(int v) {}
''');
}
+
+ test_topLevel_variable() async {
+ await assertErrorsInCode('''
+final int foo = 0;
+set foo(String v) {}
+''', [
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 10, 3),
+ ]);
+ }
}
diff --git a/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart b/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
index e4f48df..b66fed4 100644
--- a/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
@@ -47,6 +47,18 @@
]);
}
+ test_field_withConstructor() async {
+ await assertErrorsInCode(r'''
+enum E {
+ v;
+ final values = [];
+ const E();
+}
+''', [
+ error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 22, 6),
+ ]);
+ }
+
test_getter() async {
await assertErrorsInCode(r'''
enum E {
@@ -95,7 +107,7 @@
await assertErrorsInCode(r'''
enum E {
v;
- set values(int _) {}
+ set values(_) {}
}
''', [
error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 20, 6),
@@ -106,7 +118,7 @@
await assertErrorsInCode(r'''
enum E {
v;
- static set values(int _) {}
+ static set values(_) {}
}
''', [
error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 27, 6),
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index 537f6c2..76f048a 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -389,6 +389,21 @@
}
@override
+ void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+ computer._addRegionForNode(node.name, node.constructorElement);
+
+ var arguments = node.arguments;
+ if (arguments != null) {
+ computer._addRegionForNode(
+ arguments.constructorSelector?.name,
+ node.constructorElement,
+ );
+ arguments.typeArguments?.accept(this);
+ arguments.argumentList.accept(this);
+ }
+ }
+
+ @override
void visitExportDirective(ExportDirective node) {
var exportElement = node.element;
if (exportElement != null) {
diff --git a/pkg/compiler/README.md b/pkg/compiler/README.md
index deb6c60..b40befe 100644
--- a/pkg/compiler/README.md
+++ b/pkg/compiler/README.md
@@ -679,15 +679,6 @@
`lib/src/scanner`
`lib/src/scanner/scanner_task.dart`
-`lib/src/helpers`
-`lib/src/helpers/trace.dart`
-`lib/src/helpers/debug_collection.dart`
-`lib/src/helpers/expensive_map.dart`
-`lib/src/helpers/helpers.dart`
-`lib/src/helpers/track_map.dart`
-`lib/src/helpers/expensive_set.dart`
-`lib/src/helpers/stats.dart`
-
`lib/src/js`
`lib/src/js/js.dart`
`lib/src/js/placeholder_safety.dart`
diff --git a/pkg/compiler/lib/src/common.dart b/pkg/compiler/lib/src/common.dart
index 0a4b1d5..cb18897 100644
--- a/pkg/compiler/lib/src/common.dart
+++ b/pkg/compiler/lib/src/common.dart
@@ -17,6 +17,5 @@
NO_LOCATION_SPANNABLE,
Spannable,
SpannableAssertionFailure;
-export 'helpers/helpers.dart';
bool retainDataForTesting = false;
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index f8d3873..9ea97ce 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -828,14 +828,6 @@
reportDiagnosticInternal(message, infos, api.Diagnostic.INFO);
}
- @deprecated
- @override
- void reportInfoMessage(Spannable node, MessageKind messageKind,
- [Map<String, String> arguments = const {}]) {
- reportDiagnosticInternal(createMessage(node, messageKind, arguments),
- const <DiagnosticMessage>[], api.Diagnostic.INFO);
- }
-
void reportDiagnosticInternal(DiagnosticMessage message,
List<DiagnosticMessage> infos, api.Diagnostic kind) {
if (!options.showAllPackageWarnings &&
diff --git a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
index b009473..c425106 100644
--- a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
+++ b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
@@ -49,13 +49,14 @@
void reportHint(DiagnosticMessage message,
[List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
+ void reportInfoMessage(Spannable node, MessageKind errorCode,
+ [Map<String, String> arguments = const {}]) {
+ reportInfo(createMessage(node, errorCode, arguments));
+ }
+
void reportInfo(DiagnosticMessage message,
[List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
- @deprecated
- void reportInfoMessage(Spannable node, MessageKind errorCode,
- [Map<String, String> arguments = const {}]);
-
/// Set current element of this reporter to [element]. This is used for
/// creating [SourceSpan] in [spanFromSpannable].
withCurrentElement(Entity element, f());
diff --git a/pkg/compiler/lib/src/helpers/debug_collection.dart b/pkg/compiler/lib/src/helpers/debug_collection.dart
deleted file mode 100644
index de9a857e..0000000
--- a/pkg/compiler/lib/src/helpers/debug_collection.dart
+++ /dev/null
@@ -1,494 +0,0 @@
-// Copyright (c) 2014, 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.
-
-typedef DebugCallback = void Function(
- String methodName, dynamic arg1, dynamic arg2);
-
-class DebugMap<K, V> implements Map<K, V> {
- final Map<K, V> sourceMap;
- DebugCallback indexSetCallback;
- DebugCallback putIfAbsentCallback;
- DebugCallback removeCallback;
-
- DebugMap(this.sourceMap, {DebugCallback addCallback, this.removeCallback}) {
- if (addCallback != null) {
- this.addCallback = addCallback;
- }
- }
-
- void set addCallback(DebugCallback value) {
- indexSetCallback = value;
- putIfAbsentCallback = value;
- }
-
- @override
- Map<RK, RV> cast<RK, RV>() => Map.castFrom<K, V, RK, RV>(this);
- @override
- bool containsValue(Object value) {
- return sourceMap.containsValue(value);
- }
-
- @override
- bool containsKey(Object key) => sourceMap.containsKey(key);
-
- @override
- V operator [](Object key) => sourceMap[key];
-
- @override
- void operator []=(K key, V value) {
- if (indexSetCallback != null) {
- indexSetCallback('[]=', key, value);
- }
- sourceMap[key] = value;
- }
-
- @override
- V putIfAbsent(K key, V ifAbsent()) {
- return sourceMap.putIfAbsent(key, () {
- V v = ifAbsent();
- if (putIfAbsentCallback != null) {
- putIfAbsentCallback('putIfAbsent', key, v);
- }
- return v;
- });
- }
-
- @override
- void addAll(Map<K, V> other) => sourceMap.addAll(other);
-
- @override
- V remove(Object key) {
- if (removeCallback != null) {
- removeCallback('remove', key, sourceMap[key]);
- }
- return sourceMap.remove(key);
- }
-
- @override
- void clear() {
- if (removeCallback != null) {
- removeCallback('clear', sourceMap, null);
- }
- sourceMap.clear();
- }
-
- @override
- void forEach(void f(K key, V value)) => sourceMap.forEach(f);
-
- @override
- Iterable<K> get keys => sourceMap.keys;
-
- @override
- Iterable<V> get values => sourceMap.values;
-
- @override
- Iterable<MapEntry<K, V>> get entries => sourceMap.entries;
-
- @override
- void addEntries(Iterable<MapEntry<K, V>> entries) {
- sourceMap.addEntries(entries);
- }
-
- @override
- Map<K2, V2> map<K2, V2>(MapEntry<K2, V2> transform(K key, V value)) =>
- sourceMap.map(transform);
-
- @override
- int get length => sourceMap.length;
-
- @override
- bool get isEmpty => sourceMap.isEmpty;
-
- @override
- bool get isNotEmpty => sourceMap.isNotEmpty;
-
- @override
- V update(K key, V update(V value), {V ifAbsent()}) =>
- sourceMap.update(key, update, ifAbsent: ifAbsent);
-
- @override
- void updateAll(V update(K key, V value)) {
- sourceMap.updateAll(update);
- }
-
- @override
- void removeWhere(bool test(K key, V value)) {
- sourceMap.removeWhere(test);
- }
-}
-
-class DebugIterable<E> implements Iterable<E> {
- final Iterable<E> iterable;
-
- DebugIterable(this.iterable);
-
- @override
- Iterator<E> get iterator => iterable.iterator;
-
- @override
- Iterable<R> cast<R>() => Iterable.castFrom<E, R>(this);
- @override
- Iterable<T> map<T>(T f(E element)) => iterable.map(f);
-
- @override
- Iterable<E> where(bool test(E element)) => iterable.where(test);
-
- @override
- Iterable<T> expand<T>(Iterable<T> f(E element)) => iterable.expand(f);
-
- @override
- bool contains(Object element) => iterable.contains(element);
-
- @override
- void forEach(void f(E element)) => iterable.forEach(f);
-
- @override
- E reduce(E combine(E value, E element)) => iterable.reduce(combine);
-
- @override
- T fold<T>(T initialValue, T combine(T previousValue, E element)) {
- return iterable.fold(initialValue, combine);
- }
-
- @override
- bool every(bool test(E element)) => iterable.every(test);
-
- @override
- String join([String separator = ""]) => iterable.join(separator);
-
- @override
- bool any(bool test(E element)) => iterable.any(test);
-
- @override
- List<E> toList({bool growable = true}) {
- return iterable.toList(growable: growable);
- }
-
- @override
- Set<E> toSet() => iterable.toSet();
-
- @override
- int get length => iterable.length;
-
- @override
- bool get isEmpty => iterable.isEmpty;
-
- @override
- bool get isNotEmpty => iterable.isNotEmpty;
-
- @override
- Iterable<E> take(int n) => iterable.take(n);
-
- @override
- Iterable<E> takeWhile(bool test(E value)) => iterable.takeWhile(test);
-
- @override
- Iterable<E> skip(int n) => iterable.skip(n);
-
- @override
- Iterable<E> skipWhile(bool test(E value)) => iterable.skipWhile(test);
-
- @override
- E get first => iterable.first;
-
- @override
- E get last => iterable.last;
-
- @override
- E get single => iterable.single;
-
- @override
- E firstWhere(bool test(E element), {E orElse()}) {
- return iterable.firstWhere(test, orElse: orElse);
- }
-
- @override
- E lastWhere(bool test(E element), {E orElse()}) {
- return iterable.lastWhere(test, orElse: orElse);
- }
-
- @override
- E singleWhere(bool test(E element), {E orElse()}) =>
- iterable.singleWhere(test, orElse: orElse);
-
- @override
- E elementAt(int index) => iterable.elementAt(index);
-
- @override
- Iterable<E> followedBy(Iterable<E> other) => iterable.followedBy(other);
-
- @override
- Iterable<T> whereType<T>() => iterable.whereType<T>();
-
- @override
- String toString() => iterable.toString();
-}
-
-class DebugList<E> extends DebugIterable<E> implements List<E> {
- DebugCallback addCallback;
- DebugCallback addAllCallback;
-
- DebugList(List<E> list, {this.addCallback, this.addAllCallback})
- : super(list);
-
- List<E> get list => iterable;
-
- @override
- List<R> cast<R>() => List.castFrom<E, R>(this);
- @override
- List<E> operator +(List<E> other) => list + other;
-
- @override
- E operator [](int index) => list[index];
-
- @override
- void operator []=(int index, E value) {
- list[index] = value;
- }
-
- @override
- void set first(E element) {
- list.first = element;
- }
-
- @override
- void set last(E element) {
- list.last = element;
- }
-
- @override
- int get length => list.length;
-
- @override
- void set length(int newLength) {
- list.length = newLength;
- }
-
- @override
- void add(E value) {
- if (addCallback != null) {
- addCallback('add', value, null);
- }
- list.add(value);
- }
-
- @override
- void addAll(Iterable<E> iterable) {
- if (addAllCallback != null) {
- addAllCallback('addAll', iterable, null);
- }
- list.addAll(iterable);
- }
-
- @override
- Iterable<E> get reversed => list.reversed;
-
- @override
- void sort([int compare(E a, E b)]) => list.sort(compare);
-
- @override
- void shuffle([random]) => list.shuffle(random);
-
- @override
- int indexOf(E element, [int start = 0]) => list.indexOf(element, start);
-
- @override
- int indexWhere(bool test(E element), [int start = 0]) =>
- list.indexWhere(test, start);
-
- @override
- int lastIndexOf(E element, [int start]) => list.lastIndexOf(element, start);
-
- @override
- int lastIndexWhere(bool test(E element), [int start]) =>
- list.lastIndexWhere(test, start);
-
- @override
- void clear() => list.clear();
-
- @override
- void insert(int index, E element) => list.insert(index, element);
-
- @override
- void insertAll(int index, Iterable<E> iterable) {
- list.insertAll(index, iterable);
- }
-
- @override
- void setAll(int index, Iterable<E> iterable) => list.setAll(index, iterable);
-
- @override
- bool remove(Object value) => list.remove(value);
-
- @override
- E removeAt(int index) => list.removeAt(index);
-
- @override
- E removeLast() => list.removeLast();
-
- @override
- void removeWhere(bool test(E element)) => list.removeWhere(test);
-
- @override
- void retainWhere(bool test(E element)) => list.retainWhere(test);
-
- @override
- List<E> sublist(int start, [int end]) => list.sublist(start, end);
-
- @override
- Iterable<E> getRange(int start, int end) => list.getRange(start, end);
-
- @override
- void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
- list.setRange(start, end, iterable, skipCount);
- }
-
- @override
- void removeRange(int start, int end) {
- list.removeRange(start, end);
- }
-
- @override
- void fillRange(int start, int end, [E fillValue]) {
- list.fillRange(start, end, fillValue);
- }
-
- @override
- void replaceRange(int start, int end, Iterable<E> replacement) {
- list.replaceRange(start, end, replacement);
- }
-
- @override
- Map<int, E> asMap() => list.asMap();
-}
-
-class DebugSet<E> extends DebugIterable<E> implements Set<E> {
- DebugCallback addCallback;
-
- DebugSet(Set<E> set, {this.addCallback}) : super(set);
-
- Set<E> get set => iterable;
-
- @override
- Set<R> cast<R>() => Set.castFrom<E, R>(this);
- @override
- bool contains(Object value) => set.contains(value);
-
- @override
- bool add(E value) {
- if (addCallback != null) {
- addCallback('add', value, null);
- }
- return set.add(value);
- }
-
- @override
- void addAll(Iterable<E> elements) {
- elements.forEach(add);
- }
-
- @override
- bool remove(Object value) => set.remove(value);
-
- @override
- E lookup(Object object) => set.lookup(object);
-
- @override
- void removeAll(Iterable<Object> elements) => set.removeAll(elements);
-
- @override
- void retainAll(Iterable<Object> elements) => set.retainAll(elements);
-
- @override
- void removeWhere(bool test(E element)) => set.removeWhere(test);
-
- @override
- void retainWhere(bool test(E element)) => set.retainWhere(test);
-
- @override
- bool containsAll(Iterable<Object> other) => set.containsAll(other);
-
- @override
- Set<E> intersection(Set<Object> other) => set.intersection(other);
-
- @override
- Set<E> union(Set<E> other) => set.union(other);
-
- @override
- Set<E> difference(Set<Object> other) => set.difference(other);
-
- @override
- void clear() => set.clear();
-
- @override
- Set<E> toSet() => set.toSet();
-}
-
-/// Throws an exception if the runtime type of [object] is not in
-/// [runtimeTypes].
-///
-/// Use this to gradually build the set of actual runtime values of [object]
-/// at the call site by running test programs and adding to [runtimeTypes] when
-/// new type are found.
-void assertType(String name, List<String> runtimeTypes, var object,
- {bool showObjects = false}) {
- String runtimeType = '${object.runtimeType}';
- if (runtimeTypes != null && runtimeTypes.contains(runtimeType)) return;
- throw '$name: $runtimeType'
- '${showObjects ? ' ($object)' : ''}';
-}
-
-/// Callback for the [addCallback] of [DebugMap] that throws an exception if
-/// the runtime type of key/value pairs are not in [runtimeTypes].
-///
-/// Use this to gradually build the set of actual runtime values of key/value
-/// pairs of a map by running test programs and adding to [runtimeTypes] when
-/// new type are found.
-class MapTypeAsserter {
- final String name;
- final Map<String, List<String>> runtimeTypes;
- final bool showObjects;
-
- const MapTypeAsserter(this.name, this.runtimeTypes,
- {bool this.showObjects = false});
-
- void call(String methodName, var key, var value) {
- check(key, value, '$methodName: ');
- }
-
- void check(var key, var value, [String text = '']) {
- String keyType = '${key.runtimeType}';
- String valueType = '${value.runtimeType}';
- List<String> valuesTypes = runtimeTypes[keyType];
- if (valuesTypes != null && valuesTypes.contains(valueType)) return;
- throw '$name: $text$keyType => $valueType'
- '${showObjects ? ' ($key => $value)' : ''}';
- }
-}
-
-/// Callback for the [addCallback] of [DebugSet] or [DebugList] that throws an
-/// exception if the runtime type of the elements are not in [runtimeTypes].
-///
-/// Use this to gradually build the set of actual runtime values of the elements
-/// of a collection by running test programs and adding to [runtimeTypes] when
-/// new type are found.
-class CollectionTypeAsserter {
- final String name;
- final List<String> runtimeTypes;
- final bool showObjects;
-
- const CollectionTypeAsserter(this.name, this.runtimeTypes,
- {bool this.showObjects = false});
-
- void call(String methodName, var element, _) {
- check(element, '$methodName: ');
- }
-
- void check(var element, [String text = '']) {
- String elementType = '${element.runtimeType}';
- if (runtimeTypes.contains(elementType)) return;
- throw '$name: $text$elementType'
- '${showObjects ? ' ($element)' : ''}';
- }
-}
diff --git a/pkg/compiler/lib/src/helpers/expensive_map.dart b/pkg/compiler/lib/src/helpers/expensive_map.dart
deleted file mode 100644
index 3161d64..0000000
--- a/pkg/compiler/lib/src/helpers/expensive_map.dart
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:collection";
-
-/// The expensive map is a data structure useful for tracking down
-/// excessive memory usage due to large maps. It acts as an ordinary
-/// hash map, but it uses 10 times more memory (by default).
-class ExpensiveMap<K, V> extends MapBase<K, V> {
- final List _maps;
-
- ExpensiveMap([int copies = 10]) : _maps = List.filled(copies, null) {
- assert(copies > 0);
- for (int i = 0; i < _maps.length; i++) {
- _maps[i] = Map<K, V>();
- }
- }
-
- @override
- int get length => _maps[0].length;
- @override
- bool get isEmpty => _maps[0].isEmpty;
- @override
- bool get isNotEmpty => _maps[0].isNotEmpty;
-
- @override
- Iterable<K> get keys => _maps[0].keys;
- @override
- Iterable<V> get values => _maps[0].values;
-
- @override
- bool containsKey(Object key) => _maps[0].containsKey(key);
- @override
- bool containsValue(Object value) => _maps[0].containsValue(value);
-
- @override
- V operator [](Object key) => _maps[0][key];
-
- @override
- void forEach(void action(K key, V value)) {
- _maps[0].forEach(action);
- }
-
- @override
- void operator []=(K key, V value) {
- for (int i = 0; i < _maps.length; i++) {
- _maps[i][key] = value;
- }
- }
-
- @override
- V putIfAbsent(K key, V ifAbsent()) {
- if (containsKey(key)) return this[key];
- V value = ifAbsent();
- this[key] = value;
- return value;
- }
-
- @override
- void addAll(Map<K, V> other) {
- for (int i = 0; i < _maps.length; i++) {
- _maps[i].addAll(other);
- }
- }
-
- @override
- V remove(Object key) {
- V result = _maps[0].remove(key);
- for (int i = 1; i < _maps.length; i++) {
- _maps[i].remove(key);
- }
- return result;
- }
-
- @override
- void clear() {
- for (int i = 0; i < _maps.length; i++) {
- _maps[i].clear();
- }
- }
-
- @override
- Map<KR, VR> cast<KR, VR>() => Map.castFrom<K, V, KR, VR>(this);
- @override
- Iterable<MapEntry<K, V>> get entries => _maps[0].entries;
-
- @override
- void addEntries(Iterable<MapEntry<K, V>> entries) {
- for (int i = 0; i < _maps.length; i++) {
- _maps[i].addEntries(entries);
- }
- }
-
- @override
- Map<KR, VR> map<KR, VR>(MapEntry<KR, VR> transform(K key, V value)) =>
- _maps[0].map(transform);
-
- @override
- V update(K key, V update(V value), {V ifAbsent()}) {
- V result;
- for (int i = 0; i < _maps.length; i++) {
- result = _maps[i].update(key, update, ifAbsent: ifAbsent);
- }
- return result;
- }
-
- @override
- void updateAll(V update(K key, V value)) {
- for (int i = 0; i < _maps.length; i++) {
- _maps[i].updateAll(update);
- }
- }
-
- @override
- void removeWhere(bool test(K key, V value)) {
- for (int i = 0; i < _maps.length; i++) {
- _maps[i].removeWhere(test);
- }
- }
-
- @override
- String toString() => "expensive(${_maps[0]}x${_maps.length})";
-}
diff --git a/pkg/compiler/lib/src/helpers/expensive_set.dart b/pkg/compiler/lib/src/helpers/expensive_set.dart
deleted file mode 100644
index 80163cd..0000000
--- a/pkg/compiler/lib/src/helpers/expensive_set.dart
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:collection';
-
-/// The expensive set is a data structure useful for tracking down
-/// excessive memory usage due to large sets. It acts as an ordinary
-/// hash set, but it uses 10 times more memory (by default).
-class ExpensiveSet<E> extends SetBase<E> {
- final List _sets;
-
- ExpensiveSet([int copies = 10]) : _sets = List.filled(copies, null) {
- assert(copies > 0);
- for (int i = 0; i < _sets.length; i++) {
- _sets[i] = Set<E>();
- }
- }
-
- @override
- int get length => _sets[0].length;
- @override
- bool get isEmpty => _sets[0].isEmpty;
- @override
- bool get isNotEmpty => _sets[0].isNotEmpty;
-
- @override
- Iterator<E> get iterator => _sets[0].iterator;
-
- @override
- bool contains(Object object) => _sets[0].contains(object);
- @override
- E lookup(Object object) => _sets[0].lookup(object);
-
- @override
- void forEach(void action(E element)) {
- _sets[0].forEach(action);
- }
-
- @override
- bool add(E element) {
- bool result = _sets[0].add(element);
- for (int i = 1; i < _sets.length; i++) {
- _sets[i].add(element);
- }
- return result;
- }
-
- @override
- void addAll(Iterable<E> objects) {
- for (E each in objects) {
- add(each);
- }
- }
-
- @override
- bool remove(Object object) {
- bool result = _sets[0].remove(object);
- for (int i = 1; i < _sets.length; i++) {
- _sets[i].remove(object);
- }
- return result;
- }
-
- @override
- void clear() {
- for (int i = 0; i < _sets.length; i++) {
- _sets[i].clear();
- }
- }
-
- @override
- void removeAll(Iterable<Object> objectsToRemove) {
- for (var each in objectsToRemove) {
- remove(each);
- }
- }
-
- @override
- void removeWhere(bool test(E element)) {
- removeAll(this.toList().where((e) => test(e)));
- }
-
- @override
- void retainWhere(bool test(E element)) {
- removeAll(toList().where((e) => !test(e)));
- }
-
- @override
- bool containsAll(Iterable<Object> other) {
- for (Object object in other) {
- if (!this.contains(object)) return false;
- }
- return true;
- }
-
- Set _newSet() => ExpensiveSet(_sets.length);
-
- @override
- Set<E> intersection(Set<Object> other) {
- Set<E> result = _newSet();
- if (other.length < this.length) {
- for (var element in other) {
- if (this.contains(element)) result.add(element);
- }
- } else {
- for (E element in this) {
- if (other.contains(element)) result.add(element);
- }
- }
- return result;
- }
-
- @override
- Set<E> union(Set<E> other) {
- return _newSet()
- ..addAll(this)
- ..addAll(other);
- }
-
- @override
- Set<E> difference(Set<Object> other) {
- Set<E> result = _newSet();
- for (E element in this) {
- if (!other.contains(element)) result.add(element);
- }
- return result;
- }
-
- @override
- void retainAll(Iterable objectsToRetain) {
- Set retainSet;
- if (objectsToRetain is Set) {
- retainSet = objectsToRetain;
- } else {
- retainSet = objectsToRetain.toSet();
- }
- retainWhere(retainSet.contains);
- }
-
- @override
- Set<E> toSet() {
- var result = ExpensiveSet<E>(_sets.length);
- for (int i = 0; i < _sets.length; i++) {
- result._sets[i] = _sets[i].toSet();
- }
- return result;
- }
-
- @override
- String toString() => "expensive(${_sets[0]}x${_sets.length})";
-}
diff --git a/pkg/compiler/lib/src/helpers/helpers.dart b/pkg/compiler/lib/src/helpers/helpers.dart
deleted file mode 100644
index 4661c1f..0000000
--- a/pkg/compiler/lib/src/helpers/helpers.dart
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright (c) 2014, 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 for debugging helpers. The unittest analyze_unused_test checks that
-/// the helper are not used in production code.
-
-library dart2js.helpers;
-
-import 'package:kernel/text/indentation.dart' show Indentation;
-
-import '../common.dart';
-import '../diagnostics/invariant.dart' show DEBUG_MODE;
-
-export 'debug_collection.dart';
-export 'expensive_map.dart';
-export 'expensive_set.dart';
-export 'stats.dart';
-export 'trace.dart';
-export 'track_map.dart';
-
-/// Global flag to enable [debugPrint]. This should always be `true` by default
-/// and be set to `false` as a means to temporarily turn off all debugging
-/// printouts.
-const bool DEBUG_PRINT_ENABLED = true;
-
-/// Enables debug mode.
-///
-/// Sets the [DEBUG_MODE] to `true`.
-void enableDebugMode() {
- DEBUG_MODE = true;
-}
-
-class _DebugIndentation extends Indentation {
- @override
- final String indentationUnit = " ";
-}
-
-_DebugIndentation _indentation = _DebugIndentation();
-
-/// Function signature of [debugPrint].
-typedef DebugPrint = Function(dynamic s);
-
-/// If [DEBUG_PRINT_ENABLED] is `true` print [s] using the current indentation.
-DebugPrint get debugPrint {
- enableDebugMode();
- // TODO(johnniwinther): Maybe disable debug mode after the call.
- return _debugPrint;
-}
-
-/// Implementation of [debugPrint].
-_debugPrint(s) {
- if (DEBUG_PRINT_ENABLED) print('${_indentation.indentation}$s');
-}
-
-/// Function signature of [debugWrapPrint].
-typedef DebugWrapPrint = Function(dynamic s, Function() f);
-
-/// Wraps the call to [f] with a print of 'start:$s' and 'end:$s' incrementing
-/// the current indentation used by [debugPrint] during the execution of [f].
-///
-/// Use this to get a tree-like debug printout for nested calls.
-DebugWrapPrint get debugWrapPrint {
- enableDebugMode();
- return _debugWrapPrint;
-}
-
-/// Implementation of [debugWrapPrint].
-_debugWrapPrint(s, f()) {
- debugPrint('start:$s');
- var result = _indentation.indentBlock(f);
- debugPrint('end:$s');
- return result;
-}
-
-/// Dummy method to mark breakpoints.
-debugBreak() {
- enableDebugMode();
-}
-
-/// Function signature of [reportHere].
-typedef ReportHere = Function(
- DiagnosticReporter reporter, Spannable node, String debugMessage);
-
-/// Print a message with a source location.
-ReportHere get reportHere {
- enableDebugMode();
- return _reportHere;
-}
-
-/// Implementation of [reportHere]
-_reportHere(DiagnosticReporter reporter, Spannable node, String debugMessage) {
- // ignore: deprecated_member_use_from_same_package
- reporter.reportInfoMessage(
- node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
-}
-
-/// Set of tracked objects used by [track] and [ifTracked].
-var _trackedObjects = Set<Object>();
-
-/// Global default value for the `printTrace` option of [track] and [ifTracked].
-bool trackWithTrace = false;
-
-/// If [doTrack] is `true`, add [object] to the set of tracked objects.
-///
-/// If tracked, [message] is printed along the hash code and toString of
-/// [object]. If [printTrace] is `true` a trace printed additionally.
-/// If [printTrace] is `null`, [trackWithTrace] determines whether a trace is
-/// printed.
-///
-/// [object] is returned as the result of the method.
-track(bool doTrack, Object object, String message, {bool printTrace}) {
- if (!doTrack) return object;
- _trackedObjects.add(object);
- String msg = 'track: ${object.hashCode}:$object:$message';
- if (printTrace == null) printTrace = trackWithTrace;
- if (printTrace) {
- trace(msg);
- } else {
- debugPrint(msg);
- }
- return object;
-}
-
-/// Returns `true` if [object] is in the set of tracked objects.
-///
-/// If [message] is provided it is printed along the hash code and toString of
-/// [object]. If [printTrace] is `true` a trace printed additionally. If
-/// [printTrace] is `null`, [trackWithTrace] determines whether a trace is
-/// printed.
-bool ifTracked(Object object, {String message, bool printTrace}) {
- if (_trackedObjects.contains(object)) {
- if (message != null) {
- String msg = 'tracked: ${object.hashCode}:$object:$message';
- if (printTrace == null) printTrace = trackWithTrace;
- if (printTrace) {
- trace(msg);
- } else {
- debugPrint(msg);
- }
- }
- return true;
- }
- return false;
-}
diff --git a/pkg/compiler/lib/src/helpers/stats.dart b/pkg/compiler/lib/src/helpers/stats.dart
deleted file mode 100644
index 3459d74..0000000
--- a/pkg/compiler/lib/src/helpers/stats.dart
+++ /dev/null
@@ -1,813 +0,0 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async' show EventSink;
-import 'dart:collection';
-import 'dart:convert';
-
-import 'package:kernel/text/indentation.dart' show Indentation;
-
-import '../../compiler.dart';
-import '../common.dart';
-import '../compiler.dart' show Compiler;
-import '../util/util.dart';
-
-// Helper methods for statistics.
-
-/// Current stats collector. Use [enableStatsOutput] to enable recording of
-/// stats.
-Stats get stats {
- enableDebugMode();
- if (_stats == null) {
- _stats = const Stats();
- }
- return _stats;
-}
-
-Stats _stats;
-
-/// Enable recording of stats. Use [Stats.dumpStats] to output the record stats.
-///
-/// Pass the [outputProvider] of [Compiler] to generate stats into a separate
-/// file using [name] and [extension] for the filename. If omitted, stats are
-/// printed on standard out.
-///
-/// If [xml] is `true`, stats output is formatted as XML with a default
-/// extension of 'xml', otherwise the output is indented text with a default
-/// extension of 'log'.
-void enableStatsOutput(
- {CompilerOutputProvider outputProvider,
- bool xml = true,
- String name = 'stats',
- String extension,
- int examples = 10}) {
- if (_stats != null) {
- throw StateError('Stats have already been initialized.');
- }
- enableDebugMode();
-
- StatsOutput output;
- if (outputProvider != null) {
- if (extension == null) {
- extension = xml ? 'xml' : 'log';
- }
- output = SinkOutput(outputProvider(name, extension));
- } else {
- output = const DebugOutput();
- }
- StatsPrinter printer;
- if (xml) {
- printer = XMLPrinter(output: output, examples: examples);
- } else {
- printer = ConsolePrinter(output: output, examples: examples);
- }
- _stats = ActiveStats(printer);
-}
-
-/// Interface for gathering and display of statistical information.
-/// This class serves as the noop collector.
-class Stats {
- const Stats();
-
- /// Registers [key], [value] pair in the map [id]. If [fromExisting] is
- /// non-null and [key] already exists, the value associated with [key] will
- /// be the return value of [fromExisting] when called with the existing value.
- ///
- /// The recorded information is not dumped automatically.
- void recordMap(id, key, value, {fromExisting(value)}) {}
-
- /// Returns the map [id] recorded with [recordMap].
- Map getMap(id) => const {};
-
- /// Registers [element] as an element of the list [id]. If provided, [data]
- /// provides additional data for [element].
- ///
- /// The recorded information is dumped automatically on call to [dumpStats].
- ///
- /// Example:
- /// Calling [recordElement] like this:
- /// recordElement('foo', 'a', data: 'first-a-data');
- /// recordElement('foo', 'a', data: 'second-a-data');
- /// recordElement('foo', 'b');
- /// recordElement('bar', 'a', data: 'third-a-data');
- /// recordElement('bar', 'c');
- /// will result in a dump like this:
- /// foo: 2
- /// value=a data=second-a-data
- /// b
- /// bar: 2
- /// value=a data=third-a-data
- /// c
- ///
- void recordElement(id, element, {data}) {}
-
- /// Returns the list [id] recorded with [recordElement].
- Iterable getList(String id) => const [];
-
- /// Registers [value] as an occurrence of [id]. If passed, [example] provides
- /// an example data of the occurrence of [value].
- ///
- /// The recorded information is dumped automatically on call to [dumpStats].
- ///
- /// Example:
- /// Calling [recordFrequency] like this:
- /// recordFrequency('foo', 'a', 'first-a-data');
- /// recordFrequency('foo', 'a', 'second-a-data');
- /// recordFrequency('bar', 'b', 'first-b-data');
- /// recordFrequency('foo', 'c');
- /// recordFrequency('bar', 'b');
- /// will result in a dump like this:
- /// foo:
- /// a: 2
- /// first-a-data
- /// second-a-data
- /// c: 1
- /// bar:
- /// b: 2
- /// first-b-data
- ///
- void recordFrequency(id, value, [example]) {}
-
- /// For each key/value pair in [map] the elements in the value are registered
- /// as examples of occurrences of the key in [id].
- void recordFrequencies(id, Map<dynamic, Iterable> map) {}
-
- /// Returns the examples given for the occurrence of [value] for [id].
- Iterable recordedFrequencies(id, value) => const [];
-
- /// Increases the counter [id] by 1. If provided, [example] is used as an
- /// example of the count and [data] provides additional information for
- /// [example].
- ///
- /// The recorded information is dumped automatically on call to [dumpStats].
- ///
- /// Example:
- /// Calling [recordCounter] like this:
- /// recordCounter('foo', 'a');
- /// recordCounter('foo', 'a');
- /// recordCounter('foo', 'b');
- /// recordCounter('bar', 'c', 'first-c-data');
- /// recordCounter('bar', 'c', 'second-c-data');
- /// recordCounter('bar', 'd');
- /// recordCounter('bar', 'd');
- /// recordCounter('baz');
- /// recordCounter('baz');
- /// will result in a dump like this:
- /// foo: 3
- /// count=2 example=a
- /// count=1 example=b
- /// bar: 4
- /// count=2 examples=2
- /// c:
- /// first-c-data
- /// second-c-data
- /// d
- /// baz: 2
- ///
- void recordCounter(id, [example, data]) {}
-
- /// Records the current stack trace under the key [id]. Only every
- /// [sampleFrequency] call with the same id is recorded, and if omitted
- /// [stackTraceSampleFrequency] is used.
- void recordTrace(id, {int sampleFrequency}) {}
-
- /// The default sample frequency used for recording stack traces.
- int get stackTraceSampleFrequency => 0;
-
- /// Set the default sample frequency used for recording stack traces.
- void set stackTraceSampleFrequency(int value) {}
-
- /// Dumps the stats for the recorded frequencies, sets, and counters. If
- /// provided [beforeClose] is called before closing the dump output. This
- /// can be used to include correlations on the collected data through
- /// [dumpCorrelation].
- void dumpStats({void beforeClose()}) {}
-
- /// Prints the correlation between the elements of [a] and [b].
- ///
- /// Three sets are output using [idA] and [idB] as labels for the elements
- /// [a] and [b]:
- ///
- /// 'idA && idB' lists the elements both in [a] and [b],
- /// '!idA && idB' lists the elements not in [a] but in [b], and
- /// 'idA && !idB' lists the elements in [a] but not in [b].
- ///
- /// If [dataA] and/or [dataB] are provided, additional information on the
- /// elements are looked up in [dataA] or [dataB] using [dataA] as the primary
- /// source.
- void dumpCorrelation(idA, Iterable a, idB, Iterable b,
- {Map dataA, Map dataB}) {}
-}
-
-/// Interface for printing output data.
-///
-/// This class serves as the disabled output.
-class StatsOutput {
- const StatsOutput();
-
- /// Print [text] as on a separate line.
- void println(String text) {}
-}
-
-/// Output to the [debugPrint] method.
-class DebugOutput implements StatsOutput {
- const DebugOutput();
-
- @override
- void println(String text) => debugPrint(text);
-}
-
-/// Output to an [EventSink]. Used to output to a file through the
-/// [CompilerOutputProvider].
-class SinkOutput implements StatsOutput {
- EventSink<String> sink;
-
- SinkOutput(this.sink);
-
- @override
- void println(String text) {
- sink.add(text);
- sink.add('\n');
- }
-}
-
-/// Interface for printing stats collected in [Stats].
-abstract class StatsPrinter {
- /// The number of examples printer. If `null` all examples are printed.
- int get examples => 0;
-
- /// Start a group [id].
- void start(String id) {}
-
- /// Create a group [id] with content created by [createGroupContent].
- void group(String id, void createGroupContent()) {
- start(id);
- createGroupContent();
- end(id);
- }
-
- /// End a group [id].
- void end(String id) {}
-
- /// Start a stat entry for [id] with additional [data].
- void open(String id, [Map<String, dynamic> data = const {}]) {}
-
- /// Create a stat entry for [id] with additional [data] and content created by
- /// [createChildContent].
- void child(String id,
- [Map<String, dynamic> data = const {}, void createChildContent()]) {
- open(id, data);
- if (createChildContent != null) createChildContent();
- close(id);
- }
-
- /// End a stat entry for [id].
- void close(String id) {}
-
- /// Starts a group of additional information.
- void beginExtra() {}
-
- /// Starts a group of additional information.
- void endExtra() {}
-}
-
-/// Abstract base class for [ConsolePrinter] and [XMLPrinter].
-abstract class BasePrinter extends StatsPrinter with Indentation {
- @override
- final int examples;
- final StatsOutput output;
-
- BasePrinter({this.output = const DebugOutput(), this.examples = 10}) {
- indentationUnit = " ";
- }
-}
-
-/// [StatsPrinter] that displays stats in console lines.
-class ConsolePrinter extends BasePrinter {
- int extraLevel = 0;
-
- ConsolePrinter({StatsOutput output = const DebugOutput(), int examples = 10})
- : super(output: output, examples: examples);
-
- @override
- void open(String id, [Map<String, dynamic> data = const {}]) {
- if (extraLevel > 0) return;
-
- StringBuffer sb = StringBuffer();
- sb.write(indentation);
- String space = '';
- if (data['title'] != null) {
- sb.write('${data['title']}:');
- space = ' ';
- data.remove('title');
- } else if (data['name'] != null) {
- sb.write('${data['name']}');
- space = ' ';
- data.remove('name');
- }
- Iterable nonNullValues = data.values.where((v) => v != null);
- if (nonNullValues.length == 1) {
- sb.write('$space${nonNullValues.first}');
- } else {
- data.forEach((key, value) {
- sb.write('$space$key=$value');
- space = ' ';
- });
- }
- output.println(sb.toString());
- indentMore();
- }
-
- @override
- void close(String id) {
- if (extraLevel > 0) return;
-
- indentLess();
- }
-
- @override
- void beginExtra() {
- if (extraLevel == 0) output.println('$indentation...');
- extraLevel++;
- }
-
- @override
- void endExtra() {
- extraLevel--;
- }
-}
-
-/// [StatsPrinter] that displays stats in XML format.
-class XMLPrinter extends BasePrinter {
- static const HtmlEscape escape = HtmlEscape();
- bool opened = false;
-
- XMLPrinter({output = const DebugOutput(), int examples = 10})
- : super(output: output, examples: examples);
-
- @override
- void start(String id) {
- if (!opened) {
- output.println('<?xml version="1.0" encoding="UTF-8"?>');
- opened = true;
- }
- open(id);
- }
-
- @override
- void end(String id) {
- close(id);
- }
-
- @override
- void open(String id, [Map<String, dynamic> data = const {}]) {
- StringBuffer sb = StringBuffer();
- sb.write(indentation);
- sb.write('<$id');
- data.forEach((key, value) {
- if (value != null) {
- sb.write(' $key="${escape.convert('$value')}"');
- }
- });
- sb.write('>');
- output.println(sb.toString());
- indentMore();
- }
-
- @override
- void close(String id) {
- indentLess();
- output.println('${indentation}</$id>');
- }
-
- @override
- void beginExtra() {
- open('extra');
- }
-
- @override
- void endExtra() {
- close('extra');
- }
-}
-
-/// A node in a stack trace tree used to store and organize stack traces by
-/// common prefixes.
-class _StackTraceNode implements Comparable<_StackTraceNode> {
- int count;
- List<StackTraceLine> commonPrefix;
- List<_StackTraceNode> subtraces;
-
- _StackTraceNode(this.commonPrefix, this.count, this.subtraces);
-
- _StackTraceNode.root() : this([], 0, []);
-
- _StackTraceNode.leaf(StackTraceLines stackTrace)
- : this(stackTrace.lines, 1, const []);
-
- _StackTraceNode.node(List<StackTraceLine> commonPrefix, _StackTraceNode first,
- _StackTraceNode second)
- : this(commonPrefix, first.count + second.count, [first, second]);
-
- void add(StackTraceLines stackTrace) {
- count++;
- if (!stackTrace.lines.isEmpty) {
- addSubtrace(stackTrace);
- }
- }
-
- void addSubtrace(StackTraceLines stackTrace) {
- List<StackTraceLine> lines = stackTrace.lines;
- for (_StackTraceNode subtrace in subtraces) {
- int commonPrefixLength =
- longestCommonPrefixLength(subtrace.commonPrefix, lines);
- if (commonPrefixLength > 0) {
- stackTrace = stackTrace.subtrace(commonPrefixLength);
- if (commonPrefixLength == subtrace.commonPrefix.length) {
- subtrace.add(stackTrace);
- } else {
- subtrace.commonPrefix =
- subtrace.commonPrefix.sublist(commonPrefixLength);
- subtraces.remove(subtrace);
- subtraces.add(_StackTraceNode.node(
- lines.sublist(0, commonPrefixLength),
- subtrace,
- _StackTraceNode.leaf(stackTrace)));
- }
- return;
- }
- }
- subtraces.add(_StackTraceNode.leaf(stackTrace));
- }
-
- void dumpTraces(StatsPrinter printer) {
- printer.open('trace', {'count': count, 'line': commonPrefix.first});
- if (commonPrefix.length > 1) {
- for (StackTraceLine line in commonPrefix.skip(1)) {
- printer.child('trace', {'line': line});
- }
- }
- dumpSubtraces(printer);
- printer.close('trace');
- }
-
- void dumpSubtraces(StatsPrinter printer) {
- if (!subtraces.isEmpty) {
- subtraces.sort();
- for (_StackTraceNode step in subtraces) {
- step.dumpTraces(printer);
- }
- }
- }
-
- @override
- int compareTo(_StackTraceNode other) {
- // Sorts in decreasing count order.
- return other.count - count;
- }
-
- void printOn(StringBuffer sb, String indentation) {
- String countText = '$indentation$count ';
- sb.write(countText);
- sb.write('\n');
- indentation = ''.padLeft(countText.length, ' ');
- if (commonPrefix != null) {
- int index = 0;
- for (StackTraceLine line in commonPrefix) {
- sb.write(indentation);
- if (index > 1) {
- sb.write('...\n');
- break;
- }
- sb.write(line);
- sb.write('\n');
- index++;
- }
- }
- subtraces.sort();
- for (_StackTraceNode subtrace in subtraces) {
- subtrace.printOn(sb, indentation);
- }
- }
-
- @override
- String toString() {
- StringBuffer sb = StringBuffer();
- printOn(sb, '');
- return sb.toString();
- }
-}
-
-class _StackTraceTree extends _StackTraceNode {
- final id;
- int totalCount = 0;
- final int sampleFrequency;
-
- _StackTraceTree(this.id, this.sampleFrequency) : super.root();
-
- @override
- void dumpTraces(StatsPrinter printer) {
- printer.open('trace', {
- 'id': id,
- 'totalCount': totalCount,
- 'sampleFrequency': sampleFrequency
- });
- dumpSubtraces(printer);
- printer.close('trace');
- }
-
- void sample() {
- if (totalCount++ % sampleFrequency == 0) {
- add(stackTrace(offset: 3));
- }
- }
-}
-
-/// Actual implementation of [Stats].
-class ActiveStats implements Stats {
- final StatsPrinter printer;
- Map<dynamic, Map> maps = {};
- Map<dynamic, Map<dynamic, List>> frequencyMaps = {};
- Map<dynamic, Map> setsMap = {};
- Map<dynamic, Map<dynamic, List>> countersMap = {};
- Map<dynamic, _StackTraceTree> traceMap = {};
- @override
- int stackTraceSampleFrequency = 1;
-
- ActiveStats(StatsPrinter this.printer);
-
- @override
- void recordMap(id, key, value, {fromExisting(value)}) {
- Map map = maps.putIfAbsent(id, () => {});
- if (fromExisting != null && map.containsKey(key)) {
- map[key] = fromExisting(map[key]);
- } else {
- map[key] = value;
- }
- }
-
- @override
- Map getMap(key) {
- return maps[key];
- }
-
- @override
- void recordFrequency(id, value, [example]) {
- Map<dynamic, List> map = frequencyMaps.putIfAbsent(id, () => {});
- map.putIfAbsent(value, () => []);
- map[value].add(example);
- }
-
- @override
- void recordFrequencies(id, Map<dynamic, Iterable> frequencyMap) {
- Map<dynamic, List> map = frequencyMaps.putIfAbsent(id, () => {});
- frequencyMap.forEach((value, examples) {
- map.putIfAbsent(value, () => []);
- map[value].addAll(examples);
- });
- }
-
- @override
- Iterable recordedFrequencies(id, value) {
- Map<dynamic, List> map = frequencyMaps[id];
- if (map == null) return const [];
- List list = map[value];
- if (list == null) return const [];
- return list;
- }
-
- @override
- void recordCounter(id, [reason, example]) {
- Map<dynamic, List> map = countersMap.putIfAbsent(id, () => {});
- map.putIfAbsent(reason, () => []).add(example);
- }
-
- @override
- void recordElement(key, element, {data}) {
- setsMap.putIfAbsent(key, () => Map())[element] = data;
- }
-
- @override
- void recordTrace(key, {int sampleFrequency}) {
- if (sampleFrequency == null) {
- sampleFrequency = stackTraceSampleFrequency;
- }
- traceMap
- .putIfAbsent(key, () => _StackTraceTree(key, sampleFrequency))
- .sample();
- }
-
- @override
- Iterable getList(String key) {
- Map map = setsMap[key];
- if (map == null) return const [];
- return map.keys;
- }
-
- @override
- void dumpStats({void beforeClose()}) {
- printer.start('stats');
- dumpFrequencies();
- dumpSets();
- dumpCounters();
- dumpTraces();
- if (beforeClose != null) {
- beforeClose();
- }
- printer.end('stats');
- }
-
- void dumpSets() {
- printer.group('sets', () {
- setsMap.forEach((k, set) {
- dumpIterable('examples', '$k', set.keys,
- limit: printer.examples, dataMap: set);
- });
- });
- }
-
- void dumpFrequencies() {
- printer.group('frequencies', () {
- frequencyMaps.forEach((key, Map<dynamic, List> map) {
- printer.child('frequency', {'title': '$key'}, () {
- dumpFrequency(map);
- });
- });
- });
- }
-
- void dumpFrequency(Map<dynamic, Iterable> map) {
- Map sortedMap = trySortMap(map);
- sortedMap.forEach((k, list) {
- dumpIterable('examples', '$k', list, limit: printer.examples);
- });
- }
-
- void dumpCounters() {
- printer.group('counters', () {
- countersMap.keys.forEach(dumpCounter);
- });
- }
-
- void dumpCounter(id) {
- Map<dynamic, List> map = countersMap[id];
- bool hasData(example) {
- if (map == null) return false;
- List list = map[example];
- if (list == null) return false;
- return list.any((data) => data != null);
- }
-
- int count = 0;
- Map<dynamic, int> frequencyMap = {};
- map.forEach((var category, List examples) {
- if (category != null) {
- frequencyMap.putIfAbsent(category, () => 0);
- frequencyMap[category] += examples.length;
- }
- count += examples.length;
- });
- Map<int, Set> result = sortMap(inverseMap(frequencyMap), (a, b) => b - a);
- int examplesLimit = null;
- if (printer.examples != null && result.length >= printer.examples) {
- examplesLimit = 0;
- }
- int counter = 0;
- bool hasMore = false;
- printer.open('counter', {'title': '$id', 'count': count});
- result.forEach((int count, Set examples) {
- if (counter == printer.examples) {
- printer.beginExtra();
- hasMore = true;
- }
- if (examples.length == 1 &&
- (examplesLimit == 0 || !hasData(examples.first))) {
- printer.child('examples', {'count': count, 'example': examples.first});
- } else {
- printer.child('examples', {'count': count, 'examples': examples.length},
- () {
- examples.forEach((example) {
- dumpIterable('examples', '$example', map[example],
- limit: examplesLimit, includeCount: false);
- });
- });
- }
- counter++;
- });
- if (hasMore) {
- printer.endExtra();
- }
- printer.close('counter');
- }
-
- void dumpTraces() {
- printer.group('traces', () {
- traceMap.keys.forEach(dumpTrace);
- });
- }
-
- void dumpTrace(key) {
- _StackTraceTree tree = traceMap[key];
- tree.dumpTraces(printer);
- }
-
- @override
- void dumpCorrelation(keyA, Iterable a, keyB, Iterable b,
- {Map dataA, Map dataB}) {
- printer.child('correlations', {'title': '$keyA vs $keyB'}, () {
- List aAndB = a.where((e) => e != null && b.contains(e)).toList();
- List aAndNotB = a.where((e) => e != null && !b.contains(e)).toList();
- List notAandB = b.where((e) => e != null && !a.contains(e)).toList();
- dumpIterable('correlation', '$keyA && $keyB', aAndB,
- dataMap: dataA, limit: printer.examples);
- dumpIterable('correlation', '$keyA && !$keyB', aAndNotB,
- dataMap: dataA, limit: printer.examples);
- dumpIterable('correlation', '!$keyA && $keyB', notAandB,
- dataMap: dataB, limit: printer.examples);
- });
- }
-
- void dumpIterable(String tag, String title, Iterable iterable,
- {int limit, Map dataMap, bool includeCount = true}) {
- if (limit == 0) return;
-
- Map<String, dynamic> childData = {};
- Iterable nonNullIterable = iterable.where((e) => e != null);
- if (nonNullIterable.isEmpty && !includeCount) {
- childData['name'] = title;
- } else {
- childData['title'] = title;
- }
- if (includeCount) {
- childData['count'] = iterable.length;
- }
- printer.child(tag, childData, () {
- bool hasMore = false;
- int counter = 0;
- nonNullIterable.forEach((element) {
- if (counter == limit) {
- printer.beginExtra();
- hasMore = true;
- }
- var data = dataMap != null ? dataMap[element] : null;
- if (data != null) {
- printer.child('example', {'value': element, 'data': data});
- } else {
- printer.child('example', {'value': element});
- }
- counter++;
- });
- if (hasMore) {
- printer.endExtra();
- }
- });
- }
-}
-
-/// Returns a map that is an inversion of [map], where the keys are the values
-/// of [map] and the values are the set of keys in [map] that share values.
-///
-/// If [equals] and [hashCode] are provided, these are used to determine
-/// equality among the values of [map].
-///
-/// If [isValidKey] is provided, this is used to determine with a value of [map]
-/// is a potential key of the inversion map.
-Map<V, Set<K>> inverseMap<K, V>(Map<K, V> map,
- {bool equals(V key1, V key2),
- int hashCode(V key),
- bool isValidKey(V potentialKey)}) {
- Map<V, Set<K>> result = LinkedHashMap<V, Set<K>>(
- equals: equals, hashCode: hashCode, isValidKey: isValidKey);
- map.forEach((k, v) {
- if (isValidKey == null || isValidKey(v)) {
- result.putIfAbsent(v, () => Set()).add(k);
- }
- });
- return result;
-}
-
-/// Return a new map heuristically sorted by the keys of [map]. If the first
-/// key of [map] is [Comparable], the keys are sorted using [sortMap] under
-/// the assumption that all keys are [Comparable].
-/// Otherwise, the keys are sorted as string using their `toString`
-/// representation.
-Map<K, V> trySortMap<K, V>(Map<K, V> map) {
- Iterable<K> iterable = map.keys.where((K k) => k != null);
- if (iterable.isEmpty) return map;
- var key = iterable.first;
- if (key is Comparable<K>) {
- return sortMap(map);
- }
- return sortMap(map, (a, b) => '$a'.compareTo('$b'));
-}
-
-/// Returns a new map in which the keys of [map] are sorted using [compare].
-/// If [compare] is null, the keys must be [Comparable].
-Map<K, V> sortMap<K, V>(Map<K, V> map, [int compare(K a, K b)]) {
- List<K> keys = map.keys.toList();
- keys.sort(compare);
- Map<K, V> sortedMap = {};
- keys.forEach((K k) => sortedMap[k] = map[k]);
- return sortedMap;
-}
diff --git a/pkg/compiler/lib/src/helpers/trace.dart b/pkg/compiler/lib/src/helpers/trace.dart
deleted file mode 100644
index ff168df..0000000
--- a/pkg/compiler/lib/src/helpers/trace.dart
+++ /dev/null
@@ -1,349 +0,0 @@
-// Copyright (c) 2014, 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 '../common.dart';
-import '../util/util.dart';
-
-/// Function signature for [trace].
-typedef Trace = void Function(String message,
- {bool Function(String stackTrace) condition, int limit, bool throwOnPrint});
-
-/// Helper method for printing stack traces for debugging.
-///
-/// [message] is printed as the header of the stack trace.
-///
-/// If [condition] is provided, the stack trace is only printed if [condition]
-/// returns [:true:] on the stack trace text. This can be used to filter the
-/// printed stack traces based on their content. For instance only print stack
-/// traces that contain specific paths.
-///
-/// If [limit] is provided, the stack trace is limited to [limit] entries.
-///
-/// If [throwOnPrint] is `true`, [message] will be thrown after the stack trace
-/// has been printed. Together with [condition] this can be used to discover
-/// unknown call-sites in tests by filtering known call-sites and throwning
-/// otherwise.
-Trace get trace {
- enableDebugMode();
- return _trace;
-}
-
-void _trace(String message,
- {bool condition(String stackTrace), int limit, bool throwOnPrint = false}) {
- try {
- throw '';
- } catch (e, s) {
- String stackTrace;
- try {
- stackTrace = prettifyStackTrace(s,
- rangeStart: 1, rangeEnd: limit, filePrefix: stackTraceFilePrefix);
- } catch (e) {
- print(e);
- stackTrace = '$s';
- }
- if (condition != null) {
- if (!condition(stackTrace)) return;
- }
- print('$message\n$stackTrace');
- if (throwOnPrint) throw message;
- }
-}
-
-/// Creates a function to use as an `condition` argument in [trace] that filters
-/// stack traces that contains any of the [exceptions].
-traceExceptions(List<String> exceptions) {
- return (String stackTrace) => !exceptions.any(stackTrace.contains);
-}
-
-/// Function signature of [traceAndReport].
-typedef TraceAndReport = void Function(
- DiagnosticReporter reporter, Spannable node, String message,
- {bool Function(String stackTrace) condition, int limit, bool throwOnPrint});
-
-/// Calls [reportHere] and [trace] with the same message.
-TraceAndReport get traceAndReport {
- enableDebugMode();
- return _traceAndReport;
-}
-
-/// Calls [reportHere] and [trace] with the same message.
-TraceAndReport get reportAndTrace => traceAndReport;
-
-/// Implementation of [traceAndReport].
-void _traceAndReport(
- DiagnosticReporter reporter, Spannable node, String message,
- {bool condition(String stackTrace), int limit, bool throwOnPrint = false}) {
- trace(message, limit: limit, throwOnPrint: throwOnPrint,
- condition: (String stackTrace) {
- bool result = condition != null ? condition(stackTrace) : true;
- if (result) {
- reportHere(reporter, node, message);
- }
- return result;
- });
-}
-
-/// Returns the [StackTraceLines] for the current call stack.
-///
-/// Use [offset] to discard the first [offset] calls of the call stack. Defaults
-/// to `1`, that is, discard the call to [stackTrace] itself. Use [limit] to
-/// limit the length of the stack trace lines.
-StackTraceLines stackTrace({int offset = 1, int limit = null}) {
- int rangeStart = offset;
- int rangeEnd = limit == null ? null : rangeStart + limit;
- try {
- throw '';
- } catch (_, stackTrace) {
- return StackTraceLines.fromTrace(stackTrace,
- rangeStart: offset,
- rangeEnd: rangeEnd,
- filePrefix: stackTraceFilePrefix);
- }
-}
-
-/// A stack trace as a sequence of [StackTraceLine]s.
-class StackTraceLines {
- final List<StackTraceLine> lines;
- final int maxFileLength;
- final int maxLineNoLength;
- final int maxColumnNoLength;
-
- factory StackTraceLines.fromTrace(StackTrace s,
- {int rangeStart, int rangeEnd, String filePrefix, String lambda = r'?'}) {
- final RegExp indexPattern = RegExp(r'#\d+\s*');
- int index = -1;
- int maxFileLength = 0;
- int maxLineNoLength = 0;
- int maxColumnNoLength = 0;
-
- String stackTrace = '$s';
- List<StackTraceLine> lines = [];
- // Parse each line in the stack trace. The supported line formats from the
- // Dart VM are:
- // #n <method-name> (<uri>:<line-no>:<column-no>)
- // #n <method-name> (<uri>:<line-no>)
- // #n <method-name> (<uri>)
- // in which '<anonymous closure>' is the name used for an (unnamed) function
- // expression. The last case is used for async bodies.
- for (String line in stackTrace.split('\n')) {
- try {
- index++;
- if (rangeStart != null && index < rangeStart) continue;
- if (rangeEnd != null && index > rangeEnd) break;
- if (line.isEmpty) continue;
-
- // Strip index.
- line = line.replaceFirst(indexPattern, '');
- if (line == '<asynchronous suspension>') {
- lines.add(StackTraceLine(index, '', '', '', line));
- continue;
- }
-
- int leftParenPos = line.indexOf('(');
- int rightParenPos = line.indexOf(')', leftParenPos);
- int lastColon = line.lastIndexOf(':', rightParenPos);
- int nextToLastColon = line.lastIndexOf(':', lastColon - 1);
-
- String lineNo;
- String columnNo;
- if (nextToLastColon != -1) {
- lineNo = line.substring(nextToLastColon + 1, lastColon);
- columnNo = line.substring(lastColon + 1, rightParenPos);
- try {
- int.parse(columnNo);
- try {
- int.parse(lineNo);
- } on FormatException {
- // Only line number.
- lineNo = columnNo;
- columnNo = '';
- nextToLastColon = lastColon;
- }
- } on FormatException {
- // No column number nor line number.
- lineNo = '';
- columnNo = '';
- nextToLastColon = rightParenPos;
- }
- } else {
- lineNo = line.substring(lastColon + 1, rightParenPos);
- columnNo = '';
- try {
- int.parse(lineNo);
- nextToLastColon = lastColon;
- } on FormatException {
- // No column number nor line number.
- lineNo = columnNo;
- columnNo = '';
- nextToLastColon = rightParenPos;
- }
- }
-
- if (lineNo.length > maxLineNoLength) {
- maxLineNoLength = lineNo.length;
- }
- if (columnNo.length > maxColumnNoLength) {
- maxColumnNoLength = columnNo.length;
- }
-
- String file = line.substring(leftParenPos + 1, nextToLastColon);
- if (filePrefix != null && file.startsWith(filePrefix)) {
- file = file.substring(filePrefix.length);
- }
- if (file.length > maxFileLength) {
- maxFileLength = file.length;
- }
- String method = line.substring(0, leftParenPos - 1);
- if (lambda != null) {
- method = method.replaceAll('<anonymous closure>', lambda);
- }
- lines.add(StackTraceLine(index, file, lineNo, columnNo, method));
- } catch (e) {
- throw 'Error prettifying "$line": $e';
- }
- }
- return StackTraceLines.fromLines(
- lines, maxFileLength, maxLineNoLength, maxColumnNoLength);
- }
-
- StackTraceLines.fromLines(this.lines, this.maxFileLength,
- this.maxLineNoLength, this.maxColumnNoLength);
-
- StackTraceLines subtrace(int offset) {
- return StackTraceLines.fromLines(lines.sublist(offset), maxFileLength,
- maxLineNoLength, maxColumnNoLength);
- }
-
- String prettify({bool showColumnNo = false, bool showDots = true}) {
- StringBuffer sb = StringBuffer();
- bool dots = true;
- for (StackTraceLine line in lines) {
- sb.write(' ');
- line.printOn(sb,
- fileLength: maxFileLength,
- padding: showDots && dots ? ' .' : ' ',
- lineNoLength: maxLineNoLength,
- showColumnNo: showColumnNo,
- columnNoLength: maxColumnNoLength);
-
- dots = !dots;
- }
- return sb.toString();
- }
-
- @override
- String toString() {
- return prettify();
- }
-}
-
-/// A parsed line from a stack trace.
-class StackTraceLine {
- final int index;
- final String file;
- final String lineNo;
- final String columnNo;
- final String method;
-
- StackTraceLine(
- this.index, this.file, this.lineNo, this.columnNo, this.method);
-
- void printOn(StringBuffer sb,
- {String padding = ' ',
- int fileLength,
- int lineNoLength,
- int columnNoLength,
- bool showColumnNo = false}) {
- String fileText = '${file} ';
- if (fileLength != null) {
- fileText = pad(fileText, fileLength, dots: padding);
- }
- String lineNoText = lineNo;
- if (lineNoLength != null) {
- lineNoText = pad(lineNoText, lineNoLength, padLeft: true);
- }
- String columnNoText = showColumnNo ? '' : columnNo;
- if (columnNoLength != null) {
- columnNoText = ':${pad(columnNoText, columnNoLength)}';
- }
- sb.write('$fileText $lineNoText$columnNoText $method\n');
- }
-
- @override
- int get hashCode {
- return 13 * index +
- 17 * file.hashCode +
- 19 * lineNo.hashCode +
- 23 * columnNo.hashCode +
- 29 * method.hashCode;
- }
-
- @override
- bool operator ==(other) {
- if (identical(this, other)) return true;
- if (other is! StackTraceLine) return false;
- return index == other.index &&
- file == other.file &&
- lineNo == other.lineNo &&
- columnNo == other.columnNo &&
- method == other.method;
- }
-
- @override
- String toString() => "$method @ $file [$lineNo:$columnNo]";
-}
-
-// TODO(johnniwinther): Use this format for --throw-on-error.
-/// Converts the normal VM stack trace into a more compact and readable format.
-///
-/// The output format is `<file> . . . <lineNo>:<columnNo> <method>` where
-/// `<file>` is file name, `<lineNo>` is the line number, `<columnNo>` is the
-/// column number, and `<method>` is the method name.
-///
-/// If [rangeStart] and/or [rangeEnd] are provided, only the lines within the
-/// range are included.
-/// If [showColumnNo] is `false`, the `:<columnNo>` part is omitted.
-/// If [showDots] is `true`, the space between `<file>` and `<lineNo>` is padded
-/// with dots on every other line.
-/// If [filePrefix] is provided, then for every file name thats starts with
-/// [filePrefix] only the remainder is printed.
-/// If [lambda] is non-null, anonymous closures are printed as [lambda].
-String prettifyStackTrace(StackTrace stackTrace,
- {int rangeStart,
- int rangeEnd,
- bool showColumnNo = false,
- bool showDots = true,
- String filePrefix,
- String lambda = r'?'}) {
- return StackTraceLines.fromTrace(stackTrace,
- rangeStart: rangeStart,
- rangeEnd: rangeEnd,
- filePrefix: filePrefix,
- lambda: lambda)
- .prettify(showColumnNo: showColumnNo, showDots: showDots);
-}
-
-/// Pads (or truncates) [text] to the [intendedLength].
-///
-/// If [padLeft] is [:true:] the text is padding inserted to the left of [text].
-/// A repetition of the [dots] text is used for padding.
-String pad(String text, int intendedLength,
- {bool padLeft = false, String dots = ' '}) {
- if (text.length == intendedLength) return text;
- if (text.length > intendedLength) return text.substring(0, intendedLength);
- if (dots == null || dots.isEmpty) dots = ' ';
- int dotsLength = dots.length;
- StringBuffer sb = StringBuffer();
- if (!padLeft) {
- sb.write(text);
- }
- for (int index = text.length; index < intendedLength; index++) {
- int dotsIndex = index % dotsLength;
- sb.write(dots.substring(dotsIndex, dotsIndex + 1));
- }
- if (padLeft) {
- sb.write(text);
- }
- return sb.toString();
-}
diff --git a/pkg/compiler/lib/src/helpers/track_map.dart b/pkg/compiler/lib/src/helpers/track_map.dart
deleted file mode 100644
index 957d55c..0000000
--- a/pkg/compiler/lib/src/helpers/track_map.dart
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright (c) 2014, 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.
-
-/// The track map is a simple wrapper around a map that keeps track
-/// of the 'final' size of maps grouped by description. It allows
-/// determining the distribution of sizes for a specific allocation
-/// site and it can be used like this:
-///
-/// Map<String, int> map = new TrackMap<String, int>("my-map");
-///
-/// After finishing the compilaton, the histogram of track map sizes
-/// is printed but only when running in verbose mode.
-class TrackMap<K, V> implements Map<K, V> {
- final Map<K, V> _map = {};
- final List _counts;
- static final Map<String, List<int>> _countsMap = {};
-
- TrackMap._internal(this._counts);
-
- factory TrackMap(String description) {
- List counts = _countsMap.putIfAbsent(description, () => [0]);
- Map result = TrackMap<K, V>._internal(counts);
- counts[0]++;
- return result;
- }
-
- static void printHistogram() {
- _countsMap.forEach((description, counts) {
- print('$description -- ${counts.length} maps');
-
- // Count the total number of maps.
- int sum = 0;
- for (int i = 0; i < counts.length; i++) {
- sum += counts[i];
- }
- int increment = sum ~/ 10;
- int target = increment;
- int accumulated = 0;
- for (int i = 0; i < counts.length; i++) {
- accumulated += counts[i];
- if (accumulated >= target) {
- String percent = (accumulated / sum * 100).toStringAsFixed(1);
- print(' -- $percent%: length <= $i');
- target += increment;
- }
- }
- });
- }
-
- @override
- int get length => _map.length;
- @override
- bool get isEmpty => _map.isEmpty;
- @override
- bool get isNotEmpty => _map.isNotEmpty;
-
- @override
- Iterable<K> get keys => _map.keys;
- @override
- Iterable<V> get values => _map.values;
-
- @override
- bool containsKey(Object key) => _map.containsKey(key);
- @override
- bool containsValue(Object value) => _map.containsValue(value);
-
- @override
- V operator [](Object key) => _map[key];
- @override
- String toString() => _map.toString();
-
- @override
- void forEach(void action(K key, V value)) {
- _map.forEach(action);
- }
-
- @override
- void operator []=(K key, V value) {
- if (!_map.containsKey(key)) {
- _notifyLengthChanged(1);
- _map[key] = value;
- }
- }
-
- @override
- V putIfAbsent(K key, V ifAbsent()) {
- if (containsKey(key)) return this[key];
- V value = ifAbsent();
- this[key] = value;
- return value;
- }
-
- @override
- V remove(Object key) {
- if (_map.containsKey(key)) {
- _notifyLengthChanged(-1);
- }
- return _map.remove(key);
- }
-
- @override
- void addAll(Map<K, V> other) {
- other.forEach((key, value) => this[key] = value);
- }
-
- @override
- void clear() {
- _notifyLengthChanged(-_map.length);
- _map.clear();
- }
-
- @override
- Map<KR, VR> cast<KR, VR>() => _map.cast<KR, VR>();
- @override
- Iterable<MapEntry<K, V>> get entries => _map.entries;
-
- @override
- void addEntries(Iterable<MapEntry<K, V>> entries) {
- for (var entry in entries) this[entry.key] = entry.value;
- }
-
- @override
- Map<KR, VR> map<KR, VR>(MapEntry<KR, VR> transform(K key, V value)) =>
- _map.map(transform);
-
- @override
- V update(K key, V update(V value), {V ifAbsent()}) =>
- _map.update(key, update, ifAbsent: ifAbsent);
-
- @override
- void updateAll(V update(K key, V value)) {
- _map.updateAll(update);
- }
-
- @override
- void removeWhere(bool test(K key, V value)) {
- int before = _map.length;
- _map.removeWhere(test);
- _notifyLengthChanged(_map.length - before);
- }
-
- void _notifyLengthChanged(int delta) {
- int oldLength = _map.length;
- int newLength = oldLength + delta;
- _counts[oldLength]--;
- if (newLength < _counts.length) {
- _counts[newLength]++;
- } else {
- _counts.add(1);
- assert(newLength == _counts.length - 1);
- }
- }
-}
diff --git a/pkg/compiler/test/analyses/dart2js_allowed.json b/pkg/compiler/test/analyses/dart2js_allowed.json
index 15d55fd..7f34cc7 100644
--- a/pkg/compiler/test/analyses/dart2js_allowed.json
+++ b/pkg/compiler/test/analyses/dart2js_allowed.json
@@ -54,44 +54,6 @@
"pkg/compiler/lib/src/serialization/binary_sink.dart": {
"Dynamic access of 'index'.": 1
},
- "pkg/compiler/lib/src/helpers/expensive_map.dart": {
- "Dynamic access of 'length'.": 1,
- "Dynamic access of 'isEmpty'.": 1,
- "Dynamic access of 'isNotEmpty'.": 1,
- "Dynamic access of 'keys'.": 1,
- "Dynamic access of 'values'.": 1,
- "Dynamic invocation of 'containsKey'.": 1,
- "Dynamic invocation of 'containsValue'.": 1,
- "Dynamic invocation of '[]'.": 1,
- "Dynamic invocation of 'forEach'.": 1,
- "Dynamic invocation of '[]='.": 1,
- "Dynamic invocation of 'addAll'.": 1,
- "Dynamic invocation of 'remove'.": 2,
- "Dynamic invocation of 'clear'.": 1,
- "Dynamic access of 'entries'.": 1,
- "Dynamic invocation of 'addEntries'.": 1,
- "Dynamic invocation of 'map'.": 1,
- "Dynamic invocation of 'update'.": 1,
- "Dynamic invocation of 'updateAll'.": 1,
- "Dynamic invocation of 'removeWhere'.": 1
- },
- "pkg/compiler/lib/src/helpers/expensive_set.dart": {
- "Dynamic access of 'length'.": 1,
- "Dynamic access of 'isEmpty'.": 1,
- "Dynamic access of 'isNotEmpty'.": 1,
- "Dynamic access of 'iterator'.": 1,
- "Dynamic invocation of 'contains'.": 1,
- "Dynamic invocation of 'lookup'.": 1,
- "Dynamic invocation of 'forEach'.": 1,
- "Dynamic invocation of 'add'.": 2,
- "Dynamic invocation of 'remove'.": 2,
- "Dynamic invocation of 'clear'.": 1,
- "Dynamic invocation of 'toSet'.": 1
- },
- "pkg/compiler/lib/src/helpers/track_map.dart": {
- "Dynamic invocation of '-'.": 1,
- "Dynamic invocation of '+'.": 1
- },
"pkg/compiler/lib/src/util/enumset.dart": {
"Dynamic access of 'index'.": 4
},
diff --git a/pkg/compiler/test/equivalence/id_equivalence.dart b/pkg/compiler/test/equivalence/id_equivalence.dart
index 879d6b9..6a91597 100644
--- a/pkg/compiler/test/equivalence/id_equivalence.dart
+++ b/pkg/compiler/test/equivalence/id_equivalence.dart
@@ -61,3 +61,10 @@
super.visitLabeledStatement(node);
}
}
+
+/// Print a message with a source location.
+void reportHere(
+ DiagnosticReporter reporter, Spannable node, String debugMessage) {
+ reporter.reportInfoMessage(
+ node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
+}
diff --git a/pkg/compiler/test/helpers/stats_test.dart b/pkg/compiler/test/helpers/stats_test.dart
deleted file mode 100644
index af0e96a..0000000
--- a/pkg/compiler/test/helpers/stats_test.dart
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2014, 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.7
-
-import 'package:expect/expect.dart';
-import 'package:compiler/src/helpers/helpers.dart';
-
-class CollectingOutput implements StatsOutput {
- final StringBuffer sb = new StringBuffer();
-
- @override
- void println(String text) {
- sb.write('$text\n');
- }
-
- @override
- String toString() => sb.toString();
-}
-
-void main() {
- testRecordElement();
- testRecordFrequency();
- testRecordCounter();
-}
-
-void testRecordElement() {
- test((Stats stats) {
- stats.recordElement('foo', 'a', data: 'first-a-data');
- stats.recordElement('foo', 'a', data: 'second-a-data');
- stats.recordElement('foo', 'b');
- stats.recordElement('bar', 'a', data: 'third-a-data');
- stats.recordElement('bar', 'c');
- }, r'''
-foo: 2
- value=a data=second-a-data
- b
-bar: 2
- value=a data=third-a-data
- c
-''');
-}
-
-void testRecordFrequency() {
- test((Stats stats) {
- stats.recordFrequency('foo', 'a', 'first-a-data');
- stats.recordFrequency('foo', 'a', 'second-a-data');
- stats.recordFrequency('bar', 'b', 'first-b-data');
- stats.recordFrequency('foo', 'c');
- stats.recordFrequency('bar', 'b');
- }, r'''
-foo:
- a: 2
- first-a-data
- second-a-data
- c: 1
-bar:
- b: 2
- first-b-data
-''');
-}
-
-void testRecordCounter() {
- test((Stats stats) {
- stats.recordCounter('foo', 'a');
- stats.recordCounter('foo', 'a');
- stats.recordCounter('foo', 'b');
- stats.recordCounter('bar', 'c', 'first-c-data');
- stats.recordCounter('bar', 'c', 'second-c-data');
- stats.recordCounter('bar', 'd');
- stats.recordCounter('bar', 'd');
- stats.recordCounter('baz');
- stats.recordCounter('baz');
- }, r'''
-foo: 3
- count=2 example=a
- count=1 example=b
-bar: 4
- count=2 examples=2
- c:
- first-c-data
- second-c-data
- d
-baz: 2
-''');
-}
-
-void test(f(Stats stats), expectedDump) {
- CollectingOutput output = new CollectingOutput();
- Stats stats = new ActiveStats(new ConsolePrinter(output: output));
- f(stats);
- stats.dumpStats();
- print(output.toString());
- Expect.equals(expectedDump, output.toString());
-}
diff --git a/pkg/compiler/test/model/constant_value_test.dart b/pkg/compiler/test/model/constant_value_test.dart
index 9822945..c289332 100644
--- a/pkg/compiler/test/model/constant_value_test.dart
+++ b/pkg/compiler/test/model/constant_value_test.dart
@@ -8,14 +8,14 @@
import 'package:async_helper/async_helper.dart';
import 'package:expect/expect.dart';
-import 'package:compiler/src/helpers/helpers.dart';
import 'package:compiler/src/elements/entities.dart';
import 'package:compiler/src/elements/types.dart';
import 'package:compiler/src/constants/values.dart';
+import 'package:compiler/src/diagnostics/invariant.dart' show DEBUG_MODE;
import '../helpers/type_test_helper.dart';
void main() {
- enableDebugMode();
+ DEBUG_MODE = true;
asyncTest(() async {
TypeEnvironment env = await TypeEnvironment.create("""
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
index 0b6fe6e..7840205 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
@@ -151,6 +151,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///constructor_calls.dart:
- E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
index 0b6fe6e..7840205 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
@@ -151,6 +151,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///constructor_calls.dart:
- E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
index 0b6fe6e..7840205 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
@@ -151,6 +151,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///constructor_calls.dart:
- E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
index 0b6fe6e..7840205 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
@@ -151,6 +151,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///constructor_calls.dart:
- E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
index 0b6fe6e..7840205 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
@@ -151,6 +151,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///constructor_calls.dart:
- E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect
index 6da4cc5..cc27a95 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect
@@ -46,6 +46,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///entries_with_type_arguments.dart:
- E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect
index 6da4cc5..cc27a95 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect
@@ -46,6 +46,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///entries_with_type_arguments.dart:
- E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect
index cc9e359..5838648 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect
@@ -46,6 +46,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///entries_with_type_arguments.dart:
- E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
index cc9e359..5838648 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
@@ -46,6 +46,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///entries_with_type_arguments.dart:
- E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect
index cc9e359..5838648 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect
@@ -46,6 +46,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///entries_with_type_arguments.dart:
- E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
index 95879d2..162a26b 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
@@ -118,7 +118,7 @@
org-dartlang-testcase:///enum_as_supertype.dart:
- EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
- _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
- _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
index d680f8a..1444aa0 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
@@ -118,7 +118,7 @@
org-dartlang-testcase:///enum_as_supertype.dart:
- EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
- _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
- _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
index f8907f3..6d6adb6 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
@@ -118,7 +118,7 @@
org-dartlang-testcase:///enum_as_supertype.dart:
- EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
- _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
- _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
index f8907f3..6d6adb6 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
@@ -118,7 +118,7 @@
org-dartlang-testcase:///enum_as_supertype.dart:
- EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
- _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
- _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
index 4417c2a..d61d9a5 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
@@ -118,7 +118,7 @@
org-dartlang-testcase:///enum_as_supertype.dart:
- EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
- _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
- _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
index 494cf2f..ac5b77e 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
@@ -49,7 +49,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///inference_in_constructor_parameters.dart:
- E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
- E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
index 494cf2f..ac5b77e 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
@@ -49,7 +49,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///inference_in_constructor_parameters.dart:
- E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
- E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
index ae69448..263bb3d 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
@@ -49,7 +49,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///inference_in_constructor_parameters.dart:
- E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
- E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
index ae69448..263bb3d 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
@@ -49,7 +49,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///inference_in_constructor_parameters.dart:
- E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
- E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
index ae69448..263bb3d 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
@@ -49,7 +49,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///inference_in_constructor_parameters.dart:
- E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
- E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
index 7e8bae6..07b42df 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
@@ -137,5 +137,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///instantiated_generic_enum_types.dart:
- E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
index 7e8bae6..07b42df 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
@@ -137,5 +137,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///instantiated_generic_enum_types.dart:
- E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
index fb83333..8ce162b 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
@@ -137,5 +137,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///instantiated_generic_enum_types.dart:
- E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
index fb83333..8ce162b 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
@@ -137,5 +137,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///instantiated_generic_enum_types.dart:
- E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
index fb83333..8ce162b 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
@@ -137,5 +137,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///instantiated_generic_enum_types.dart:
- E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
index 1da7d5a..cbaf5c4 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
@@ -41,5 +41,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///issue48084.dart:
- E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
index 1da7d5a..cbaf5c4 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
@@ -41,5 +41,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///issue48084.dart:
- E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
index 32c1780..8ce5ddc 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
@@ -41,5 +41,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///issue48084.dart:
- E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
index 32c1780..8ce5ddc 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
@@ -41,5 +41,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///issue48084.dart:
- E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
index 32c1780..8ce5ddc 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
@@ -41,5 +41,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///issue48084.dart:
- E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect
index d0efd75..f964e09 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect
@@ -65,5 +65,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///issue48181.dart:
- E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect
index d0efd75..f964e09 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect
@@ -65,5 +65,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///issue48181.dart:
- E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect
index e5315e1..4aede41 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect
@@ -65,5 +65,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///issue48181.dart:
- E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect
index e5315e1..4aede41 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect
@@ -65,5 +65,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///issue48181.dart:
- E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect
index e5315e1..4aede41 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect
@@ -65,5 +65,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///issue48181.dart:
- E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
index c358d70..29920d5 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
@@ -63,6 +63,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///members.dart:
- E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
index c358d70..29920d5 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
@@ -63,6 +63,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///members.dart:
- E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
index 16019e2..aed1af8 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
@@ -63,6 +63,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///members.dart:
- E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
index 16019e2..aed1af8 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
@@ -63,6 +63,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///members.dart:
- E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
index 16019e2..aed1af8 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
@@ -63,6 +63,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///members.dart:
- E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
index 9056dd8..49718de 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
@@ -70,7 +70,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///named_arguments.dart:
- E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
index 9056dd8..49718de 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
@@ -70,7 +70,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///named_arguments.dart:
- E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
index 5c96c28..cbc80ff 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
@@ -70,7 +70,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///named_arguments.dart:
- E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
index 5c96c28..cbc80ff 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
@@ -70,7 +70,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///named_arguments.dart:
- E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
index 5c96c28..cbc80ff 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
@@ -70,7 +70,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///named_arguments.dart:
- E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
- E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
index 6b5605e..a84ac89 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
@@ -67,7 +67,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///redirecting_constructor.dart:
- C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
- C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
index 6b5605e..a84ac89 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
@@ -67,7 +67,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///redirecting_constructor.dart:
- C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
- C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
index e8052bd..6ce1261 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
@@ -67,7 +67,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///redirecting_constructor.dart:
- C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
- C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
index e8052bd..6ce1261 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
@@ -67,7 +67,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///redirecting_constructor.dart:
- C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
- C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
index e8052bd..6ce1261 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
@@ -67,7 +67,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///redirecting_constructor.dart:
- C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
- C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect
index ffb1eca..309b974 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect
@@ -24,5 +24,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
- E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect
index ffb1eca..309b974 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect
@@ -24,5 +24,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
- E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect
index 08918e1..8f727d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect
@@ -24,5 +24,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
- E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
index 08918e1..8f727d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
@@ -24,5 +24,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
- E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect
index 08918e1..8f727d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect
@@ -24,5 +24,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
- E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
index 99bf4f6..81dd3f0 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
@@ -73,7 +73,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///redirecting_initializers.dart:
- E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
- E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
index 99bf4f6..81dd3f0 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
@@ -73,7 +73,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///redirecting_initializers.dart:
- E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
- E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
index 352aa87..afd513d 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
@@ -73,7 +73,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///redirecting_initializers.dart:
- E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
- E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
index 352aa87..afd513d 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
@@ -73,7 +73,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///redirecting_initializers.dart:
- E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
- E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
index 352aa87..afd513d 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
@@ -73,7 +73,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///redirecting_initializers.dart:
- E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
- E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
index b546ffd..edb79d9 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
@@ -54,7 +54,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///simple_fields.dart:
- E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
- E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
index b546ffd..edb79d9 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
@@ -54,7 +54,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///simple_fields.dart:
- E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
- E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
index c1e1607..aaeb527 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
@@ -54,7 +54,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///simple_fields.dart:
- E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
- E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
index c1e1607..aaeb527 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
@@ -54,7 +54,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///simple_fields.dart:
- E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
- E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
index c1e1607..aaeb527 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
@@ -54,7 +54,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///simple_fields.dart:
- E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
- E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect
index 8c56fb4..0e0079c 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect
@@ -114,7 +114,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///simple_interfaces.dart:
- E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///simple_interfaces.dart:16:6)
- E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect
index 8c56fb4..0e0079c 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect
@@ -114,7 +114,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///simple_interfaces.dart:
- E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///simple_interfaces.dart:16:6)
- E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect
index fbe74f9..14829b4 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect
@@ -114,7 +114,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///simple_interfaces.dart:
- E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///simple_interfaces.dart:16:6)
- E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect
index fbe74f9..14829b4 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect
@@ -114,7 +114,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///simple_interfaces.dart:
- E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///simple_interfaces.dart:16:6)
- E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect
index fbe74f9..14829b4 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect
@@ -114,7 +114,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///simple_interfaces.dart:
- E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///simple_interfaces.dart:16:6)
- E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
index 6e10e5c..cf6273c 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
@@ -128,7 +128,7 @@
org-dartlang-testcase:///simple_mixins.dart:
- E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
- _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
- _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
index 4a5994b..8b41530 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
@@ -129,7 +129,7 @@
org-dartlang-testcase:///simple_mixins.dart:
- E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
- _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
- _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
index 82c66e8..ec20440 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
@@ -128,7 +128,7 @@
org-dartlang-testcase:///simple_mixins.dart:
- E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
- _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
- _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
index 82c66e8..ec20440 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
@@ -128,7 +128,7 @@
org-dartlang-testcase:///simple_mixins.dart:
- E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
- _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
- _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
index af40a65..364ca56 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
@@ -129,7 +129,7 @@
org-dartlang-testcase:///simple_mixins.dart:
- E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
- _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- E2. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
- _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
index 2a27047..5a75aa0 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
@@ -50,5 +50,5 @@
- E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
- _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
- _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
index f14e87d..c4ce6f4 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
@@ -50,5 +50,5 @@
- E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
- _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
- _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
index 93e970e..08ab64c 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
@@ -50,5 +50,5 @@
- E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
- _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
- _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
index 93e970e..08ab64c 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
@@ -50,5 +50,5 @@
- E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
- _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
- _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
index af64aef..357bbc8 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
@@ -50,5 +50,5 @@
- E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
- _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
- _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
index 80eb1d7..5144c47 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
@@ -64,6 +64,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///annotation_on_enum_values.dart:
- Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
index 80eb1d7..5144c47 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
@@ -64,6 +64,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///annotation_on_enum_values.dart:
- Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
index 80eb1d7..5144c47 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
@@ -64,6 +64,6 @@
Constructor coverage from constants:
org-dartlang-testcase:///annotation_on_enum_values.dart:
- Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
index 183d7ef..69399bb 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
@@ -295,7 +295,7 @@
// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
// index,
// ^^^^^
-// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
// final int index;
// ^^^^^
//
@@ -687,7 +687,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///duplicated_declarations.dart:
- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:83:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:76:6)
- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:89:6)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
index 183d7ef..69399bb 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
@@ -295,7 +295,7 @@
// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
// index,
// ^^^^^
-// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
// final int index;
// ^^^^^
//
@@ -687,7 +687,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///duplicated_declarations.dart:
- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:83:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:76:6)
- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:89:6)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
index aaa7492..b25af41 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
@@ -295,7 +295,7 @@
// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
// index,
// ^^^^^
-// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
// final int index;
// ^^^^^
//
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
index f367499..05395c7 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
@@ -65,5 +65,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum_names_from_core.dart:
- E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
index f367499..05395c7 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
@@ -65,5 +65,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum_names_from_core.dart:
- E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
index f367499..05395c7 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
@@ -65,5 +65,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum_names_from_core.dart:
- E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
index a1967bf..cb38609 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
@@ -46,5 +46,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///metadata_enum.dart:
- E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
index a1967bf..cb38609 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
@@ -46,5 +46,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///metadata_enum.dart:
- E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
index a1967bf..cb38609 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
@@ -46,5 +46,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///metadata_enum.dart:
- E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
index 5f1e09a..4cd6fc3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
@@ -38,5 +38,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///inferred_type_is_enum.dart:
- E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
index 5f1e09a..4cd6fc3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
@@ -38,5 +38,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///inferred_type_is_enum.dart:
- E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
index 5f1e09a..4cd6fc3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
@@ -38,5 +38,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///inferred_type_is_enum.dart:
- E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
index 624054f..dcbfa43 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
@@ -38,5 +38,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///inferred_type_is_enum_values.dart:
- E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
index 624054f..dcbfa43 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
@@ -38,5 +38,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///inferred_type_is_enum_values.dart:
- E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
index 624054f..dcbfa43 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
@@ -38,5 +38,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///inferred_type_is_enum_values.dart:
- E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
index 79d95f1..918c16c 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
@@ -233,5 +233,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///return_null.dart:
- Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index 3686411..2bde6d6 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -631,5 +631,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///return_null.dart:
- Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
index 8c3d6c3..60fc699 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
@@ -240,5 +240,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///return_null.dart:
- Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
index 8c3d6c3..60fc699 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
@@ -240,5 +240,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///return_null.dart:
- Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index 081a23c..16befe0 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -638,5 +638,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///return_null.dart:
- Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
index c152a0b..ba9e958 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
@@ -113,5 +113,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///switch_nullable_enum.dart:
- Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
index c152a0b..ba9e958 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
@@ -113,5 +113,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///switch_nullable_enum.dart:
- Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
index da9cc12..f2bdd6e 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
@@ -117,5 +117,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///switch_nullable_enum.dart:
- Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
index da9cc12..f2bdd6e 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
@@ -117,5 +117,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///switch_nullable_enum.dart:
- Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
index da9cc12..f2bdd6e 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
@@ -117,5 +117,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///switch_nullable_enum.dart:
- Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
index 5076108..2f07c05 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
@@ -622,5 +622,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///unsound_checks_lib.dart:
- E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
index 5076108..2f07c05 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
@@ -622,5 +622,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///unsound_checks_lib.dart:
- E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
index e968e87e..53688d7 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
@@ -643,5 +643,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///unsound_checks_lib.dart:
- E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
index 71a6850..092ba49 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
@@ -39,5 +39,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum.dart:
- Foo. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
index 71a6850..092ba49 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
@@ -39,5 +39,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum.dart:
- Foo. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
index 71a6850..092ba49 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
@@ -39,5 +39,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum.dart:
- Foo. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
index 0a517eb..c15892f 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
@@ -28,5 +28,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum.dart:
- A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
index 0a517eb..c15892f 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
@@ -28,5 +28,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum.dart:
- A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
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
index 4d0ac34..4f9cbd3 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
@@ -28,5 +28,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum.dart:
- A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
index 4d0ac34..4f9cbd3 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
@@ -28,5 +28,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum.dart:
- A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
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
index 4d0ac34..4f9cbd3 100644
--- 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
@@ -28,5 +28,5 @@
Constructor coverage from constants:
org-dartlang-testcase:///enum.dart:
- A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index f57a6c4..370b9d7 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -330,7 +330,6 @@
IsolateSpawnState(Dart_Port parent_port,
Dart_Port origin_id,
const char* script_url,
- const Function& func,
PersistentHandle* closure_tuple_handle,
SerializedObjectBuffer* message_buffer,
const char* package_config,
@@ -415,7 +414,6 @@
IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
Dart_Port origin_id,
const char* script_url,
- const Function& func,
PersistentHandle* closure_tuple_handle,
SerializedObjectBuffer* message_buffer,
const char* package_config,
@@ -438,30 +436,11 @@
serialized_message_(message_buffer->StealMessage()),
paused_(paused),
errors_are_fatal_(errors_are_fatal) {
- // Either we have a top-level function or we have a closure.
- ASSERT((closure_tuple_handle_ != nullptr) == func.IsNull());
+ ASSERT(closure_tuple_handle_ != nullptr);
auto thread = Thread::Current();
auto isolate = thread->isolate();
- if (!func.IsNull()) {
- auto zone = thread->zone();
- const auto& cls = Class::Handle(zone, func.Owner());
- const auto& lib = Library::Handle(zone, cls.library());
- const auto& lib_url = String::Handle(zone, lib.url());
- library_url_ = NewConstChar(lib_url.ToCString());
-
- String& func_name = String::Handle(zone);
- func_name = func.name();
- function_name_ = NewConstChar(String::ScrubName(func_name));
- if (!cls.IsTopLevel()) {
- const auto& class_name = String::Handle(zone, cls.Name());
- class_name_ = NewConstChar(class_name.ToCString());
- }
- } else {
- ASSERT(closure_tuple_handle != nullptr);
- }
-
// Inherit flags from spawning isolate.
isolate->FlagsCopyTo(isolate_flags());
}
@@ -908,19 +887,6 @@
return result;
}
-static FunctionPtr GetTopLevelFunction(Zone* zone, const Instance& closure) {
- if (closure.IsClosure()) {
- auto& func = Function::Handle(zone);
- func = Closure::Cast(closure).function();
- if (func.IsImplicitClosureFunction() && func.is_static()) {
- ASSERT(Closure::Cast(closure).context() == Context::null());
- // Get the parent function so that we get the right function name.
- return func.parent_function();
- }
- }
- return Function::null();
-}
-
DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 0, 10) {
GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(String, script_uri, arguments->NativeArgAt(1));
@@ -933,20 +899,17 @@
GET_NATIVE_ARGUMENT(String, packageConfig, arguments->NativeArgAt(8));
GET_NATIVE_ARGUMENT(String, debugName, arguments->NativeArgAt(9));
- const auto& func = Function::Handle(zone, GetTopLevelFunction(zone, closure));
PersistentHandle* closure_tuple_handle = nullptr;
- if (func.IsNull()) {
- // We have a non-toplevel closure that we might need to copy.
- // Result will be [<closure-copy>, <objects-in-msg-to-rehash>]
- const auto& closure_copy_tuple = Object::Handle(
- zone, CopyMutableObjectGraph(closure)); // Throws if it fails.
- ASSERT(closure_copy_tuple.IsArray());
- ASSERT(Object::Handle(zone, Array::Cast(closure_copy_tuple).At(0))
- .IsClosure());
- closure_tuple_handle =
- isolate->group()->api_state()->AllocatePersistentHandle();
- closure_tuple_handle->set_ptr(closure_copy_tuple.ptr());
- }
+ // We have a non-toplevel closure that we might need to copy.
+ // Result will be [<closure-copy>, <objects-in-msg-to-rehash>]
+ const auto& closure_copy_tuple = Object::Handle(
+ zone, CopyMutableObjectGraph(closure)); // Throws if it fails.
+ ASSERT(closure_copy_tuple.IsArray());
+ ASSERT(
+ Object::Handle(zone, Array::Cast(closure_copy_tuple).At(0)).IsClosure());
+ closure_tuple_handle =
+ isolate->group()->api_state()->AllocatePersistentHandle();
+ closure_tuple_handle->set_ptr(closure_copy_tuple.ptr());
bool fatal_errors = fatalErrors.IsNull() ? true : fatalErrors.value();
Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id();
@@ -964,15 +927,13 @@
const char* utf8_debug_name =
debugName.IsNull() ? NULL : String2UTF8(debugName);
if (closure_tuple_handle != nullptr && utf8_debug_name == nullptr) {
- ASSERT(func.IsNull());
-
const auto& closure_function = Function::Handle(zone, closure.function());
utf8_debug_name =
NewConstChar(closure_function.QualifiedUserVisibleNameCString());
}
std::unique_ptr<IsolateSpawnState> state(new IsolateSpawnState(
- port.Id(), isolate->origin_id(), String2UTF8(script_uri), func,
+ port.Id(), isolate->origin_id(), String2UTF8(script_uri),
closure_tuple_handle, &message_buffer, utf8_package_config,
paused.value(), fatal_errors, on_exit_port, on_error_port,
utf8_debug_name, isolate->group()));
diff --git a/runtime/tests/vm/dart/isolates/spawn_generic_function_test.dart b/runtime/tests/vm/dart/isolates/spawn_generic_function_test.dart
new file mode 100644
index 0000000..3b9831a
--- /dev/null
+++ b/runtime/tests/vm/dart/isolates/spawn_generic_function_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2022, 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.
+//
+// Tests that generic functions are spawned with correct type arguments
+
+import 'dart:isolate';
+import 'package:expect/expect.dart';
+
+void func<T>(T o) {
+ print("$o:$T");
+ Expect.equals("int", "$T");
+}
+
+void call2(dynamic f) {
+ f(2);
+}
+
+void call4(dynamic f) {
+ f(4);
+}
+
+void main() async {
+ {
+ final rp = ReceivePort();
+ Isolate.spawn(func<int>, 1, onExit: rp.sendPort);
+ await rp.first;
+ }
+ {
+ final rp = ReceivePort();
+ Isolate.spawn(call2, func<int>, onExit: rp.sendPort);
+ await rp.first;
+ }
+ void Function(int) to = func;
+ {
+ final rp = ReceivePort();
+ Isolate.spawn(to, 3, onExit: rp.sendPort);
+ await rp.first;
+ }
+ {
+ final rp = ReceivePort();
+ Isolate.spawn(call4, to, onExit: rp.sendPort);
+ await rp.first;
+ }
+}
diff --git a/runtime/tests/vm/dart_2/isolates/spawn_generic_function_test.dart b/runtime/tests/vm/dart_2/isolates/spawn_generic_function_test.dart
new file mode 100644
index 0000000..8529015
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/spawn_generic_function_test.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2022, 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.
+//
+// Tests that generic functions are spawned with correct type arguments
+
+// @dart = 2.9
+
+import 'dart:isolate';
+import 'package:expect/expect.dart';
+
+void func<T>(T o) {
+ print("$o:$T");
+ Expect.equals("int", "$T");
+}
+
+void call4(dynamic f) {
+ f(4);
+}
+
+void main() async {
+ void Function(int) to = func;
+ {
+ final rp = ReceivePort();
+ Isolate.spawn(to, 3, onExit: rp.sendPort);
+ await rp.first;
+ }
+ {
+ final rp = ReceivePort();
+ Isolate.spawn(call4, to, onExit: rp.sendPort);
+ await rp.first;
+ }
+}
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index aa1d703..c063152 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -3476,8 +3476,9 @@
return;
}
+#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
// Split moves from stack to stack, none of the architectures provides
- // memory to memory move instructions.
+ // memory to memory move instructions. But RISC-V needs to avoid TMP.
if (source.IsStack() && destination.IsStack()) {
Register scratch = TMP;
if (TMP == kNoRegister) {
@@ -3493,6 +3494,7 @@
}
return;
}
+#endif
const bool sign_or_zero_extend = dst_container_size > src_container_size;
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
index c31d864..11b6467 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
@@ -898,6 +898,15 @@
}
}
+// See FfiCallInstr::MakeLocationSummary.
+static Register WithIntermediateMarshalling(Register r) {
+ if (r == A2) return T2; // A2=CODE_REG
+ if (r == A3) return T3; // A3=TMP
+ if (r == A4) return T4; // A4=TMP2
+ if (r == A5) return T5; // A5=PP
+ return r;
+}
+
void FlowGraphCompiler::EmitNativeMoveArchitecture(
const compiler::ffi::NativeLocation& destination,
const compiler::ffi::NativeLocation& source) {
@@ -915,14 +924,13 @@
if (source.IsRegisters()) {
const auto& src = source.AsRegisters();
ASSERT(src.num_regs() == 1);
- const auto src_reg = src.reg_at(0);
+ const auto src_reg = WithIntermediateMarshalling(src.reg_at(0));
if (destination.IsRegisters()) {
const auto& dst = destination.AsRegisters();
ASSERT(dst.num_regs() == 1);
- const auto dst_reg = dst.reg_at(0);
+ const auto dst_reg = WithIntermediateMarshalling(dst.reg_at(0));
if (!sign_or_zero_extend) {
- // TODO(riscv): Unreachable? Calling convention always extends.
__ mv(dst_reg, src_reg);
} else {
switch (src_type.AsPrimitive().representation()) {
@@ -947,9 +955,15 @@
__ srliw(dst_reg, dst_reg, 16);
#endif
return;
+#if XLEN >= 64
+ case compiler::ffi::kUint32:
+ case compiler::ffi::kInt32:
+ // Note even uint32 is sign-extended to XLEN.
+ __ addiw(dst_reg, src_reg, 0);
+ return;
+#endif
default:
- // 32 to 64 bit is covered in IL by Representation conversions.
- UNIMPLEMENTED();
+ UNREACHABLE();
}
}
@@ -1002,7 +1016,7 @@
if (destination.IsRegisters()) {
const auto& dst = destination.AsRegisters();
ASSERT(dst.num_regs() == 1);
- const auto dst_reg = dst.reg_at(0);
+ const auto dst_reg = WithIntermediateMarshalling(dst.reg_at(0));
ASSERT(!sign_or_zero_extend);
__ LoadFromOffset(dst_reg, src.base_register(), src.offset_in_bytes(),
BytesToOperandSize(dst_size));
@@ -1022,9 +1036,14 @@
default:
UNIMPLEMENTED();
}
-
+ } else if (destination.IsStack()) {
+ const auto& dst = destination.AsStack();
+ // TMP=A3, here not remapped to T3.
+ __ LoadFromOffset(TMP, src.base_register(), src.offset_in_bytes(),
+ BytesToOperandSize(src_size));
+ __ StoreToOffset(TMP, dst.base_register(), dst.offset_in_bytes(),
+ BytesToOperandSize(dst_size));
} else {
- ASSERT(destination.IsStack());
UNREACHABLE();
}
}
diff --git a/runtime/vm/compiler/backend/il_riscv.cc b/runtime/vm/compiler/backend/il_riscv.cc
index 882a6db..1d0562a 100644
--- a/runtime/vm/compiler/backend/il_riscv.cc
+++ b/runtime/vm/compiler/backend/il_riscv.cc
@@ -7163,7 +7163,53 @@
}
void BitCastInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
- UNIMPLEMENTED();
+ switch (from()) {
+ case kUnboxedFloat: {
+ ASSERT(to() == kUnboxedInt64);
+ const FpuRegister src = locs()->in(0).fpu_reg();
+ const Register dst = locs()->out(0).reg();
+ __ fmvxw(dst, src);
+ break;
+ }
+#if XLEN >= 64
+ case kUnboxedDouble: {
+ ASSERT(to() == kUnboxedInt64);
+ const FpuRegister src = locs()->in(0).fpu_reg();
+ const Register dst = locs()->out(0).reg();
+ __ fmvxd(dst, src);
+ break;
+ }
+#endif
+ case kUnboxedInt64: {
+ const Register src = locs()->in(0).reg();
+ switch (to()) {
+#if XLEN >= 64
+ case kUnboxedDouble: {
+ const FpuRegister dst = locs()->out(0).fpu_reg();
+ __ fmvdx(dst, src);
+ break;
+ }
+#endif
+ case kUnboxedFloat: {
+ const FpuRegister dst = locs()->out(0).fpu_reg();
+ __ fmvwx(dst, src);
+ break;
+ }
+ default:
+ UNREACHABLE();
+ }
+ break;
+ }
+ case kUnboxedInt32: {
+ ASSERT(to() == kUnboxedFloat);
+ const Register src = locs()->in(0).reg();
+ const FpuRegister dst = locs()->out(0).fpu_reg();
+ __ fmvwx(dst, src);
+ break;
+ }
+ default:
+ UNREACHABLE();
+ }
}
LocationSummary* StopInstr::MakeLocationSummary(Zone* zone, bool opt) const {
diff --git a/runtime/vm/compiler/ffi/native_calling_convention.cc b/runtime/vm/compiler/ffi/native_calling_convention.cc
index e30a518..4ec1199 100644
--- a/runtime/vm/compiler/ffi/native_calling_convention.cc
+++ b/runtime/vm/compiler/ffi/native_calling_convention.cc
@@ -112,6 +112,25 @@
NativeFpuRegistersLocation(payload_type, payload_type, reg);
}
+#if defined(TARGET_ARCH_RISCV64)
+ // After using up F registers, start bitcasting to X registers.
+ if (HasAvailableCpuRegisters(1)) {
+ const Register reg = AllocateCpuRegister();
+ const auto& container_type = *new (zone_) NativePrimitiveType(kInt64);
+ return *new (zone_)
+ NativeRegistersLocation(zone_, payload_type, container_type, reg);
+ }
+#elif defined(TARGET_ARCH_RISCV32)
+ // After using up F registers, start bitcasting to X register pairs.
+ if (HasAvailableCpuRegisters(2)) {
+ const Register reg1 = AllocateCpuRegister();
+ const Register reg2 = AllocateCpuRegister();
+ const auto& container_type = *new (zone_) NativePrimitiveType(kInt64);
+ return *new (zone_) NativeRegistersLocation(zone_, payload_type,
+ container_type, reg1, reg2);
+ }
+#endif
+
BlockAllFpuRegisters();
if (CallingConventions::kArgumentIntRegXorFpuReg) {
ASSERT(cpu_regs_used == CallingConventions::kNumArgRegs);
@@ -365,32 +384,85 @@
#endif // defined(TARGET_ARCH_ARM64)
#if defined(TARGET_ARCH_RISCV32) || defined(TARGET_ARCH_RISCV64)
- // If total size is <= XLEN, passed like an XLEN scalar: use a register if
- // available or pass by value on the stack.
- // If total size is <= 2*XLEN, passed like two XLEN scalars: use registers
- // if available or pass by value on the stack. If only one register is
- // available, pass the low part by register and the high part on the stack.
- // Otherwise, passed by reference.
+ // See RISC-V ABIs Specification
+ // https://github.com/riscv-non-isa/riscv-elf-psabi-doc/releases
const NativeLocation& AllocateCompound(
const NativeCompoundType& payload_type) {
- const auto& pointer_type = *new (zone_) NativePrimitiveType(kFfiIntPtr);
const auto& compound_type = payload_type.AsCompound();
+
+ // 2.2. Hardware Floating-point Calling Convention.
+ const NativePrimitiveType* first = nullptr;
+ const NativePrimitiveType* second = nullptr;
+ const intptr_t num_primitive_members =
+ compound_type.PrimitivePairMembers(&first, &second);
+
+ // If exactly one floating-point member, pass like a scalar.
+ if ((num_primitive_members == 1) && first->IsFloat()) {
+ NativeLocations& multiple_locations =
+ *new (zone_) NativeLocations(zone_, 1);
+ multiple_locations.Add(&AllocateArgument(*first));
+ return *new (zone_)
+ MultipleNativeLocations(compound_type, multiple_locations);
+ }
+
+ if (num_primitive_members == 2) {
+ if (first->IsFloat() && second->IsFloat()) {
+ // If exactly two floating-point members, pass like two scalars if two F
+ // registers are available.
+ if (HasAvailableFpuRegisters(2)) {
+ NativeLocations& multiple_locations =
+ *new (zone_) NativeLocations(zone_, 2);
+ multiple_locations.Add(&AllocateArgument(*first));
+ multiple_locations.Add(&AllocateArgument(*second));
+ return *new (zone_)
+ MultipleNativeLocations(compound_type, multiple_locations);
+ }
+ } else if (first->IsFloat() || second->IsFloat()) {
+ // If exactly two members, one is integer and one is float in either
+ // order, pass like two scalars if both an X and F register are
+ // available.
+ if (HasAvailableFpuRegisters(1) && HasAvailableCpuRegisters(1)) {
+ NativeLocations& multiple_locations =
+ *new (zone_) NativeLocations(zone_, 2);
+ multiple_locations.Add(&AllocateArgument(*first));
+ multiple_locations.Add(&AllocateArgument(*second));
+ return *new (zone_)
+ MultipleNativeLocations(compound_type, multiple_locations);
+ }
+ }
+ }
+
+ // 2.1. Integer Calling Convention.
+ const auto& pointer_type = *new (zone_) NativePrimitiveType(kFfiIntPtr);
const intptr_t size = compound_type.SizeInBytes();
+
+ // If total size is <= XLEN, passed like an XLEN scalar: use a register if
+ // available or pass by value on the stack.
if (size <= target::kWordSize) {
- return AllocateArgument(pointer_type);
- } else if (size <= 2 * target::kWordSize) {
+ NativeLocations& multiple_locations =
+ *new (zone_) NativeLocations(zone_, 1);
+ multiple_locations.Add(&AllocateArgument(pointer_type));
+ return *new (zone_)
+ MultipleNativeLocations(compound_type, multiple_locations);
+ }
+
+ // If total size is <= 2*XLEN, passed like two XLEN scalars: use registers
+ // if available or pass by value on the stack. If only one register is
+ // available, pass the low part by register and the high part on the
+ // stack.
+ if (size <= 2 * target::kWordSize) {
NativeLocations& multiple_locations =
*new (zone_) NativeLocations(zone_, 2);
multiple_locations.Add(&AllocateArgument(pointer_type));
multiple_locations.Add(&AllocateArgument(pointer_type));
return *new (zone_)
MultipleNativeLocations(compound_type, multiple_locations);
- } else {
- const auto& pointer_type = *new (zone_) NativePrimitiveType(kFfiIntPtr);
- const auto& pointer_location = AllocateArgument(pointer_type);
- return *new (zone_)
- PointerToMemoryLocation(pointer_location, compound_type);
}
+
+ // Otherwise, passed by reference.
+ const auto& pointer_location = AllocateArgument(pointer_type);
+ return *new (zone_)
+ PointerToMemoryLocation(pointer_location, compound_type);
}
#endif
@@ -435,7 +507,7 @@
stack_height_in_bytes = Utils::RoundUp(stack_height_in_bytes, alignment);
}
- int NumFpuRegisters(FpuRegisterKind kind) {
+ static int NumFpuRegisters(FpuRegisterKind kind) {
#if defined(TARGET_ARCH_ARM)
if (SoftFpAbi()) return 0;
if (kind == kSingleFpuReg) return CallingConventions::kNumSFpuArgRegs;
@@ -446,7 +518,7 @@
}
// If no register is free, returns -1.
- int FirstFreeFpuRegisterIndex(FpuRegisterKind kind, int amount = 1) {
+ int FirstFreeFpuRegisterIndex(FpuRegisterKind kind, int amount = 1) const {
const intptr_t size = SizeFromFpuRegisterKind(kind) / 4;
ASSERT(size == 1 || size == 2 || size == 4);
if (fpu_reg_parts_used == -1) return kNoFpuRegister;
@@ -489,6 +561,13 @@
fpu_reg_parts_used = -1;
}
+ bool HasAvailableCpuRegisters(intptr_t count) const {
+ return cpu_regs_used + count <= CallingConventions::kNumArgRegs;
+ }
+ bool HasAvailableFpuRegisters(intptr_t count) const {
+ return FirstFreeFpuRegisterIndex(kQuadFpuReg, count) != kNoFpuRegister;
+ }
+
intptr_t cpu_regs_used = 0;
// Every bit denotes 32 bits of FPU registers.
intptr_t fpu_reg_parts_used = 0;
diff --git a/runtime/vm/compiler/ffi/native_calling_convention_test.cc b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
index dc0d522..a8ebd99 100644
--- a/runtime/vm/compiler/ffi/native_calling_convention_test.cc
+++ b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
@@ -11,9 +11,6 @@
namespace compiler {
namespace ffi {
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
const NativeCallingConvention& RunSignatureTest(
dart::Zone* zone,
const char* name,
@@ -68,10 +65,20 @@
RunSignatureTest(Z, "int8x10", arguments, int8type);
}
-UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_floatx10) {
+UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_floatx20) {
const auto& floatType = *new (Z) NativePrimitiveType(kFloat);
- auto& arguments = *new (Z) NativeTypes(Z, 10);
+ auto& arguments = *new (Z) NativeTypes(Z, 20);
+ arguments.Add(&floatType);
+ arguments.Add(&floatType);
+ arguments.Add(&floatType);
+ arguments.Add(&floatType);
+ arguments.Add(&floatType);
+ arguments.Add(&floatType);
+ arguments.Add(&floatType);
+ arguments.Add(&floatType);
+ arguments.Add(&floatType);
+ arguments.Add(&floatType);
arguments.Add(&floatType);
arguments.Add(&floatType);
arguments.Add(&floatType);
@@ -83,7 +90,35 @@
arguments.Add(&floatType);
arguments.Add(&floatType);
- RunSignatureTest(Z, "floatx10", arguments, floatType);
+ RunSignatureTest(Z, "floatx20", arguments, floatType);
+}
+
+UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_doublex20) {
+ const auto& doubleType = *new (Z) NativePrimitiveType(kDouble);
+
+ auto& arguments = *new (Z) NativeTypes(Z, 20);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+ arguments.Add(&doubleType);
+
+ RunSignatureTest(Z, "doublex20", arguments, doubleType);
}
// Test with 3-byte struct.
@@ -628,8 +663,6 @@
RunSignatureTest(Z, "struct12bytesFloatx6", arguments, int64_type);
}
-#endif // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
} // namespace ffi
} // namespace compiler
} // namespace dart
diff --git a/runtime/vm/compiler/ffi/native_location_test.cc b/runtime/vm/compiler/ffi/native_location_test.cc
index 8eecc54..8ba10d9 100644
--- a/runtime/vm/compiler/ffi/native_location_test.cc
+++ b/runtime/vm/compiler/ffi/native_location_test.cc
@@ -10,9 +10,6 @@
namespace compiler {
namespace ffi {
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
UNIT_TEST_CASE_WITH_ZONE(NativeStackLocation) {
const auto& native_type = *new (Z) NativePrimitiveType(kInt8);
@@ -38,8 +35,6 @@
EXPECT_EQ(4, half_1.offset_in_bytes());
}
-#endif // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
} // namespace ffi
} // namespace compiler
} // namespace dart
diff --git a/runtime/vm/compiler/ffi/native_type.cc b/runtime/vm/compiler/ffi/native_type.cc
index 8902c9b..6838082 100644
--- a/runtime/vm/compiler/ffi/native_type.cc
+++ b/runtime/vm/compiler/ffi/native_type.cc
@@ -766,6 +766,37 @@
UNREACHABLE();
}
+intptr_t NativePrimitiveType::PrimitivePairMembers(
+ const NativePrimitiveType** first,
+ const NativePrimitiveType** second,
+ intptr_t offset_in_members) const {
+ if (offset_in_members == 0) *first = this;
+ if (offset_in_members == 1) *second = this;
+ return offset_in_members + 1;
+}
+
+intptr_t NativeArrayType::PrimitivePairMembers(
+ const NativePrimitiveType** first,
+ const NativePrimitiveType** second,
+ intptr_t offset_in_members) const {
+ for (intptr_t i = 0; i < length_; i++) {
+ offset_in_members =
+ element_type_.PrimitivePairMembers(first, second, offset_in_members);
+ }
+ return offset_in_members;
+}
+
+intptr_t NativeCompoundType::PrimitivePairMembers(
+ const NativePrimitiveType** first,
+ const NativePrimitiveType** second,
+ intptr_t offset_in_members) const {
+ for (intptr_t i = 0; i < members().length(); i++) {
+ offset_in_members =
+ members_[i]->PrimitivePairMembers(first, second, offset_in_members);
+ }
+ return offset_in_members;
+}
+
#if !defined(DART_PRECOMPILED_RUNTIME)
bool NativePrimitiveType::ContainsOnlyFloats(Range range) const {
const auto this_range = Range::StartAndEnd(0, SizeInBytes());
diff --git a/runtime/vm/compiler/ffi/native_type.h b/runtime/vm/compiler/ffi/native_type.h
index f60fea6..a3a03bd 100644
--- a/runtime/vm/compiler/ffi/native_type.h
+++ b/runtime/vm/compiler/ffi/native_type.h
@@ -138,6 +138,13 @@
virtual intptr_t NumPrimitiveMembersRecursive() const = 0;
virtual const NativePrimitiveType& FirstPrimitiveMember() const = 0;
+ // Returns the number of primitive members when this aggregrate is flattened
+ // out, and sets the out-parameters to the first two such primitive members.
+ virtual intptr_t PrimitivePairMembers(
+ const NativePrimitiveType** first,
+ const NativePrimitiveType** second,
+ intptr_t offset_in_members = 0) const = 0;
+
virtual ~NativeType() {}
protected:
@@ -206,6 +213,9 @@
virtual intptr_t NumPrimitiveMembersRecursive() const;
virtual const NativePrimitiveType& FirstPrimitiveMember() const;
+ virtual intptr_t PrimitivePairMembers(const NativePrimitiveType** first,
+ const NativePrimitiveType** second,
+ intptr_t offset_in_members = 0) const;
virtual ~NativePrimitiveType() {}
@@ -251,6 +261,9 @@
virtual intptr_t NumPrimitiveMembersRecursive() const;
virtual const NativePrimitiveType& FirstPrimitiveMember() const;
+ virtual intptr_t PrimitivePairMembers(const NativePrimitiveType** first,
+ const NativePrimitiveType** second,
+ intptr_t offset_in_members = 0) const;
private:
const NativeType& element_type_;
@@ -300,6 +313,9 @@
virtual intptr_t NumPrimitiveMembersRecursive() const = 0;
virtual const NativePrimitiveType& FirstPrimitiveMember() const;
+ virtual intptr_t PrimitivePairMembers(const NativePrimitiveType** first,
+ const NativePrimitiveType** second,
+ intptr_t offset_in_members = 0) const;
protected:
NativeCompoundType(const NativeTypes& members,
diff --git a/runtime/vm/compiler/ffi/native_type_test.cc b/runtime/vm/compiler/ffi/native_type_test.cc
index aa3b00c..d132b91 100644
--- a/runtime/vm/compiler/ffi/native_type_test.cc
+++ b/runtime/vm/compiler/ffi/native_type_test.cc
@@ -12,9 +12,6 @@
namespace compiler {
namespace ffi {
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
const NativeCompoundType& RunStructTest(dart::Zone* zone,
const char* name,
const NativeTypes& member_types,
@@ -342,8 +339,6 @@
EXPECT(union_type.ContainsUnalignedMembers());
}
-#endif // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
} // namespace ffi
} // namespace compiler
} // namespace dart
diff --git a/runtime/vm/compiler/ffi/native_type_vm_test.cc b/runtime/vm/compiler/ffi/native_type_vm_test.cc
index 28e2b42..50a1e07 100644
--- a/runtime/vm/compiler/ffi/native_type_vm_test.cc
+++ b/runtime/vm/compiler/ffi/native_type_vm_test.cc
@@ -11,9 +11,6 @@
namespace compiler {
namespace ffi {
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
ISOLATE_UNIT_TEST_CASE(Ffi_NativeType_Primitive_FromAbstractType) {
Zone* Z = thread->zone();
@@ -89,8 +86,6 @@
native_type.members()[1]->SizeInBytes());
}
-#endif // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
} // namespace ffi
} // namespace compiler
} // namespace dart
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_android.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_android.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_ios.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_ios.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_linux.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_linux.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_macos.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_macos.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_android.expect
new file mode 100644
index 0000000..1855bc1
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_android.expect
@@ -0,0 +1,22 @@
+(r0, r1) int64[double]
+(r2, r3) int64[double]
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+=>
+(r0, r1) int64[double]
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_ios.expect
new file mode 100644
index 0000000..9f87499
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_ios.expect
@@ -0,0 +1,22 @@
+d0 double
+d1 double
+d2 double
+d3 double
+d4 double
+d5 double
+d6 double
+d7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+q0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_linux.expect
new file mode 100644
index 0000000..9f87499
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_linux.expect
@@ -0,0 +1,22 @@
+d0 double
+d1 double
+d2 double
+d3 double
+d4 double
+d5 double
+d6 double
+d7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+q0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_android.expect
new file mode 100644
index 0000000..b7eb3ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_android.expect
@@ -0,0 +1,22 @@
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+S+144 double
+S+152 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_linux.expect
new file mode 100644
index 0000000..b7eb3ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_linux.expect
@@ -0,0 +1,22 @@
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+S+144 double
+S+152 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_win.expect
new file mode 100644
index 0000000..b7eb3ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_win.expect
@@ -0,0 +1,22 @@
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+S+144 double
+S+152 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv32_linux.expect
new file mode 100644
index 0000000..f5fde9e
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv32_linux.expect
@@ -0,0 +1,22 @@
+fa0 double
+fa1 double
+fa2 double
+fa3 double
+fa4 double
+fa5 double
+fa6 double
+fa7 double
+(a0, a1) int64[double]
+(a2, tmp) int64[double]
+(tmp2, pp) int64[double]
+(a6, a7) int64[double]
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv64_linux.expect
new file mode 100644
index 0000000..810b278
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv64_linux.expect
@@ -0,0 +1,22 @@
+fa0 double
+fa1 double
+fa2 double
+fa3 double
+fa4 double
+fa5 double
+fa6 double
+fa7 double
+a0 int64[double]
+a1 int64[double]
+a2 int64[double]
+tmp int64[double]
+tmp2 int64[double]
+pp int64[double]
+a6 int64[double]
+a7 int64[double]
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_ios.expect
new file mode 100644
index 0000000..e2792c6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_ios.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+xmm4 double
+xmm5 double
+xmm6 double
+xmm7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_linux.expect
new file mode 100644
index 0000000..e2792c6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_linux.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+xmm4 double
+xmm5 double
+xmm6 double
+xmm7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_macos.expect
new file mode 100644
index 0000000..e2792c6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_macos.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+xmm4 double
+xmm5 double
+xmm6 double
+xmm7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_win.expect
new file mode 100644
index 0000000..055bacc
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_win.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_android.expect
deleted file mode 100644
index 8f237e3..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_android.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+8 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_ios.expect
deleted file mode 100644
index 0a25996..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_ios.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+4 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_linux.expect
deleted file mode 100644
index 8f237e3..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+8 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect
deleted file mode 100644
index 0a25996..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+4 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_android.expect
deleted file mode 100644
index f563dbd..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_android.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-r0 int32[float]
-r1 int32[float]
-r2 int32[float]
-r3 int32[float]
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-=>
-r0 int32[float]
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_ios.expect
deleted file mode 100644
index 9ff44a7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_ios.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-s0 float
-s1 float
-s2 float
-s3 float
-s4 float
-s5 float
-s6 float
-s7 float
-s8 float
-s9 float
-=>
-q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_linux.expect
deleted file mode 100644
index 9ff44a7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-s0 float
-s1 float
-s2 float
-s3 float
-s4 float
-s5 float
-s6 float
-s7 float
-s8 float
-s9 float
-=>
-q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_android.expect
deleted file mode 100644
index c4390e7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_android.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-S+24 float
-S+28 float
-S+32 float
-S+36 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_linux.expect
deleted file mode 100644
index c4390e7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-S+24 float
-S+28 float
-S+32 float
-S+36 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_win.expect
deleted file mode 100644
index c4390e7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_win.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-S+24 float
-S+28 float
-S+32 float
-S+36 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_ios.expect
deleted file mode 100644
index b650130..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_ios.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-xmm4 float
-xmm5 float
-xmm6 float
-xmm7 float
-S+0 float
-S+8 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_linux.expect
deleted file mode 100644
index b650130..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-xmm4 float
-xmm5 float
-xmm6 float
-xmm7 float
-S+0 float
-S+8 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_macos.expect
deleted file mode 100644
index b650130..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_macos.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-xmm4 float
-xmm5 float
-xmm6 float
-xmm7 float
-S+0 float
-S+8 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_win.expect
deleted file mode 100644
index 1244587..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_win.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-S+0 float
-S+8 float
-S+16 float
-S+24 float
-S+32 float
-S+40 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_android.expect
new file mode 100644
index 0000000..7964f7b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_android.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_ios.expect
new file mode 100644
index 0000000..b65ab29
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_ios.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_linux.expect
new file mode 100644
index 0000000..7964f7b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_linux.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_macos.expect
new file mode 100644
index 0000000..b65ab29
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_macos.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_android.expect
new file mode 100644
index 0000000..dfc7b270
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_android.expect
@@ -0,0 +1,22 @@
+r0 int32[float]
+r1 int32[float]
+r2 int32[float]
+r3 int32[float]
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+=>
+r0 int32[float]
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_ios.expect
new file mode 100644
index 0000000..f1315e6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_ios.expect
@@ -0,0 +1,22 @@
+s0 float
+s1 float
+s2 float
+s3 float
+s4 float
+s5 float
+s6 float
+s7 float
+s8 float
+s9 float
+s10 float
+s11 float
+s12 float
+s13 float
+s14 float
+s15 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+=>
+q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_linux.expect
new file mode 100644
index 0000000..f1315e6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_linux.expect
@@ -0,0 +1,22 @@
+s0 float
+s1 float
+s2 float
+s3 float
+s4 float
+s5 float
+s6 float
+s7 float
+s8 float
+s9 float
+s10 float
+s11 float
+s12 float
+s13 float
+s14 float
+s15 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+=>
+q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_android.expect
new file mode 100644
index 0000000..b337e24
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_android.expect
@@ -0,0 +1,22 @@
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+S+64 float
+S+68 float
+S+72 float
+S+76 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_linux.expect
new file mode 100644
index 0000000..b337e24
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_linux.expect
@@ -0,0 +1,22 @@
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+S+64 float
+S+68 float
+S+72 float
+S+76 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_win.expect
new file mode 100644
index 0000000..b337e24
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_win.expect
@@ -0,0 +1,22 @@
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+S+64 float
+S+68 float
+S+72 float
+S+76 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv32_linux.expect
new file mode 100644
index 0000000..663376f
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv32_linux.expect
@@ -0,0 +1,22 @@
+fa0 float
+fa1 float
+fa2 float
+fa3 float
+fa4 float
+fa5 float
+fa6 float
+fa7 float
+(a0, a1) int64[float]
+(a2, tmp) int64[float]
+(tmp2, pp) int64[float]
+(a6, a7) int64[float]
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+=>
+fa0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect
new file mode 100644
index 0000000..4531dae
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect
@@ -0,0 +1,22 @@
+fa0 float
+fa1 float
+fa2 float
+fa3 float
+fa4 float
+fa5 float
+fa6 float
+fa7 float
+a0 int64[float]
+a1 int64[float]
+a2 int64[float]
+tmp int64[float]
+tmp2 int64[float]
+pp int64[float]
+a6 int64[float]
+a7 int64[float]
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+=>
+fa0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_ios.expect
new file mode 100644
index 0000000..463908b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_ios.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+xmm4 float
+xmm5 float
+xmm6 float
+xmm7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_linux.expect
new file mode 100644
index 0000000..463908b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_linux.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+xmm4 float
+xmm5 float
+xmm6 float
+xmm7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_macos.expect
new file mode 100644
index 0000000..463908b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_macos.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+xmm4 float
+xmm5 float
+xmm6 float
+xmm7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_win.expect
new file mode 100644
index 0000000..539d8cd
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_win.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+S+96 float
+S+104 float
+S+112 float
+S+120 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect
new file mode 100644
index 0000000..84bc85d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+a0 int32[int8]
+a1 int32[int8]
+a2 int32[int8]
+tmp int32[int8]
+tmp2 int32[int8]
+pp int32[int8]
+a6 int32[int8]
+a7 int32[int8]
+S+0 int8
+S+1 int8
+=>
+a0 int32[int8]
diff --git a/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect
new file mode 100644
index 0000000..84bc85d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+a0 int32[int8]
+a1 int32[int8]
+a2 int32[int8]
+tmp int32[int8]
+tmp2 int32[int8]
+pp int32[int8]
+a6 int32[int8]
+a7 int32[int8]
+S+0 int8
+S+1 int8
+=>
+a0 int32[int8]
diff --git a/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv32_linux.expect
new file mode 100644
index 0000000..cc334b3
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv32_linux.expect
@@ -0,0 +1,3 @@
+
+=>
+M(a0 uint32, a1 uint32) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv64_linux.expect
new file mode 100644
index 0000000..ea09b9b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv64_linux.expect
@@ -0,0 +1,3 @@
+
+=>
+M(a0 int64) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv32_linux.expect
new file mode 100644
index 0000000..3fb5790
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv32_linux.expect
@@ -0,0 +1,4 @@
+P(a1 uint32) Struct(size: 128)
+a2 int32
+=>
+P(a0 uint32) Struct(size: 128)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv64_linux.expect
new file mode 100644
index 0000000..ba868b6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv64_linux.expect
@@ -0,0 +1,4 @@
+P(a1 int64) Struct(size: 128)
+a2 int32
+=>
+P(a0 int64) Struct(size: 128)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv32_linux.expect
new file mode 100644
index 0000000..fda1302
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv32_linux.expect
@@ -0,0 +1,8 @@
+P(a0 uint32) Struct(size: 12)
+P(a1 uint32) Struct(size: 12)
+P(a2 uint32) Struct(size: 12)
+P(tmp uint32) Struct(size: 12)
+P(tmp2 uint32) Struct(size: 12)
+P(pp uint32) Struct(size: 12)
+=>
+(a0, a1) int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv64_linux.expect
new file mode 100644
index 0000000..ad37cf7
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv64_linux.expect
@@ -0,0 +1,8 @@
+M(a0 int64, a1 int64) Struct(size: 12)
+M(a2 int64, tmp int64) Struct(size: 12)
+M(tmp2 int64, pp int64) Struct(size: 12)
+M(a6 int64, a7 int64) Struct(size: 12)
+M(S+0 int64, S+8 int64) Struct(size: 12)
+M(S+16 int64, S+24 int64) Struct(size: 12)
+=>
+a0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv32_linux.expect
new file mode 100644
index 0000000..664653c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv32_linux.expect
@@ -0,0 +1,15 @@
+P(a1 uint32) Struct(size: 16)
+fa0 float
+P(a2 uint32) Struct(size: 16)
+P(tmp uint32) Struct(size: 16)
+P(tmp2 uint32) Struct(size: 16)
+P(pp uint32) Struct(size: 16)
+P(a6 uint32) Struct(size: 16)
+P(a7 uint32) Struct(size: 16)
+P(S+0 uint32) Struct(size: 16)
+P(S+4 uint32) Struct(size: 16)
+fa1 float
+S+8 int8
+P(S+12 uint32) Struct(size: 16)
+=>
+P(a0 uint32) Struct(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv64_linux.expect
new file mode 100644
index 0000000..6f7ef5b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv64_linux.expect
@@ -0,0 +1,15 @@
+M(a0 int64, a1 int64) Struct(size: 16)
+fa0 float
+M(a2 int64, tmp int64) Struct(size: 16)
+M(tmp2 int64, pp int64) Struct(size: 16)
+M(a6 int64, a7 int64) Struct(size: 16)
+M(S+0 int64, S+8 int64) Struct(size: 16)
+M(S+16 int64, S+24 int64) Struct(size: 16)
+M(S+32 int64, S+40 int64) Struct(size: 16)
+M(S+48 int64, S+56 int64) Struct(size: 16)
+M(S+64 int64, S+72 int64) Struct(size: 16)
+fa1 float
+S+80 int8
+M(S+88 int64, S+96 int64) Struct(size: 16)
+=>
+M(a0 int64, a1 int64) Struct(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv32_linux.expect
new file mode 100644
index 0000000..d326d70
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+M(a0 uint32) Struct(size: 3)
+M(a1 uint32) Struct(size: 3)
+M(a2 uint32) Struct(size: 3)
+M(tmp uint32) Struct(size: 3)
+M(tmp2 uint32) Struct(size: 3)
+M(pp uint32) Struct(size: 3)
+M(a6 uint32) Struct(size: 3)
+M(a7 uint32) Struct(size: 3)
+M(S+0 uint32) Struct(size: 3)
+M(S+4 uint32) Struct(size: 3)
+=>
+M(a0 uint32) Struct(size: 3)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv64_linux.expect
new file mode 100644
index 0000000..3f71e45
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+M(a0 int64) Struct(size: 3)
+M(a1 int64) Struct(size: 3)
+M(a2 int64) Struct(size: 3)
+M(tmp int64) Struct(size: 3)
+M(tmp2 int64) Struct(size: 3)
+M(pp int64) Struct(size: 3)
+M(a6 int64) Struct(size: 3)
+M(a7 int64) Struct(size: 3)
+M(S+0 int64) Struct(size: 3)
+M(S+8 int64) Struct(size: 3)
+=>
+M(a0 int64) Struct(size: 3)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv32_linux.expect
new file mode 100644
index 0000000..8c5778d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+M(a0 uint32, a1 uint32) Struct(size: 8)
+M(a2 uint32, tmp uint32) Struct(size: 8)
+M(tmp2 uint32, pp uint32) Struct(size: 8)
+M(a6 uint32, a7 uint32) Struct(size: 8)
+M(S+0 uint32, S+4 uint32) Struct(size: 8)
+M(S+8 uint32, S+12 uint32) Struct(size: 8)
+M(S+16 uint32, S+20 uint32) Struct(size: 8)
+M(S+24 uint32, S+28 uint32) Struct(size: 8)
+M(S+32 uint32, S+36 uint32) Struct(size: 8)
+M(S+40 uint32, S+44 uint32) Struct(size: 8)
+=>
+M(a0 uint32, a1 uint32) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv64_linux.expect
new file mode 100644
index 0000000..7bd998e
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+M(a0 int64) Struct(size: 8)
+M(a1 int64) Struct(size: 8)
+M(a2 int64) Struct(size: 8)
+M(tmp int64) Struct(size: 8)
+M(tmp2 int64) Struct(size: 8)
+M(pp int64) Struct(size: 8)
+M(a6 int64) Struct(size: 8)
+M(a7 int64) Struct(size: 8)
+M(S+0 int64) Struct(size: 8)
+M(S+8 int64) Struct(size: 8)
+=>
+M(a0 int64) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv32_linux.expect
new file mode 100644
index 0000000..648d83b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv32_linux.expect
@@ -0,0 +1,3 @@
+M(a0 uint32, a1 uint32) Struct(size: 8)
+=>
+M(a0 uint32, a1 uint32) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv64_linux.expect
new file mode 100644
index 0000000..f1b1ff8
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv64_linux.expect
@@ -0,0 +1,3 @@
+M(a0 int64) Struct(size: 8)
+=>
+M(a0 int64) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv32_linux.expect
new file mode 100644
index 0000000..da14e5c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv32_linux.expect
@@ -0,0 +1,15 @@
+M(a0 int32[int8], fa0 double) Struct(size: 9)
+M(a1 int32[int8], fa1 double) Struct(size: 9)
+M(a2 int32[int8], fa2 double) Struct(size: 9)
+M(tmp int32[int8], fa3 double) Struct(size: 9)
+M(tmp2 int32[int8], fa4 double) Struct(size: 9)
+M(pp int32[int8], fa5 double) Struct(size: 9)
+M(a6 int32[int8], fa6 double) Struct(size: 9)
+M(a7 int32[int8], fa7 double) Struct(size: 9)
+P(S+0 uint32) Struct(size: 9)
+P(S+4 uint32) Struct(size: 9)
+S+8 double
+S+16 int32
+S+20 int32
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect
new file mode 100644
index 0000000..d4389d5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect
@@ -0,0 +1,15 @@
+M(a0 int32[int8], fa0 double) Struct(size: 9)
+M(a1 int32[int8], fa1 double) Struct(size: 9)
+M(a2 int32[int8], fa2 double) Struct(size: 9)
+M(tmp int32[int8], fa3 double) Struct(size: 9)
+M(tmp2 int32[int8], fa4 double) Struct(size: 9)
+M(pp int32[int8], fa5 double) Struct(size: 9)
+M(a6 int32[int8], fa6 double) Struct(size: 9)
+M(a7 int32[int8], fa7 double) Struct(size: 9)
+M(S+0 int64, S+8 int64) Struct(size: 9)
+M(S+16 int64, S+24 int64) Struct(size: 9)
+S+32 double
+S+40 int32
+S+44 int32
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect
new file mode 100644
index 0000000..e8eafe5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect
@@ -0,0 +1,17 @@
+Struct(size: 72, field alignment: 8, stack alignment: 8, members: {
+ 0: int8,
+ 2: int16,
+ 4: int32,
+ 8: int64,
+ 16: uint8,
+ 18: uint16,
+ 20: uint32,
+ 24: uint64,
+ 32: int32,
+ 40: double,
+ 48: float,
+ 52: int32,
+ 56: int32,
+ 60: int32,
+ 64: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv64_linux.expect
new file mode 100644
index 0000000..59f05bb1
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv64_linux.expect
@@ -0,0 +1,17 @@
+Struct(size: 88, field alignment: 8, stack alignment: 8, members: {
+ 0: int8,
+ 2: int16,
+ 4: int32,
+ 8: int64,
+ 16: uint8,
+ 18: uint16,
+ 20: uint32,
+ 24: uint64,
+ 32: int64,
+ 40: double,
+ 48: float,
+ 56: int64,
+ 64: int64,
+ 72: int64,
+ 80: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv32_linux.expect
new file mode 100644
index 0000000..21f9c56
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv32_linux.expect
@@ -0,0 +1,3 @@
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+ 0: Array(element type: Struct(size: 8, field alignment: 4, stack alignment: 4, members: {0: Array(element type: float, length: 2)}), length: 2)
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect
new file mode 100644
index 0000000..21f9c56
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect
@@ -0,0 +1,3 @@
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+ 0: Array(element type: Struct(size: 8, field alignment: 4, stack alignment: 4, members: {0: Array(element type: float, length: 2)}), length: 2)
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv32_linux.expect
new file mode 100644
index 0000000..a753409
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv32_linux.expect
@@ -0,0 +1,6 @@
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+ 0: float,
+ 4: float,
+ 8: float,
+ 12: float
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect
new file mode 100644
index 0000000..a753409
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect
@@ -0,0 +1,6 @@
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+ 0: float,
+ 4: float,
+ 8: float,
+ 12: float
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect
new file mode 100644
index 0000000..b2249b0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect
@@ -0,0 +1,3 @@
+Struct(size: 8, field alignment: 1, stack alignment: 1, members: {
+ 0: Array(element type: int8, length: 8)
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect
new file mode 100644
index 0000000..b2249b0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect
@@ -0,0 +1,3 @@
+Struct(size: 8, field alignment: 1, stack alignment: 1, members: {
+ 0: Array(element type: int8, length: 8)
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect
new file mode 100644
index 0000000..cba532d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+Struct(size: 10, field alignment: 1, stack alignment: 1, members: {
+ 0: int8,
+ 1: int8,
+ 2: int8,
+ 3: int8,
+ 4: int8,
+ 5: int8,
+ 6: int8,
+ 7: int8,
+ 8: int8,
+ 9: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect
new file mode 100644
index 0000000..cba532d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+Struct(size: 10, field alignment: 1, stack alignment: 1, members: {
+ 0: int8,
+ 1: int8,
+ 2: int8,
+ 3: int8,
+ 4: int8,
+ 5: int8,
+ 6: int8,
+ 7: int8,
+ 8: int8,
+ 9: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv32_linux.expect
new file mode 100644
index 0000000..7a6a9ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv32_linux.expect
@@ -0,0 +1,13 @@
+P(a1 uint32) Union(size: 16)
+P(a2 uint32) Union(size: 16)
+P(tmp uint32) Union(size: 16)
+P(tmp2 uint32) Union(size: 16)
+P(pp uint32) Union(size: 16)
+P(a6 uint32) Union(size: 16)
+P(a7 uint32) Union(size: 16)
+P(S+0 uint32) Union(size: 16)
+P(S+4 uint32) Union(size: 16)
+S+8 int8
+P(S+12 uint32) Union(size: 16)
+=>
+P(a0 uint32) Union(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv64_linux.expect
new file mode 100644
index 0000000..35d836b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv64_linux.expect
@@ -0,0 +1,13 @@
+M(a0 int64, a1 int64) Union(size: 16)
+M(a2 int64, tmp int64) Union(size: 16)
+M(tmp2 int64, pp int64) Union(size: 16)
+M(a6 int64, a7 int64) Union(size: 16)
+M(S+0 int64, S+8 int64) Union(size: 16)
+M(S+16 int64, S+24 int64) Union(size: 16)
+M(S+32 int64, S+40 int64) Union(size: 16)
+M(S+48 int64, S+56 int64) Union(size: 16)
+M(S+64 int64, S+72 int64) Union(size: 16)
+S+80 int8
+M(S+88 int64, S+96 int64) Union(size: 16)
+=>
+M(a0 int64, a1 int64) Union(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv32_linux.expect
new file mode 100644
index 0000000..95a498c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+M(a0 uint32, a1 uint32) Union(size: 5)
+M(a2 uint32, tmp uint32) Union(size: 5)
+M(tmp2 uint32, pp uint32) Union(size: 5)
+M(a6 uint32, a7 uint32) Union(size: 5)
+M(S+0 uint32, S+4 uint32) Union(size: 5)
+M(S+8 uint32, S+12 uint32) Union(size: 5)
+M(S+16 uint32, S+20 uint32) Union(size: 5)
+M(S+24 uint32, S+28 uint32) Union(size: 5)
+M(S+32 uint32, S+36 uint32) Union(size: 5)
+M(S+40 uint32, S+44 uint32) Union(size: 5)
+=>
+M(a0 uint32, a1 uint32) Union(size: 5)
diff --git a/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv64_linux.expect
new file mode 100644
index 0000000..9165726
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+M(a0 int64) Union(size: 5)
+M(a1 int64) Union(size: 5)
+M(a2 int64) Union(size: 5)
+M(tmp int64) Union(size: 5)
+M(tmp2 int64) Union(size: 5)
+M(pp int64) Union(size: 5)
+M(a6 int64) Union(size: 5)
+M(a7 int64) Union(size: 5)
+M(S+0 int64) Union(size: 5)
+M(S+8 int64) Union(size: 5)
+=>
+M(a0 int64) Union(size: 5)
diff --git a/sdk/lib/core/enum.dart b/sdk/lib/core/enum.dart
index 5d8f800..df63ab1 100644
--- a/sdk/lib/core/enum.dart
+++ b/sdk/lib/core/enum.dart
@@ -52,6 +52,22 @@
/// orders enum values by their [index] value, which corresponds
/// to the source order of the enum element declarations in
/// the `enum` declaration.
+ ///
+ /// Example:
+ /// ```dart
+ /// enum Season { spring, summer, autumn, winter }
+ ///
+ /// void main() {
+ /// var relationByIndex =
+ /// Enum.compareByIndex(Season.spring, Season.summer); // < 0
+ /// relationByIndex =
+ /// Enum.compareByIndex(Season.summer, Season.spring); // > 0
+ /// relationByIndex =
+ /// Enum.compareByIndex(Season.spring, Season.winter); // < 0
+ /// relationByIndex =
+ /// Enum.compareByIndex(Season.winter, Season.spring); // > 0
+ /// }
+ /// ```
@Since("2.15")
static int compareByIndex<T extends Enum>(T value1, T value2) =>
value1.index - value2.index;
@@ -64,6 +80,17 @@
/// This [Comparator] compares two enum values by comparing their names,
/// and can be used to sort enum values by their names.
/// The comparison uses [String.compareTo], and is therefore case sensitive.
+ ///
+ /// Example:
+ /// ```dart
+ /// enum Season { spring, summer, autumn, winter }
+ ///
+ /// void main() {
+ /// var seasons = [...Season.values]..sort(Enum.compareByName);
+ /// print(seasons);
+ /// // [Season.autumn, Season.spring, Season.summer, Season.winter]
+ /// }
+ /// ```
@Since("2.15")
static int compareByName<T extends Enum>(T value1, T value2) =>
value1.name.compareTo(value2.name);
diff --git a/tools/VERSION b/tools/VERSION
index 00d1d49..867df85 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 17
PATCH 0
-PRERELEASE 93
+PRERELEASE 94
PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/flutter/analyze_flutter_plugins.sh b/tools/bots/flutter/analyze_flutter_plugins.sh
index 3616faa..70b8eec 100755
--- a/tools/bots/flutter/analyze_flutter_plugins.sh
+++ b/tools/bots/flutter/analyze_flutter_plugins.sh
@@ -11,7 +11,6 @@
checkout=$(pwd)
export PATH=$checkout/out/ReleaseX64/dart-sdk/bin:$PATH
dart=$checkout/out/ReleaseX64/dart-sdk/bin/dart
-pub=$checkout/out/ReleaseX64/dart-sdk/bin/pub
sdk=$checkout/out/ReleaseX64/dart-sdk
tmpdir=$(mktemp -d)
diff --git a/tools/bots/pub_integration_test.py b/tools/bots/pub_integration_test.py
index f80c554..4f35ae6 100755
--- a/tools/bots/pub_integration_test.py
+++ b/tools/bots/pub_integration_test.py
@@ -35,10 +35,10 @@
mode = ('Debug' if options.mode == 'debug' else 'Release')
out_dir = 'xcodebuild' if sys.platform == 'darwin' else 'out'
- extension = '' if not sys.platform == 'win32' else '.bat'
- pub = os.path.abspath('%s/%s%s/dart-sdk/bin/pub%s' %
- (out_dir, mode, arch, extension))
- print(pub)
+ extension = '' if not sys.platform == 'win32' else '.exe'
+ dart = os.path.abspath('%s/%s%s/dart-sdk/bin/dart%s' %
+ (out_dir, mode, arch, extension))
+ print(dart)
working_dir = tempfile.mkdtemp()
try:
@@ -49,11 +49,15 @@
with open(working_dir + '/pubspec.yaml', 'w') as pubspec_yaml:
pubspec_yaml.write(PUBSPEC)
- exit_code = subprocess.call([pub, 'get'], cwd=working_dir, env=env)
+ exit_code = subprocess.call([dart, 'pub', 'get'],
+ cwd=working_dir,
+ env=env)
if exit_code != 0:
return exit_code
- exit_code = subprocess.call([pub, 'upgrade'], cwd=working_dir, env=env)
+ exit_code = subprocess.call([dart, 'pub', 'upgrade'],
+ cwd=working_dir,
+ env=env)
if exit_code != 0:
return exit_code
finally: