From bd460ca60577ffd1ac91c095df500b75dcc0bace Mon Sep 17 00:00:00 2001 From: Johnni Winther Date: Tue, 4 Jan 2022 11:50:15 +0000 Subject: [PATCH] [cfe] Add DillProcedureBuilder implementing ProcedureBuilder This adds a DillProcedureBuilder superclass to DillMethodBuilder, DillOperatorBuilder, DillGetterBuilder, DillSetterBuilder and DillFactoryBuilder by which they implement a cleaned up ProcedureBuilder. Includes cleanup made possible by this change and by the previous change to make DillConstructorBuilder implement ConstructorBuilder. Change-Id: Ieb835dc2788065a06b7f3eda1ccc34ccd1788c28 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/226081 Reviewed-by: Chloe Stefantsova Commit-Queue: Johnni Winther --- .../lib/src/fasta/builder/class_builder.dart | 23 -------- .../src/fasta/builder/procedure_builder.dart | 18 ------- .../src/fasta/dill/dill_member_builder.dart | 53 +++++++++---------- .../lib/src/fasta/kernel/kernel_target.dart | 7 +-- .../fasta/source/source_class_builder.dart | 2 +- .../source/source_constructor_builder.dart | 14 ++--- .../source/source_procedure_builder.dart | 7 --- 7 files changed, 30 insertions(+), 94 deletions(-) diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart index 47a66ca5166..d5451757f96 100644 --- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart @@ -31,7 +31,6 @@ import 'package:kernel/type_algebra.dart' show Substitution, substitute; import 'package:kernel/type_environment.dart' show SubtypeCheckMode, TypeEnvironment; -import '../dill/dill_member_builder.dart'; import '../fasta_codes.dart'; import '../kernel/kernel_helper.dart'; import '../kernel/redirecting_factory_body.dart' show RedirectingFactoryBody; @@ -877,28 +876,6 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl if (targetBuilder == null) return null; if (targetBuilder is FunctionBuilder) { targetNode = targetBuilder.function; - } else if (targetBuilder is DillConstructorBuilder) { - // It seems that the [redirectionTarget.target] is an instance of - // [DillMemberBuilder] whenever the redirectee is an implicit constructor, - // e.g. - // - // class A { - // factory A() = B; - // } - // class B implements A {} - // - targetNode = targetBuilder.constructor.function; - } else if (targetBuilder is DillFactoryBuilder) { - // It seems that the [redirectionTarget.target] is an instance of - // [DillMemberBuilder] whenever the redirectee is an implicit constructor, - // e.g. - // - // class A { - // factory A() = B; - // } - // class B implements A {} - // - targetNode = targetBuilder.procedure.function; } else if (targetBuilder is AmbiguousBuilder) { // Multiple definitions with the same name: An error has already been // issued. diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart index 71ca0c261a6..85e54acc80a 100644 --- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart @@ -7,26 +7,8 @@ import 'package:kernel/ast.dart'; import 'function_builder.dart'; abstract class ProcedureBuilder implements FunctionBuilder { - int get charOpenParenOffset; - - ProcedureBuilder? get patchForTesting; - - AsyncMarker get actualAsyncModifier; - Procedure get procedure; @override ProcedureKind get kind; - - Procedure get actualProcedure; - - @override - ProcedureBuilder get origin; - - void set asyncModifier(AsyncMarker newModifier); - - bool get isEligibleForTopLevelInference; - - /// Returns `true` if this procedure is declared in an extension declaration. - bool get isExtensionMethod; } diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart index 42d99a3f6c1..f3046a75a0d 100644 --- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart +++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart @@ -11,6 +11,7 @@ import '../builder/builder.dart'; import '../builder/constructor_builder.dart'; import '../builder/member_builder.dart'; +import '../builder/procedure_builder.dart'; import '../kernel/hierarchy/class_member.dart' show ClassMember; import '../kernel/hierarchy/members_builder.dart' show ClassMembersBuilder; import '../kernel/member_covariance.dart'; @@ -64,12 +65,6 @@ abstract class DillMemberBuilder extends MemberBuilderImpl { @override bool get isFactory => identical(ProcedureKind.Factory, kind); - /*@override - bool get isRedirectingGenerativeConstructor { - return isConstructor && - isRedirectingGenerativeConstructorImplementation(member as Constructor); - }*/ - @override bool get isSynthetic { final Member member = this.member; @@ -79,12 +74,6 @@ abstract class DillMemberBuilder extends MemberBuilderImpl { @override bool get isAssignable => false; - /*@override - void buildMembers( - LibraryBuilder library, void Function(Member, BuiltMemberKind) f) { - throw new UnsupportedError('DillMemberBuilder.buildMembers'); - }*/ - List? _localMembers; List? _localSetters; @@ -124,10 +113,23 @@ class DillFieldBuilder extends DillMemberBuilder { bool get isAssignable => field.hasSetter; } -class DillGetterBuilder extends DillMemberBuilder { +abstract class DillProcedureBuilder extends DillMemberBuilder + implements ProcedureBuilder { + @override final Procedure procedure; - DillGetterBuilder(this.procedure, Builder parent) + DillProcedureBuilder(this.procedure, Builder parent) + : super(procedure, parent); + + @override + ProcedureKind get kind => procedure.kind; + + @override + FunctionNode get function => procedure.function; +} + +class DillGetterBuilder extends DillProcedureBuilder { + DillGetterBuilder(Procedure procedure, Builder parent) : assert(procedure.kind == ProcedureKind.Getter), super(procedure, parent); @@ -144,10 +146,8 @@ class DillGetterBuilder extends DillMemberBuilder { Member get invokeTarget => procedure; } -class DillSetterBuilder extends DillMemberBuilder { - final Procedure procedure; - - DillSetterBuilder(this.procedure, Builder parent) +class DillSetterBuilder extends DillProcedureBuilder { + DillSetterBuilder(Procedure procedure, Builder parent) : assert(procedure.kind == ProcedureKind.Setter), super(procedure, parent); @@ -164,10 +164,8 @@ class DillSetterBuilder extends DillMemberBuilder { Member? get invokeTarget => null; } -class DillMethodBuilder extends DillMemberBuilder { - final Procedure procedure; - - DillMethodBuilder(this.procedure, Builder parent) +class DillMethodBuilder extends DillProcedureBuilder { + DillMethodBuilder(Procedure procedure, Builder parent) : assert(procedure.kind == ProcedureKind.Method), super(procedure, parent); @@ -184,10 +182,8 @@ class DillMethodBuilder extends DillMemberBuilder { Member get invokeTarget => procedure; } -class DillOperatorBuilder extends DillMemberBuilder { - final Procedure procedure; - - DillOperatorBuilder(this.procedure, Builder parent) +class DillOperatorBuilder extends DillProcedureBuilder { + DillOperatorBuilder(Procedure procedure, Builder parent) : assert(procedure.kind == ProcedureKind.Operator), super(procedure, parent); @@ -204,11 +200,10 @@ class DillOperatorBuilder extends DillMemberBuilder { Member get invokeTarget => procedure; } -class DillFactoryBuilder extends DillMemberBuilder { - final Procedure procedure; +class DillFactoryBuilder extends DillProcedureBuilder { final Procedure? _factoryTearOff; - DillFactoryBuilder(this.procedure, this._factoryTearOff, Builder parent) + DillFactoryBuilder(Procedure procedure, this._factoryTearOff, Builder parent) : super(procedure, parent); @override 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 7b9812496de..f2a6f7f4b2f 100644 --- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart @@ -40,7 +40,6 @@ import '../builder/type_variable_builder.dart'; import '../builder/void_type_declaration_builder.dart'; import '../compiler_context.dart' show CompilerContext; import '../crash.dart' show withCrashReporting; -import '../dill/dill_member_builder.dart' show DillMemberBuilder; import '../dill/dill_target.dart' show DillTarget; import '../kernel/constructor_tearoff_lowering.dart'; import '../loader.dart' show Loader; @@ -517,11 +516,7 @@ class KernelTarget extends TargetImplementation { declaration = problem.getFirstDeclaration(); } if (declaration is ProcedureBuilder) { - mainReference = declaration.actualProcedure.reference; - } else if (declaration is DillMemberBuilder) { - if (declaration.member is Procedure) { - mainReference = declaration.member.reference; - } + mainReference = declaration.procedure.reference; } } component.setMainMethodAndMode(mainReference, true, compiledMode); diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart index 51311fb71b6..c9eacac1c50 100644 --- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart @@ -569,7 +569,7 @@ class SourceClassBuilder extends ClassBuilderImpl } else { assert( // This is a synthesized constructor. - builder is DillConstructorBuilder, + builder is SyntheticSourceConstructorBuilder, "Unexpected constructor: $builder."); } }, includeInjectedConstructors: true); 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 36e33bcfee6..d6c3ae4c874 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 @@ -245,8 +245,7 @@ class DeclaredSourceConstructorBuilder extends SourceFunctionBuilderImpl _hasFormalsInferred = true; } - /* ConstructorBuilder | DillConstructorBuilder */ - Object? _computeSuperTargetBuilder() { + ConstructorBuilder? _computeSuperTargetBuilder() { Constructor superTarget; ClassBuilder superclassBuilder; @@ -280,8 +279,6 @@ class DeclaredSourceConstructorBuilder extends SourceFunctionBuilderImpl .lookup("", charOffset, library.fileUri); if (memberBuilder is ConstructorBuilder) { superTarget = memberBuilder.constructor; - } else if (memberBuilder is DillConstructorBuilder) { - superTarget = memberBuilder.constructor; } else { // The error in this case should be reported elsewhere. return null; @@ -291,10 +288,7 @@ class DeclaredSourceConstructorBuilder extends SourceFunctionBuilderImpl MemberBuilder? constructorBuilder = superclassBuilder.findConstructorOrFactory( superTarget.name.text, charOffset, library.fileUri, library); - return constructorBuilder is ConstructorBuilder || - constructorBuilder is DillConstructorBuilder - ? constructorBuilder - : null; + return constructorBuilder is ConstructorBuilder ? constructorBuilder : null; } void finalizeSuperInitializingFormals(ClassHierarchy classHierarchy, @@ -310,7 +304,7 @@ class DeclaredSourceConstructorBuilder extends SourceFunctionBuilderImpl } } - Object? superTargetBuilder = _computeSuperTargetBuilder(); + ConstructorBuilder? superTargetBuilder = _computeSuperTargetBuilder(); Constructor superTarget; List? superFormals; if (superTargetBuilder is DeclaredSourceConstructorBuilder) { @@ -459,7 +453,7 @@ class DeclaredSourceConstructorBuilder extends SourceFunctionBuilderImpl void addSuperParameterDefaultValueCloners( List synthesizedFunctionNodes) { - Object? superTargetBuilder = _computeSuperTargetBuilder(); + ConstructorBuilder? superTargetBuilder = _computeSuperTargetBuilder(); if (superTargetBuilder is DeclaredSourceConstructorBuilder) { superTargetBuilder .addSuperParameterDefaultValueCloners(synthesizedFunctionNodes); 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 861506f530a..44af31fa40d 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 @@ -24,10 +24,8 @@ import 'source_member_builder.dart'; class SourceProcedureBuilder extends SourceFunctionBuilderImpl implements ProcedureBuilder { - @override final int charOpenParenOffset; - @override AsyncMarker actualAsyncModifier = AsyncMarker.Sync; @override @@ -106,7 +104,6 @@ class SourceProcedureBuilder extends SourceFunctionBuilderImpl } } - @override ProcedureBuilder? get patchForTesting => dataForTesting?.patchForTesting as ProcedureBuilder?; @@ -121,14 +118,12 @@ class SourceProcedureBuilder extends SourceFunctionBuilderImpl return bodyInternal; } - @override void set asyncModifier(AsyncMarker newModifier) { actualAsyncModifier = newModifier; function.asyncMarker = actualAsyncModifier; function.dartAsyncMarker = actualAsyncModifier; } - @override bool get isEligibleForTopLevelInference { if (isDeclarationInstanceMember) { if (returnType == null) return true; @@ -141,7 +136,6 @@ class SourceProcedureBuilder extends SourceFunctionBuilderImpl return false; } - @override bool get isExtensionMethod { return parent is ExtensionBuilder; } @@ -155,7 +149,6 @@ class SourceProcedureBuilder extends SourceFunctionBuilderImpl @override Procedure get procedure => isPatch ? origin.procedure : _procedure; - @override Procedure get actualProcedure => _procedure; @override