From 0e2ed5ab7a7741b822f4bcfec043c5e0549b838a Mon Sep 17 00:00:00 2001 From: Chloe Stefantsova Date: Wed, 25 Oct 2023 10:26:38 +0000 Subject: [PATCH] [cfe] Report an error on optional positional or named parameters in extension type declarations Part of https://github.com/dart-lang/sdk/issues/49731 Change-Id: I49e813f9573b2b66950e8aae572591b65b62e2ec Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/331260 Commit-Queue: Chloe Stefantsova Reviewed-by: Johnni Winther --- .../lib/src/messages/codes_generated.dart | 20 ++++ pkg/front_end/lib/src/fasta/modifier.dart | 17 ++-- .../lib/src/fasta/source/outline_builder.dart | 45 +++++++-- pkg/front_end/messages.status | 18 ++-- pkg/front_end/messages.yaml | 12 +++ .../issue52119.dart.strong.expect | 4 - .../issue52119.dart.strong.transformed.expect | 4 - .../issue52119.dart.weak.expect | 4 - .../issue52119.dart.weak.modular.expect | 4 - .../issue52119.dart.weak.outline.expect | 4 - .../issue52119.dart.weak.transformed.expect | 4 - .../representation.dart.strong.expect | 8 +- ...resentation.dart.strong.transformed.expect | 8 +- .../representation.dart.weak.expect | 8 +- .../representation.dart.weak.modular.expect | 8 +- .../representation.dart.weak.outline.expect | 8 +- ...epresentation.dart.weak.transformed.expect | 8 +- .../representation_field_error.dart | 6 ++ ...resentation_field_error.dart.strong.expect | 99 ++++++++++++++++++- ...field_error.dart.strong.transformed.expect | 99 ++++++++++++++++++- ...on_field_error.dart.textual_outline.expect | 6 ++ ...error.dart.textual_outline_modelled.expect | 6 ++ ...epresentation_field_error.dart.weak.expect | 99 ++++++++++++++++++- ...ation_field_error.dart.weak.modular.expect | 99 ++++++++++++++++++- ...ation_field_error.dart.weak.outline.expect | 86 +++++++++++++++- ...n_field_error.dart.weak.transformed.expect | 99 ++++++++++++++++++- 26 files changed, 700 insertions(+), 83 deletions(-) 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 198d0191ccf..12f831e4ab8 100644 --- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart +++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart @@ -10365,6 +10365,16 @@ Message _withArgumentsNamedMixinOverride(String name, String name2) { arguments: {'name': name, 'name2': name2}); } +// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. +const Code codeNamedParametersInExtensionTypeDeclaration = + messageNamedParametersInExtensionTypeDeclaration; + +// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. +const MessageCode messageNamedParametersInExtensionTypeDeclaration = + const MessageCode("NamedParametersInExtensionTypeDeclaration", + problemMessage: + r"""Extension type declarations can't have named parameters."""); + // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const Code codeNativeClauseShouldBeAnnotation = messageNativeClauseShouldBeAnnotation; @@ -11593,6 +11603,16 @@ const MessageCode messageOperatorWithTypeParameters = const MessageCode( r"""Types parameters aren't allowed when defining an operator.""", correctionMessage: r"""Try removing the type parameters."""); +// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. +const Code codeOptionalParametersInExtensionTypeDeclaration = + messageOptionalParametersInExtensionTypeDeclaration; + +// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. +const MessageCode messageOptionalParametersInExtensionTypeDeclaration = + const MessageCode("OptionalParametersInExtensionTypeDeclaration", + problemMessage: + r"""Extension type declarations can't have optional parameters."""); + // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. const Template< Message Function( diff --git a/pkg/front_end/lib/src/fasta/modifier.dart b/pkg/front_end/lib/src/fasta/modifier.dart index 4606ec36ad0..4b25cdc33db 100644 --- a/pkg/front_end/lib/src/fasta/modifier.dart +++ b/pkg/front_end/lib/src/fasta/modifier.dart @@ -136,13 +136,18 @@ class Modifier { /// Method [maskContainsActualModifiers] returns `true` if the mask has any of /// the actual modifier bits set, and `false` otherwise. static bool maskContainsActualModifiers(int mask) { - mask &= ~(1 << mixinDeclarationMask); - mask &= ~(1 << hasInitializerMask); - mask &= ~(1 << initializingFormalMask); - mask &= ~(1 << declaresConstConstructorMask); - mask &= ~(1 << superInitializingFormalMask); - mask &= ~(1 << varMask); + mask &= ~(mixinDeclarationMask | + hasInitializerMask | + initializingFormalMask | + declaresConstConstructorMask | + superInitializingFormalMask | + varMask); return mask != 0; } + + /// Sets the bit in [mask] corresponding to [requiredMask] to 0. + static int removeRequiredMask(int mask) { + return mask & ~requiredMask; + } } diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart index 12e55c63510..79a54ee8330 100644 --- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart @@ -1627,14 +1627,9 @@ class OutlineBuilder extends StackListenerImpl { bool inExtensionType = declarationContext == DeclarationContext.ExtensionType; if (formals != null) { - if (inExtensionType && formals.isEmpty) { - libraryBuilder.addProblem( - messageExpectedRepresentationField, charOffset, 1, uri); - } - if (inExtensionType && formals.length > 1) { - libraryBuilder.addProblem( - messageMultipleRepresentationFields, charOffset, 1, uri); - } + int requiredPositionalCount = 0; + int? firstNamedParameterOffset; + int? firstOptionalPositionalParameterOffset; for (int i = 0; i < formals.length; i++) { FormalParameterBuilder formal = formals[i]; if (inExtensionType && formal.type is ImplicitTypeBuilder) { @@ -1642,10 +1637,21 @@ class OutlineBuilder extends StackListenerImpl { formal.charOffset, formal.name.length, formal.fileUri); } if (inExtensionType && - Modifier.maskContainsActualModifiers(formal.modifiers)) { + Modifier.maskContainsActualModifiers( + Modifier.removeRequiredMask(formal.modifiers))) { libraryBuilder.addProblem(messageRepresentationFieldModifier, formal.charOffset, formal.name.length, formal.fileUri); } + if (formal.isPositional) { + if (formal.isOptionalPositional) { + firstOptionalPositionalParameterOffset = formal.charOffset; + } else { + requiredPositionalCount++; + } + } + if (formal.isNamed) { + firstNamedParameterOffset = formal.charOffset; + } libraryBuilder.addPrimaryConstructorField( // TODO(johnniwinther): Support annotations on annotations on fields // defined through a primary constructor. This is not needed for @@ -1657,6 +1663,27 @@ class OutlineBuilder extends StackListenerImpl { charOffset: formal.charOffset); formals[i] = formal.forPrimaryConstructor(libraryBuilder); } + if (inExtensionType) { + if (firstOptionalPositionalParameterOffset != null) { + libraryBuilder.addProblem( + messageOptionalParametersInExtensionTypeDeclaration, + firstOptionalPositionalParameterOffset, + 1, + uri); + } else if (firstNamedParameterOffset != null) { + libraryBuilder.addProblem( + messageNamedParametersInExtensionTypeDeclaration, + firstNamedParameterOffset, + 1, + uri); + } else if (requiredPositionalCount == 0) { + libraryBuilder.addProblem( + messageExpectedRepresentationField, charOffset, 1, uri); + } else if (inExtensionType && formals.length > 1) { + libraryBuilder.addProblem( + messageMultipleRepresentationFields, charOffset, 1, uri); + } + } } libraryBuilder.beginNestedDeclaration( diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status index 39c792314d0..c4a0ea3c35a 100644 --- a/pkg/front_end/messages.status +++ b/pkg/front_end/messages.status @@ -378,8 +378,8 @@ FastaUsageShort/analyzerCode: Fail FastaUsageShort/example: Fail FfiAbiSpecificIntegerInvalid/analyzerCode: Fail FfiAbiSpecificIntegerMappingInvalid/analyzerCode: Fail -FfiCreateOfStructOrUnion/analyzerCode: Fail FfiCompoundImplementsFinalizable/analyzerCode: Fail +FfiCreateOfStructOrUnion/analyzerCode: Fail FfiDartTypeMismatch/analyzerCode: Fail FfiEmptyStruct/analyzerCode: Fail FfiExceptionalReturnNull/analyzerCode: Fail @@ -395,6 +395,7 @@ FfiFieldNoAnnotation/analyzerCode: Fail FfiFieldNull/analyzerCode: Fail FfiLeafCallMustNotReturnHandle/analyzerCode: Fail FfiLeafCallMustNotTakeHandle/analyzerCode: Fail +FfiNativeCallableListenerReturnVoid/analyzerCode: Fail FfiNativeMustBeExternal/analyzerCode: Fail FfiNativeOnlyNativeFieldWrapperClassCanBePointer/analyzerCode: Fail FfiNativeUnexpectedNumberOfParameters/analyzerCode: Fail @@ -402,7 +403,6 @@ FfiNativeUnexpectedNumberOfParametersWithReceiver/analyzerCode: Fail FfiNotStatic/analyzerCode: Fail FfiPackedAnnotation/analyzerCode: Fail FfiPackedAnnotationAlignment/analyzerCode: Fail -FfiNativeCallableListenerReturnVoid/analyzerCode: Fail FfiSizeAnnotation/analyzerCode: Fail FfiSizeAnnotationDimensions/analyzerCode: Fail FfiStructAnnotation/analyzerCode: Fail @@ -616,10 +616,10 @@ JsInteropExportMemberCollision/analyzerCode: Fail # Web compiler specific JsInteropExportMemberCollision/example: Fail # Web compiler specific JsInteropExportNoExportableMembers/analyzerCode: Fail # Web compiler specific JsInteropExportNoExportableMembers/example: Fail # Web compiler specific -JsInteropExtensionTypeNotInterop/analyzerCode: Fail # Web compiler specific -JsInteropExtensionTypeNotInterop/example: Fail # Web compiler specific JsInteropExtensionTypeMemberNotInterop/analyzerCode: Fail # Web compiler specific JsInteropExtensionTypeMemberNotInterop/example: Fail # Web compiler specific +JsInteropExtensionTypeNotInterop/analyzerCode: Fail # Web compiler specific +JsInteropExtensionTypeNotInterop/example: Fail # Web compiler specific JsInteropExtensionTypeUsedWithWrongJsAnnotation/analyzerCode: Fail # Web compiler specific JsInteropExtensionTypeUsedWithWrongJsAnnotation/example: Fail # Web compiler specific JsInteropExternalExtensionMemberOnTypeInvalid/analyzerCode: Fail # Web compiler specific @@ -628,6 +628,8 @@ JsInteropExternalExtensionMemberWithStaticDisallowed/analyzerCode: Fail # Web co JsInteropExternalExtensionMemberWithStaticDisallowed/example: Fail # Web compiler specific JsInteropExternalMemberNotJSAnnotated/analyzerCode: Fail # Web compiler specific JsInteropExternalMemberNotJSAnnotated/example: Fail # Web compiler specific +JsInteropFunctionToJSRequiresStaticType/analyzerCode: Fail # Web compiler specific +JsInteropFunctionToJSRequiresStaticType/example: Fail # Web compiler specific JsInteropInvalidStaticClassMemberName/analyzerCode: Fail JsInteropInvalidStaticClassMemberName/example: Fail JsInteropJSClassExtendsDartClass/analyzerCode: Fail # Web compiler specific @@ -642,12 +644,12 @@ JsInteropNonExternalMember/analyzerCode: Fail # Web compiler specific JsInteropNonExternalMember/example: Fail # Web compiler specific JsInteropNonStaticWithStaticInteropSupertype/analyzerCode: Fail # Web compiler specific JsInteropNonStaticWithStaticInteropSupertype/example: Fail # Web compiler specific +JsInteropObjectLiteralConstructorPositionalParameters/analyzerCode: Fail # Web compiler specific +JsInteropObjectLiteralConstructorPositionalParameters/example: Fail # Web compiler specific JsInteropOperatorCannotBeRenamed/analyzerCode: Fail # Web compiler specific JsInteropOperatorCannotBeRenamed/example: Fail # Web compiler specific JsInteropOperatorsNotSupported/analyzerCode: Fail # Web compiler specific JsInteropOperatorsNotSupported/example: Fail # Web compiler specific -JsInteropObjectLiteralConstructorPositionalParameters/analyzerCode: Fail # Web compiler specific -JsInteropObjectLiteralConstructorPositionalParameters/example: Fail # Web compiler specific JsInteropStaticInteropExternalMemberWithInvalidTypeParameters/analyzerCode: Fail # Web compiler specific JsInteropStaticInteropExternalMemberWithInvalidTypeParameters/example: Fail # Web compiler specific JsInteropStaticInteropExternalTypeViolation/analyzerCode: Fail # Web compiler specific @@ -680,8 +682,6 @@ JsInteropStaticInteropWithInvalidJsTypesSupertype/analyzerCode: Fail # Web compi JsInteropStaticInteropWithInvalidJsTypesSupertype/example: Fail # Web compiler specific JsInteropStaticInteropWithNonStaticSupertype/analyzerCode: Fail # Web compiler specific JsInteropStaticInteropWithNonStaticSupertype/example: Fail # Web compiler specific -JsInteropFunctionToJSRequiresStaticType/analyzerCode: Fail # Web compiler specific -JsInteropFunctionToJSRequiresStaticType/example: Fail # Web compiler specific JsInteropStrictModeForbiddenLibrary/analyzerCode: Fail # Web compiler specific JsInteropStrictModeForbiddenLibrary/example: Fail # Web compiler specific LanguageVersionInvalidInDotPackages/analyzerCode: Fail @@ -748,6 +748,7 @@ NameNotFoundInRecordNameGet/example: Fail NamedFunctionExpression/example: Fail NamedMixinOverride/analyzerCode: Fail NamedMixinOverride/example: Fail +NamedParametersInExtensionTypeDeclaration/analyzerCode: Fail NativeClauseShouldBeAnnotation/example: Fail NeverReachableSwitchDefaultError/analyzerCode: Fail NeverReachableSwitchDefaultError/example: Fail @@ -868,6 +869,7 @@ OperatorParameterMismatch1/example: Fail OperatorParameterMismatch2/example: Fail OperatorWithOptionalFormals/analyzerCode: Fail OperatorWithOptionalFormals/example: Fail +OptionalParametersInExtensionTypeDeclaration/analyzerCode: Fail OptionalSuperParameterWithoutInitializer/analyzerCode: Fail OptionalSuperParameterWithoutInitializer/example: Fail OverrideFewerNamedArguments/example: Fail diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml index a5c77fb7af6..0ed1a52d195 100644 --- a/pkg/front_end/messages.yaml +++ b/pkg/front_end/messages.yaml @@ -7468,3 +7468,15 @@ AwaitOfExtensionTypeNotFuture: script: | extension type E(num foo) { test(E e) async { await e; } } analyzerCode: AWAIT_OF_EXTENSION_TYPE_NOT_FUTURE + +NamedParametersInExtensionTypeDeclaration: + problemMessage: "Extension type declarations can't have named parameters." + experiments: inline-class + script: | + extension type E(int foo, {dynamic bar}) {} + +OptionalParametersInExtensionTypeDeclaration: + problemMessage: "Extension type declarations can't have optional parameters." + experiments: inline-class + script: | + extension type E(int foo, [dynamic bar]) {} diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect index e3ad4a43691..00d5683f3ea 100644 --- a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect +++ b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect @@ -6,10 +6,6 @@ library; // extension type Bar._(this.i) { // ^ // -// pkg/front_end/testcases/extension_types/issue52119.dart:15:30: Error: Representation fields can't have modifiers. -// extension type Bar._(this.i) { -// ^ -// // pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'. // Foo.erroneous() : this.unresolved(); // Error // ^^^^^^^^^^ diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect index e3ad4a43691..00d5683f3ea 100644 --- a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect @@ -6,10 +6,6 @@ library; // extension type Bar._(this.i) { // ^ // -// pkg/front_end/testcases/extension_types/issue52119.dart:15:30: Error: Representation fields can't have modifiers. -// extension type Bar._(this.i) { -// ^ -// // pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'. // Foo.erroneous() : this.unresolved(); // Error // ^^^^^^^^^^ diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.expect index e3ad4a43691..00d5683f3ea 100644 --- a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.expect +++ b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.expect @@ -6,10 +6,6 @@ library; // extension type Bar._(this.i) { // ^ // -// pkg/front_end/testcases/extension_types/issue52119.dart:15:30: Error: Representation fields can't have modifiers. -// extension type Bar._(this.i) { -// ^ -// // pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'. // Foo.erroneous() : this.unresolved(); // Error // ^^^^^^^^^^ diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.modular.expect index e3ad4a43691..00d5683f3ea 100644 --- a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.modular.expect +++ b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.modular.expect @@ -6,10 +6,6 @@ library; // extension type Bar._(this.i) { // ^ // -// pkg/front_end/testcases/extension_types/issue52119.dart:15:30: Error: Representation fields can't have modifiers. -// extension type Bar._(this.i) { -// ^ -// // pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'. // Foo.erroneous() : this.unresolved(); // Error // ^^^^^^^^^^ diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.outline.expect index e501d817d20..baaf6fc3958 100644 --- a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.outline.expect +++ b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.outline.expect @@ -6,10 +6,6 @@ library; // extension type Bar._(this.i) { // ^ // -// pkg/front_end/testcases/extension_types/issue52119.dart:15:30: Error: Representation fields can't have modifiers. -// extension type Bar._(this.i) { -// ^ -// import self as self; import "dart:core" as core; diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.transformed.expect index e3ad4a43691..00d5683f3ea 100644 --- a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.transformed.expect @@ -6,10 +6,6 @@ library; // extension type Bar._(this.i) { // ^ // -// pkg/front_end/testcases/extension_types/issue52119.dart:15:30: Error: Representation fields can't have modifiers. -// extension type Bar._(this.i) { -// ^ -// // pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'. // Foo.erroneous() : this.unresolved(); // Error // ^^^^^^^^^^ 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 742c4faaae3..b9e9c1af7ff 100644 --- a/pkg/front_end/testcases/extension_types/representation.dart.strong.expect +++ b/pkg/front_end/testcases/extension_types/representation.dart.strong.expect @@ -17,10 +17,6 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // -// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. -// extension type Duplicate(bool instanceField, int instanceField) {} // Error -// ^ -// // pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope. // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ @@ -28,6 +24,10 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // +// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. +// 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 // ^^^^^^^^^^^^^ 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 742c4faaae3..b9e9c1af7ff 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 @@ -17,10 +17,6 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // -// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. -// extension type Duplicate(bool instanceField, int instanceField) {} // Error -// ^ -// // pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope. // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ @@ -28,6 +24,10 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // +// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. +// 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 // ^^^^^^^^^^^^^ 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 742c4faaae3..b9e9c1af7ff 100644 --- a/pkg/front_end/testcases/extension_types/representation.dart.weak.expect +++ b/pkg/front_end/testcases/extension_types/representation.dart.weak.expect @@ -17,10 +17,6 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // -// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. -// extension type Duplicate(bool instanceField, int instanceField) {} // Error -// ^ -// // pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope. // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ @@ -28,6 +24,10 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // +// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. +// 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 // ^^^^^^^^^^^^^ 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 742c4faaae3..b9e9c1af7ff 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 @@ -17,10 +17,6 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // -// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. -// extension type Duplicate(bool instanceField, int instanceField) {} // Error -// ^ -// // pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope. // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ @@ -28,6 +24,10 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // +// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. +// 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 // ^^^^^^^^^^^^^ diff --git a/pkg/front_end/testcases/extension_types/representation.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/representation.dart.weak.outline.expect index 14f50a82d55..b7848716eb4 100644 --- a/pkg/front_end/testcases/extension_types/representation.dart.weak.outline.expect +++ b/pkg/front_end/testcases/extension_types/representation.dart.weak.outline.expect @@ -17,10 +17,6 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // -// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. -// extension type Duplicate(bool instanceField, int instanceField) {} // Error -// ^ -// // pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope. // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ @@ -28,6 +24,10 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // +// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. +// 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 742c4faaae3..b9e9c1af7ff 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 @@ -17,10 +17,6 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // -// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. -// extension type Duplicate(bool instanceField, int instanceField) {} // Error -// ^ -// // pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope. // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ @@ -28,6 +24,10 @@ library; // extension type Duplicate(bool instanceField, int instanceField) {} // Error // ^^^^^^^^^^^^^ // +// pkg/front_end/testcases/extension_types/representation.dart:9:25: Error: Each extension type should have exactly one representation field. +// 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 // ^^^^^^^^^^^^^ diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart b/pkg/front_end/testcases/extension_types/representation_field_error.dart index 24520716fa7..cba71e6d7d1 100644 --- a/pkg/front_end/testcases/extension_types/representation_field_error.dart +++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart @@ -14,3 +14,9 @@ extension type E9(int foo, String bar) {} // Error. extension type E10(num foo, bool bar, double baz) {} // Error. extension type E11(bool foo,) {} // Error. extension type E12(bool foo = false,) {} // Error. +extension type E13([int? foo]) {} // Error. +extension type E14({String? foo}) {} // Error. +extension type E15({required double foo}) {} // Error. +extension type E16(bool foo, [dynamic bar]) {} // Error. +extension type E17(Object foo, {num? bar, String? baz}) {} // Error. +extension type E18(double foo, {required int bar}) {} // Error. diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.expect index 5275978abd0..394fd1e0ae2 100644 --- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.expect +++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.expect @@ -78,6 +78,30 @@ library; // extension type E12(bool foo = false,) {} // Error. // ^ // +// pkg/front_end/testcases/extension_types/representation_field_error.dart:17:26: Error: Extension type declarations can't have optional parameters. +// extension type E13([int? foo]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:18:29: Error: Extension type declarations can't have named parameters. +// extension type E14({String? foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:19:37: Error: Extension type declarations can't have named parameters. +// extension type E15({required double foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:20:39: Error: Extension type declarations can't have optional parameters. +// extension type E16(bool foo, [dynamic bar]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:21:51: Error: Extension type declarations can't have named parameters. +// extension type E17(Object foo, {num? bar, String? baz}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:22:46: Error: Extension type declarations can't have named parameters. +// extension type E18(double foo, {required int bar}) {} // Error. +// ^ +// import self as self; import "dart:core" as core; @@ -143,6 +167,40 @@ extension type E12(core::bool foo) { constructor • = self::E12|constructor#; constructor tearoff • = self::E12|constructor#_#new#tearOff; } +extension type E13(core::int? foo) { + abstract inline-class-member representation-field get foo() → core::int?; + constructor • = self::E13|constructor#; + constructor tearoff • = self::E13|constructor#_#new#tearOff; +} +extension type E14(core::String? foo) { + abstract inline-class-member representation-field get foo() → core::String?; + constructor • = self::E14|constructor#; + constructor tearoff • = self::E14|constructor#_#new#tearOff; +} +extension type E15(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + constructor • = self::E15|constructor#; + constructor tearoff • = self::E15|constructor#_#new#tearOff; +} +extension type E16(core::bool foo) { + abstract inline-class-member representation-field get foo() → core::bool; + abstract inline-class-member representation-field get bar() → dynamic; + constructor • = self::E16|constructor#; + constructor tearoff • = self::E16|constructor#_#new#tearOff; +} +extension type E17(core::Object foo) { + abstract inline-class-member representation-field get foo() → core::Object; + abstract inline-class-member representation-field get bar() → core::num?; + abstract inline-class-member representation-field get baz() → core::String?; + constructor • = self::E17|constructor#; + constructor tearoff • = self::E17|constructor#_#new#tearOff; +} +extension type E18(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + abstract inline-class-member representation-field get bar() → core::int; + constructor • = self::E18|constructor#; + constructor tearoff • = self::E18|constructor#_#new#tearOff; +} static inline-class-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ { lowered final self::E1 /* = dynamic */ #this = foo; return #this; @@ -173,12 +231,12 @@ static inline-class-member method E5|constructor#(core::bool foo) → self::E5 / } static inline-class-member method E5|constructor#_#new#tearOff(core::bool foo) → self::E5 /* = core::bool */ return self::E5|constructor#(foo); +static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ + return self::E6|constructor#(foo); static inline-class-member method E6|constructor#(covariant-by-declaration final core::double foo) → self::E6 /* = core::double */ { lowered final self::E6 /* = core::double */ #this = foo; return #this; } -static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ - return self::E6|constructor#(foo); static inline-class-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ { lowered final self::E7 /* = dynamic */ #this = foo; return #this; @@ -215,7 +273,44 @@ static inline-class-member method E12|constructor#(core::bool foo = #C1) → sel } static inline-class-member method E12|constructor#_#new#tearOff(has-declared-initializer core::bool foo) → self::E12 /* = core::bool */ return self::E12|constructor#(foo); +static inline-class-member method E13|constructor#([core::int? foo = #C2]) → self::E13 /* = core::int? */ { + lowered final self::E13 /* = core::int? */ #this = foo; + return #this; +} +static inline-class-member method E13|constructor#_#new#tearOff([core::int? foo]) → self::E13 /* = core::int? */ + return self::E13|constructor#(foo); +static inline-class-member method E14|constructor#({core::String? foo = #C2}) → self::E14 /* = core::String? */ { + lowered final self::E14 /* = core::String? */ #this = foo; + return #this; +} +static inline-class-member method E14|constructor#_#new#tearOff({core::String? foo}) → self::E14 /* = core::String? */ + return self::E14|constructor#(foo: foo); +static inline-class-member method E15|constructor#({required core::double foo = #C2}) → self::E15 /* = core::double */ { + lowered final self::E15 /* = core::double */ #this = foo; + return #this; +} +static inline-class-member method E15|constructor#_#new#tearOff({required core::double foo}) → self::E15 /* = core::double */ + return self::E15|constructor#(foo: foo); +static inline-class-member method E16|constructor#(core::bool foo, [dynamic bar = #C2]) → self::E16 /* = core::bool */ { + lowered final self::E16 /* = core::bool */ #this = bar; + return #this; +} +static inline-class-member method E16|constructor#_#new#tearOff(core::bool foo, [dynamic bar]) → self::E16 /* = core::bool */ + return self::E16|constructor#(foo, bar); +static inline-class-member method E17|constructor#(core::Object foo, {core::num? bar = #C2, core::String? baz = #C2}) → self::E17 /* = core::Object */ { + lowered final self::E17 /* = core::Object */ #this = baz; + return #this; +} +static inline-class-member method E17|constructor#_#new#tearOff(core::Object foo, {core::num? bar, core::String? baz}) → self::E17 /* = core::Object */ + return self::E17|constructor#(foo, bar: bar, baz: baz); +static inline-class-member method E18|constructor#(core::double foo, {required core::int bar = #C2}) → self::E18 /* = core::double */ { + lowered final self::E18 /* = core::double */ #this = bar; + return #this; +} +static inline-class-member method E18|constructor#_#new#tearOff(core::double foo, {required core::int bar}) → self::E18 /* = core::double */ + return self::E18|constructor#(foo, bar: bar); constants { #C1 = false + #C2 = null } diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.transformed.expect index 5275978abd0..394fd1e0ae2 100644 --- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.transformed.expect @@ -78,6 +78,30 @@ library; // extension type E12(bool foo = false,) {} // Error. // ^ // +// pkg/front_end/testcases/extension_types/representation_field_error.dart:17:26: Error: Extension type declarations can't have optional parameters. +// extension type E13([int? foo]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:18:29: Error: Extension type declarations can't have named parameters. +// extension type E14({String? foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:19:37: Error: Extension type declarations can't have named parameters. +// extension type E15({required double foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:20:39: Error: Extension type declarations can't have optional parameters. +// extension type E16(bool foo, [dynamic bar]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:21:51: Error: Extension type declarations can't have named parameters. +// extension type E17(Object foo, {num? bar, String? baz}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:22:46: Error: Extension type declarations can't have named parameters. +// extension type E18(double foo, {required int bar}) {} // Error. +// ^ +// import self as self; import "dart:core" as core; @@ -143,6 +167,40 @@ extension type E12(core::bool foo) { constructor • = self::E12|constructor#; constructor tearoff • = self::E12|constructor#_#new#tearOff; } +extension type E13(core::int? foo) { + abstract inline-class-member representation-field get foo() → core::int?; + constructor • = self::E13|constructor#; + constructor tearoff • = self::E13|constructor#_#new#tearOff; +} +extension type E14(core::String? foo) { + abstract inline-class-member representation-field get foo() → core::String?; + constructor • = self::E14|constructor#; + constructor tearoff • = self::E14|constructor#_#new#tearOff; +} +extension type E15(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + constructor • = self::E15|constructor#; + constructor tearoff • = self::E15|constructor#_#new#tearOff; +} +extension type E16(core::bool foo) { + abstract inline-class-member representation-field get foo() → core::bool; + abstract inline-class-member representation-field get bar() → dynamic; + constructor • = self::E16|constructor#; + constructor tearoff • = self::E16|constructor#_#new#tearOff; +} +extension type E17(core::Object foo) { + abstract inline-class-member representation-field get foo() → core::Object; + abstract inline-class-member representation-field get bar() → core::num?; + abstract inline-class-member representation-field get baz() → core::String?; + constructor • = self::E17|constructor#; + constructor tearoff • = self::E17|constructor#_#new#tearOff; +} +extension type E18(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + abstract inline-class-member representation-field get bar() → core::int; + constructor • = self::E18|constructor#; + constructor tearoff • = self::E18|constructor#_#new#tearOff; +} static inline-class-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ { lowered final self::E1 /* = dynamic */ #this = foo; return #this; @@ -173,12 +231,12 @@ static inline-class-member method E5|constructor#(core::bool foo) → self::E5 / } static inline-class-member method E5|constructor#_#new#tearOff(core::bool foo) → self::E5 /* = core::bool */ return self::E5|constructor#(foo); +static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ + return self::E6|constructor#(foo); static inline-class-member method E6|constructor#(covariant-by-declaration final core::double foo) → self::E6 /* = core::double */ { lowered final self::E6 /* = core::double */ #this = foo; return #this; } -static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ - return self::E6|constructor#(foo); static inline-class-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ { lowered final self::E7 /* = dynamic */ #this = foo; return #this; @@ -215,7 +273,44 @@ static inline-class-member method E12|constructor#(core::bool foo = #C1) → sel } static inline-class-member method E12|constructor#_#new#tearOff(has-declared-initializer core::bool foo) → self::E12 /* = core::bool */ return self::E12|constructor#(foo); +static inline-class-member method E13|constructor#([core::int? foo = #C2]) → self::E13 /* = core::int? */ { + lowered final self::E13 /* = core::int? */ #this = foo; + return #this; +} +static inline-class-member method E13|constructor#_#new#tearOff([core::int? foo]) → self::E13 /* = core::int? */ + return self::E13|constructor#(foo); +static inline-class-member method E14|constructor#({core::String? foo = #C2}) → self::E14 /* = core::String? */ { + lowered final self::E14 /* = core::String? */ #this = foo; + return #this; +} +static inline-class-member method E14|constructor#_#new#tearOff({core::String? foo}) → self::E14 /* = core::String? */ + return self::E14|constructor#(foo: foo); +static inline-class-member method E15|constructor#({required core::double foo = #C2}) → self::E15 /* = core::double */ { + lowered final self::E15 /* = core::double */ #this = foo; + return #this; +} +static inline-class-member method E15|constructor#_#new#tearOff({required core::double foo}) → self::E15 /* = core::double */ + return self::E15|constructor#(foo: foo); +static inline-class-member method E16|constructor#(core::bool foo, [dynamic bar = #C2]) → self::E16 /* = core::bool */ { + lowered final self::E16 /* = core::bool */ #this = bar; + return #this; +} +static inline-class-member method E16|constructor#_#new#tearOff(core::bool foo, [dynamic bar]) → self::E16 /* = core::bool */ + return self::E16|constructor#(foo, bar); +static inline-class-member method E17|constructor#(core::Object foo, {core::num? bar = #C2, core::String? baz = #C2}) → self::E17 /* = core::Object */ { + lowered final self::E17 /* = core::Object */ #this = baz; + return #this; +} +static inline-class-member method E17|constructor#_#new#tearOff(core::Object foo, {core::num? bar, core::String? baz}) → self::E17 /* = core::Object */ + return self::E17|constructor#(foo, bar: bar, baz: baz); +static inline-class-member method E18|constructor#(core::double foo, {required core::int bar = #C2}) → self::E18 /* = core::double */ { + lowered final self::E18 /* = core::double */ #this = bar; + return #this; +} +static inline-class-member method E18|constructor#_#new#tearOff(core::double foo, {required core::int bar}) → self::E18 /* = core::double */ + return self::E18|constructor#(foo, bar: bar); constants { #C1 = false + #C2 = null } diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.textual_outline.expect index 6473d6ef780..4bf4cd2baa7 100644 --- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.textual_outline.expect +++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.textual_outline.expect @@ -10,3 +10,9 @@ extension type E9(int foo, String bar) {} extension type E10(num foo, bool bar, double baz) {} extension type E11(bool foo,) {} extension type E12(bool foo = false,) {} +extension type E13([int? foo]) {} +extension type E14({String? foo}) {} +extension type E15({required double foo}) {} +extension type E16(bool foo, [dynamic bar]) {} +extension type E17(Object foo, {num? bar, String? baz}) {} +extension type E18(double foo, {required int bar}) {} diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.textual_outline_modelled.expect index 10948c36730..4dee4b28181 100644 --- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.textual_outline_modelled.expect +++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.textual_outline_modelled.expect @@ -2,6 +2,12 @@ extension type E1(var foo) {} extension type E10(num foo, bool bar, double baz) {} extension type E11(bool foo,) {} extension type E12(bool foo = false,) {} +extension type E13([int? foo]) {} +extension type E14({String? foo}) {} +extension type E15({required double foo}) {} +extension type E16(bool foo, [dynamic bar]) {} +extension type E17(Object foo, {num? bar, String? baz}) {} +extension type E18(double foo, {required int bar}) {} extension type E2(final foo) {} extension type E3(final String foo) {} extension type E4(covariant num foo) {} diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.expect index 5275978abd0..394fd1e0ae2 100644 --- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.expect +++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.expect @@ -78,6 +78,30 @@ library; // extension type E12(bool foo = false,) {} // Error. // ^ // +// pkg/front_end/testcases/extension_types/representation_field_error.dart:17:26: Error: Extension type declarations can't have optional parameters. +// extension type E13([int? foo]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:18:29: Error: Extension type declarations can't have named parameters. +// extension type E14({String? foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:19:37: Error: Extension type declarations can't have named parameters. +// extension type E15({required double foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:20:39: Error: Extension type declarations can't have optional parameters. +// extension type E16(bool foo, [dynamic bar]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:21:51: Error: Extension type declarations can't have named parameters. +// extension type E17(Object foo, {num? bar, String? baz}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:22:46: Error: Extension type declarations can't have named parameters. +// extension type E18(double foo, {required int bar}) {} // Error. +// ^ +// import self as self; import "dart:core" as core; @@ -143,6 +167,40 @@ extension type E12(core::bool foo) { constructor • = self::E12|constructor#; constructor tearoff • = self::E12|constructor#_#new#tearOff; } +extension type E13(core::int? foo) { + abstract inline-class-member representation-field get foo() → core::int?; + constructor • = self::E13|constructor#; + constructor tearoff • = self::E13|constructor#_#new#tearOff; +} +extension type E14(core::String? foo) { + abstract inline-class-member representation-field get foo() → core::String?; + constructor • = self::E14|constructor#; + constructor tearoff • = self::E14|constructor#_#new#tearOff; +} +extension type E15(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + constructor • = self::E15|constructor#; + constructor tearoff • = self::E15|constructor#_#new#tearOff; +} +extension type E16(core::bool foo) { + abstract inline-class-member representation-field get foo() → core::bool; + abstract inline-class-member representation-field get bar() → dynamic; + constructor • = self::E16|constructor#; + constructor tearoff • = self::E16|constructor#_#new#tearOff; +} +extension type E17(core::Object foo) { + abstract inline-class-member representation-field get foo() → core::Object; + abstract inline-class-member representation-field get bar() → core::num?; + abstract inline-class-member representation-field get baz() → core::String?; + constructor • = self::E17|constructor#; + constructor tearoff • = self::E17|constructor#_#new#tearOff; +} +extension type E18(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + abstract inline-class-member representation-field get bar() → core::int; + constructor • = self::E18|constructor#; + constructor tearoff • = self::E18|constructor#_#new#tearOff; +} static inline-class-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ { lowered final self::E1 /* = dynamic */ #this = foo; return #this; @@ -173,12 +231,12 @@ static inline-class-member method E5|constructor#(core::bool foo) → self::E5 / } static inline-class-member method E5|constructor#_#new#tearOff(core::bool foo) → self::E5 /* = core::bool */ return self::E5|constructor#(foo); +static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ + return self::E6|constructor#(foo); static inline-class-member method E6|constructor#(covariant-by-declaration final core::double foo) → self::E6 /* = core::double */ { lowered final self::E6 /* = core::double */ #this = foo; return #this; } -static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ - return self::E6|constructor#(foo); static inline-class-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ { lowered final self::E7 /* = dynamic */ #this = foo; return #this; @@ -215,7 +273,44 @@ static inline-class-member method E12|constructor#(core::bool foo = #C1) → sel } static inline-class-member method E12|constructor#_#new#tearOff(has-declared-initializer core::bool foo) → self::E12 /* = core::bool */ return self::E12|constructor#(foo); +static inline-class-member method E13|constructor#([core::int? foo = #C2]) → self::E13 /* = core::int? */ { + lowered final self::E13 /* = core::int? */ #this = foo; + return #this; +} +static inline-class-member method E13|constructor#_#new#tearOff([core::int? foo]) → self::E13 /* = core::int? */ + return self::E13|constructor#(foo); +static inline-class-member method E14|constructor#({core::String? foo = #C2}) → self::E14 /* = core::String? */ { + lowered final self::E14 /* = core::String? */ #this = foo; + return #this; +} +static inline-class-member method E14|constructor#_#new#tearOff({core::String? foo}) → self::E14 /* = core::String? */ + return self::E14|constructor#(foo: foo); +static inline-class-member method E15|constructor#({required core::double foo = #C2}) → self::E15 /* = core::double */ { + lowered final self::E15 /* = core::double */ #this = foo; + return #this; +} +static inline-class-member method E15|constructor#_#new#tearOff({required core::double foo}) → self::E15 /* = core::double */ + return self::E15|constructor#(foo: foo); +static inline-class-member method E16|constructor#(core::bool foo, [dynamic bar = #C2]) → self::E16 /* = core::bool */ { + lowered final self::E16 /* = core::bool */ #this = bar; + return #this; +} +static inline-class-member method E16|constructor#_#new#tearOff(core::bool foo, [dynamic bar]) → self::E16 /* = core::bool */ + return self::E16|constructor#(foo, bar); +static inline-class-member method E17|constructor#(core::Object foo, {core::num? bar = #C2, core::String? baz = #C2}) → self::E17 /* = core::Object */ { + lowered final self::E17 /* = core::Object */ #this = baz; + return #this; +} +static inline-class-member method E17|constructor#_#new#tearOff(core::Object foo, {core::num? bar, core::String? baz}) → self::E17 /* = core::Object */ + return self::E17|constructor#(foo, bar: bar, baz: baz); +static inline-class-member method E18|constructor#(core::double foo, {required core::int bar = #C2}) → self::E18 /* = core::double */ { + lowered final self::E18 /* = core::double */ #this = bar; + return #this; +} +static inline-class-member method E18|constructor#_#new#tearOff(core::double foo, {required core::int bar}) → self::E18 /* = core::double */ + return self::E18|constructor#(foo, bar: bar); constants { #C1 = false + #C2 = null } diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.modular.expect index 5275978abd0..394fd1e0ae2 100644 --- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.modular.expect +++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.modular.expect @@ -78,6 +78,30 @@ library; // extension type E12(bool foo = false,) {} // Error. // ^ // +// pkg/front_end/testcases/extension_types/representation_field_error.dart:17:26: Error: Extension type declarations can't have optional parameters. +// extension type E13([int? foo]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:18:29: Error: Extension type declarations can't have named parameters. +// extension type E14({String? foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:19:37: Error: Extension type declarations can't have named parameters. +// extension type E15({required double foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:20:39: Error: Extension type declarations can't have optional parameters. +// extension type E16(bool foo, [dynamic bar]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:21:51: Error: Extension type declarations can't have named parameters. +// extension type E17(Object foo, {num? bar, String? baz}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:22:46: Error: Extension type declarations can't have named parameters. +// extension type E18(double foo, {required int bar}) {} // Error. +// ^ +// import self as self; import "dart:core" as core; @@ -143,6 +167,40 @@ extension type E12(core::bool foo) { constructor • = self::E12|constructor#; constructor tearoff • = self::E12|constructor#_#new#tearOff; } +extension type E13(core::int? foo) { + abstract inline-class-member representation-field get foo() → core::int?; + constructor • = self::E13|constructor#; + constructor tearoff • = self::E13|constructor#_#new#tearOff; +} +extension type E14(core::String? foo) { + abstract inline-class-member representation-field get foo() → core::String?; + constructor • = self::E14|constructor#; + constructor tearoff • = self::E14|constructor#_#new#tearOff; +} +extension type E15(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + constructor • = self::E15|constructor#; + constructor tearoff • = self::E15|constructor#_#new#tearOff; +} +extension type E16(core::bool foo) { + abstract inline-class-member representation-field get foo() → core::bool; + abstract inline-class-member representation-field get bar() → dynamic; + constructor • = self::E16|constructor#; + constructor tearoff • = self::E16|constructor#_#new#tearOff; +} +extension type E17(core::Object foo) { + abstract inline-class-member representation-field get foo() → core::Object; + abstract inline-class-member representation-field get bar() → core::num?; + abstract inline-class-member representation-field get baz() → core::String?; + constructor • = self::E17|constructor#; + constructor tearoff • = self::E17|constructor#_#new#tearOff; +} +extension type E18(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + abstract inline-class-member representation-field get bar() → core::int; + constructor • = self::E18|constructor#; + constructor tearoff • = self::E18|constructor#_#new#tearOff; +} static inline-class-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ { lowered final self::E1 /* = dynamic */ #this = foo; return #this; @@ -173,12 +231,12 @@ static inline-class-member method E5|constructor#(core::bool foo) → self::E5 / } static inline-class-member method E5|constructor#_#new#tearOff(core::bool foo) → self::E5 /* = core::bool */ return self::E5|constructor#(foo); +static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ + return self::E6|constructor#(foo); static inline-class-member method E6|constructor#(covariant-by-declaration final core::double foo) → self::E6 /* = core::double */ { lowered final self::E6 /* = core::double */ #this = foo; return #this; } -static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ - return self::E6|constructor#(foo); static inline-class-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ { lowered final self::E7 /* = dynamic */ #this = foo; return #this; @@ -215,7 +273,44 @@ static inline-class-member method E12|constructor#(core::bool foo = #C1) → sel } static inline-class-member method E12|constructor#_#new#tearOff(has-declared-initializer core::bool foo) → self::E12 /* = core::bool */ return self::E12|constructor#(foo); +static inline-class-member method E13|constructor#([core::int? foo = #C2]) → self::E13 /* = core::int? */ { + lowered final self::E13 /* = core::int? */ #this = foo; + return #this; +} +static inline-class-member method E13|constructor#_#new#tearOff([core::int? foo]) → self::E13 /* = core::int? */ + return self::E13|constructor#(foo); +static inline-class-member method E14|constructor#({core::String? foo = #C2}) → self::E14 /* = core::String? */ { + lowered final self::E14 /* = core::String? */ #this = foo; + return #this; +} +static inline-class-member method E14|constructor#_#new#tearOff({core::String? foo}) → self::E14 /* = core::String? */ + return self::E14|constructor#(foo: foo); +static inline-class-member method E15|constructor#({required core::double foo = #C2}) → self::E15 /* = core::double */ { + lowered final self::E15 /* = core::double */ #this = foo; + return #this; +} +static inline-class-member method E15|constructor#_#new#tearOff({required core::double foo}) → self::E15 /* = core::double */ + return self::E15|constructor#(foo: foo); +static inline-class-member method E16|constructor#(core::bool foo, [dynamic bar = #C2]) → self::E16 /* = core::bool */ { + lowered final self::E16 /* = core::bool */ #this = bar; + return #this; +} +static inline-class-member method E16|constructor#_#new#tearOff(core::bool foo, [dynamic bar]) → self::E16 /* = core::bool */ + return self::E16|constructor#(foo, bar); +static inline-class-member method E17|constructor#(core::Object foo, {core::num? bar = #C2, core::String? baz = #C2}) → self::E17 /* = core::Object */ { + lowered final self::E17 /* = core::Object */ #this = baz; + return #this; +} +static inline-class-member method E17|constructor#_#new#tearOff(core::Object foo, {core::num? bar, core::String? baz}) → self::E17 /* = core::Object */ + return self::E17|constructor#(foo, bar: bar, baz: baz); +static inline-class-member method E18|constructor#(core::double foo, {required core::int bar = #C2}) → self::E18 /* = core::double */ { + lowered final self::E18 /* = core::double */ #this = bar; + return #this; +} +static inline-class-member method E18|constructor#_#new#tearOff(core::double foo, {required core::int bar}) → self::E18 /* = core::double */ + return self::E18|constructor#(foo, bar: bar); constants { #C1 = false + #C2 = null } diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.outline.expect index 234cd6029ef..4d16fb2a937 100644 --- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.outline.expect +++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.outline.expect @@ -78,6 +78,30 @@ library; // extension type E12(bool foo = false,) {} // Error. // ^ // +// pkg/front_end/testcases/extension_types/representation_field_error.dart:17:26: Error: Extension type declarations can't have optional parameters. +// extension type E13([int? foo]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:18:29: Error: Extension type declarations can't have named parameters. +// extension type E14({String? foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:19:37: Error: Extension type declarations can't have named parameters. +// extension type E15({required double foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:20:39: Error: Extension type declarations can't have optional parameters. +// extension type E16(bool foo, [dynamic bar]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:21:51: Error: Extension type declarations can't have named parameters. +// extension type E17(Object foo, {num? bar, String? baz}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:22:46: Error: Extension type declarations can't have named parameters. +// extension type E18(double foo, {required int bar}) {} // Error. +// ^ +// import self as self; import "dart:core" as core; @@ -143,6 +167,40 @@ extension type E12(core::bool foo) { constructor • = self::E12|constructor#; constructor tearoff • = self::E12|constructor#_#new#tearOff; } +extension type E13(core::int? foo) { + abstract inline-class-member representation-field get foo() → core::int?; + constructor • = self::E13|constructor#; + constructor tearoff • = self::E13|constructor#_#new#tearOff; +} +extension type E14(core::String? foo) { + abstract inline-class-member representation-field get foo() → core::String?; + constructor • = self::E14|constructor#; + constructor tearoff • = self::E14|constructor#_#new#tearOff; +} +extension type E15(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + constructor • = self::E15|constructor#; + constructor tearoff • = self::E15|constructor#_#new#tearOff; +} +extension type E16(core::bool foo) { + abstract inline-class-member representation-field get foo() → core::bool; + abstract inline-class-member representation-field get bar() → dynamic; + constructor • = self::E16|constructor#; + constructor tearoff • = self::E16|constructor#_#new#tearOff; +} +extension type E17(core::Object foo) { + abstract inline-class-member representation-field get foo() → core::Object; + abstract inline-class-member representation-field get bar() → core::num?; + abstract inline-class-member representation-field get baz() → core::String?; + constructor • = self::E17|constructor#; + constructor tearoff • = self::E17|constructor#_#new#tearOff; +} +extension type E18(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + abstract inline-class-member representation-field get bar() → core::int; + constructor • = self::E18|constructor#; + constructor tearoff • = self::E18|constructor#_#new#tearOff; +} static inline-class-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ ; static inline-class-member method E1|constructor#_#new#tearOff(dynamic foo) → self::E1 /* = dynamic */ @@ -163,10 +221,10 @@ static inline-class-member method E5|constructor#(core::bool foo) → self::E5 / ; static inline-class-member method E5|constructor#_#new#tearOff(core::bool foo) → self::E5 /* = core::bool */ return self::E5|constructor#(foo); -static inline-class-member method E6|constructor#(covariant-by-declaration final core::double foo) → self::E6 /* = core::double */ - ; static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ return self::E6|constructor#(foo); +static inline-class-member method E6|constructor#(covariant-by-declaration final core::double foo) → self::E6 /* = core::double */ + ; static inline-class-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ ; static inline-class-member method E7|constructor#_#new#tearOff(dynamic foo) → self::E7 /* = dynamic */ @@ -191,3 +249,27 @@ static inline-class-member method E12|constructor#(has-declared-initializer core ; static inline-class-member method E12|constructor#_#new#tearOff(has-declared-initializer core::bool foo) → self::E12 /* = core::bool */ return self::E12|constructor#(foo); +static inline-class-member method E13|constructor#([core::int? foo = null]) → self::E13 /* = core::int? */ + ; +static inline-class-member method E13|constructor#_#new#tearOff([core::int? foo]) → self::E13 /* = core::int? */ + return self::E13|constructor#(foo); +static inline-class-member method E14|constructor#({core::String? foo = null}) → self::E14 /* = core::String? */ + ; +static inline-class-member method E14|constructor#_#new#tearOff({core::String? foo}) → self::E14 /* = core::String? */ + return self::E14|constructor#(foo: foo); +static inline-class-member method E15|constructor#({required core::double foo = null}) → self::E15 /* = core::double */ + ; +static inline-class-member method E15|constructor#_#new#tearOff({required core::double foo}) → self::E15 /* = core::double */ + return self::E15|constructor#(foo: foo); +static inline-class-member method E16|constructor#(core::bool foo, [dynamic bar = null]) → self::E16 /* = core::bool */ + ; +static inline-class-member method E16|constructor#_#new#tearOff(core::bool foo, [dynamic bar]) → self::E16 /* = core::bool */ + return self::E16|constructor#(foo, bar); +static inline-class-member method E17|constructor#(core::Object foo, {core::num? bar = null, core::String? baz = null}) → self::E17 /* = core::Object */ + ; +static inline-class-member method E17|constructor#_#new#tearOff(core::Object foo, {core::num? bar, core::String? baz}) → self::E17 /* = core::Object */ + return self::E17|constructor#(foo, bar: bar, baz: baz); +static inline-class-member method E18|constructor#(core::double foo, {required core::int bar = null}) → self::E18 /* = core::double */ + ; +static inline-class-member method E18|constructor#_#new#tearOff(core::double foo, {required core::int bar}) → self::E18 /* = core::double */ + return self::E18|constructor#(foo, bar: bar); diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.transformed.expect index 5275978abd0..394fd1e0ae2 100644 --- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.transformed.expect @@ -78,6 +78,30 @@ library; // extension type E12(bool foo = false,) {} // Error. // ^ // +// pkg/front_end/testcases/extension_types/representation_field_error.dart:17:26: Error: Extension type declarations can't have optional parameters. +// extension type E13([int? foo]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:18:29: Error: Extension type declarations can't have named parameters. +// extension type E14({String? foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:19:37: Error: Extension type declarations can't have named parameters. +// extension type E15({required double foo}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:20:39: Error: Extension type declarations can't have optional parameters. +// extension type E16(bool foo, [dynamic bar]) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:21:51: Error: Extension type declarations can't have named parameters. +// extension type E17(Object foo, {num? bar, String? baz}) {} // Error. +// ^ +// +// pkg/front_end/testcases/extension_types/representation_field_error.dart:22:46: Error: Extension type declarations can't have named parameters. +// extension type E18(double foo, {required int bar}) {} // Error. +// ^ +// import self as self; import "dart:core" as core; @@ -143,6 +167,40 @@ extension type E12(core::bool foo) { constructor • = self::E12|constructor#; constructor tearoff • = self::E12|constructor#_#new#tearOff; } +extension type E13(core::int? foo) { + abstract inline-class-member representation-field get foo() → core::int?; + constructor • = self::E13|constructor#; + constructor tearoff • = self::E13|constructor#_#new#tearOff; +} +extension type E14(core::String? foo) { + abstract inline-class-member representation-field get foo() → core::String?; + constructor • = self::E14|constructor#; + constructor tearoff • = self::E14|constructor#_#new#tearOff; +} +extension type E15(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + constructor • = self::E15|constructor#; + constructor tearoff • = self::E15|constructor#_#new#tearOff; +} +extension type E16(core::bool foo) { + abstract inline-class-member representation-field get foo() → core::bool; + abstract inline-class-member representation-field get bar() → dynamic; + constructor • = self::E16|constructor#; + constructor tearoff • = self::E16|constructor#_#new#tearOff; +} +extension type E17(core::Object foo) { + abstract inline-class-member representation-field get foo() → core::Object; + abstract inline-class-member representation-field get bar() → core::num?; + abstract inline-class-member representation-field get baz() → core::String?; + constructor • = self::E17|constructor#; + constructor tearoff • = self::E17|constructor#_#new#tearOff; +} +extension type E18(core::double foo) { + abstract inline-class-member representation-field get foo() → core::double; + abstract inline-class-member representation-field get bar() → core::int; + constructor • = self::E18|constructor#; + constructor tearoff • = self::E18|constructor#_#new#tearOff; +} static inline-class-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ { lowered final self::E1 /* = dynamic */ #this = foo; return #this; @@ -173,12 +231,12 @@ static inline-class-member method E5|constructor#(core::bool foo) → self::E5 / } static inline-class-member method E5|constructor#_#new#tearOff(core::bool foo) → self::E5 /* = core::bool */ return self::E5|constructor#(foo); +static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ + return self::E6|constructor#(foo); static inline-class-member method E6|constructor#(covariant-by-declaration final core::double foo) → self::E6 /* = core::double */ { lowered final self::E6 /* = core::double */ #this = foo; return #this; } -static inline-class-member method E6|constructor#_#new#tearOff(core::double foo) → self::E6 /* = core::double */ - return self::E6|constructor#(foo); static inline-class-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ { lowered final self::E7 /* = dynamic */ #this = foo; return #this; @@ -215,7 +273,44 @@ static inline-class-member method E12|constructor#(core::bool foo = #C1) → sel } static inline-class-member method E12|constructor#_#new#tearOff(has-declared-initializer core::bool foo) → self::E12 /* = core::bool */ return self::E12|constructor#(foo); +static inline-class-member method E13|constructor#([core::int? foo = #C2]) → self::E13 /* = core::int? */ { + lowered final self::E13 /* = core::int? */ #this = foo; + return #this; +} +static inline-class-member method E13|constructor#_#new#tearOff([core::int? foo]) → self::E13 /* = core::int? */ + return self::E13|constructor#(foo); +static inline-class-member method E14|constructor#({core::String? foo = #C2}) → self::E14 /* = core::String? */ { + lowered final self::E14 /* = core::String? */ #this = foo; + return #this; +} +static inline-class-member method E14|constructor#_#new#tearOff({core::String? foo}) → self::E14 /* = core::String? */ + return self::E14|constructor#(foo: foo); +static inline-class-member method E15|constructor#({required core::double foo = #C2}) → self::E15 /* = core::double */ { + lowered final self::E15 /* = core::double */ #this = foo; + return #this; +} +static inline-class-member method E15|constructor#_#new#tearOff({required core::double foo}) → self::E15 /* = core::double */ + return self::E15|constructor#(foo: foo); +static inline-class-member method E16|constructor#(core::bool foo, [dynamic bar = #C2]) → self::E16 /* = core::bool */ { + lowered final self::E16 /* = core::bool */ #this = bar; + return #this; +} +static inline-class-member method E16|constructor#_#new#tearOff(core::bool foo, [dynamic bar]) → self::E16 /* = core::bool */ + return self::E16|constructor#(foo, bar); +static inline-class-member method E17|constructor#(core::Object foo, {core::num? bar = #C2, core::String? baz = #C2}) → self::E17 /* = core::Object */ { + lowered final self::E17 /* = core::Object */ #this = baz; + return #this; +} +static inline-class-member method E17|constructor#_#new#tearOff(core::Object foo, {core::num? bar, core::String? baz}) → self::E17 /* = core::Object */ + return self::E17|constructor#(foo, bar: bar, baz: baz); +static inline-class-member method E18|constructor#(core::double foo, {required core::int bar = #C2}) → self::E18 /* = core::double */ { + lowered final self::E18 /* = core::double */ #this = bar; + return #this; +} +static inline-class-member method E18|constructor#_#new#tearOff(core::double foo, {required core::int bar}) → self::E18 /* = core::double */ + return self::E18|constructor#(foo, bar: bar); constants { #C1 = false + #C2 = null }