From 3ce1c7c03b61eccf54312981cc4a5f1b4782809d Mon Sep 17 00:00:00 2001 From: Martin Kustermann Date: Wed, 15 May 2024 07:03:28 +0000 Subject: [PATCH] [stable] [cfe] Ensure default values in synthesized function nodes Closes https://github.com/dart-lang/sdk/issues/55529 Cherry-pick: https://dart-review.googlesource.com/c/sdk/+/364325 Cherry-pick-request: https://github.com/dart-lang/sdk/issues/55714 Change-Id: If532820d53680a754c9e79a5a66367b1d44c6505 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/366300 Commit-Queue: Martin Kustermann Reviewed-by: Slava Egorov --- CHANGELOG.md | 7 +++ .../builder/formal_parameter_builder.dart | 8 ++-- .../kernel/constructor_tearoff_lowering.dart | 28 +++++++++--- .../lib/src/fasta/kernel/kernel_helper.dart | 13 ++++-- .../lib/src/fasta/kernel/kernel_target.dart | 43 ++++++++++++------- .../source/source_constructor_builder.dart | 31 ++++++++----- .../fasta/source/source_factory_builder.dart | 7 ++- .../fasta/source/source_library_builder.dart | 20 +++++++-- .../lib/src/fasta/source/source_loader.dart | 11 ++++- .../source/source_procedure_builder.dart | 3 +- .../source/source_type_alias_builder.dart | 9 ++-- .../test/spell_checking_list_common.txt | 2 + .../factory_tear_off.dart.weak.outline.expect | 6 +-- ...ff_default_values.dart.weak.outline.expect | 4 +- .../invalid_redirect.dart.weak.outline.expect | 2 +- .../issue52763.dart.weak.outline.expect | 4 +- ...named_mixin_application.dart.strong.expect | 2 +- ...application.dart.strong.transformed.expect | 2 +- .../named_mixin_application.dart.weak.expect | 2 +- ...mixin_application.dart.weak.modular.expect | 2 +- ...n_application.dart.weak.transformed.expect | 2 +- ..._factory_tear_off.dart.weak.outline.expect | 6 +-- ...ff_default_values.dart.weak.outline.expect | 4 +- ...lt_values_complex.dart.weak.outline.expect | 12 +++--- .../typedef_from.dart.weak.outline.expect | 2 +- .../main.dart.weak.modular.expect | 3 +- .../main.dart.weak.outline.expect | 3 +- ...typedef_identical.dart.weak.outline.expect | 2 +- ..._factory_tear_off.dart.weak.outline.expect | 6 +-- .../issue52763.dart.weak.outline.expect | 4 +- .../tear_off_patch/main.dart.strong.expect | 4 +- .../main.dart.strong.transformed.expect | 4 +- .../tear_off_patch/main.dart.weak.expect | 4 +- .../main.dart.weak.modular.expect | 4 +- .../main.dart.weak.outline.expect | 6 +-- .../main.dart.weak.transformed.expect | 4 +- .../testcases/dart2wasm/issue55529.dart | 28 ++++++++++++ .../dart2wasm/issue55529.dart.strong.expect | 43 +++++++++++++++++++ .../issue55529.dart.strong.transformed.expect | 43 +++++++++++++++++++ .../issue55529.dart.textual_outline.expect | 19 ++++++++ ...55529.dart.textual_outline_modelled.expect | 19 ++++++++ .../main.dart.weak.outline.expect | 2 +- .../issue53209.dart.weak.outline.expect | 2 +- .../bounds_parameters.dart.strong.expect | 4 +- ..._parameters.dart.strong.transformed.expect | 4 +- .../bounds_parameters.dart.weak.expect | 4 +- ...bounds_parameters.dart.weak.modular.expect | 4 +- ...bounds_parameters.dart.weak.outline.expect | 4 +- ...ds_parameters.dart.weak.transformed.expect | 4 +- .../weekly_bot_91_failure.dart.strong.expect | 4 +- ..._91_failure.dart.strong.transformed.expect | 4 +- .../weekly_bot_91_failure.dart.weak.expect | 4 +- ...ly_bot_91_failure.dart.weak.modular.expect | 4 +- ...ly_bot_91_failure.dart.weak.outline.expect | 4 +- ...ot_91_failure.dart.weak.transformed.expect | 4 +- ..._91_failure_variation_1.dart.strong.expect | 4 +- ...variation_1.dart.strong.transformed.expect | 4 +- ...ot_91_failure_variation_1.dart.weak.expect | 4 +- ...ilure_variation_1.dart.weak.modular.expect | 4 +- ...ilure_variation_1.dart.weak.outline.expect | 4 +- ...e_variation_1.dart.weak.transformed.expect | 4 +- .../main.dart.weak.outline.expect | 2 +- .../issue48548.dart.weak.outline.expect | 2 +- ...ng_default_values.dart.weak.outline.expect | 18 ++++---- ...ory_default_value.dart.weak.outline.expect | 2 +- .../main.dart.weak.outline.expect | 6 +-- ...s_local_inference.dart.weak.outline.expect | 2 +- ...erence_extension_method.dart.strong.expect | 24 +++++------ ...sion_method.dart.strong.transformed.expect | 24 +++++------ ...nference_extension_method.dart.weak.expect | 24 +++++------ ..._extension_method.dart.weak.modular.expect | 24 +++++------ ..._extension_method.dart.weak.outline.expect | 24 +++++------ ...ension_method.dart.weak.transformed.expect | 24 +++++------ .../nnbd/issue42362.dart.weak.outline.expect | 24 +++++------ .../nnbd/issue43276.dart.weak.outline.expect | 4 +- pkg/kernel/lib/verifier.dart | 41 +++++++++++++++--- 76 files changed, 508 insertions(+), 241 deletions(-) create mode 100644 pkg/front_end/testcases/dart2wasm/issue55529.dart create mode 100644 pkg/front_end/testcases/dart2wasm/issue55529.dart.strong.expect create mode 100644 pkg/front_end/testcases/dart2wasm/issue55529.dart.strong.transformed.expect create mode 100644 pkg/front_end/testcases/dart2wasm/issue55529.dart.textual_outline.expect create mode 100644 pkg/front_end/testcases/dart2wasm/issue55529.dart.textual_outline_modelled.expect diff --git a/CHANGELOG.md b/CHANGELOG.md index 983af842af7b..cabb78b45344 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## 3.4.1 + +This is a patch release that + +- Fixes a bug in CFE which an manifest in compilation errors of flutter web app + when compiled with dart2wasm. + ## 3.4.0 ### Language diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart index 4ed0bd67b73e..f387b6152ecf 100644 --- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart @@ -250,13 +250,15 @@ class FormalParameterBuilder extends ModifierBuilderImpl // and named parameters in several cases: // * for const constructors to enable constant evaluation, // * for instance methods because these might be needed to generated - // noSuchMethod forwarders, and + // noSuchMethod forwarders, // * for generative constructors to support forwarding constructors - // in mixin applications. + // in mixin applications, and + // * for factories, to uphold the invariant that optional parameters always + // have default values, even during modular compilation. if (parent is ConstructorBuilder) { return true; } else if (parent is SourceFactoryBuilder) { - return parent!.isFactory && parent!.isConst; + return parent!.isFactory; } else { return parent!.isClassInstanceMember; } diff --git a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart index 0fc0e292bc23..8d86039c9c6e 100644 --- a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart +++ b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart @@ -79,7 +79,7 @@ Procedure createTypedefTearOffProcedure( /// The [declarationConstructor] is the origin constructor and /// [implementationConstructor] is the augmentation constructor, if augmented, /// otherwise it is the [declarationConstructor]. -void buildConstructorTearOffProcedure( +DelayedDefaultValueCloner buildConstructorTearOffProcedure( {required Procedure tearOff, required Member declarationConstructor, required Member implementationConstructor, @@ -118,12 +118,17 @@ void buildConstructorTearOffProcedure( List typeArguments = freshTypeParameters.freshTypeArguments; Substitution substitution = freshTypeParameters.substitution; - _createParameters(tearOff, implementationConstructor, function, substitution, + DelayedDefaultValueCloner delayedDefaultValueCloner = _createParameters( + tearOff, + implementationConstructor, + function, + substitution, libraryBuilder); Arguments arguments = _createArguments(tearOff, typeArguments, fileOffset); _createTearOffBody(tearOff, declarationConstructor, arguments); tearOff.function.fileOffset = tearOff.fileOffset; tearOff.function.fileEndOffset = tearOff.fileOffset; + return delayedDefaultValueCloner; } /// Creates the parameters and body for [tearOff] for a typedef tearoff of @@ -134,7 +139,7 @@ void buildConstructorTearOffProcedure( /// The [declarationConstructor] is the origin constructor and /// [implementationConstructor] is the augmentation constructor, if augmented, /// otherwise it is the [declarationConstructor]. -void buildTypedefTearOffProcedure( +DelayedDefaultValueCloner buildTypedefTearOffProcedure( {required Procedure tearOff, required Member declarationConstructor, required Member implementationConstructor, @@ -185,7 +190,7 @@ void buildTypedefTearOffProcedure( (int index) => substitution.substituteType(typeArguments[index])); } } - _createParameters( + DelayedDefaultValueCloner delayedDefaultValueCloner = _createParameters( tearOff, implementationConstructor, function, @@ -195,6 +200,7 @@ void buildTypedefTearOffProcedure( _createTearOffBody(tearOff, declarationConstructor, arguments); tearOff.function.fileOffset = tearOff.fileOffset; tearOff.function.fileEndOffset = tearOff.fileOffset; + return delayedDefaultValueCloner; } /// Creates the parameters for the redirecting factory [tearOff] based on the @@ -207,13 +213,19 @@ void buildTypedefTearOffProcedure( FreshTypeParameters buildRedirectingFactoryTearOffProcedureParameters( {required Procedure tearOff, required Procedure implementationConstructor, - required SourceLibraryBuilder libraryBuilder}) { + required SourceLibraryBuilder libraryBuilder, + List? delayedDefaultValueCloners}) { FunctionNode function = implementationConstructor.function; FreshTypeParameters freshTypeParameters = _createFreshTypeParameters(function.typeParameters, tearOff.function); Substitution substitution = freshTypeParameters.substitution; - _createParameters(tearOff, implementationConstructor, function, substitution, + DelayedDefaultValueCloner delayedDefaultValueCloner = _createParameters( + tearOff, + implementationConstructor, + function, + substitution, libraryBuilder); + delayedDefaultValueCloners?.add(delayedDefaultValueCloner); tearOff.function.fileOffset = tearOff.fileOffset; tearOff.function.fileEndOffset = tearOff.fileOffset; return freshTypeParameters; @@ -295,7 +307,7 @@ FreshTypeParameters _createFreshTypeParameters( /// Creates the parameters for the [tearOff] lowering based of the parameters /// in [constructor] and using the [substitution] to compute the parameter and /// return types. -void _createParameters( +DelayedDefaultValueCloner _createParameters( Procedure tearOff, Member constructor, FunctionNode function, @@ -326,6 +338,8 @@ void _createParameters( tearOff, new TypeDependency(tearOff, constructor, substitution, copyReturnType: true)); + return new DelayedDefaultValueCloner(constructor, tearOff, + identicalSignatures: true, libraryBuilder: libraryBuilder); } /// Creates the [Arguments] for passing the parameters from [tearOff] to its diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart index 7dde01b99522..cfdbc207cd89 100644 --- a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart @@ -131,7 +131,9 @@ class DelayedDefaultValueCloner { VariableDeclaration synthesizedParameter = _synthesized.positionalParameters[superParameterIndex]; _cloneDefaultValueForSuperParameters( - originalParameter, synthesizedParameter, typeEnvironment); + originalParameter, synthesizedParameter, typeEnvironment, + isOptional: + superParameterIndex >= _synthesized.requiredParameterCount); } } } @@ -162,7 +164,8 @@ class DelayedDefaultValueCloner { VariableDeclaration synthesizedParameter = _synthesized.namedParameters[i]; _cloneDefaultValueForSuperParameters( - originalParameter, synthesizedParameter, typeEnvironment); + originalParameter, synthesizedParameter, typeEnvironment, + isOptional: !synthesizedParameter.isRequired); } else { // TODO(cstefantsova): Handle the erroneous case of missing names. } @@ -218,7 +221,8 @@ class DelayedDefaultValueCloner { void _cloneDefaultValueForSuperParameters( VariableDeclaration originalParameter, VariableDeclaration synthesizedParameter, - TypeEnvironment typeEnvironment) { + TypeEnvironment typeEnvironment, + {required bool isOptional}) { Expression? originalParameterInitializer = originalParameter.initializer; DartType? originalParameterInitializerType = originalParameterInitializer ?.getStaticType(new StaticTypeContext(synthesized, typeEnvironment)); @@ -227,6 +231,9 @@ class DelayedDefaultValueCloner { typeEnvironment.isSubtypeOf(originalParameterInitializerType, synthesizedParameterType, SubtypeCheckMode.withNullabilities)) { _cloneInitializer(originalParameter, synthesizedParameter); + } else if (originalParameterInitializer == null && isOptional) { + synthesizedParameter.initializer = new NullLiteral() + ..parent = synthesizedParameter; } else { synthesizedParameter.hasDeclaredInitializer = false; if (synthesizedParameterType.isPotentiallyNonNullable) { diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart index 59940697091f..ce58dfcb380a 100644 --- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart @@ -521,7 +521,11 @@ class KernelTarget extends TargetImplementation { loader.computeShowHideElements(); benchmarker?.enterPhase(BenchmarkPhases.outline_installTypedefTearOffs); - loader.installTypedefTearOffs(); + List? + typedefTearOffsDelayedDefaultValueCloners = + loader.installTypedefTearOffs(); + typedefTearOffsDelayedDefaultValueCloners + ?.forEach(registerDelayedDefaultValueCloner); benchmarker ?.enterPhase(BenchmarkPhases.outline_computeFieldPromotability); @@ -1111,12 +1115,15 @@ class KernelTarget extends TargetImplementation { forAbstractClassOrEnumOrMixin: classBuilder.isAbstract); if (constructorTearOff != null) { - buildConstructorTearOffProcedure( - tearOff: constructorTearOff, - declarationConstructor: constructor, - implementationConstructor: constructor, - enclosingDeclarationTypeParameters: classBuilder.cls.typeParameters, - libraryBuilder: libraryBuilder); + DelayedDefaultValueCloner delayedDefaultValueCloner = + buildConstructorTearOffProcedure( + tearOff: constructorTearOff, + declarationConstructor: constructor, + implementationConstructor: constructor, + enclosingDeclarationTypeParameters: + classBuilder.cls.typeParameters, + libraryBuilder: libraryBuilder); + registerDelayedDefaultValueCloner(delayedDefaultValueCloner); } SyntheticSourceConstructorBuilder constructorBuilder = new SyntheticSourceConstructorBuilder( @@ -1135,9 +1142,10 @@ class KernelTarget extends TargetImplementation { } void registerDelayedDefaultValueCloner(DelayedDefaultValueCloner cloner) { - assert(!_delayedDefaultValueCloners.containsKey(cloner.synthesized), - "Default cloner already registered for ${cloner.synthesized}."); - _delayedDefaultValueCloners[cloner.synthesized] = cloner; + // TODO(cstefantsova): Investigate the reason for the assumption breakage + // and uncomment the following line. + // assert(!_delayedDefaultValueCloners.containsKey(cloner.synthesized)); + _delayedDefaultValueCloners[cloner.synthesized] ??= cloner; } void finishSynthesizedParameters({bool forOutline = false}) { @@ -1190,12 +1198,15 @@ class KernelTarget extends TargetImplementation { forAbstractClassOrEnumOrMixin: enclosingClass.isAbstract || enclosingClass.isEnum); if (constructorTearOff != null) { - buildConstructorTearOffProcedure( - tearOff: constructorTearOff, - declarationConstructor: constructor, - implementationConstructor: constructor, - enclosingDeclarationTypeParameters: classBuilder.cls.typeParameters, - libraryBuilder: libraryBuilder); + DelayedDefaultValueCloner delayedDefaultValueCloner = + buildConstructorTearOffProcedure( + tearOff: constructorTearOff, + declarationConstructor: constructor, + implementationConstructor: constructor, + enclosingDeclarationTypeParameters: + classBuilder.cls.typeParameters, + libraryBuilder: libraryBuilder); + registerDelayedDefaultValueCloner(delayedDefaultValueCloner); } return new SyntheticSourceConstructorBuilder( classBuilder, constructor, constructorTearOff); diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart index 7fdd71584a2b..11a823d136f5 100644 --- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart @@ -544,12 +544,15 @@ class DeclaredSourceConstructorBuilder _constructor.isExternal = isExternal; if (_constructorTearOff != null) { - buildConstructorTearOffProcedure( - tearOff: _constructorTearOff, - declarationConstructor: constructor, - implementationConstructor: _constructor, - enclosingDeclarationTypeParameters: classBuilder.cls.typeParameters, - libraryBuilder: libraryBuilder); + DelayedDefaultValueCloner delayedDefaultValueCloners = + buildConstructorTearOffProcedure( + tearOff: _constructorTearOff, + declarationConstructor: constructor, + implementationConstructor: _constructor, + enclosingDeclarationTypeParameters: + classBuilder.cls.typeParameters, + libraryBuilder: libraryBuilder); + _delayedDefaultValueCloners.add(delayedDefaultValueCloners); } _hasBeenBuilt = true; @@ -616,7 +619,7 @@ class DeclaredSourceConstructorBuilder final bool _hasSuperInitializingFormals; - final List _superParameterDefaultValueCloners = + final List _delayedDefaultValueCloners = []; @override @@ -634,7 +637,7 @@ class DeclaredSourceConstructorBuilder doFinishConstructor: false); } finalizeSuperInitializingFormals( - hierarchy, _superParameterDefaultValueCloners, initializers); + hierarchy, _delayedDefaultValueCloners, initializers); } } @@ -824,8 +827,8 @@ class DeclaredSourceConstructorBuilder .addSuperParameterDefaultValueCloners(delayedDefaultValueCloners); } - delayedDefaultValueCloners.addAll(_superParameterDefaultValueCloners); - _superParameterDefaultValueCloners.clear(); + delayedDefaultValueCloners.addAll(_delayedDefaultValueCloners); + _delayedDefaultValueCloners.clear(); } @override @@ -1085,6 +1088,8 @@ class SourceExtensionTypeConstructorBuilder final MemberName _memberName; + DelayedDefaultValueCloner? _delayedDefaultValueCloner; + SourceExtensionTypeConstructorBuilder( List? metadata, int modifiers, @@ -1194,6 +1199,10 @@ class SourceExtensionTypeConstructorBuilder _buildBody(); } beginInitializers = null; + + if (_delayedDefaultValueCloner != null) { + delayedDefaultValueCloners.add(_delayedDefaultValueCloner!); + } } bool _hasBuiltBody = false; @@ -1268,7 +1277,7 @@ class SourceExtensionTypeConstructorBuilder _constructor.isExtensionTypeMember = true; if (_constructorTearOff != null) { - buildConstructorTearOffProcedure( + _delayedDefaultValueCloner = buildConstructorTearOffProcedure( tearOff: _constructorTearOff, declarationConstructor: _constructor, implementationConstructor: _constructor, diff --git a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart index 6f1c983d4f72..47de2924745b 100644 --- a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart @@ -64,6 +64,8 @@ class SourceFactoryBuilder extends SourceFunctionBuilderImpl { final MemberName _memberName; + DelayedDefaultValueCloner? _delayedDefaultValueCloner; + SourceFactoryBuilder( List? metadata, int modifiers, @@ -185,7 +187,7 @@ class SourceFactoryBuilder extends SourceFunctionBuilderImpl { _procedureInternal.isStatic = isStatic; if (_factoryTearOff != null) { - buildConstructorTearOffProcedure( + _delayedDefaultValueCloner = buildConstructorTearOffProcedure( tearOff: _factoryTearOff, declarationConstructor: _procedure, implementationConstructor: _procedureInternal, @@ -201,6 +203,9 @@ class SourceFactoryBuilder extends SourceFunctionBuilderImpl { List delayedActionPerformers, List delayedDefaultValueCloners) { if (_hasBuiltOutlines) return; + if (_delayedDefaultValueCloner != null) { + delayedDefaultValueCloners.add(_delayedDefaultValueCloner!); + } super.buildOutlineExpressions( classHierarchy, delayedActionPerformers, delayedDefaultValueCloners); _hasBuiltOutlines = true; diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart index c04b2ab25c35..6b0e8fcaa737 100644 --- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart @@ -5489,25 +5489,39 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { } } - void installTypedefTearOffs() { + List? installTypedefTearOffs() { + List? delayedDefaultValueCloners; + Iterable? augmentationLibraries = this.augmentationLibraries; if (augmentationLibraries != null) { for (SourceLibraryBuilder augmentationLibrary in augmentationLibraries) { - augmentationLibrary.installTypedefTearOffs(); + List? + augmentationLibraryDelayedDefaultValueCloners = + augmentationLibrary.installTypedefTearOffs(); + if (augmentationLibraryDelayedDefaultValueCloners != null) { + (delayedDefaultValueCloners ??= []) + .addAll(augmentationLibraryDelayedDefaultValueCloners); + } } } Iterator iterator = localMembersIteratorOfType(); while (iterator.moveNext()) { SourceTypeAliasBuilder declaration = iterator.current; - declaration.buildTypedefTearOffs(this, (Procedure procedure) { + DelayedDefaultValueCloner? delayedDefaultValueCloner = + declaration.buildTypedefTearOffs(this, (Procedure procedure) { procedure.isStatic = true; if (!declaration.isAugmenting && !declaration.isDuplicate) { library.addProcedure(procedure); } }); + if (delayedDefaultValueCloner != null) { + (delayedDefaultValueCloners ??= []).add(delayedDefaultValueCloner); + } } + + return delayedDefaultValueCloners; } } diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart index 494f4c667b74..a0d48afe26a1 100644 --- a/pkg/front_end/lib/src/fasta/source/source_loader.dart +++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart @@ -1772,12 +1772,19 @@ severity: $severity ticker.logMs("Resolved $count constructors"); } - void installTypedefTearOffs() { + List? installTypedefTearOffs() { + List? delayedDefaultValueCloners; if (target.backendTarget.isTypedefTearOffLoweringEnabled) { for (SourceLibraryBuilder library in sourceLibraryBuilders) { - library.installTypedefTearOffs(); + List? libraryDelayedDefaultValueCloners = + library.installTypedefTearOffs(); + if (libraryDelayedDefaultValueCloners != null) { + (delayedDefaultValueCloners ??= []) + .addAll(libraryDelayedDefaultValueCloners); + } } } + return delayedDefaultValueCloners; } void finishTypeVariables(Iterable libraryBuilders, diff --git a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart index 5e7b378e6e2a..89028800ce55 100644 --- a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart @@ -410,7 +410,8 @@ class SourceProcedureBuilder extends SourceFunctionBuilderImpl VariableDeclaration newParameter = new VariableDeclaration(parameter.name, type: type, isFinal: parameter.isFinal, - isLowered: parameter.isLowered) + isLowered: parameter.isLowered, + isRequired: parameter.isRequired) ..fileOffset = parameter.fileOffset; _extensionTearOffParameterMap![parameter] = newParameter; return newParameter; diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart index bb163cc98fe5..af462a6becad 100644 --- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart @@ -362,10 +362,11 @@ class SourceTypeAliasBuilder extends TypeAliasBuilderImpl { Map? _tearOffDependencies; - void buildTypedefTearOffs( + DelayedDefaultValueCloner? buildTypedefTearOffs( SourceLibraryBuilder libraryBuilder, void Function(Procedure) f) { TypeDeclarationBuilder? declaration = unaliasDeclaration(null); DartType? targetType = typedef.type; + DelayedDefaultValueCloner? delayedDefaultValueCloner; switch (declaration) { case ClassBuilder(): if (targetType is InterfaceType && @@ -411,7 +412,7 @@ class SourceTypeAliasBuilder extends TypeAliasBuilderImpl { tearOffReference); _tearOffDependencies![tearOff] = target; - buildTypedefTearOffProcedure( + delayedDefaultValueCloner = buildTypedefTearOffProcedure( tearOff: tearOff, declarationConstructor: target, // TODO(johnniwinther): Handle augmented constructors. @@ -464,7 +465,7 @@ class SourceTypeAliasBuilder extends TypeAliasBuilderImpl { tearOffReference); _tearOffDependencies![tearOff] = target; - buildTypedefTearOffProcedure( + delayedDefaultValueCloner = buildTypedefTearOffProcedure( tearOff: tearOff, declarationConstructor: target, // TODO(johnniwinther): Handle augmented constructors. @@ -488,5 +489,7 @@ class SourceTypeAliasBuilder extends TypeAliasBuilderImpl { case OmittedTypeDeclarationBuilder(): case null: } + + return delayedDefaultValueCloner; } } diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt index 9c4a8b761a97..cd55faa4ae49 100644 --- a/pkg/front_end/test/spell_checking_list_common.txt +++ b/pkg/front_end/test/spell_checking_list_common.txt @@ -339,6 +339,7 @@ branch branched branches break +breakage breaking breakpoint breaks @@ -3341,6 +3342,7 @@ updater updaters updates updating +uphold upon upper uppercase diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect index fee8235c7aef..46f47cc05e2a 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect @@ -39,7 +39,7 @@ class Class4 extends core::Object { ; static method _#_#tearOff([core::int? field]) → self::Class4 return new self::Class4::_(field); - static factory •([core::int? field]) → self::Class4 + static factory •([core::int? field = null]) → self::Class4 ; static method _#new#tearOff([core::int? field]) → self::Class4 return self::Class4::•(field); @@ -51,7 +51,7 @@ class Class5 extends core::Object { ; static method _#_#tearOff(core::int field1, [core::int? field2]) → self::Class5 return new self::Class5::_(field1, field2); - static factory •(core::int field1, [core::int? field2]) → self::Class5 + static factory •(core::int field1, [core::int? field2 = null]) → self::Class5 ; static method _#new#tearOff(core::int field1, [core::int? field2]) → self::Class5 return self::Class5::•(field1, field2); @@ -64,7 +64,7 @@ class Class6 extends core::Object { ; static method _#_#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6 return new self::Class6::_(field1, field2: field2, field3: field3); - static factory •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6 + static factory •(core::int field1, {core::int? field2 = null, required core::int field3}) → self::Class6 ; static method _#new#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6 return self::Class6::•(field1, field2: field2, field3: field3); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.outline.expect index 41c5082ce98d..2dab0be63f95 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.outline.expect @@ -8,7 +8,7 @@ class Class1 extends core::Object { ; static method _#_#tearOff(core::int field) → self::Class1 return new self::Class1::_(field); - static factory •([has-declared-initializer core::int field]) → self::Class1 + static factory •([core::int field = 42]) → self::Class1 ; static method _#new#tearOff([has-declared-initializer core::int field]) → self::Class1 return self::Class1::•(field); @@ -19,7 +19,7 @@ class Class2 extends core::Object { ; static method _#_#tearOff(core::int field) → self::Class2 return new self::Class2::_(field); - static factory •({has-declared-initializer core::int field}) → self::Class2 + static factory •({core::int field = 42}) → self::Class2 ; static method _#new#tearOff({has-declared-initializer core::int field}) → self::Class2 return self::Class2::•(field: field); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.outline.expect index 4e1e1d36cf39..85d0288a405c 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart.weak.outline.expect @@ -61,7 +61,7 @@ abstract class Link extends core::Object { - 'Link' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'. factory Link.create3(int i) = LinkFactory.create; ^"; - static factory create4({core::int i}) → self::Link + static factory create4({core::int i = null}) → self::Link return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart:9:35: Error: The constructor function type 'LinkFactory Function()' isn't a subtype of 'Link Function({int i})'. - 'LinkFactory' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'. - 'Link' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/invalid_redirect.dart'. diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue52763.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue52763.dart.weak.outline.expect index ea90d14f40b6..031af5425649 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue52763.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue52763.dart.weak.outline.expect @@ -34,14 +34,14 @@ class P1 extends self::C /*hasConstConstructor*/ { const constructor •(core::int c, {core::bool a = true, core::bool b = false}) → self::P1 : self::P1::c = c, super self::C::•(a: a, b: b) ; - static method _#new#tearOff(core::int c, {core::bool a = true, core::bool b = false}) → self::P1 + static method _#new#tearOff(core::int c, {has-declared-initializer core::bool a, has-declared-initializer core::bool b}) → self::P1 return new self::P1::•(c, a: a, b: b); } class P2 extends self::C /*hasConstConstructor*/ { const constructor •({core::bool b = false, core::bool a = true}) → self::P2 : super self::C::•(b: b, a: a) ; - static method _#new#tearOff({core::bool b = false, core::bool a = true}) → self::P2 + static method _#new#tearOff({has-declared-initializer core::bool b, has-declared-initializer core::bool a}) → self::P2 return new self::P2::•(b: b, a: a); } static method main() → dynamic diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect index 30d39f4e3c38..c5ef007d3e3c 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect @@ -77,7 +77,7 @@ class NamedMixinApplication : super self::Class::redirectingGenerative(field) ; - static method _#new#tearOff([has-declared-initializer core::int field]) → self::NamedMixinApplication + static method _#new#tearOff([core::int field = #C1]) → self::NamedMixinApplication return new self::NamedMixinApplication::•(field); static method _#named#tearOff(core::int field) → self::NamedMixinApplication return new self::NamedMixinApplication::named(field); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect index ab2d842a1413..21724e2b3379 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect @@ -77,7 +77,7 @@ class NamedMixinApplication : super self::Class::redirectingGenerative(field) ; - static method _#new#tearOff([has-declared-initializer core::int field]) → self::NamedMixinApplication + static method _#new#tearOff([core::int field = #C1]) → self::NamedMixinApplication return new self::NamedMixinApplication::•(field); static method _#named#tearOff(core::int field) → self::NamedMixinApplication return new self::NamedMixinApplication::named(field); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect index 18fb1bd68436..5aa3ab34858a 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect @@ -77,7 +77,7 @@ class NamedMixinApplication : super self::Class::redirectingGenerative(field) ; - static method _#new#tearOff([has-declared-initializer core::int field]) → self::NamedMixinApplication + static method _#new#tearOff([core::int field = #C1]) → self::NamedMixinApplication return new self::NamedMixinApplication::•(field); static method _#named#tearOff(core::int field) → self::NamedMixinApplication return new self::NamedMixinApplication::named(field); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect index 18fb1bd68436..5aa3ab34858a 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect @@ -77,7 +77,7 @@ class NamedMixinApplication : super self::Class::redirectingGenerative(field) ; - static method _#new#tearOff([has-declared-initializer core::int field]) → self::NamedMixinApplication + static method _#new#tearOff([core::int field = #C1]) → self::NamedMixinApplication return new self::NamedMixinApplication::•(field); static method _#named#tearOff(core::int field) → self::NamedMixinApplication return new self::NamedMixinApplication::named(field); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect index 95eef55f4e12..842b802d80df 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect @@ -77,7 +77,7 @@ class NamedMixinApplication : super self::Class::redirectingGenerative(field) ; - static method _#new#tearOff([has-declared-initializer core::int field]) → self::NamedMixinApplication + static method _#new#tearOff([core::int field = #C1]) → self::NamedMixinApplication return new self::NamedMixinApplication::•(field); static method _#named#tearOff(core::int field) → self::NamedMixinApplication return new self::NamedMixinApplication::named(field); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect index d7bca17e5d88..31bffd2fdb20 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect @@ -43,7 +43,7 @@ class Class4 extends core::Object { ; static method _#_#tearOff([core::int? field]) → self::Class4 return new self::Class4::_(field); - static factory •([core::int? field]) → self::Class4 /* redirection-target: self::Class4::_ */ + static factory •([core::int? field = null]) → self::Class4 /* redirection-target: self::Class4::_ */ return new self::Class4::_(field); static method _#new#tearOff([core::int? field]) → self::Class4 return new self::Class4::_(field); @@ -55,7 +55,7 @@ class Class5 extends core::Object { ; static method _#_#tearOff(core::int field1, [core::int? field2]) → self::Class5 return new self::Class5::_(field1, field2); - static factory •(core::int field1, [core::int? field2]) → self::Class5 /* redirection-target: self::Class5::_ */ + static factory •(core::int field1, [core::int? field2 = null]) → self::Class5 /* redirection-target: self::Class5::_ */ return new self::Class5::_(field1, field2); static method _#new#tearOff(core::int field1, [core::int? field2]) → self::Class5 return new self::Class5::_(field1, field2); @@ -68,7 +68,7 @@ class Class6 extends core::Object { ; static method _#_#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6 return new self::Class6::_(field1, field2: field2, field3: field3); - static factory •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6 /* redirection-target: self::Class6::_ */ + static factory •(core::int field1, {core::int? field2 = null, required core::int field3}) → self::Class6 /* redirection-target: self::Class6::_ */ return new self::Class6::_(field1, field2: field2, field3: field3); static method _#new#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6 return new self::Class6::_(field1, field2: field2, field3: field3); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect index a20154aa428c..1d28aecf22e0 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect @@ -8,7 +8,7 @@ class Class1 extends core::Object { ; static method _#_#tearOff([has-declared-initializer core::int field]) → self::Class1 return new self::Class1::_(field); - static factory •([core::int field]) → self::Class1 /* redirection-target: self::Class1::_ */ + static factory •([core::int field = null]) → self::Class1 /* redirection-target: self::Class1::_ */ return new self::Class1::_(field); static method _#new#tearOff([core::int field]) → self::Class1 return new self::Class1::_(field); @@ -19,7 +19,7 @@ class Class2 extends core::Object { ; static method _#_#tearOff({has-declared-initializer core::int field}) → self::Class2 return new self::Class2::_(field: field); - static factory •({core::int field}) → self::Class2 /* redirection-target: self::Class2::_ */ + static factory •({core::int field = null}) → self::Class2 /* redirection-target: self::Class2::_ */ return new self::Class2::_(field: field); static method _#new#tearOff({core::int field}) → self::Class2 return new self::Class2::_(field: field); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect index 2041713697c9..340ac0c68e09 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect @@ -11,11 +11,11 @@ class Class1 extends core::Object { ; static method _#positional#tearOff([has-declared-initializer core::int field1, has-declared-initializer core::int field2]) → self::Class1 return new self::Class1::positional(field1, field2); - static factory redirectPositionalSame([core::int field1, core::int field2]) → self::Class1 /* redirection-target: self::Class1::positional */ + static factory redirectPositionalSame([core::int field1 = null, core::int field2 = null]) → self::Class1 /* redirection-target: self::Class1::positional */ return new self::Class1::positional(field1, field2); static method _#redirectPositionalSame#tearOff([core::int field1, core::int field2]) → self::Class1 return new self::Class1::positional(field1, field2); - static factory redirectPositionalFewer1([core::int field1]) → self::Class1 /* redirection-target: self::Class1::positional */ + static factory redirectPositionalFewer1([core::int field1 = null]) → self::Class1 /* redirection-target: self::Class1::positional */ return new self::Class1::positional(field1); static method _#redirectPositionalFewer1#tearOff([core::int field1]) → self::Class1 return new self::Class1::positional(field1); @@ -25,19 +25,19 @@ class Class1 extends core::Object { return new self::Class1::positional(); static method _#named#tearOff({has-declared-initializer core::int field1, has-declared-initializer core::int field2}) → self::Class1 return new self::Class1::named(field1: field1, field2: field2); - static factory redirectNamedSame({core::int field1, core::int field2}) → self::Class1 /* redirection-target: self::Class1::named */ + static factory redirectNamedSame({core::int field1 = null, core::int field2 = null}) → self::Class1 /* redirection-target: self::Class1::named */ return new self::Class1::named(field1: field1, field2: field2); static method _#redirectNamedSame#tearOff({core::int field1, core::int field2}) → self::Class1 return new self::Class1::named(field1: field1, field2: field2); - static factory redirectNamedReorder({core::int field2, core::int field1}) → self::Class1 /* redirection-target: self::Class1::named */ + static factory redirectNamedReorder({core::int field2 = null, core::int field1 = null}) → self::Class1 /* redirection-target: self::Class1::named */ return new self::Class1::named(field2: field2, field1: field1); static method _#redirectNamedReorder#tearOff({core::int field2, core::int field1}) → self::Class1 return new self::Class1::named(field2: field2, field1: field1); - static factory redirectNamedFewer1({core::int field1}) → self::Class1 /* redirection-target: self::Class1::named */ + static factory redirectNamedFewer1({core::int field1 = null}) → self::Class1 /* redirection-target: self::Class1::named */ return new self::Class1::named(field1: field1); static method _#redirectNamedFewer1#tearOff({core::int field1}) → self::Class1 return new self::Class1::named(field1: field1); - static factory redirectNamedFewer2({core::int field2}) → self::Class1 /* redirection-target: self::Class1::named */ + static factory redirectNamedFewer2({core::int field2 = null}) → self::Class1 /* redirection-target: self::Class1::named */ return new self::Class1::named(field2: field2); static method _#redirectNamedFewer2#tearOff({core::int field2}) → self::Class1 return new self::Class1::named(field2: field2); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect index 5a82591cfa6e..2a2ef26bc001 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect @@ -15,7 +15,7 @@ class Class(a, b); static method _#named#tearOff(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b, has-declared-initializer core::int c]) → self::Class return new self::Class::named(a, b, c); - static factory fact(self::Class::fact::S% a, {self::Class::fact::T? b, has-declared-initializer core::int c}) → self::Class + static factory fact(self::Class::fact::S% a, {self::Class::fact::T? b = null, core::int c = 42}) → self::Class ; static method _#fact#tearOff(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b, has-declared-initializer core::int c}) → self::Class return self::Class::fact(a, b: b, c: c); diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect index ce73e4af56ae..ada4fe9a9a59 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect @@ -68,7 +68,7 @@ static method expect(dynamic expected, dynamic actual) → dynamic { if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) throw "Expected ${expected}, actual ${actual}"; } -static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff(self::_#H#fact#tearOff::Y% a, {core::int? b, has-declared-initializer core::int c}) → mai::A +static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A return mai::A::fact(a, b: b, c: c); static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff() → mai::A return mai::A::_#redirect#tearOff(); @@ -87,4 +87,5 @@ constants { #C7 = static-tearoff mai::_#F#fact#tearOff #C8 = static-tearoff mai::_#F#redirect#tearOff #C9 = null + #C10 = 42 } diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect index 7228e147049e..7572dc5fb840 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect @@ -42,7 +42,7 @@ class A extends core::Object { return new mai::A::•(); static method _#named#tearOff(mai::A::_#named#tearOff::T% a, [core::int? b]) → mai::A return new mai::A::named(a, b); - static factory fact(mai::A::fact::T% a, {core::int? b, has-declared-initializer core::int c}) → mai::A + static factory fact(mai::A::fact::T% a, {core::int? b = #C1, core::int c = #C2}) → mai::A ; static method _#fact#tearOff(mai::A::_#fact#tearOff::T% a, {core::int? b, has-declared-initializer core::int c}) → mai::A return mai::A::fact(a, b: b, c: c); @@ -78,4 +78,5 @@ static method _#G#redirect#tearOff extends core::Object { return new typ::A::•(); static method _#named#tearOff(typ::A::_#named#tearOff::T% a, [core::int? b]) → typ::A return new typ::A::named(a, b); - static factory fact(typ::A::fact::T% a, {core::int? b, has-declared-initializer core::int c}) → typ::A + static factory fact(typ::A::fact::T% a, {core::int? b = null, core::int c = 42}) → typ::A ; static method _#fact#tearOff(typ::A::_#fact#tearOff::T% a, {core::int? b, has-declared-initializer core::int c}) → typ::A return typ::A::fact(a, b: b, c: c); diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect index e4781f1b2fd7..9f57ebd44fdc 100644 --- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect +++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect @@ -27,7 +27,7 @@ class Class4 extends core::Object { final field core::int? field; constructor _([core::int? field = null]) → self::Class4 ; - static factory •([core::int? field]) → self::Class4 /* redirection-target: self::Class4::_ */ + static factory •([core::int? field = null]) → self::Class4 /* redirection-target: self::Class4::_ */ return new self::Class4::_(field); } class Class5 extends core::Object { @@ -35,7 +35,7 @@ class Class5 extends core::Object { final field core::int? field2; constructor _(core::int field1, [core::int? field2 = null]) → self::Class5 ; - static factory •(core::int field1, [core::int? field2]) → self::Class5 /* redirection-target: self::Class5::_ */ + static factory •(core::int field1, [core::int? field2 = null]) → self::Class5 /* redirection-target: self::Class5::_ */ return new self::Class5::_(field1, field2); } class Class6 extends core::Object { @@ -44,7 +44,7 @@ class Class6 extends core::Object { final field core::int field3; constructor _(core::int field1, {core::int? field2 = null, required core::int field3}) → self::Class6 ; - static factory •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6 /* redirection-target: self::Class6::_ */ + static factory •(core::int field1, {core::int? field2 = null, required core::int field3}) → self::Class6 /* redirection-target: self::Class6::_ */ return new self::Class6::_(field1, field2: field2, field3: field3); } class Class7a extends core::Object implements self::Class7b { diff --git a/pkg/front_end/testcases/dart2js/issue52763.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/issue52763.dart.weak.outline.expect index ea90d14f40b6..031af5425649 100644 --- a/pkg/front_end/testcases/dart2js/issue52763.dart.weak.outline.expect +++ b/pkg/front_end/testcases/dart2js/issue52763.dart.weak.outline.expect @@ -34,14 +34,14 @@ class P1 extends self::C /*hasConstConstructor*/ { const constructor •(core::int c, {core::bool a = true, core::bool b = false}) → self::P1 : self::P1::c = c, super self::C::•(a: a, b: b) ; - static method _#new#tearOff(core::int c, {core::bool a = true, core::bool b = false}) → self::P1 + static method _#new#tearOff(core::int c, {has-declared-initializer core::bool a, has-declared-initializer core::bool b}) → self::P1 return new self::P1::•(c, a: a, b: b); } class P2 extends self::C /*hasConstConstructor*/ { const constructor •({core::bool b = false, core::bool a = true}) → self::P2 : super self::C::•(b: b, a: a) ; - static method _#new#tearOff({core::bool b = false, core::bool a = true}) → self::P2 + static method _#new#tearOff({has-declared-initializer core::bool b, has-declared-initializer core::bool a}) → self::P2 return new self::P2::•(b: b, a: a); } static method main() → dynamic diff --git a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.expect b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.expect index c4e092829210..274ff60a9443 100644 --- a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.expect +++ b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.expect @@ -73,9 +73,9 @@ static method _#Alias#new#tearOff({core::bool defaultValue return new test::Class::•(defaultValue: defaultValue, value: value); static method _#Alias#fact#tearOff({core::bool defaultValue = #C14, required test::_#Alias#fact#tearOff::T value}) → test::Class return test::Class::fact(defaultValue: defaultValue, value: value); -static method _#Alias#redirect#tearOff({core::bool defaultValue = #C15, required test::_#Alias#redirect#tearOff::T value}) → test::Class +static method _#Alias#redirect#tearOff({core::bool defaultValue = #C14, required test::_#Alias#redirect#tearOff::T value}) → test::Class return test::Class::_#redirect#tearOff(defaultValue: defaultValue, value: value); -static method _#Alias#redirect2#tearOff({core::bool defaultValue = #C15, required test::_#Alias#redirect2#tearOff::T value}) → test::Class +static method _#Alias#redirect2#tearOff({core::bool defaultValue = #C14, required test::_#Alias#redirect2#tearOff::T value}) → test::Class return test::Class::_#redirect2#tearOff(defaultValue: defaultValue, value: value); static method _#AliasImpl#new#tearOff({core::bool defaultValue = #C14, required test::_#AliasImpl#new#tearOff::T value}) → test::ClassImpl return new test::ClassImpl::•(defaultValue: defaultValue, value: value); diff --git a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.transformed.expect index f76c6628cde3..7d14635b5f32 100644 --- a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.transformed.expect @@ -73,9 +73,9 @@ static method _#Alias#new#tearOff({core::bool defaultValue return new test::Class::•(defaultValue: defaultValue, value: value); static method _#Alias#fact#tearOff({core::bool defaultValue = #C14, required test::_#Alias#fact#tearOff::T value}) → test::Class return test::Class::fact(defaultValue: defaultValue, value: value); -static method _#Alias#redirect#tearOff({core::bool defaultValue = #C15, required test::_#Alias#redirect#tearOff::T value}) → test::Class +static method _#Alias#redirect#tearOff({core::bool defaultValue = #C14, required test::_#Alias#redirect#tearOff::T value}) → test::Class return test::Class::_#redirect#tearOff(defaultValue: defaultValue, value: value); -static method _#Alias#redirect2#tearOff({core::bool defaultValue = #C15, required test::_#Alias#redirect2#tearOff::T value}) → test::Class +static method _#Alias#redirect2#tearOff({core::bool defaultValue = #C14, required test::_#Alias#redirect2#tearOff::T value}) → test::Class return test::Class::_#redirect2#tearOff(defaultValue: defaultValue, value: value); static method _#AliasImpl#new#tearOff({core::bool defaultValue = #C14, required test::_#AliasImpl#new#tearOff::T value}) → test::ClassImpl return new test::ClassImpl::•(defaultValue: defaultValue, value: value); diff --git a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.expect b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.expect index c4e092829210..274ff60a9443 100644 --- a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.expect +++ b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.expect @@ -73,9 +73,9 @@ static method _#Alias#new#tearOff({core::bool defaultValue return new test::Class::•(defaultValue: defaultValue, value: value); static method _#Alias#fact#tearOff({core::bool defaultValue = #C14, required test::_#Alias#fact#tearOff::T value}) → test::Class return test::Class::fact(defaultValue: defaultValue, value: value); -static method _#Alias#redirect#tearOff({core::bool defaultValue = #C15, required test::_#Alias#redirect#tearOff::T value}) → test::Class +static method _#Alias#redirect#tearOff({core::bool defaultValue = #C14, required test::_#Alias#redirect#tearOff::T value}) → test::Class return test::Class::_#redirect#tearOff(defaultValue: defaultValue, value: value); -static method _#Alias#redirect2#tearOff({core::bool defaultValue = #C15, required test::_#Alias#redirect2#tearOff::T value}) → test::Class +static method _#Alias#redirect2#tearOff({core::bool defaultValue = #C14, required test::_#Alias#redirect2#tearOff::T value}) → test::Class return test::Class::_#redirect2#tearOff(defaultValue: defaultValue, value: value); static method _#AliasImpl#new#tearOff({core::bool defaultValue = #C14, required test::_#AliasImpl#new#tearOff::T value}) → test::ClassImpl return new test::ClassImpl::•(defaultValue: defaultValue, value: value); diff --git a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.modular.expect index c4e092829210..274ff60a9443 100644 --- a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.modular.expect +++ b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.modular.expect @@ -73,9 +73,9 @@ static method _#Alias#new#tearOff({core::bool defaultValue return new test::Class::•(defaultValue: defaultValue, value: value); static method _#Alias#fact#tearOff({core::bool defaultValue = #C14, required test::_#Alias#fact#tearOff::T value}) → test::Class return test::Class::fact(defaultValue: defaultValue, value: value); -static method _#Alias#redirect#tearOff({core::bool defaultValue = #C15, required test::_#Alias#redirect#tearOff::T value}) → test::Class +static method _#Alias#redirect#tearOff({core::bool defaultValue = #C14, required test::_#Alias#redirect#tearOff::T value}) → test::Class return test::Class::_#redirect#tearOff(defaultValue: defaultValue, value: value); -static method _#Alias#redirect2#tearOff({core::bool defaultValue = #C15, required test::_#Alias#redirect2#tearOff::T value}) → test::Class +static method _#Alias#redirect2#tearOff({core::bool defaultValue = #C14, required test::_#Alias#redirect2#tearOff::T value}) → test::Class return test::Class::_#redirect2#tearOff(defaultValue: defaultValue, value: value); static method _#AliasImpl#new#tearOff({core::bool defaultValue = #C14, required test::_#AliasImpl#new#tearOff::T value}) → test::ClassImpl return new test::ClassImpl::•(defaultValue: defaultValue, value: value); diff --git a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.outline.expect index f9cd7becf736..8ef59c795703 100644 --- a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.outline.expect +++ b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.outline.expect @@ -22,16 +22,16 @@ class Class extends core::Object { static method _#new#tearOff({has-declared-initializer core::bool defaultValue, required self2::Class::_#new#tearOff::T% value}) → self2::Class return new self2::Class::•(defaultValue: defaultValue, value: value); @_in::patch - external static factory fact({has-declared-initializer core::bool defaultValue, required self2::Class::fact::T% value}) → self2::Class; + external static factory fact({core::bool defaultValue = true, required self2::Class::fact::T% value}) → self2::Class; static method _#fact#tearOff({has-declared-initializer core::bool defaultValue, required self2::Class::_#fact#tearOff::T% value}) → self2::Class return self2::Class::fact(defaultValue: defaultValue, value: value); @_in::patch - external static factory redirect({core::bool defaultValue, required self2::Class::redirect::T% value}) → self2::Class /* redirection-target: self2::ClassImpl::•*/ + external static factory redirect({core::bool defaultValue = null, required self2::Class::redirect::T% value}) → self2::Class /* redirection-target: self2::ClassImpl::•*/ return new self2::ClassImpl::•(defaultValue: defaultValue, value: value); static method _#redirect#tearOff({core::bool defaultValue, required self2::Class::_#redirect#tearOff::T% value}) → self2::Class return self2::Class::redirect(defaultValue: defaultValue, value: value); @_in::patch - external static factory redirect2({core::bool defaultValue, required self2::Class::redirect2::T% value}) → self2::Class /* redirection-target: self2::ClassImpl::patched*/ + external static factory redirect2({core::bool defaultValue = null, required self2::Class::redirect2::T% value}) → self2::Class /* redirection-target: self2::ClassImpl::patched*/ return new self2::ClassImpl::patched(defaultValue: defaultValue, value: value); static method _#redirect2#tearOff({core::bool defaultValue, required self2::Class::_#redirect2#tearOff::T% value}) → self2::Class return self2::Class::redirect2(defaultValue: defaultValue, value: value); diff --git a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.transformed.expect index f76c6628cde3..7d14635b5f32 100644 --- a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.transformed.expect @@ -73,9 +73,9 @@ static method _#Alias#new#tearOff({core::bool defaultValue return new test::Class::•(defaultValue: defaultValue, value: value); static method _#Alias#fact#tearOff({core::bool defaultValue = #C14, required test::_#Alias#fact#tearOff::T value}) → test::Class return test::Class::fact(defaultValue: defaultValue, value: value); -static method _#Alias#redirect#tearOff({core::bool defaultValue = #C15, required test::_#Alias#redirect#tearOff::T value}) → test::Class +static method _#Alias#redirect#tearOff({core::bool defaultValue = #C14, required test::_#Alias#redirect#tearOff::T value}) → test::Class return test::Class::_#redirect#tearOff(defaultValue: defaultValue, value: value); -static method _#Alias#redirect2#tearOff({core::bool defaultValue = #C15, required test::_#Alias#redirect2#tearOff::T value}) → test::Class +static method _#Alias#redirect2#tearOff({core::bool defaultValue = #C14, required test::_#Alias#redirect2#tearOff::T value}) → test::Class return test::Class::_#redirect2#tearOff(defaultValue: defaultValue, value: value); static method _#AliasImpl#new#tearOff({core::bool defaultValue = #C14, required test::_#AliasImpl#new#tearOff::T value}) → test::ClassImpl return new test::ClassImpl::•(defaultValue: defaultValue, value: value); diff --git a/pkg/front_end/testcases/dart2wasm/issue55529.dart b/pkg/front_end/testcases/dart2wasm/issue55529.dart new file mode 100644 index 000000000000..0b4890c0c42b --- /dev/null +++ b/pkg/front_end/testcases/dart2wasm/issue55529.dart @@ -0,0 +1,28 @@ +// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A1 { + final Object? a; + + A1({required this.a}); +} + +class B1 extends A1 { + B1({super.a}) {} +} + +class A2 { + final Object? a; + + A2(this.a); +} + +class B2 extends A2 { + B2([super.a]); +} + +void main() { + var f1 = B1.new; + var f2 = B2.new; +} diff --git a/pkg/front_end/testcases/dart2wasm/issue55529.dart.strong.expect b/pkg/front_end/testcases/dart2wasm/issue55529.dart.strong.expect new file mode 100644 index 000000000000..cac766a4aa56 --- /dev/null +++ b/pkg/front_end/testcases/dart2wasm/issue55529.dart.strong.expect @@ -0,0 +1,43 @@ +library; +import self as self; +import "dart:core" as core; + +class A1 extends core::Object { + final field core::Object? a; + constructor •({required core::Object? a}) → self::A1 + : self::A1::a = a, super core::Object::•() + ; + static method _#new#tearOff({required core::Object? a}) → self::A1 + return new self::A1::•(a: a); +} +class B1 extends self::A1 { + constructor •({core::Object? a = #C1}) → self::B1 + : super self::A1::•(a: a) {} + static method _#new#tearOff({core::Object? a = #C1}) → self::B1 + return new self::B1::•(a: a); +} +class A2 extends core::Object { + final field core::Object? a; + constructor •(core::Object? a) → self::A2 + : self::A2::a = a, super core::Object::•() + ; + static method _#new#tearOff(core::Object? a) → self::A2 + return new self::A2::•(a); +} +class B2 extends self::A2 { + constructor •([core::Object? a = #C1]) → self::B2 + : super self::A2::•(a) + ; + static method _#new#tearOff([core::Object? a = #C1]) → self::B2 + return new self::B2::•(a); +} +static method main() → void { + ({a: core::Object?}) → self::B1 f1 = #C2; + ([core::Object?]) → self::B2 f2 = #C3; +} + +constants { + #C1 = null + #C2 = static-tearoff self::B1::_#new#tearOff + #C3 = static-tearoff self::B2::_#new#tearOff +} diff --git a/pkg/front_end/testcases/dart2wasm/issue55529.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2wasm/issue55529.dart.strong.transformed.expect new file mode 100644 index 000000000000..cac766a4aa56 --- /dev/null +++ b/pkg/front_end/testcases/dart2wasm/issue55529.dart.strong.transformed.expect @@ -0,0 +1,43 @@ +library; +import self as self; +import "dart:core" as core; + +class A1 extends core::Object { + final field core::Object? a; + constructor •({required core::Object? a}) → self::A1 + : self::A1::a = a, super core::Object::•() + ; + static method _#new#tearOff({required core::Object? a}) → self::A1 + return new self::A1::•(a: a); +} +class B1 extends self::A1 { + constructor •({core::Object? a = #C1}) → self::B1 + : super self::A1::•(a: a) {} + static method _#new#tearOff({core::Object? a = #C1}) → self::B1 + return new self::B1::•(a: a); +} +class A2 extends core::Object { + final field core::Object? a; + constructor •(core::Object? a) → self::A2 + : self::A2::a = a, super core::Object::•() + ; + static method _#new#tearOff(core::Object? a) → self::A2 + return new self::A2::•(a); +} +class B2 extends self::A2 { + constructor •([core::Object? a = #C1]) → self::B2 + : super self::A2::•(a) + ; + static method _#new#tearOff([core::Object? a = #C1]) → self::B2 + return new self::B2::•(a); +} +static method main() → void { + ({a: core::Object?}) → self::B1 f1 = #C2; + ([core::Object?]) → self::B2 f2 = #C3; +} + +constants { + #C1 = null + #C2 = static-tearoff self::B1::_#new#tearOff + #C3 = static-tearoff self::B2::_#new#tearOff +} diff --git a/pkg/front_end/testcases/dart2wasm/issue55529.dart.textual_outline.expect b/pkg/front_end/testcases/dart2wasm/issue55529.dart.textual_outline.expect new file mode 100644 index 000000000000..6fd4f5a5141b --- /dev/null +++ b/pkg/front_end/testcases/dart2wasm/issue55529.dart.textual_outline.expect @@ -0,0 +1,19 @@ +class A1 { + final Object? a; + A1({required this.a}); +} + +class B1 extends A1 { + B1({super.a}) {} +} + +class A2 { + final Object? a; + A2(this.a); +} + +class B2 extends A2 { + B2([super.a]); +} + +void main() {} diff --git a/pkg/front_end/testcases/dart2wasm/issue55529.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dart2wasm/issue55529.dart.textual_outline_modelled.expect new file mode 100644 index 000000000000..72647530debb --- /dev/null +++ b/pkg/front_end/testcases/dart2wasm/issue55529.dart.textual_outline_modelled.expect @@ -0,0 +1,19 @@ +class A1 { + A1({required this.a}); + final Object? a; +} + +class A2 { + A2(this.a); + final Object? a; +} + +class B1 extends A1 { + B1({super.a}) {} +} + +class B2 extends A2 { + B2([super.a]); +} + +void main() {} diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect index c309efe89558..7bfb69538551 100644 --- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect +++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect @@ -20,7 +20,7 @@ class Class extends core::Object { : self2::Class::defaultValue = defaultValue, super core::Object::•() ; @_in::patch - external static factory fact({has-declared-initializer core::bool defaultValue}) → self2::Class; + external static factory fact({core::bool defaultValue = true}) → self2::Class; static method _#fact#tearOff({has-declared-initializer core::bool defaultValue}) → self2::Class return self2::Class::fact(defaultValue: defaultValue); @_in::patch diff --git a/pkg/front_end/testcases/extension_types/issue53209.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/issue53209.dart.weak.outline.expect index 3e736e94519e..5027c3a6e83b 100644 --- a/pkg/front_end/testcases/extension_types/issue53209.dart.weak.outline.expect +++ b/pkg/front_end/testcases/extension_types/issue53209.dart.weak.outline.expect @@ -100,7 +100,7 @@ static extension-type-member method E|constructor#_#redirTooMany2#tearOff(core:: return invalid-expression "pkg/front_end/testcases/extension_types/issue53209.dart:9:59: Error: The constructor function type 'E Function(int)' isn't a subtype of 'E Function(int, String, num)'. factory E.redirTooMany2(int foo, String bar, num baz) = E; // Error. ^"; -static extension-type-member method E|constructor#redirTooMany3(core::int foo, [dynamic bar]) → self::E% /* erasure=core::int, declared=! */ +static extension-type-member method E|constructor#redirTooMany3(core::int foo, [dynamic bar = null]) → self::E% /* erasure=core::int, declared=! */ return invalid-expression "pkg/front_end/testcases/extension_types/issue53209.dart:10:53: Error: The constructor function type 'E Function(int)' isn't a subtype of 'E Function(int, [dynamic])'. factory E.redirTooMany3(int foo, [dynamic bar]) = E; // Error. ^"; diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.strong.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.strong.expect index 108c0da4e593..0cc4089a7b3b 100644 --- a/pkg/front_end/testcases/general/bounds_parameters.dart.strong.expect +++ b/pkg/front_end/testcases/general/bounds_parameters.dart.strong.expect @@ -264,6 +264,6 @@ static method method1(self::Class t1, dynamic t2, self::Class (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → Null {}; } static extension-member method Extension1|method3(lowered final core::int #this, self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void {} -static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {s1: self::G>, s2: self::G, s3: self::G>, s4: self::G>, s5: self::G, s6: self::G>, s7: self::G, s8: self::G}) → void - return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {self::G> s1, self::G s2, self::G> s3, self::G> s4, self::G s5, self::G> s6, self::G s7, self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); +static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {required s1: self::G>, required s2: self::G, required s3: self::G>, required s4: self::G>, required s5: self::G, required s6: self::G>, required s7: self::G, required s8: self::G}) → void + return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); static method main() → dynamic {} diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.strong.transformed.expect index 108c0da4e593..0cc4089a7b3b 100644 --- a/pkg/front_end/testcases/general/bounds_parameters.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/general/bounds_parameters.dart.strong.transformed.expect @@ -264,6 +264,6 @@ static method method1(self::Class t1, dynamic t2, self::Class (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → Null {}; } static extension-member method Extension1|method3(lowered final core::int #this, self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void {} -static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {s1: self::G>, s2: self::G, s3: self::G>, s4: self::G>, s5: self::G, s6: self::G>, s7: self::G, s8: self::G}) → void - return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {self::G> s1, self::G s2, self::G> s3, self::G> s4, self::G s5, self::G> s6, self::G s7, self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); +static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {required s1: self::G>, required s2: self::G, required s3: self::G>, required s4: self::G>, required s5: self::G, required s6: self::G>, required s7: self::G, required s8: self::G}) → void + return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); static method main() → dynamic {} diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.expect index 108c0da4e593..0cc4089a7b3b 100644 --- a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.expect +++ b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.expect @@ -264,6 +264,6 @@ static method method1(self::Class t1, dynamic t2, self::Class (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → Null {}; } static extension-member method Extension1|method3(lowered final core::int #this, self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void {} -static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {s1: self::G>, s2: self::G, s3: self::G>, s4: self::G>, s5: self::G, s6: self::G>, s7: self::G, s8: self::G}) → void - return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {self::G> s1, self::G s2, self::G> s3, self::G> s4, self::G s5, self::G> s6, self::G s7, self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); +static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {required s1: self::G>, required s2: self::G, required s3: self::G>, required s4: self::G>, required s5: self::G, required s6: self::G>, required s7: self::G, required s8: self::G}) → void + return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); static method main() → dynamic {} diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.modular.expect index 108c0da4e593..0cc4089a7b3b 100644 --- a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.modular.expect +++ b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.modular.expect @@ -264,6 +264,6 @@ static method method1(self::Class t1, dynamic t2, self::Class (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → Null {}; } static extension-member method Extension1|method3(lowered final core::int #this, self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void {} -static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {s1: self::G>, s2: self::G, s3: self::G>, s4: self::G>, s5: self::G, s6: self::G>, s7: self::G, s8: self::G}) → void - return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {self::G> s1, self::G s2, self::G> s3, self::G> s4, self::G s5, self::G> s6, self::G s7, self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); +static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {required s1: self::G>, required s2: self::G, required s3: self::G>, required s4: self::G>, required s5: self::G, required s6: self::G>, required s7: self::G, required s8: self::G}) → void + return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); static method main() → dynamic {} diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.outline.expect index f4262c196ffe..4ec5a0d75eef 100644 --- a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.outline.expect +++ b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.outline.expect @@ -184,7 +184,7 @@ static method method1(self::Class t1, dynamic t2, self::Class ; static extension-member method Extension1|method3(lowered final core::int #this, self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void ; -static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {s1: self::G>, s2: self::G, s3: self::G>, s4: self::G>, s5: self::G, s6: self::G>, s7: self::G, s8: self::G}) → void - return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {self::G> s1, self::G s2, self::G> s3, self::G> s4, self::G s5, self::G> s6, self::G s7, self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); +static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {required s1: self::G>, required s2: self::G, required s3: self::G>, required s4: self::G>, required s5: self::G, required s6: self::G>, required s7: self::G, required s8: self::G}) → void + return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); static method main() → dynamic ; diff --git a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.transformed.expect index 108c0da4e593..0cc4089a7b3b 100644 --- a/pkg/front_end/testcases/general/bounds_parameters.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/general/bounds_parameters.dart.weak.transformed.expect @@ -264,6 +264,6 @@ static method method1(self::Class t1, dynamic t2, self::Class (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → Null {}; } static extension-member method Extension1|method3(lowered final core::int #this, self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void {} -static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {s1: self::G>, s2: self::G, s3: self::G>, s4: self::G>, s5: self::G, s6: self::G>, s7: self::G, s8: self::G}) → void - return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {self::G> s1, self::G s2, self::G> s3, self::G> s4, self::G s5, self::G> s6, self::G s7, self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); +static extension-member method Extension1|get#method3(lowered final core::int #this) → (self::Class, dynamic, self::Class, self::Class, self::ConcreteClass, self::Class, core::Object, core::int, {required s1: self::G>, required s2: self::G, required s3: self::G>, required s4: self::G>, required s5: self::G, required s6: self::G>, required s7: self::G, required s8: self::G}) → void + return (self::Class t1, dynamic t2, self::Class t3, self::Class t4, self::ConcreteClass t5, self::Class t6, core::Object t7, core::int t8, {required self::G> s1, required self::G s2, required self::G> s3, required self::G> s4, required self::G s5, required self::G> s6, required self::G s7, required self::G s8}) → void => self::Extension1|method3(#this, t1, t2, t3, t4, t5, t6, t7, t8, s1: s1, s2: s2, s3: s3, s4: s4, s5: s5, s6: s6, s7: s7, s8: s8); static method main() → dynamic {} diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.strong.expect index 7ee826535a3a..979695854969 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.strong.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.strong.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic {} library; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.strong.transformed.expect index 7ee826535a3a..979695854969 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.strong.transformed.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic {} library; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.expect index 7ee826535a3a..979695854969 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic {} library; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.modular.expect index 7ee826535a3a..979695854969 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.modular.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.modular.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic {} library; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.outline.expect index 114b78c6aafc..6eb88de3a943 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.outline.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.outline.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void ; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic ; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.transformed.expect index 7ee826535a3a..979695854969 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure.dart.weak.transformed.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic {} library; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.strong.expect index bf3388f6635e..766b6b7624c9 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.strong.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.strong.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic {} library; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.strong.transformed.expect index bf3388f6635e..766b6b7624c9 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.strong.transformed.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic {} library; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.expect index bf3388f6635e..766b6b7624c9 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic {} library; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.modular.expect index bf3388f6635e..766b6b7624c9 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.modular.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.modular.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic {} library; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.outline.expect index 86dccdd3f99b..32f794658545 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.outline.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.outline.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void ; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic ; diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.transformed.expect index bf3388f6635e..766b6b7624c9 100644 --- a/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_variation_1.dart.weak.transformed.expect @@ -10,8 +10,8 @@ extension /* unnamed */ _extension#0 on core::int { } static extension-member method _extension#0|_foo(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_foo(#this, x, a: a); +static extension-member method _extension#0|get#_foo(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_foo(#this, x, a: a); static method main() → dynamic {} library; diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect index b175e2aef173..2d33898cb4f7 100644 --- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect +++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect @@ -20,7 +20,7 @@ class Class extends core::Object { : self2::Class::defaultValue = defaultValue, super core::Object::•() ; @_in::patch - external static factory fact({has-declared-initializer core::bool defaultValue}) → self2::Class; + external static factory fact({core::bool defaultValue = true}) → self2::Class; @_in::patch external static factory constFact({core::bool defaultValue = true}) → self2::Class; @_in::patch diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect index ffa1c0cb8bd9..1619ece2661c 100644 --- a/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect +++ b/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect @@ -4,7 +4,7 @@ import "dart:core" as core; abstract class A extends core::Object { abstract get value() → core::int; - static factory •({core::int value}) → self::A /* redirection-target: self::_AImpl::• */ + static factory •({core::int value = null}) → self::A /* redirection-target: self::_AImpl::• */ return new self::_AImpl::•(value: value); } class _AImpl extends core::Object implements self::A { diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect index 3dac0d4b5b99..3641175ab249 100644 --- a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect +++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect @@ -11,25 +11,25 @@ class Class extends core::Object { return new self::Class::positional(); static factory redirect2a(core::int a) → self::Class /* redirection-target: self::Class::positional */ return new self::Class::positional(a); - static factory redirect3a([core::int a]) → self::Class /* redirection-target: self::Class::positional */ + static factory redirect3a([core::int a = null]) → self::Class /* redirection-target: self::Class::positional */ return new self::Class::positional(a); - static factory redirect4a(core::int a, [core::int b]) → self::Class /* redirection-target: self::Class::positional */ + static factory redirect4a(core::int a, [core::int b = null]) → self::Class /* redirection-target: self::Class::positional */ return new self::Class::positional(a, b); - static factory redirect5a([core::int a, core::int b]) → self::Class /* redirection-target: self::Class::positional */ + static factory redirect5a([core::int a = null, core::int b = null]) → self::Class /* redirection-target: self::Class::positional */ return new self::Class::positional(a, b); - static factory redirect6a([core::int a, has-declared-initializer core::int b]) → self::Class /* redirection-target: self::Class::positional */ + static factory redirect6a([core::int a = null, core::int b = 2]) → self::Class /* redirection-target: self::Class::positional */ return new self::Class::positional(a, b); static factory redirect1b() → self::Class /* redirection-target: self::Class::named */ return new self::Class::named(); - static factory redirect2b({core::int a}) → self::Class /* redirection-target: self::Class::named */ + static factory redirect2b({core::int a = null}) → self::Class /* redirection-target: self::Class::named */ return new self::Class::named(a: a); - static factory redirect3b({core::int b}) → self::Class /* redirection-target: self::Class::named */ + static factory redirect3b({core::int b = null}) → self::Class /* redirection-target: self::Class::named */ return new self::Class::named(b: b); - static factory redirect4b({core::int a, core::int b}) → self::Class /* redirection-target: self::Class::named */ + static factory redirect4b({core::int a = null, core::int b = null}) → self::Class /* redirection-target: self::Class::named */ return new self::Class::named(a: a, b: b); - static factory redirect5b({core::int b, core::int a}) → self::Class /* redirection-target: self::Class::named */ + static factory redirect5b({core::int b = null, core::int a = null}) → self::Class /* redirection-target: self::Class::named */ return new self::Class::named(b: b, a: a); - static factory redirect6b({has-declared-initializer core::int a, core::int b}) → self::Class /* redirection-target: self::Class::named */ + static factory redirect6b({core::int a = 1, core::int b = null}) → self::Class /* redirection-target: self::Class::named */ return new self::Class::named(a: a, b: b); } static method main() → dynamic diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect index 54b11429239f..e57dbb8b4d84 100644 --- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect +++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect @@ -6,7 +6,7 @@ class A extends core::Object { final field core::int field; constructor •([core::int field = 42]) → self::A ; - static factory redirect([has-declared-initializer core::int field]) → self::A /* redirection-target: self::A::• */ + static factory redirect([core::int field = 87]) → self::A /* redirection-target: self::A::• */ return new self::A::•(field); } static method main() → dynamic diff --git a/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.outline.expect index 524d598d6756..20e5b57769fe 100644 --- a/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.outline.expect +++ b/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.outline.expect @@ -20,12 +20,12 @@ class Class extends core::Object { @_in::patch external constructor •({core::bool defaultValue = true, required self2::Class::T% value}) → self2::Class; @_in::patch - external static factory fact({has-declared-initializer core::bool defaultValue, required self2::Class::fact::T% value}) → self2::Class; + external static factory fact({core::bool defaultValue = true, required self2::Class::fact::T% value}) → self2::Class; @_in::patch - external static factory redirect({core::bool defaultValue, required self2::Class::redirect::T% value}) → self2::Class /* redirection-target: self2::ClassImpl::•*/ + external static factory redirect({core::bool defaultValue = null, required self2::Class::redirect::T% value}) → self2::Class /* redirection-target: self2::ClassImpl::•*/ return new self2::ClassImpl::•(defaultValue: defaultValue, value: value); @_in::patch - external static factory redirect2({core::bool defaultValue, required self2::Class::redirect2::T% value}) → self2::Class /* redirection-target: self2::ClassImpl::patched*/ + external static factory redirect2({core::bool defaultValue = null, required self2::Class::redirect2::T% value}) → self2::Class /* redirection-target: self2::ClassImpl::patched*/ return new self2::ClassImpl::patched(defaultValue: defaultValue, value: value); } @_in::patch diff --git a/pkg/front_end/testcases/general/top_level_vs_local_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/top_level_vs_local_inference.dart.weak.outline.expect index 093d3655f471..d18b7d18cdd3 100644 --- a/pkg/front_end/testcases/general/top_level_vs_local_inference.dart.weak.outline.expect +++ b/pkg/front_end/testcases/general/top_level_vs_local_inference.dart.weak.outline.expect @@ -25,7 +25,7 @@ class Column extends core::Object { class TableSchema extends core::Object { constructor _() → self::TableSchema ; - static factory •({required core::Iterable fields, self::TableSchema::•::C? context}) → self::TableSchema + static factory •({required core::Iterable fields, self::TableSchema::•::C? context = null}) → self::TableSchema ; } static field self::TableSchema schema; diff --git a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.strong.expect b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.strong.expect index d2ec188ff6e5..63c7343ec8b3 100644 --- a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.strong.expect +++ b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.strong.expect @@ -147,24 +147,24 @@ static extension-member method _extension#0|get#_laterUnnamedParameter(lowered f return (T% x, (T%) → void y) → T% => self::_extension#0|_laterUnnamedParameter(#this, x, y); static extension-member method _extension#0|_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this, (self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T%) → void x, {required self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); +static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); static extension-member method _extension#0|_earlierUnnamedParameter(lowered final core::int #this, (self::_extension#0|_earlierUnnamedParameter::T%) → void x, self::_extension#0|_earlierUnnamedParameter::T% y) → void return throw ""; static extension-member method _extension#0|get#_earlierUnnamedParameter(lowered final core::int #this) → ((T%) → void, T%) → void return ((T%) → void x, T% y) → void => self::_extension#0|_earlierUnnamedParameter(#this, x, y); -static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_laterNamedParameter(lowered final core::int #this, {required self::_extension#0|_laterNamedParameter::T% a, required (self::_extension#0|_laterNamedParameter::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({a: (T%) → void, b: T%}) → void - return ({(T%) → void a, T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({required a: (T%) → void, required b: T%}) → void + return ({required (T%) → void a, required T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_earlierNamedParameter(lowered final core::int #this, {required (self::_extension#0|_earlierNamedParameter::T%) → void a, required self::_extension#0|_earlierNamedParameter::T% b}) → void return throw ""; static extension-member method _extension#0|_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this, self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T% b, {required (self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T%) → void a}) → void return throw ""; -static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {a: (T%) → void}) → void - return (T% b, {(T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); +static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {required a: (T%) → void}) → void + return (T% b, {required (T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); static extension-member method _extension#0|_propagateToReturnType(lowered final core::int #this, self::_extension#0|_propagateToReturnType::T% x, (self::_extension#0|_propagateToReturnType::T%) → self::_extension#0|_propagateToReturnType::U% y) → self::_extension#0|_propagateToReturnType::U% return throw ""; static extension-member method _extension#0|get#_propagateToReturnType(lowered final core::int #this) → (T%, (T%) → U%) → U% @@ -215,16 +215,16 @@ static extension-member method _extension#0|get#_parenthesized(lowered final cor return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesized(#this, x, y); static extension-member method _extension#0|_parenthesizedNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedNamed::T% a, required (self::_extension#0|_parenthesizedNamed::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); static extension-member method _extension#0|_parenthesizedTwice(lowered final core::int #this, self::_extension#0|_parenthesizedTwice::T% x, (self::_extension#0|_parenthesizedTwice::T%) → void y) → void return throw ""; static extension-member method _extension#0|get#_parenthesizedTwice(lowered final core::int #this) → (T%, (T%) → void) → void return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesizedTwice(#this, x, y); static extension-member method _extension#0|_parenthesizedTwiceNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedTwiceNamed::T% a, required (self::_extension#0|_parenthesizedTwiceNamed::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); static method main() → dynamic {} constants { diff --git a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.strong.transformed.expect index 51fa5c418fb5..f0c73f9cf5c2 100644 --- a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.strong.transformed.expect @@ -147,24 +147,24 @@ static extension-member method _extension#0|get#_laterUnnamedParameter(lowered f return (T% x, (T%) → void y) → T% => self::_extension#0|_laterUnnamedParameter(#this, x, y); static extension-member method _extension#0|_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this, (self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T%) → void x, {required self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); +static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); static extension-member method _extension#0|_earlierUnnamedParameter(lowered final core::int #this, (self::_extension#0|_earlierUnnamedParameter::T%) → void x, self::_extension#0|_earlierUnnamedParameter::T% y) → void return throw ""; static extension-member method _extension#0|get#_earlierUnnamedParameter(lowered final core::int #this) → ((T%) → void, T%) → void return ((T%) → void x, T% y) → void => self::_extension#0|_earlierUnnamedParameter(#this, x, y); -static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_laterNamedParameter(lowered final core::int #this, {required self::_extension#0|_laterNamedParameter::T% a, required (self::_extension#0|_laterNamedParameter::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({a: (T%) → void, b: T%}) → void - return ({(T%) → void a, T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({required a: (T%) → void, required b: T%}) → void + return ({required (T%) → void a, required T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_earlierNamedParameter(lowered final core::int #this, {required (self::_extension#0|_earlierNamedParameter::T%) → void a, required self::_extension#0|_earlierNamedParameter::T% b}) → void return throw ""; static extension-member method _extension#0|_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this, self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T% b, {required (self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T%) → void a}) → void return throw ""; -static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {a: (T%) → void}) → void - return (T% b, {(T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); +static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {required a: (T%) → void}) → void + return (T% b, {required (T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); static extension-member method _extension#0|_propagateToReturnType(lowered final core::int #this, self::_extension#0|_propagateToReturnType::T% x, (self::_extension#0|_propagateToReturnType::T%) → self::_extension#0|_propagateToReturnType::U% y) → self::_extension#0|_propagateToReturnType::U% return throw ""; static extension-member method _extension#0|get#_propagateToReturnType(lowered final core::int #this) → (T%, (T%) → U%) → U% @@ -215,16 +215,16 @@ static extension-member method _extension#0|get#_parenthesized(lowered final cor return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesized(#this, x, y); static extension-member method _extension#0|_parenthesizedNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedNamed::T% a, required (self::_extension#0|_parenthesizedNamed::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); static extension-member method _extension#0|_parenthesizedTwice(lowered final core::int #this, self::_extension#0|_parenthesizedTwice::T% x, (self::_extension#0|_parenthesizedTwice::T%) → void y) → void return throw ""; static extension-member method _extension#0|get#_parenthesizedTwice(lowered final core::int #this) → (T%, (T%) → void) → void return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesizedTwice(#this, x, y); static extension-member method _extension#0|_parenthesizedTwiceNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedTwiceNamed::T% a, required (self::_extension#0|_parenthesizedTwiceNamed::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); static method main() → dynamic {} constants { diff --git a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.expect b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.expect index d2ec188ff6e5..63c7343ec8b3 100644 --- a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.expect +++ b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.expect @@ -147,24 +147,24 @@ static extension-member method _extension#0|get#_laterUnnamedParameter(lowered f return (T% x, (T%) → void y) → T% => self::_extension#0|_laterUnnamedParameter(#this, x, y); static extension-member method _extension#0|_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this, (self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T%) → void x, {required self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); +static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); static extension-member method _extension#0|_earlierUnnamedParameter(lowered final core::int #this, (self::_extension#0|_earlierUnnamedParameter::T%) → void x, self::_extension#0|_earlierUnnamedParameter::T% y) → void return throw ""; static extension-member method _extension#0|get#_earlierUnnamedParameter(lowered final core::int #this) → ((T%) → void, T%) → void return ((T%) → void x, T% y) → void => self::_extension#0|_earlierUnnamedParameter(#this, x, y); -static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_laterNamedParameter(lowered final core::int #this, {required self::_extension#0|_laterNamedParameter::T% a, required (self::_extension#0|_laterNamedParameter::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({a: (T%) → void, b: T%}) → void - return ({(T%) → void a, T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({required a: (T%) → void, required b: T%}) → void + return ({required (T%) → void a, required T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_earlierNamedParameter(lowered final core::int #this, {required (self::_extension#0|_earlierNamedParameter::T%) → void a, required self::_extension#0|_earlierNamedParameter::T% b}) → void return throw ""; static extension-member method _extension#0|_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this, self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T% b, {required (self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T%) → void a}) → void return throw ""; -static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {a: (T%) → void}) → void - return (T% b, {(T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); +static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {required a: (T%) → void}) → void + return (T% b, {required (T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); static extension-member method _extension#0|_propagateToReturnType(lowered final core::int #this, self::_extension#0|_propagateToReturnType::T% x, (self::_extension#0|_propagateToReturnType::T%) → self::_extension#0|_propagateToReturnType::U% y) → self::_extension#0|_propagateToReturnType::U% return throw ""; static extension-member method _extension#0|get#_propagateToReturnType(lowered final core::int #this) → (T%, (T%) → U%) → U% @@ -215,16 +215,16 @@ static extension-member method _extension#0|get#_parenthesized(lowered final cor return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesized(#this, x, y); static extension-member method _extension#0|_parenthesizedNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedNamed::T% a, required (self::_extension#0|_parenthesizedNamed::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); static extension-member method _extension#0|_parenthesizedTwice(lowered final core::int #this, self::_extension#0|_parenthesizedTwice::T% x, (self::_extension#0|_parenthesizedTwice::T%) → void y) → void return throw ""; static extension-member method _extension#0|get#_parenthesizedTwice(lowered final core::int #this) → (T%, (T%) → void) → void return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesizedTwice(#this, x, y); static extension-member method _extension#0|_parenthesizedTwiceNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedTwiceNamed::T% a, required (self::_extension#0|_parenthesizedTwiceNamed::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); static method main() → dynamic {} constants { diff --git a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.modular.expect index d2ec188ff6e5..63c7343ec8b3 100644 --- a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.modular.expect +++ b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.modular.expect @@ -147,24 +147,24 @@ static extension-member method _extension#0|get#_laterUnnamedParameter(lowered f return (T% x, (T%) → void y) → T% => self::_extension#0|_laterUnnamedParameter(#this, x, y); static extension-member method _extension#0|_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this, (self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T%) → void x, {required self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); +static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); static extension-member method _extension#0|_earlierUnnamedParameter(lowered final core::int #this, (self::_extension#0|_earlierUnnamedParameter::T%) → void x, self::_extension#0|_earlierUnnamedParameter::T% y) → void return throw ""; static extension-member method _extension#0|get#_earlierUnnamedParameter(lowered final core::int #this) → ((T%) → void, T%) → void return ((T%) → void x, T% y) → void => self::_extension#0|_earlierUnnamedParameter(#this, x, y); -static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_laterNamedParameter(lowered final core::int #this, {required self::_extension#0|_laterNamedParameter::T% a, required (self::_extension#0|_laterNamedParameter::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({a: (T%) → void, b: T%}) → void - return ({(T%) → void a, T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({required a: (T%) → void, required b: T%}) → void + return ({required (T%) → void a, required T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_earlierNamedParameter(lowered final core::int #this, {required (self::_extension#0|_earlierNamedParameter::T%) → void a, required self::_extension#0|_earlierNamedParameter::T% b}) → void return throw ""; static extension-member method _extension#0|_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this, self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T% b, {required (self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T%) → void a}) → void return throw ""; -static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {a: (T%) → void}) → void - return (T% b, {(T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); +static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {required a: (T%) → void}) → void + return (T% b, {required (T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); static extension-member method _extension#0|_propagateToReturnType(lowered final core::int #this, self::_extension#0|_propagateToReturnType::T% x, (self::_extension#0|_propagateToReturnType::T%) → self::_extension#0|_propagateToReturnType::U% y) → self::_extension#0|_propagateToReturnType::U% return throw ""; static extension-member method _extension#0|get#_propagateToReturnType(lowered final core::int #this) → (T%, (T%) → U%) → U% @@ -215,16 +215,16 @@ static extension-member method _extension#0|get#_parenthesized(lowered final cor return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesized(#this, x, y); static extension-member method _extension#0|_parenthesizedNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedNamed::T% a, required (self::_extension#0|_parenthesizedNamed::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); static extension-member method _extension#0|_parenthesizedTwice(lowered final core::int #this, self::_extension#0|_parenthesizedTwice::T% x, (self::_extension#0|_parenthesizedTwice::T%) → void y) → void return throw ""; static extension-member method _extension#0|get#_parenthesizedTwice(lowered final core::int #this) → (T%, (T%) → void) → void return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesizedTwice(#this, x, y); static extension-member method _extension#0|_parenthesizedTwiceNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedTwiceNamed::T% a, required (self::_extension#0|_parenthesizedTwiceNamed::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); static method main() → dynamic {} constants { diff --git a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.outline.expect b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.outline.expect index ba03313abf68..c7e2cf112807 100644 --- a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.outline.expect +++ b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.outline.expect @@ -94,24 +94,24 @@ static extension-member method _extension#0|get#_laterUnnamedParameter(lowered f return (T% x, (T%) → void y) → T% => self::_extension#0|_laterUnnamedParameter(#this, x, y); static extension-member method _extension#0|_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this, (self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T%) → void x, {required self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T% a}) → void ; -static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); +static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); static extension-member method _extension#0|_earlierUnnamedParameter(lowered final core::int #this, (self::_extension#0|_earlierUnnamedParameter::T%) → void x, self::_extension#0|_earlierUnnamedParameter::T% y) → void ; static extension-member method _extension#0|get#_earlierUnnamedParameter(lowered final core::int #this) → ((T%) → void, T%) → void return ((T%) → void x, T% y) → void => self::_extension#0|_earlierUnnamedParameter(#this, x, y); -static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_laterNamedParameter(lowered final core::int #this, {required self::_extension#0|_laterNamedParameter::T% a, required (self::_extension#0|_laterNamedParameter::T%) → void b}) → void ; -static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({a: (T%) → void, b: T%}) → void - return ({(T%) → void a, T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({required a: (T%) → void, required b: T%}) → void + return ({required (T%) → void a, required T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_earlierNamedParameter(lowered final core::int #this, {required (self::_extension#0|_earlierNamedParameter::T%) → void a, required self::_extension#0|_earlierNamedParameter::T% b}) → void ; static extension-member method _extension#0|_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this, self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T% b, {required (self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T%) → void a}) → void ; -static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {a: (T%) → void}) → void - return (T% b, {(T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); +static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {required a: (T%) → void}) → void + return (T% b, {required (T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); static extension-member method _extension#0|_propagateToReturnType(lowered final core::int #this, self::_extension#0|_propagateToReturnType::T% x, (self::_extension#0|_propagateToReturnType::T%) → self::_extension#0|_propagateToReturnType::U% y) → self::_extension#0|_propagateToReturnType::U% ; static extension-member method _extension#0|get#_propagateToReturnType(lowered final core::int #this) → (T%, (T%) → U%) → U% @@ -162,15 +162,15 @@ static extension-member method _extension#0|get#_parenthesized(lowered final cor return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesized(#this, x, y); static extension-member method _extension#0|_parenthesizedNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedNamed::T% a, required (self::_extension#0|_parenthesizedNamed::T%) → void b}) → void ; -static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); static extension-member method _extension#0|_parenthesizedTwice(lowered final core::int #this, self::_extension#0|_parenthesizedTwice::T% x, (self::_extension#0|_parenthesizedTwice::T%) → void y) → void ; static extension-member method _extension#0|get#_parenthesizedTwice(lowered final core::int #this) → (T%, (T%) → void) → void return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesizedTwice(#this, x, y); static extension-member method _extension#0|_parenthesizedTwiceNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedTwiceNamed::T% a, required (self::_extension#0|_parenthesizedTwiceNamed::T%) → void b}) → void ; -static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); static method main() → dynamic ; diff --git a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.transformed.expect index 51fa5c418fb5..f0c73f9cf5c2 100644 --- a/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/inference_update_1/horizontal_inference_extension_method.dart.weak.transformed.expect @@ -147,24 +147,24 @@ static extension-member method _extension#0|get#_laterUnnamedParameter(lowered f return (T% x, (T%) → void y) → T% => self::_extension#0|_laterUnnamedParameter(#this, x, y); static extension-member method _extension#0|_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this, (self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T%) → void x, {required self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter::T% a}) → void return throw ""; -static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {a: T%}) → void - return ((T%) → void x, {T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); +static extension-member method _extension#0|get#_laterUnnamedParameterDependsOnNamedParameter(lowered final core::int #this) → ((T%) → void, {required a: T%}) → void + return ((T%) → void x, {required T% a}) → void => self::_extension#0|_laterUnnamedParameterDependsOnNamedParameter(#this, x, a: a); static extension-member method _extension#0|_earlierUnnamedParameter(lowered final core::int #this, (self::_extension#0|_earlierUnnamedParameter::T%) → void x, self::_extension#0|_earlierUnnamedParameter::T% y) → void return throw ""; static extension-member method _extension#0|get#_earlierUnnamedParameter(lowered final core::int #this) → ((T%) → void, T%) → void return ((T%) → void x, T% y) → void => self::_extension#0|_earlierUnnamedParameter(#this, x, y); -static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_laterNamedParameter(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_laterNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_laterNamedParameter(lowered final core::int #this, {required self::_extension#0|_laterNamedParameter::T% a, required (self::_extension#0|_laterNamedParameter::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({a: (T%) → void, b: T%}) → void - return ({(T%) → void a, T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); +static extension-member method _extension#0|get#_earlierNamedParameter(lowered final core::int #this) → ({required a: (T%) → void, required b: T%}) → void + return ({required (T%) → void a, required T% b}) → void => self::_extension#0|_earlierNamedParameter(#this, a: a, b: b); static extension-member method _extension#0|_earlierNamedParameter(lowered final core::int #this, {required (self::_extension#0|_earlierNamedParameter::T%) → void a, required self::_extension#0|_earlierNamedParameter::T% b}) → void return throw ""; static extension-member method _extension#0|_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this, self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T% b, {required (self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter::T%) → void a}) → void return throw ""; -static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {a: (T%) → void}) → void - return (T% b, {(T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); +static extension-member method _extension#0|get#_earlierNamedParameterDependsOnUnnamedParameter(lowered final core::int #this) → (T%, {required a: (T%) → void}) → void + return (T% b, {required (T%) → void a}) → void => self::_extension#0|_earlierNamedParameterDependsOnUnnamedParameter(#this, b, a: a); static extension-member method _extension#0|_propagateToReturnType(lowered final core::int #this, self::_extension#0|_propagateToReturnType::T% x, (self::_extension#0|_propagateToReturnType::T%) → self::_extension#0|_propagateToReturnType::U% y) → self::_extension#0|_propagateToReturnType::U% return throw ""; static extension-member method _extension#0|get#_propagateToReturnType(lowered final core::int #this) → (T%, (T%) → U%) → U% @@ -215,16 +215,16 @@ static extension-member method _extension#0|get#_parenthesized(lowered final cor return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesized(#this, x, y); static extension-member method _extension#0|_parenthesizedNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedNamed::T% a, required (self::_extension#0|_parenthesizedNamed::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedNamed(#this, a: a, b: b); static extension-member method _extension#0|_parenthesizedTwice(lowered final core::int #this, self::_extension#0|_parenthesizedTwice::T% x, (self::_extension#0|_parenthesizedTwice::T%) → void y) → void return throw ""; static extension-member method _extension#0|get#_parenthesizedTwice(lowered final core::int #this) → (T%, (T%) → void) → void return (T% x, (T%) → void y) → void => self::_extension#0|_parenthesizedTwice(#this, x, y); static extension-member method _extension#0|_parenthesizedTwiceNamed(lowered final core::int #this, {required self::_extension#0|_parenthesizedTwiceNamed::T% a, required (self::_extension#0|_parenthesizedTwiceNamed::T%) → void b}) → void return throw ""; -static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({a: T%, b: (T%) → void}) → void - return ({T% a, (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); +static extension-member method _extension#0|get#_parenthesizedTwiceNamed(lowered final core::int #this) → ({required a: T%, required b: (T%) → void}) → void + return ({required T% a, required (T%) → void b}) → void => self::_extension#0|_parenthesizedTwiceNamed(#this, a: a, b: b); static method main() → dynamic {} constants { diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect index 5f42b5ff71d5..2731adfb6355 100644 --- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect +++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect @@ -103,19 +103,19 @@ class A extends core::Object { ; external constructor constructor8([core::int i = null]) → self::A; external constructor constructor9({core::int i = null}) → self::A; - static factory factory3([core::int i]) → self::A /* redirection-target: self::A::constructor3 */ + static factory factory3([core::int i = null]) → self::A /* redirection-target: self::A::constructor3 */ return new self::A::constructor3(i); - static factory factory4({core::int i}) → self::A /* redirection-target: self::A::constructor4 */ + static factory factory4({core::int i = null}) → self::A /* redirection-target: self::A::constructor4 */ return new self::A::constructor4(i: i); - static factory factory5([core::int? i]) → self::A /* redirection-target: self::A::constructor5 */ + static factory factory5([core::int? i = null]) → self::A /* redirection-target: self::A::constructor5 */ return new self::A::constructor5(i); - static factory factory6({core::int? i}) → self::A /* redirection-target: self::A::constructor6 */ + static factory factory6({core::int? i = null}) → self::A /* redirection-target: self::A::constructor6 */ return new self::A::constructor6(i: i); static factory factory7({required core::int i}) → self::A /* redirection-target: self::A::constructor7 */ return new self::A::constructor7(i: i); - static factory factory8([core::int i]) → self::A + static factory factory8([core::int i = null]) → self::A ; - static factory factory9({core::int i}) → self::A + static factory factory9({core::int i = null}) → self::A ; method method3([core::int i = null]) → dynamic ; @@ -156,19 +156,19 @@ class C extends core::Object implements self::B { ; constructor constructor7({required core::int i}) → self::C ; - static factory factory3([core::int i]) → self::C /* redirection-target: self::C::constructor3 */ + static factory factory3([core::int i = null]) → self::C /* redirection-target: self::C::constructor3 */ return new self::C::constructor3(i); - static factory factory4({core::int i}) → self::C /* redirection-target: self::C::constructor4 */ + static factory factory4({core::int i = null}) → self::C /* redirection-target: self::C::constructor4 */ return new self::C::constructor4(i: i); - static factory factory5([core::int? i]) → self::C /* redirection-target: self::C::constructor5 */ + static factory factory5([core::int? i = null]) → self::C /* redirection-target: self::C::constructor5 */ return new self::C::constructor5(i); - static factory factory6({core::int? i}) → self::C /* redirection-target: self::C::constructor6 */ + static factory factory6({core::int? i = null}) → self::C /* redirection-target: self::C::constructor6 */ return new self::C::constructor6(i: i); static factory factory7({required core::int i}) → self::C /* redirection-target: self::C::constructor7 */ return new self::C::constructor7(i: i); - static factory factory8([core::int i]) → self::C + static factory factory8([core::int i = null]) → self::C ; - static factory factory9({core::int i}) → self::C + static factory factory9({core::int i = null}) → self::C ; method method3([core::int i = null]) → dynamic ; diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect index bbe11625a86c..cd811337187f 100644 --- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect +++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect @@ -18,9 +18,9 @@ import "dart:core" as core; class C extends core::Object { constructor gen({core::int i = null}) → self::C ; - static factory fact({core::int i}) → self::C + static factory fact({core::int i = null}) → self::C ; - static factory redirect({core::int i}) → self::C /* redirection-target: self::C::gen */ + static factory redirect({core::int i = null}) → self::C /* redirection-target: self::C::gen */ return new self::C::gen(i: i); } class D extends core::Object { diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart index bf10220c2391..d7fb52b9d99f 100644 --- a/pkg/kernel/lib/verifier.dart +++ b/pkg/kernel/lib/verifier.dart @@ -814,11 +814,42 @@ class VerifyingVisitor extends RecursiveResultVisitor { bool savedInCatchBlock = inCatchBlock; AsyncMarker savedAsyncMarker = currentAsyncMarker; currentAsyncMarker = node.asyncMarker; - if (!isOutline && - node.asyncMarker == AsyncMarker.Async && - node.emittedValueType == null) { - problem(node, - "No future value type set for async function in opt-in library."); + if (!isOutline) { + if (node.asyncMarker == AsyncMarker.Async && + node.emittedValueType == null) { + problem(node, + "No future value type set for async function in opt-in library."); + } + + TreeNode? parent = node.parent; + if (parent is! Procedure || + !parent.isAbstract && + !parent.isSynthetic && + !parent.isSyntheticForwarder) { + for (int positionalIndex = 0; + positionalIndex < node.positionalParameters.length; + positionalIndex++) { + if (positionalIndex >= node.requiredParameterCount) { + VariableDeclaration positionalParameter = + node.positionalParameters[positionalIndex]; + if (positionalParameter.initializer == null) { + problem( + positionalParameter, + "An optional positional parameter is expected to have a " + "default value initializer, defined or synthesized."); + } + } + } + for (VariableDeclaration namedParameter in node.namedParameters) { + if (!namedParameter.isRequired && + namedParameter.initializer == null) { + problem( + namedParameter, + "An optional named parameter is expected to have a default " + "value initializer, defined or synthesized."); + } + } + } } inCatchBlock = false; visitWithLocalScope(node);