[cfe] Report errors on abstract members and field in extension type
Includes a cleanup of the errors reported for duplicate instance field.
Previously, in addition to reporting the duplicate, we would report that
the field cannot be used because it is a duplicate and that the
duplicate field hasn't been initialized.
Closes #53467
Closes #53320
Change-Id: Ifd94223500809f3be36a1345d9d0c409778eed8a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/336885
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 21f34d2..4ca832b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -61,6 +61,7 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messageAbstractExtensionField = const MessageCode(
"AbstractExtensionField",
+ analyzerCodes: <String>["ABSTRACT_EXTENSION_FIELD"],
problemMessage: r"""Extension fields can't be declared 'abstract'.""",
correctionMessage: r"""Try removing the 'abstract' keyword.""");
@@ -4434,6 +4435,30 @@
r"""The issue arises via this extension type declaration.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeExtensionTypeDeclaresAbstractMember =
+ messageExtensionTypeDeclaresAbstractMember;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageExtensionTypeDeclaresAbstractMember =
+ const MessageCode("ExtensionTypeDeclaresAbstractMember",
+ analyzerCodes: <String>["EXTENSION_TYPE_WITH_ABSTRACT_MEMBER"],
+ problemMessage: r"""Extension types can't declare abstract members.""",
+ correctionMessage:
+ r"""Try providing an implementation for the member.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeExtensionTypeDeclaresInstanceField =
+ messageExtensionTypeDeclaresInstanceField;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageExtensionTypeDeclaresInstanceField = const MessageCode(
+ "ExtensionTypeDeclaresInstanceField",
+ analyzerCodes: <String>["EXTENSION_TYPE_DECLARES_INSTANCE_FIELD"],
+ problemMessage: r"""Extension types can't declare instance fields""",
+ correctionMessage:
+ r"""Try removing the field declaration or making it a static field""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Null> codeExtensionTypeExtends = messageExtensionTypeExtends;
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 456b559..b6938a3 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -3735,6 +3735,10 @@
token);
break;
case DeclarationKind.ExtensionType:
+ if (staticToken == null && externalToken == null) {
+ reportRecoverableError(
+ firstName, codes.messageExtensionTypeDeclaresInstanceField);
+ }
listener.endExtensionTypeFields(
abstractToken,
augmentToken,
@@ -4978,7 +4982,10 @@
beforeParam.next!, beforeInitializers?.next, token);
break;
case DeclarationKind.ExtensionType:
- // TODO(johnniwinther): Report an error on abstract methods.
+ if (optional(';', bodyStart) && externalToken == null) {
+ reportRecoverableError(isOperator ? name.next! : name,
+ codes.messageExtensionTypeDeclaresAbstractMember);
+ }
listener.endExtensionTypeMethod(getOrSet, beforeStart.next!,
beforeParam.next!, beforeInitializers?.next, token);
break;
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index 24713de..f4ca305 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -333,6 +333,17 @@
case "NON_SYNC_ABSTRACT_METHOD":
// Not reported but followed by a MISSING_FUNCTION_BODY error.
return;
+ case "ABSTRACT_EXTENSION_FIELD":
+ // Not reported but followed by a
+ // ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD.
+ return;
+ case "EXTENSION_TYPE_WITH_ABSTRACT_MEMBER":
+ // Reported by [ErrorVerifier._checkForExtensionTypeWithAbstractMember].
+ return;
+ case "EXTENSION_TYPE_DECLARES_INSTANCE_FIELD":
+ // Reported by
+ // [ErrorVerifier._checkForExtensionTypeDeclaresInstanceField]
+ return;
case null:
switch (message.code) {
case codeAssertAsExpression:
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 9ca4290..a56bd1e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -8953,12 +8953,22 @@
Builder? builder = _context.lookupLocalMember(name);
if (builder?.next != null) {
// Duplicated name, already reported.
+ while (builder != null) {
+ if (builder.next == null && builder is SourceFieldBuilder) {
+ // Assume the first field has been initialized.
+ _context.registerInitializedField(builder);
+ }
+ builder = builder.next;
+ }
return <Initializer>[
buildInvalidInitializer(
buildProblem(
- fasta.templateDuplicatedDeclarationUse.withArguments(name),
- fieldNameOffset,
- name.length),
+ fasta.templateDuplicatedDeclarationUse.withArguments(name),
+ fieldNameOffset,
+ name.length,
+ // Avoid reporting two errors.
+ suppressMessage: true,
+ ),
fieldNameOffset)
];
} else if (builder is SourceFieldBuilder &&
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 5fdb942..80abdeb 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -7,8 +7,6 @@
AbstractClassConstructorTearOff/analyzerCode: Fail
AbstractClassInstantiation/example: Fail
-AbstractExtensionField/analyzerCode: Fail
-AbstractExtensionField/example: Fail
AbstractFieldConstructorInitializer/analyzerCode: Fail
AbstractFieldInitializer/analyzerCode: Fail
AbstractNotSync/example: Fail
@@ -320,9 +318,6 @@
ExtendsNever/example: Fail # Feature not yet enabled by default.
ExtendsVoid/analyzerCode: Fail # Feature not yet in analyzer.
ExtendsVoid/example: Fail # Feature not yet enabled by default.
-ExtensionDeclaresAbstractMember/example: Fail
-ExtensionDeclaresConstructor/example: Fail
-ExtensionDeclaresInstanceField/example: Fail
ExtensionInNullAwareReceiver/analyzerCode: Fail
ExtensionMemberConflictsWithObjectMember/analyzerCode: Fail
ExternalConstructorWithBody/part_wrapped_script1: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index d45b34a..e583919 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1011,10 +1011,10 @@
AbstractExtensionField:
problemMessage: "Extension fields can't be declared 'abstract'."
correctionMessage: "Try removing the 'abstract' keyword."
-# Separate class and extension field handling to support this.
-# configuration: nnbd-strong
-# script:
-# - "extension C on int {abstract static var f;}"
+ analyzerCode: ABSTRACT_EXTENSION_FIELD
+ exampleAllowMoreCodes: true
+ script:
+ - "extension C on int {abstract static var f;}"
AbstractFieldInitializer:
problemMessage: "Abstract fields cannot have initializers."
@@ -2669,6 +2669,10 @@
index: 94
problemMessage: "Extensions can't declare abstract members."
correctionMessage: "Try providing an implementation for the member."
+ script: |
+ extension E on int {
+ void method();
+ }
analyzerCode: ParserErrorCode.EXTENSION_DECLARES_ABSTRACT_MEMBER
comment: No parameters.
documentation: |-
@@ -2693,10 +2697,24 @@
Either provide an implementation for the member or remove it.
hasPublishedDocs: true
+ExtensionTypeDeclaresAbstractMember:
+ problemMessage: "Extension types can't declare abstract members."
+ correctionMessage: "Try providing an implementation for the member."
+ analyzerCode: EXTENSION_TYPE_WITH_ABSTRACT_MEMBER
+ experiments: inline-class
+ script: |
+ extension type ET(int id) {
+ void method();
+ }
+
ExtensionDeclaresConstructor:
index: 92
problemMessage: "Extensions can't declare constructors."
correctionMessage: "Try removing the constructor declaration."
+ script: |
+ extension E on int {
+ E();
+ }
analyzerCode: ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR
comment: No parameters.
documentation: |-
@@ -2728,6 +2746,10 @@
problemMessage: "Extensions can't declare instance fields"
correctionMessage: "Try removing the field declaration or making it a static field"
analyzerCode: ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD
+ script: |
+ extension E on int {
+ int? field;
+ }
comment: No parameters.
documentation: |-
#### Description
@@ -2754,6 +2776,16 @@
setter, or method.
hasPublishedDocs: true
+ExtensionTypeDeclaresInstanceField:
+ problemMessage: "Extension types can't declare instance fields"
+ correctionMessage: "Try removing the field declaration or making it a static field"
+ analyzerCode: EXTENSION_TYPE_DECLARES_INSTANCE_FIELD
+ experiments: inline-class
+ script: |
+ extension type ET(int id) {
+ int? field;
+ }
+
ConflictsWithConstructor:
problemMessage: "Conflicts with constructor '#name'."
analyzerCode: CONFLICTS_WITH_CONSTRUCTOR
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
index 5fbf931..be6597f 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
@@ -1,3 +1,9 @@
+Problems reported:
+
+parser/inline_class/extension_type:10:7: Extension types can't declare instance fields
+ int field = 42;
+ ^^^^^
+
beginCompilationUnit(extension)
beginMetadataStar(extension)
endMetadataStar(0)
@@ -236,6 +242,7 @@
beginFieldInitializer(=)
handleLiteralInt(42)
endFieldInitializer(=, ;)
+ handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(int)
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
index d2e2a50..c838b99 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
@@ -428,6 +428,8 @@
parseLiteralInt(=)
listener: handleLiteralInt(42)
listener: endFieldInitializer(=, ;)
+ reportRecoverableError(field, ExtensionTypeDeclaresInstanceField)
+ listener: handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
listener: endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
listener: endMember()
notEofOrValue(}, int)
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
index 6579481..e0e026f 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
@@ -1,3 +1,9 @@
+Problems reported:
+
+parser/inline_class/extension_type_const:10:7: Extension types can't declare instance fields
+ int field = 42;
+ ^^^^^
+
beginCompilationUnit(extension)
beginMetadataStar(extension)
endMetadataStar(0)
@@ -236,6 +242,7 @@
beginFieldInitializer(=)
handleLiteralInt(42)
endFieldInitializer(=, ;)
+ handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
endMember()
beginMetadataStar(int)
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
index e0a9a82..4b0b4af 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
@@ -432,6 +432,8 @@
parseLiteralInt(=)
listener: handleLiteralInt(42)
listener: endFieldInitializer(=, ;)
+ reportRecoverableError(field, ExtensionTypeDeclaresInstanceField)
+ listener: handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
listener: endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
listener: endMember()
notEofOrValue(}, int)
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart b/pkg/front_end/testcases/extension_types/abstract_members.dart
new file mode 100644
index 0000000..05cb77f
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by b
+// BSD-style license that can be found in the LICENSE file.
+
+extension type ET1(int id) {
+ abstract int m; /* Error */
+}
+
+extension type ET2<T>(T id) {
+ T get getter; /* Error */
+}
+
+extension type ET3(int id) {
+ void setter(int x); /* Error */
+}
+
+extension type ET4<T>(T id) {
+ void method(); /* Error */
+}
+
+extension type ET5(int id) {
+ int operator +(int other); /* Error */
+}
+
+class A {
+ int x();
+ dynamic noSuchMethod(Invocation invocation) => null;
+}
+
+extension type ET6(A id) implements A {
+ int method(); /* Error */
+
+ int get getter; /* Error */
+
+ void set setter(int v); /* Error */
+}
+
+extension E on A {
+ abstract int m; /* Error */
+
+ int method(); /* Error */
+
+ int get getter; /* Error */
+
+ void set setter(int v); /* Error */
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.expect
new file mode 100644
index 0000000..ccd3490
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// T get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void setter(int x); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int operator +(int other); /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ : super core::Object::•()
+ ;
+ no-such-method-forwarder method x() → core::int
+ return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+ method noSuchMethod(core::Invocation invocation) → dynamic
+ return null;
+}
+extension E on self::A {
+ get m = get self::E|m;
+ set m = set self::E|m;
+ method method = self::E|method;
+ method tearoff method = self::E|get#method;
+ get getter = self::E|get#getter;
+ set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ get m = get self::ET1|m;
+ set m = set self::ET1|m;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ get getter = self::ET2|get#getter;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ method setter = self::ET3|setter;
+ method tearoff setter = self::ET3|get#setter;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ method method = self::ET4|method;
+ method tearoff method = self::ET4|get#method;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ operator + = self::ET5|+;
+ constructor • = self::ET5|constructor#;
+ constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+ abstract extension-type-member representation-field get id() → self::A;
+ method method = self::ET6|method;
+ method tearoff method = self::ET6|get#method;
+ get getter = self::ET6|get#getter;
+ set setter = self::ET6|set#setter;
+ constructor • = self::ET6|constructor#;
+ constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ {
+ lowered final self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+ return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+ return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ {
+ lowered final self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ #this = id;
+ return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+ return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+ return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */ {
+ lowered final self::ET5 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+ return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */ {
+ lowered final self::ET6 /* = self::A */ #this = id;
+ return #this;
+}
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+ return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+ return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+ return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+constants {
+ #C1 = #x
+ #C2 = <core::Type*>[]
+ #C3 = <dynamic>[]
+ #C4 = <core::Symbol*, dynamic>{}
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.transformed.expect
new file mode 100644
index 0000000..ccd3490
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.strong.transformed.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// T get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void setter(int x); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int operator +(int other); /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ : super core::Object::•()
+ ;
+ no-such-method-forwarder method x() → core::int
+ return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+ method noSuchMethod(core::Invocation invocation) → dynamic
+ return null;
+}
+extension E on self::A {
+ get m = get self::E|m;
+ set m = set self::E|m;
+ method method = self::E|method;
+ method tearoff method = self::E|get#method;
+ get getter = self::E|get#getter;
+ set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ get m = get self::ET1|m;
+ set m = set self::ET1|m;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ get getter = self::ET2|get#getter;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ method setter = self::ET3|setter;
+ method tearoff setter = self::ET3|get#setter;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ method method = self::ET4|method;
+ method tearoff method = self::ET4|get#method;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ operator + = self::ET5|+;
+ constructor • = self::ET5|constructor#;
+ constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+ abstract extension-type-member representation-field get id() → self::A;
+ method method = self::ET6|method;
+ method tearoff method = self::ET6|get#method;
+ get getter = self::ET6|get#getter;
+ set setter = self::ET6|set#setter;
+ constructor • = self::ET6|constructor#;
+ constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ {
+ lowered final self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+ return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+ return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ {
+ lowered final self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ #this = id;
+ return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+ return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+ return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */ {
+ lowered final self::ET5 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+ return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */ {
+ lowered final self::ET6 /* = self::A */ #this = id;
+ return #this;
+}
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+ return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+ return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+ return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+constants {
+ #C1 = #x
+ #C2 = <core::Type*>[]
+ #C3 = <dynamic>[]
+ #C4 = <core::Symbol*, dynamic>{}
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline.expect
new file mode 100644
index 0000000..944d869
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline.expect
@@ -0,0 +1,30 @@
+extension type ET1(int id) {
+ abstract int m;
+}
+extension type ET2<T>(T id) {
+ T get getter;
+}
+extension type ET3(int id) {
+ void setter(int x);
+}
+extension type ET4<T>(T id) {
+ void method();
+}
+extension type ET5(int id) {
+ int operator +(int other);
+}
+class A {
+ int x();
+ dynamic noSuchMethod(Invocation invocation) => null;
+}
+extension type ET6(A id) implements A {
+ int method();
+ int get getter;
+ void set setter(int v);
+}
+extension E on A {
+ abstract int m;
+ int method();
+ int get getter;
+ void set setter(int v);
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2b55e2d
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.textual_outline_modelled.expect
@@ -0,0 +1,30 @@
+class A {
+ dynamic noSuchMethod(Invocation invocation) => null;
+ int x();
+}
+extension E on A {
+ abstract int m;
+ int get getter;
+ int method();
+ void set setter(int v);
+}
+extension type ET1(int id) {
+ abstract int m;
+}
+extension type ET2<T>(T id) {
+ T get getter;
+}
+extension type ET3(int id) {
+ void setter(int x);
+}
+extension type ET4<T>(T id) {
+ void method();
+}
+extension type ET5(int id) {
+ int operator +(int other);
+}
+extension type ET6(A id) implements A {
+ int get getter;
+ int method();
+ void set setter(int v);
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.expect
new file mode 100644
index 0000000..ccd3490
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// T get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void setter(int x); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int operator +(int other); /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ : super core::Object::•()
+ ;
+ no-such-method-forwarder method x() → core::int
+ return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+ method noSuchMethod(core::Invocation invocation) → dynamic
+ return null;
+}
+extension E on self::A {
+ get m = get self::E|m;
+ set m = set self::E|m;
+ method method = self::E|method;
+ method tearoff method = self::E|get#method;
+ get getter = self::E|get#getter;
+ set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ get m = get self::ET1|m;
+ set m = set self::ET1|m;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ get getter = self::ET2|get#getter;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ method setter = self::ET3|setter;
+ method tearoff setter = self::ET3|get#setter;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ method method = self::ET4|method;
+ method tearoff method = self::ET4|get#method;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ operator + = self::ET5|+;
+ constructor • = self::ET5|constructor#;
+ constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+ abstract extension-type-member representation-field get id() → self::A;
+ method method = self::ET6|method;
+ method tearoff method = self::ET6|get#method;
+ get getter = self::ET6|get#getter;
+ set setter = self::ET6|set#setter;
+ constructor • = self::ET6|constructor#;
+ constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ {
+ lowered final self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+ return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+ return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ {
+ lowered final self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ #this = id;
+ return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+ return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+ return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */ {
+ lowered final self::ET5 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+ return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */ {
+ lowered final self::ET6 /* = self::A */ #this = id;
+ return #this;
+}
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+ return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+ return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+ return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+constants {
+ #C1 = #x
+ #C2 = <core::Type*>[]
+ #C3 = <dynamic>[]
+ #C4 = <core::Symbol*, dynamic>{}
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.modular.expect
new file mode 100644
index 0000000..ccd3490
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.modular.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// T get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void setter(int x); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int operator +(int other); /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ : super core::Object::•()
+ ;
+ no-such-method-forwarder method x() → core::int
+ return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+ method noSuchMethod(core::Invocation invocation) → dynamic
+ return null;
+}
+extension E on self::A {
+ get m = get self::E|m;
+ set m = set self::E|m;
+ method method = self::E|method;
+ method tearoff method = self::E|get#method;
+ get getter = self::E|get#getter;
+ set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ get m = get self::ET1|m;
+ set m = set self::ET1|m;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ get getter = self::ET2|get#getter;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ method setter = self::ET3|setter;
+ method tearoff setter = self::ET3|get#setter;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ method method = self::ET4|method;
+ method tearoff method = self::ET4|get#method;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ operator + = self::ET5|+;
+ constructor • = self::ET5|constructor#;
+ constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+ abstract extension-type-member representation-field get id() → self::A;
+ method method = self::ET6|method;
+ method tearoff method = self::ET6|get#method;
+ get getter = self::ET6|get#getter;
+ set setter = self::ET6|set#setter;
+ constructor • = self::ET6|constructor#;
+ constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ {
+ lowered final self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+ return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+ return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ {
+ lowered final self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ #this = id;
+ return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+ return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+ return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */ {
+ lowered final self::ET5 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+ return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */ {
+ lowered final self::ET6 /* = self::A */ #this = id;
+ return #this;
+}
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+ return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+ return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+ return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+constants {
+ #C1 = #x
+ #C2 = <core::Type*>[]
+ #C3 = <dynamic>[]
+ #C4 = <core::Symbol*, dynamic>{}
+}
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.outline.expect
new file mode 100644
index 0000000..ec6f334
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.outline.expect
@@ -0,0 +1,184 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// T get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void setter(int x); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int operator +(int other); /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ ;
+ no-such-method-forwarder method x() → core::int
+ return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#x, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+ method noSuchMethod(core::Invocation invocation) → dynamic
+ ;
+}
+extension E on self::A {
+ get m = get self::E|m;
+ set m = set self::E|m;
+ method method = self::E|method;
+ method tearoff method = self::E|get#method;
+ get getter = self::E|get#getter;
+ set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ get m = get self::ET1|m;
+ set m = set self::ET1|m;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ get getter = self::ET2|get#getter;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ method setter = self::ET3|setter;
+ method tearoff setter = self::ET3|get#setter;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ method method = self::ET4|method;
+ method tearoff method = self::ET4|get#method;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ operator + = self::ET5|+;
+ constructor • = self::ET5|constructor#;
+ constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+ abstract extension-type-member representation-field get id() → self::A;
+ method method = self::ET6|method;
+ method tearoff method = self::ET6|get#method;
+ get getter = self::ET6|get#getter;
+ set setter = self::ET6|set#setter;
+ constructor • = self::ET6|constructor#;
+ constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */
+ ;
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */
+ ;
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+ return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */
+ ;
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+ return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */
+ ;
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+ return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+ return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */
+ ;
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+ return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */
+ ;
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+ return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+ return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+ return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+
+Extra constant evaluation status:
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:26:7 -> SymbolConstant(#x)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:26:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:26:7 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:26:7 -> MapConstant(const <Symbol*, dynamic>{})
+Extra constant evaluation: evaluated: 34, effectively constant: 4
diff --git a/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.transformed.expect
new file mode 100644
index 0000000..ccd3490
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/abstract_members.dart.weak.transformed.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:6:16: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:10:9: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// T get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:14:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void setter(int x); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:18:8: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:22:16: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int operator +(int other); /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:31:7: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:33:11: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:35:12: Error: Extension types can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:39:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// abstract int m; /* Error */
+// ^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:41:7: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int method(); /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:43:11: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// int get getter; /* Error */
+// ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/abstract_members.dart:45:12: Error: Extensions can't declare abstract members.
+// Try providing an implementation for the member.
+// void set setter(int v); /* Error */
+// ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ : super core::Object::•()
+ ;
+ no-such-method-forwarder method x() → core::int
+ return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::int;
+ method noSuchMethod(core::Invocation invocation) → dynamic
+ return null;
+}
+extension E on self::A {
+ get m = get self::E|m;
+ set m = set self::E|m;
+ method method = self::E|method;
+ method tearoff method = self::E|get#method;
+ get getter = self::E|get#getter;
+ set setter = self::E|set#setter;
+}
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ get m = get self::ET1|m;
+ set m = set self::ET1|m;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ get getter = self::ET2|get#getter;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ method setter = self::ET3|setter;
+ method tearoff setter = self::ET3|get#setter;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+ abstract extension-type-member representation-field get id() → T%;
+ method method = self::ET4|method;
+ method tearoff method = self::ET4|get#method;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ operator + = self::ET5|+;
+ constructor • = self::ET5|constructor#;
+ constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(self::A id) implements self::A {
+ abstract extension-type-member representation-field get id() → self::A;
+ method method = self::ET6|method;
+ method tearoff method = self::ET6|get#method;
+ get getter = self::ET6|get#getter;
+ set setter = self::ET6|set#setter;
+ constructor • = self::ET6|constructor#;
+ constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static abstract extension-type-member get ET1|m() → core::int;
+static abstract extension-type-member set ET1|m(core::int #externalFieldValue) → void;
+static extension-type-member method ET2|constructor#<T extends core::Object? = dynamic>(self::ET2|constructor#::T% id) → self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ {
+ lowered final self::ET2<self::ET2|constructor#::T%> /* = self::ET2|constructor#::T% */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|constructor#_#new#tearOff::T% id) → self::ET2<self::ET2|constructor#_#new#tearOff::T%>% /* = self::ET2|constructor#_#new#tearOff::T% */
+ return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET2|get#getter<T extends core::Object? = dynamic>(lowered final self::ET2<self::ET2|get#getter::T%> /* = self::ET2|get#getter::T% */ #this) → self::ET2|get#getter::T%;
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static abstract extension-type-member method ET3|setter(lowered final self::ET3 /* = core::int */ #this, core::int x) → void;
+static extension-type-member method ET3|get#setter(lowered final self::ET3 /* = core::int */ #this) → (core::int) → void
+ return (core::int x) → void => self::ET3|setter(#this, x);
+static extension-type-member method ET4|constructor#<T extends core::Object? = dynamic>(self::ET4|constructor#::T% id) → self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ {
+ lowered final self::ET4<self::ET4|constructor#::T%> /* = self::ET4|constructor#::T% */ #this = id;
+ return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|constructor#_#new#tearOff::T% id) → self::ET4<self::ET4|constructor#_#new#tearOff::T%>% /* = self::ET4|constructor#_#new#tearOff::T% */
+ return self::ET4|constructor#<self::ET4|constructor#_#new#tearOff::T%>(id);
+static abstract extension-type-member method ET4|method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|method::T%> /* = self::ET4|method::T% */ #this) → void;
+static extension-type-member method ET4|get#method<T extends core::Object? = dynamic>(lowered final self::ET4<self::ET4|get#method::T%>% /* = self::ET4|get#method::T% */ #this) → () → void
+ return () → void => self::ET4|method<self::ET4|get#method::T%>(#this);
+static extension-type-member method ET5|constructor#(core::int id) → self::ET5 /* = core::int */ {
+ lowered final self::ET5 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::int id) → self::ET5 /* = core::int */
+ return self::ET5|constructor#(id);
+static abstract extension-type-member method ET5|+(lowered final self::ET5 /* = core::int */ #this, core::int other) → core::int;
+static extension-type-member method ET6|constructor#(self::A id) → self::ET6 /* = self::A */ {
+ lowered final self::ET6 /* = self::A */ #this = id;
+ return #this;
+}
+static extension-type-member method ET6|constructor#_#new#tearOff(self::A id) → self::ET6 /* = self::A */
+ return self::ET6|constructor#(id);
+static abstract extension-type-member method ET6|method(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static extension-type-member method ET6|get#method(lowered final self::ET6 /* = self::A */ #this) → () → core::int
+ return () → core::int => self::ET6|method(#this);
+static abstract extension-type-member method ET6|get#getter(lowered final self::ET6 /* = self::A */ #this) → core::int;
+static abstract extension-type-member method ET6|set#setter(lowered final self::ET6 /* = self::A */ #this, core::int v) → void;
+static abstract extension-member get E|m() → core::int;
+static abstract extension-member set E|m(core::int #externalFieldValue) → void;
+static abstract extension-member method E|method(lowered final self::A #this) → core::int;
+static extension-member method E|get#method(lowered final self::A #this) → () → core::int
+ return () → core::int => self::E|method(#this);
+static abstract extension-member method E|get#getter(lowered final self::A #this) → core::int;
+static abstract extension-member method E|set#setter(lowered final self::A #this, core::int v) → void;
+
+constants {
+ #C1 = #x
+ #C2 = <core::Type*>[]
+ #C3 = <dynamic>[]
+ #C4 = <core::Symbol*, dynamic>{}
+}
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect
index 6f10dd4..3988d23 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect
@@ -1,4 +1,12 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int field = 42;
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect
index 6f10dd4..3988d23 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect
@@ -1,4 +1,12 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int field = 42;
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.expect
index 6f10dd4..3988d23 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.expect
@@ -1,4 +1,12 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int field = 42;
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.modular.expect
index 6f10dd4..3988d23 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.modular.expect
@@ -1,4 +1,12 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int field = 42;
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.outline.expect
index 19cc803..0342e27 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.outline.expect
@@ -1,4 +1,12 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int field = 42;
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.transformed.expect
index 6f10dd4..3988d23 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.weak.transformed.expect
@@ -1,4 +1,12 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/extension_type_declarations.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int field = 42;
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart b/pkg/front_end/testcases/extension_types/field_initializer.dart
new file mode 100644
index 0000000..5f5db01
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2023, 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.
+
+extension type ET1(int id) {
+ int id = 0;
+}
+
+extension type ET2(int id) {
+ int x = 0;
+}
+
+extension type ET3(int id) {
+ final int x = 0;
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.expect
new file mode 100644
index 0000000..da888e9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+// int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int x = 0;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this;
+ final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+ ^^";
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+ lowered final self::ET2 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.transformed.expect
new file mode 100644
index 0000000..da888e9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.transformed.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+// int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int x = 0;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this;
+ final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+ ^^";
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+ lowered final self::ET2 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline.expect
new file mode 100644
index 0000000..7b06f7e
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+extension type ET1(int id) {
+ int id = 0;
+}
+extension type ET2(int id) {
+ int x = 0;
+}
+extension type ET3(int id) {
+ final int x = 0;
+}
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7b06f7e
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+extension type ET1(int id) {
+ int id = 0;
+}
+extension type ET2(int id) {
+ int x = 0;
+}
+extension type ET3(int id) {
+ final int x = 0;
+}
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.expect
new file mode 100644
index 0000000..da888e9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+// int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int x = 0;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this;
+ final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+ ^^";
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+ lowered final self::ET2 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..da888e9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+// int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int x = 0;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this;
+ final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+ ^^";
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+ lowered final self::ET2 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.outline.expect
new file mode 100644
index 0000000..c1bb886
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.outline.expect
@@ -0,0 +1,58 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+// int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int x = 0;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */
+ ;
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */
+ ;
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */
+ ;
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.transformed.expect
new file mode 100644
index 0000000..da888e9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.weak.transformed.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:6:7: Error: 'id' is already declared in this scope.
+// int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:10:7: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/field_initializer.dart:14:13: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int x = 0;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this;
+ final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+ ^^";
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+ lowered final self::ET2 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart b/pkg/front_end/testcases/extension_types/late_fields.dart
new file mode 100644
index 0000000..58acc2e
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2023, 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.
+
+extension type ET1(int id) {
+ late int id = 0;
+}
+
+extension type ET2(int id) {
+ late int x = 0;
+}
+
+extension type ET3(int id) {
+ late final x = 0;
+}
+
+extension type ET4(int id) {
+ late final int x;
+}
+
+main() {
+ print(ET1);
+ print(ET2);
+ print(ET3);
+ print(ET4);
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.strong.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.expect
new file mode 100644
index 0000000..7546355
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.expect
@@ -0,0 +1,94 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+// late int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final int x;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this;
+ final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+ ^^";
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+ lowered final self::ET2 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */ {
+ lowered final self::ET4 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+ return self::ET4|constructor#(id);
+static method main() → dynamic {
+ core::print(#C1);
+ core::print(#C1);
+ core::print(#C1);
+ core::print(#C1);
+}
+
+constants {
+ #C1 = TypeLiteralConstant(core::int)
+}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.transformed.expect
new file mode 100644
index 0000000..7546355
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.transformed.expect
@@ -0,0 +1,94 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+// late int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final int x;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this;
+ final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+ ^^";
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+ lowered final self::ET2 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */ {
+ lowered final self::ET4 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+ return self::ET4|constructor#(id);
+static method main() → dynamic {
+ core::print(#C1);
+ core::print(#C1);
+ core::print(#C1);
+ core::print(#C1);
+}
+
+constants {
+ #C1 = TypeLiteralConstant(core::int)
+}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline.expect
new file mode 100644
index 0000000..9d432aa
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+extension type ET1(int id) {
+ late int id = 0;
+}
+extension type ET2(int id) {
+ late int x = 0;
+}
+extension type ET3(int id) {
+ late final x = 0;
+}
+extension type ET4(int id) {
+ late final int x;
+}
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9d432aa
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+extension type ET1(int id) {
+ late int id = 0;
+}
+extension type ET2(int id) {
+ late int x = 0;
+}
+extension type ET3(int id) {
+ late final x = 0;
+}
+extension type ET4(int id) {
+ late final int x;
+}
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.weak.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.expect
new file mode 100644
index 0000000..f1376e6
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.expect
@@ -0,0 +1,94 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+// late int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final int x;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this;
+ final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+ ^^";
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+ lowered final self::ET2 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */ {
+ lowered final self::ET4 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+ return self::ET4|constructor#(id);
+static method main() → dynamic {
+ core::print(#C1);
+ core::print(#C1);
+ core::print(#C1);
+ core::print(#C1);
+}
+
+constants {
+ #C1 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..f1376e6
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.modular.expect
@@ -0,0 +1,94 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+// late int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final int x;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this;
+ final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+ ^^";
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+ lowered final self::ET2 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */ {
+ lowered final self::ET4 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+ return self::ET4|constructor#(id);
+static method main() → dynamic {
+ core::print(#C1);
+ core::print(#C1);
+ core::print(#C1);
+ core::print(#C1);
+}
+
+constants {
+ #C1 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.outline.expect
new file mode 100644
index 0000000..084eccc
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.outline.expect
@@ -0,0 +1,75 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+// late int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final int x;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */
+ ;
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */
+ ;
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */
+ ;
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */
+ ;
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+ return self::ET4|constructor#(id);
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.transformed.expect
new file mode 100644
index 0000000..f1376e6
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.weak.transformed.expect
@@ -0,0 +1,94 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int id = 0;
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:6:12: Error: 'id' is already declared in this scope.
+// late int id = 0;
+// ^^
+// pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Context: Previous declaration of 'id'.
+// extension type ET1(int id) {
+// ^^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:10:12: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late int x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:14:14: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final x = 0;
+// ^
+//
+// pkg/front_end/testcases/extension_types/late_fields.dart:18:18: Error: Extension types can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final int x;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ constructor • = self::ET1|constructor#;
+ constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET2|constructor#;
+ constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET3|constructor#;
+ constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::int id) {
+ abstract extension-type-member representation-field get id() → core::int;
+ abstract extension-type-member representation-field get x() → core::int;
+ constructor • = self::ET4|constructor#;
+ constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int id) → self::ET1 /* = core::int */ {
+ lowered final self::ET1 /* = core::int */ #this;
+ final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+extension type ET1(int id) {
+ ^^";
+ return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+ return self::ET1|constructor#(id);
+static extension-type-member method ET2|constructor#(core::int id) → self::ET2 /* = core::int */ {
+ lowered final self::ET2 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff(core::int id) → self::ET2 /* = core::int */
+ return self::ET2|constructor#(id);
+static extension-type-member method ET3|constructor#(core::int id) → self::ET3 /* = core::int */ {
+ lowered final self::ET3 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+ return self::ET3|constructor#(id);
+static extension-type-member method ET4|constructor#(core::int id) → self::ET4 /* = core::int */ {
+ lowered final self::ET4 /* = core::int */ #this = id;
+ return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::int id) → self::ET4 /* = core::int */
+ return self::ET4|constructor#(id);
+static method main() → dynamic {
+ core::print(#C1);
+ core::print(#C1);
+ core::print(#C1);
+ core::print(#C1);
+}
+
+constants {
+ #C1 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.strong.expect b/pkg/front_end/testcases/extension_types/representation.dart.strong.expect
index fd1ad75..4cc2320 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.strong.expect
@@ -28,19 +28,6 @@
// extension type Duplicate(bool instanceField, int instanceField) {} // Error
// ^
//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect
index fd1ad75..4cc2320 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect
@@ -28,19 +28,6 @@
// extension type Duplicate(bool instanceField, int instanceField) {} // Error
// ^
//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.weak.expect b/pkg/front_end/testcases/extension_types/representation.dart.weak.expect
index fd1ad75..4cc2320 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.weak.expect
@@ -28,19 +28,6 @@
// extension type Duplicate(bool instanceField, int instanceField) {} // Error
// ^
//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/representation.dart.weak.modular.expect
index fd1ad75..4cc2320 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.weak.modular.expect
@@ -28,19 +28,6 @@
// extension type Duplicate(bool instanceField, int instanceField) {} // Error
// ^
//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/representation.dart.weak.transformed.expect
index fd1ad75..4cc2320 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.weak.transformed.expect
@@ -28,19 +28,6 @@
// extension type Duplicate(bool instanceField, int instanceField) {} // Error
// ^
//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// extension type Duplicate(bool instanceField, int instanceField) {} // Error
-// ^^^^^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect
index 985132d..2163b60 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect
@@ -9,19 +9,11 @@
// int a;
// ^
//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
-// A(this.a);
-// ^
-//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
-// int a;
-// ^
-//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field core::int a = null;
+ field core::int a;
constructor •(core::int a) → self::A
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
A(this.a);
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect
index 985132d..2163b60 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect
@@ -9,19 +9,11 @@
// int a;
// ^
//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
-// A(this.a);
-// ^
-//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
-// int a;
-// ^
-//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field core::int a = null;
+ field core::int a;
constructor •(core::int a) → self::A
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
A(this.a);
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect
index 985132d..2163b60 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect
@@ -9,19 +9,11 @@
// int a;
// ^
//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
-// A(this.a);
-// ^
-//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
-// int a;
-// ^
-//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field core::int a = null;
+ field core::int a;
constructor •(core::int a) → self::A
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
A(this.a);
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
index 985132d..2163b60 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
@@ -9,19 +9,11 @@
// int a;
// ^
//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
-// A(this.a);
-// ^
-//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
-// int a;
-// ^
-//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field core::int a = null;
+ field core::int a;
constructor •(core::int a) → self::A
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
A(this.a);
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect
index 985132d..2163b60 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect
@@ -9,19 +9,11 @@
// int a;
// ^
//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
-// A(this.a);
-// ^
-//
-// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
-// int a;
-// ^
-//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field core::int a = null;
+ field core::int a;
constructor •(core::int a) → self::A
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
A(this.a);
diff --git a/pkg/front_end/testcases/general/issue38938.dart.strong.expect b/pkg/front_end/testcases/general/issue38938.dart.strong.expect
index 210be7b..dd56910 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.strong.expect
@@ -9,21 +9,17 @@
// int? v;
// ^
//
-// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
-// A(this.v);
-// ^
-//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field core::int? v = null;
+ field core::int? v;
constructor •(core::int? v) → self::A
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
A(this.v);
^"
;
constructor second() → self::A
- : super core::Object::•()
+ : self::A::v = null, super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect
index 210be7b..dd56910 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect
@@ -9,21 +9,17 @@
// int? v;
// ^
//
-// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
-// A(this.v);
-// ^
-//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field core::int? v = null;
+ field core::int? v;
constructor •(core::int? v) → self::A
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
A(this.v);
^"
;
constructor second() → self::A
- : super core::Object::•()
+ : self::A::v = null, super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.expect
index 210be7b..dd56910 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.expect
@@ -9,21 +9,17 @@
// int? v;
// ^
//
-// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
-// A(this.v);
-// ^
-//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field core::int? v = null;
+ field core::int? v;
constructor •(core::int? v) → self::A
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
A(this.v);
^"
;
constructor second() → self::A
- : super core::Object::•()
+ : self::A::v = null, super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
index 210be7b..dd56910 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
@@ -9,21 +9,17 @@
// int? v;
// ^
//
-// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
-// A(this.v);
-// ^
-//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field core::int? v = null;
+ field core::int? v;
constructor •(core::int? v) → self::A
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
A(this.v);
^"
;
constructor second() → self::A
- : super core::Object::•()
+ : self::A::v = null, super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect
index 210be7b..dd56910 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect
@@ -9,21 +9,17 @@
// int? v;
// ^
//
-// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
-// A(this.v);
-// ^
-//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field core::int? v = null;
+ field core::int? v;
constructor •(core::int? v) → self::A
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
A(this.v);
^"
;
constructor second() → self::A
- : super core::Object::•()
+ : self::A::v = null, super core::Object::•()
;
}
diff --git a/pkg/front_end/testcases/general/issue43363.dart.strong.expect b/pkg/front_end/testcases/general/issue43363.dart.strong.expect
index 839de1f7..084810f 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.strong.expect
@@ -26,21 +26,12 @@
// this.x = 1;
// ^
//
-// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-// this.y = 6;
-// ^
-//
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// final int y;
-// ^
-//
import self as self;
import "dart:core" as core;
class E extends core::Object {
final field core::int x;
- final field core::int y = null;
+ final field core::int y;
constructor •() → self::E
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
this.x = 1;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect
index 839de1f7..084810f 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect
@@ -26,21 +26,12 @@
// this.x = 1;
// ^
//
-// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-// this.y = 6;
-// ^
-//
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// final int y;
-// ^
-//
import self as self;
import "dart:core" as core;
class E extends core::Object {
final field core::int x;
- final field core::int y = null;
+ final field core::int y;
constructor •() → self::E
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
this.x = 1;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.expect
index 839de1f7..084810f 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.expect
@@ -26,21 +26,12 @@
// this.x = 1;
// ^
//
-// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-// this.y = 6;
-// ^
-//
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// final int y;
-// ^
-//
import self as self;
import "dart:core" as core;
class E extends core::Object {
final field core::int x;
- final field core::int y = null;
+ final field core::int y;
constructor •() → self::E
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
this.x = 1;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
index 839de1f7..084810f 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
@@ -26,21 +26,12 @@
// this.x = 1;
// ^
//
-// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-// this.y = 6;
-// ^
-//
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// final int y;
-// ^
-//
import self as self;
import "dart:core" as core;
class E extends core::Object {
final field core::int x;
- final field core::int y = null;
+ final field core::int y;
constructor •() → self::E
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
this.x = 1;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
index 839de1f7..084810f 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
@@ -26,21 +26,12 @@
// this.x = 1;
// ^
//
-// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-// this.y = 6;
-// ^
-//
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-// final int y;
-// ^
-//
import self as self;
import "dart:core" as core;
class E extends core::Object {
final field core::int x;
- final field core::int y = null;
+ final field core::int y;
constructor •() → self::E
: final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
this.x = 1;