From 66658c89a20338d00e16b2d941bd46a07d437e01 Mon Sep 17 00:00:00 2001 From: Johnni Winther Date: Mon, 22 Jul 2024 07:39:20 +0000 Subject: [PATCH] [cfe] Introduce NameSpace This adds a NameSpace interface to Scope and uses it for access to local members. The NameSpace represents entities declared with a library or class/extension (type) declaration and is to be used for creating a Scope instead of being the scope itself. As such it is added to LibraryBuilder and IDeclarationBuilder and used in place of the `scope` property for accessing these entities. Change-Id: Id9b03bc8e820ad8f6d185cc95d695ac4a5e59f8f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/376622 Commit-Queue: Johnni Winther Reviewed-by: Chloe Stefantsova --- .../lib/src/base/incremental_compiler.dart | 24 +++---- pkg/front_end/lib/src/base/scope.dart | 65 ++++++++++++++++++- .../lib/src/builder/builder_mixins.dart | 4 +- .../lib/src/builder/class_builder.dart | 17 ++--- .../constructor_reference_builder.dart | 2 +- .../lib/src/builder/declaration_builder.dart | 18 ++--- .../lib/src/builder/extension_builder.dart | 5 +- .../extension_type_declaration_builder.dart | 13 +--- .../lib/src/builder/library_builder.dart | 10 +-- .../lib/src/builder/named_type_builder.dart | 2 +- .../lib/src/builder/type_builder.dart | 2 +- .../lib/src/dill/dill_class_builder.dart | 42 +++++++----- .../lib/src/dill/dill_extension_builder.dart | 45 +++++++------ ...ll_extension_type_declaration_builder.dart | 52 +++++++++------ .../lib/src/dill/dill_library_builder.dart | 20 +++--- .../src/kernel/macro/annotation_parser.dart | 4 +- .../lib/src/kernel/macro/introspectors.dart | 4 +- .../lib/src/source/class_declaration.dart | 15 +++-- .../lib/src/source/source_builder_mixins.dart | 14 ++-- .../lib/src/source/source_class_builder.dart | 34 ++++++---- .../src/source/source_extension_builder.dart | 23 +++++-- ...ce_extension_type_declaration_builder.dart | 24 ++++--- .../src/source/source_library_builder.dart | 32 +++++---- .../lib/src/testing/id_testing_utils.dart | 10 +-- .../test/coverage_suite_expected.dart | 31 +++++---- ...ill_type_alias_builder_type_calc_test.dart | 2 +- 26 files changed, 308 insertions(+), 206 deletions(-) diff --git a/pkg/front_end/lib/src/base/incremental_compiler.dart b/pkg/front_end/lib/src/base/incremental_compiler.dart index 55b7d1174709..66157f60c09d 100644 --- a/pkg/front_end/lib/src/base/incremental_compiler.dart +++ b/pkg/front_end/lib/src/base/incremental_compiler.dart @@ -640,7 +640,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator { // Clear cached calculations that points (potential) to now replaced // things. - for (Builder builder in builder.scope.localMembers) { + for (Builder builder in builder.nameSpace.localMembers) { if (builder is DillClassBuilder) { builder.clearCachedValues(); } @@ -1042,7 +1042,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator { if (builder.isBuiltAndMarked) { // Clear cached calculations in classes which upon calculation can // mark things as needed. - for (Builder builder in builder.scope.localMembers) { + for (Builder builder in builder.nameSpace.localMembers) { if (builder is DillClassBuilder) { builder.clearCachedValues(); } @@ -1886,8 +1886,8 @@ class IncrementalCompiler implements IncrementalKernelGenerator { Class? cls; if (className != null) { - Builder? scopeMember = - libraryBuilder.scope.lookupLocalMember(className, setter: false); + Builder? scopeMember = libraryBuilder.nameSpace + .lookupLocalMember(className, setter: false); if (scopeMember is ClassBuilder) { cls = scopeMember.cls; } else { @@ -1902,8 +1902,8 @@ class IncrementalCompiler implements IncrementalKernelGenerator { if (indexOfDot >= 0) { String beforeDot = methodName.substring(0, indexOfDot); String afterDot = methodName.substring(indexOfDot + 1); - Builder? builder = - libraryBuilder.scope.lookupLocalMember(beforeDot, setter: false); + Builder? builder = libraryBuilder.nameSpace + .lookupLocalMember(beforeDot, setter: false); extensionName = beforeDot; if (builder is ExtensionBuilder) { extension = builder.extension; @@ -1983,14 +1983,14 @@ class IncrementalCompiler implements IncrementalKernelGenerator { isPatch: false, ); debugLibrary.compilationUnit.createLibrary(); - libraryBuilder.scope.forEachLocalMember((name, member) { - debugLibrary.scope.addLocalMember(name, member, setter: false); + libraryBuilder.nameSpace.forEachLocalMember((name, member) { + debugLibrary.nameSpace.addLocalMember(name, member, setter: false); }); - libraryBuilder.scope.forEachLocalSetter((name, member) { - debugLibrary.scope.addLocalMember(name, member, setter: true); + libraryBuilder.nameSpace.forEachLocalSetter((name, member) { + debugLibrary.nameSpace.addLocalMember(name, member, setter: true); }); - libraryBuilder.scope.forEachLocalExtension((member) { - debugLibrary.scope.addExtension(member); + libraryBuilder.nameSpace.forEachLocalExtension((member) { + debugLibrary.nameSpace.addExtension(member); }); _ticker.logMs("Created debug library"); diff --git a/pkg/front_end/lib/src/base/scope.dart b/pkg/front_end/lib/src/base/scope.dart index 3ab8263a1387..d7c9f0b8b9e8 100644 --- a/pkg/front_end/lib/src/base/scope.dart +++ b/pkg/front_end/lib/src/base/scope.dart @@ -2,6 +2,8 @@ // 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. +// ignore_for_file: annotate_overrides + library fasta.scope; import 'package:kernel/ast.dart'; @@ -178,7 +180,68 @@ class MutableScope { String toString() => "Scope(${kind}, $classNameOrDebugName, ${_local?.keys})"; } -class Scope extends MutableScope implements ParentScope, LookupScope { +abstract class NameSpace { + void addLocalMember(String name, Builder member, {required bool setter}); + + Builder? lookupLocalMember(String name, {required bool setter}); + + void forEachLocalMember(void Function(String name, Builder member) f); + + void forEachLocalSetter(void Function(String name, MemberBuilder member) f); + + void forEachLocalExtension(void Function(ExtensionBuilder member) f); + + Iterable get localMembers; + + /// Returns an iterator of all members and setters mapped in this scope, + /// including duplicate members mapped to the same name. + /// + /// The iterator does _not_ include the members and setters mapped in the + /// [parent] scope. + Iterator get unfilteredIterator; + + /// Returns an iterator of all members and setters mapped in this scope, + /// including duplicate members mapped to the same name. + /// + /// The iterator does _not_ include the members and setters mapped in the + /// [parent] scope. + /// + /// Compared to [unfilteredIterator] this iterator also gives access to the + /// name that the builders are mapped to. + NameIterator get unfilteredNameIterator; + + /// Returns a filtered iterator of members and setters mapped in this scope. + /// + /// Only members of type [T] are included. If [parent] is provided, on members + /// declared in [parent] are included. If [includeDuplicates] is `true`, all + /// duplicates of the same name are included, otherwise, only the first + /// declared member is included. If [includeAugmentations] is `true`, both + /// original and augmenting/patching members are included, otherwise, only + /// original members are included. + Iterator filteredIterator( + {Builder? parent, + required bool includeDuplicates, + required bool includeAugmentations}); + + /// Returns a filtered iterator of members and setters mapped in this scope. + /// + /// Only members of type [T] are included. If [parent] is provided, on members + /// declared in [parent] are included. If [includeDuplicates] is `true`, all + /// duplicates of the same name are included, otherwise, only the first + /// declared member is included. If [includeAugmentations] is `true`, both + /// original and augmenting/patching members are included, otherwise, only + /// original members are included. + /// + /// Compared to [filteredIterator] this iterator also gives access to the + /// name that the builders are mapped to. + NameIterator filteredNameIterator( + {Builder? parent, + required bool includeDuplicates, + required bool includeAugmentations}); +} + +class Scope extends MutableScope + implements ParentScope, LookupScope, NameSpace { /// Indicates whether an attempt to declare new names in this scope should /// succeed. final bool isModifiable; diff --git a/pkg/front_end/lib/src/builder/builder_mixins.dart b/pkg/front_end/lib/src/builder/builder_mixins.dart index 70aebd53a95f..803a2364f3ff 100644 --- a/pkg/front_end/lib/src/builder/builder_mixins.dart +++ b/pkg/front_end/lib/src/builder/builder_mixins.dart @@ -58,7 +58,7 @@ mixin DeclarationBuilderMixin implements IDeclarationBuilder { } void forEach(void f(String name, Builder builder)) { - scope + nameSpace .filteredNameIterator( includeDuplicates: false, includeAugmentations: false) .forEach(f); @@ -72,7 +72,7 @@ mixin DeclarationBuilderMixin implements IDeclarationBuilder { {bool setter = false, bool required = false}) { // TODO(johnniwinther): Support augmented on extensions/extension type // declarations. - Builder? builder = scope.lookupLocalMember(name, setter: setter); + Builder? builder = nameSpace.lookupLocalMember(name, setter: setter); if (required && builder == null) { internalProblem( templateInternalProblemNotFoundIn.withArguments( diff --git a/pkg/front_end/lib/src/builder/class_builder.dart b/pkg/front_end/lib/src/builder/class_builder.dart index 58efb804ee66..c7217cd17a1a 100644 --- a/pkg/front_end/lib/src/builder/class_builder.dart +++ b/pkg/front_end/lib/src/builder/class_builder.dart @@ -177,16 +177,9 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl InterfaceType? _nonNullableRawType; InterfaceType? _thisType; - ClassBuilderImpl( - List? metadata, - int modifiers, - String name, - Scope scope, - ConstructorScope constructorScope, - LibraryBuilder parent, - int charOffset) - : super(metadata, modifiers, name, parent, charOffset, scope, - constructorScope); + ClassBuilderImpl(List? metadata, int modifiers, String name, + LibraryBuilder parent, int charOffset) + : super(metadata, modifiers, name, parent, charOffset); @override String get debugName => "ClassBuilder"; @@ -236,10 +229,10 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl @override Builder? lookupLocalMember(String name, {bool setter = false, bool required = false}) { - Builder? builder = scope.lookupLocalMember(name, setter: setter); + Builder? builder = nameSpace.lookupLocalMember(name, setter: setter); if (builder == null && isAugmenting) { // Coverage-ignore-block(suite): Not run. - builder = origin.scope.lookupLocalMember(name, setter: setter); + builder = origin.nameSpace.lookupLocalMember(name, setter: setter); } if (required && builder == null) { internalProblem( diff --git a/pkg/front_end/lib/src/builder/constructor_reference_builder.dart b/pkg/front_end/lib/src/builder/constructor_reference_builder.dart index af514a24cf4b..c99d16e4de2e 100644 --- a/pkg/front_end/lib/src/builder/constructor_reference_builder.dart +++ b/pkg/front_end/lib/src/builder/constructor_reference_builder.dart @@ -34,7 +34,7 @@ class ConstructorReferenceBuilder { "${suffix == null ? '' : '.$suffix'}"; } - void resolveIn(Scope scope, LibraryBuilder accessingLibrary) { + void resolveIn(LookupScope scope, LibraryBuilder accessingLibrary) { Builder? declaration; String? qualifier = typeName.qualifier; if (qualifier != null) { diff --git a/pkg/front_end/lib/src/builder/declaration_builder.dart b/pkg/front_end/lib/src/builder/declaration_builder.dart index 6c765dcc2d8f..757db4c29ee8 100644 --- a/pkg/front_end/lib/src/builder/declaration_builder.dart +++ b/pkg/front_end/lib/src/builder/declaration_builder.dart @@ -7,6 +7,8 @@ part of 'declaration_builders.dart'; abstract class IDeclarationBuilder implements ITypeDeclarationBuilder { Scope get scope; + NameSpace get nameSpace; + LibraryBuilder get libraryBuilder; @override @@ -48,23 +50,11 @@ abstract class IDeclarationBuilder implements ITypeDeclarationBuilder { abstract class DeclarationBuilderImpl extends TypeDeclarationBuilderImpl implements IDeclarationBuilder { - @override - final Scope scope; - - @override - final ConstructorScope constructorScope; - @override final Uri fileUri; - DeclarationBuilderImpl( - List? metadata, - int modifiers, - String name, - LibraryBuilder parent, - int charOffset, - this.scope, - this.constructorScope) + DeclarationBuilderImpl(List? metadata, int modifiers, + String name, LibraryBuilder parent, int charOffset) : fileUri = parent.fileUri, super(metadata, modifiers, name, parent, charOffset); diff --git a/pkg/front_end/lib/src/builder/extension_builder.dart b/pkg/front_end/lib/src/builder/extension_builder.dart index 1bc85bed3540..4a3287cffeb5 100644 --- a/pkg/front_end/lib/src/builder/extension_builder.dart +++ b/pkg/front_end/lib/src/builder/extension_builder.dart @@ -34,9 +34,8 @@ abstract class ExtensionBuilderImpl extends DeclarationBuilderImpl with DeclarationBuilderMixin implements ExtensionBuilder { ExtensionBuilderImpl(List? metadata, int modifiers, - String name, LibraryBuilder parent, int charOffset, Scope scope) - : super(metadata, modifiers, name, parent, charOffset, scope, - new ConstructorScope(name, const {})); + String name, LibraryBuilder parent, int charOffset) + : super(metadata, modifiers, name, parent, charOffset); @override DartType buildAliasedTypeWithBuiltArguments( diff --git a/pkg/front_end/lib/src/builder/extension_type_declaration_builder.dart b/pkg/front_end/lib/src/builder/extension_type_declaration_builder.dart index 17ac217e24a2..71e61f39f524 100644 --- a/pkg/front_end/lib/src/builder/extension_type_declaration_builder.dart +++ b/pkg/front_end/lib/src/builder/extension_type_declaration_builder.dart @@ -35,16 +35,9 @@ abstract class ExtensionTypeDeclarationBuilderImpl extends DeclarationBuilderImpl with DeclarationBuilderMixin implements ExtensionTypeDeclarationBuilder { - ExtensionTypeDeclarationBuilderImpl( - List? metadata, - int modifiers, - String name, - LibraryBuilder parent, - int charOffset, - Scope scope, - ConstructorScope constructorScope) - : super(metadata, modifiers, name, parent, charOffset, scope, - constructorScope); + ExtensionTypeDeclarationBuilderImpl(List? metadata, + int modifiers, String name, LibraryBuilder parent, int charOffset) + : super(metadata, modifiers, name, parent, charOffset); @override DartType buildAliasedTypeWithBuiltArguments( diff --git a/pkg/front_end/lib/src/builder/library_builder.dart b/pkg/front_end/lib/src/builder/library_builder.dart index ed8482fa06ff..5c105ab18858 100644 --- a/pkg/front_end/lib/src/builder/library_builder.dart +++ b/pkg/front_end/lib/src/builder/library_builder.dart @@ -260,6 +260,8 @@ abstract class SourceCompilationUnit implements CompilationUnit { abstract class LibraryBuilder implements Builder, ProblemReporting { Scope get scope; + NameSpace get nameSpace; + Scope get exportScope; List get exporters; @@ -420,19 +422,19 @@ abstract class LibraryBuilderImpl extends ModifierBuilderImpl @override Iterator get localMembersIterator { - return scope.filteredIterator( + return nameSpace.filteredIterator( parent: this, includeDuplicates: true, includeAugmentations: true); } @override Iterator localMembersIteratorOfType() { - return scope.filteredIterator( + return nameSpace.filteredIterator( parent: this, includeDuplicates: true, includeAugmentations: true); } @override NameIterator get localMembersNameIterator { - return scope.filteredNameIterator( + return nameSpace.filteredNameIterator( parent: this, includeDuplicates: true, includeAugmentations: true); } @@ -523,7 +525,7 @@ abstract class LibraryBuilderImpl extends ModifierBuilderImpl @override Builder? lookupLocalMember(String name, {bool required = false}) { - Builder? builder = scope.lookupLocalMember(name, setter: false); + Builder? builder = nameSpace.lookupLocalMember(name, setter: false); if (required && builder == null) { internalProblem( templateInternalProblemNotFoundIn.withArguments( diff --git a/pkg/front_end/lib/src/builder/named_type_builder.dart b/pkg/front_end/lib/src/builder/named_type_builder.dart index c932be2e5120..df147b9d0f17 100644 --- a/pkg/front_end/lib/src/builder/named_type_builder.dart +++ b/pkg/front_end/lib/src/builder/named_type_builder.dart @@ -192,7 +192,7 @@ abstract class NamedTypeBuilderImpl extends NamedTypeBuilder { } @override - void resolveIn(Scope scope, int charOffset, Uri fileUri, + void resolveIn(LookupScope scope, int charOffset, Uri fileUri, ProblemReporting problemReporting) { if (_declaration != null) return; Builder? member; diff --git a/pkg/front_end/lib/src/builder/type_builder.dart b/pkg/front_end/lib/src/builder/type_builder.dart index 0e7f423d2e56..815c9b17c709 100644 --- a/pkg/front_end/lib/src/builder/type_builder.dart +++ b/pkg/front_end/lib/src/builder/type_builder.dart @@ -491,7 +491,7 @@ abstract class NamedTypeBuilder extends TypeBuilder { @override TypeName get typeName; - void resolveIn(Scope scope, int charOffset, Uri fileUri, + void resolveIn(LookupScope scope, int charOffset, Uri fileUri, ProblemReporting problemReporting); void bind( ProblemReporting problemReporting, TypeDeclarationBuilder declaration); diff --git a/pkg/front_end/lib/src/dill/dill_class_builder.dart b/pkg/front_end/lib/src/dill/dill_class_builder.dart index c5483b009a39..4ea03bfdd228 100644 --- a/pkg/front_end/lib/src/dill/dill_class_builder.dart +++ b/pkg/front_end/lib/src/dill/dill_class_builder.dart @@ -52,6 +52,12 @@ class DillClassBuilder extends ClassBuilderImpl @override final Class cls; + @override + final Scope scope; + + @override + final ConstructorScope constructorScope; + List? _typeVariables; TypeBuilder? _supertypeBuilder; @@ -59,20 +65,20 @@ class DillClassBuilder extends ClassBuilderImpl List? _interfaceBuilders; DillClassBuilder(this.cls, DillLibraryBuilder parent) - : super( - /*metadata builders*/ null, - computeModifiers(cls), - cls.name, - new Scope( - kind: ScopeKind.declaration, - local: {}, - setters: {}, - parent: parent.scope, - debugName: "class ${cls.name}", - isModifiable: false), + : scope = new Scope( + kind: ScopeKind.declaration, + local: {}, + setters: {}, + parent: parent.scope, + debugName: "class ${cls.name}", + isModifiable: false), + constructorScope = new ConstructorScope(cls.name, {}), - parent, - cls.fileOffset); + super(/*metadata builders*/ null, computeModifiers(cls), cls.name, + parent, cls.fileOffset); + + @override + NameSpace get nameSpace => scope; @override bool get isEnum => cls.isEnum; @@ -137,7 +143,7 @@ class DillClassBuilder extends ClassBuilderImpl void addField(Field field) { DillFieldBuilder builder = new DillFieldBuilder(field, this); String name = field.name.text; - scope.addLocalMember(name, builder, setter: false); + nameSpace.addLocalMember(name, builder, setter: false); } void addConstructor(Constructor constructor, Procedure? constructorTearOff) { @@ -160,19 +166,19 @@ class DillClassBuilder extends ClassBuilderImpl // Coverage-ignore(suite): Not run. throw new UnsupportedError("Use addFactory for adding factories"); case ProcedureKind.Setter: - scope.addLocalMember(name, new DillSetterBuilder(procedure, this), + nameSpace.addLocalMember(name, new DillSetterBuilder(procedure, this), setter: true); break; case ProcedureKind.Getter: - scope.addLocalMember(name, new DillGetterBuilder(procedure, this), + nameSpace.addLocalMember(name, new DillGetterBuilder(procedure, this), setter: false); break; case ProcedureKind.Operator: - scope.addLocalMember(name, new DillOperatorBuilder(procedure, this), + nameSpace.addLocalMember(name, new DillOperatorBuilder(procedure, this), setter: false); break; case ProcedureKind.Method: - scope.addLocalMember(name, new DillMethodBuilder(procedure, this), + nameSpace.addLocalMember(name, new DillMethodBuilder(procedure, this), setter: false); break; } diff --git a/pkg/front_end/lib/src/dill/dill_extension_builder.dart b/pkg/front_end/lib/src/dill/dill_extension_builder.dart index 6e7a056cf0da..0c2d70113af4 100644 --- a/pkg/front_end/lib/src/dill/dill_extension_builder.dart +++ b/pkg/front_end/lib/src/dill/dill_extension_builder.dart @@ -17,30 +17,34 @@ class DillExtensionBuilder extends ExtensionBuilderImpl with DillDeclarationBuilderMixin { @override final Extension extension; + + @override + final Scope scope; + + @override + final ConstructorScope constructorScope; + List? _typeParameters; TypeBuilder? _onType; DillExtensionBuilder(this.extension, LibraryBuilder parent) - : super( - /* metadata = */ null, - 0, - extension.name, - parent, - extension.fileOffset, - new Scope( - kind: ScopeKind.declaration, - local: {}, - setters: {}, - parent: parent.scope, - debugName: "extension ${extension.name}", - isModifiable: false)) { + : scope = new Scope( + kind: ScopeKind.declaration, + local: {}, + setters: {}, + parent: parent.scope, + debugName: "extension ${extension.name}", + isModifiable: false), + constructorScope = new ConstructorScope(extension.name, const {}), + super(/* metadata = */ null, 0, extension.name, parent, + extension.fileOffset) { for (ExtensionMemberDescriptor descriptor in extension.memberDescriptors) { Name name = descriptor.name; switch (descriptor.kind) { case ExtensionMemberKind.Method: if (descriptor.isStatic) { Procedure procedure = descriptor.memberReference.asProcedure; - scope.addLocalMember( + nameSpace.addLocalMember( name.text, new DillExtensionStaticMethodBuilder( procedure, descriptor, this), @@ -51,7 +55,7 @@ class DillExtensionBuilder extends ExtensionBuilderImpl assert( tearOff != null, // Coverage-ignore(suite): Not run. "No tear found for ${descriptor}"); - scope.addLocalMember( + nameSpace.addLocalMember( name.text, new DillExtensionInstanceMethodBuilder( procedure, descriptor, this, tearOff!), @@ -60,25 +64,25 @@ class DillExtensionBuilder extends ExtensionBuilderImpl break; case ExtensionMemberKind.Getter: Procedure procedure = descriptor.memberReference.asProcedure; - scope.addLocalMember(name.text, + nameSpace.addLocalMember(name.text, new DillExtensionGetterBuilder(procedure, descriptor, this), setter: false); break; case ExtensionMemberKind.Field: Field field = descriptor.memberReference.asField; - scope.addLocalMember( + nameSpace.addLocalMember( name.text, new DillExtensionFieldBuilder(field, descriptor, this), setter: false); break; case ExtensionMemberKind.Setter: Procedure procedure = descriptor.memberReference.asProcedure; - scope.addLocalMember(name.text, + nameSpace.addLocalMember(name.text, new DillExtensionSetterBuilder(procedure, descriptor, this), setter: true); break; case ExtensionMemberKind.Operator: Procedure procedure = descriptor.memberReference.asProcedure; - scope.addLocalMember(name.text, + nameSpace.addLocalMember(name.text, new DillExtensionOperatorBuilder(procedure, descriptor, this), setter: false); break; @@ -86,6 +90,9 @@ class DillExtensionBuilder extends ExtensionBuilderImpl } } + @override + NameSpace get nameSpace => scope; + @override List? get typeParameters { if (_typeParameters == null && extension.typeParameters.isNotEmpty) { diff --git a/pkg/front_end/lib/src/dill/dill_extension_type_declaration_builder.dart b/pkg/front_end/lib/src/dill/dill_extension_type_declaration_builder.dart index 684a37ae618d..7c7e42a21e56 100644 --- a/pkg/front_end/lib/src/dill/dill_extension_type_declaration_builder.dart +++ b/pkg/front_end/lib/src/dill/dill_extension_type_declaration_builder.dart @@ -19,6 +19,12 @@ class DillExtensionTypeDeclarationBuilder with DillClassMemberAccessMixin, DillDeclarationBuilderMixin { final ExtensionTypeDeclaration _extensionTypeDeclaration; + @override + final Scope scope; + + @override + final ConstructorScope constructorScope; + List? _typeParameters; List? _interfaceBuilders; @@ -27,23 +33,23 @@ class DillExtensionTypeDeclarationBuilder DillExtensionTypeDeclarationBuilder( this._extensionTypeDeclaration, DillLibraryBuilder parent) - : super( + : scope = new Scope( + kind: ScopeKind.declaration, + local: {}, + setters: {}, + parent: parent.scope, + debugName: "extension type ${_extensionTypeDeclaration.name}", + isModifiable: false), + constructorScope = new ConstructorScope( + _extensionTypeDeclaration.name, {}), + super( /*metadata builders*/ null, /* modifiers*/ 0, _extensionTypeDeclaration.name, parent, - _extensionTypeDeclaration.fileOffset, - new Scope( - kind: ScopeKind.declaration, - local: {}, - setters: {}, - parent: parent.scope, - debugName: "extension type ${_extensionTypeDeclaration.name}", - isModifiable: false), - new ConstructorScope( - _extensionTypeDeclaration.name, {})) { + _extensionTypeDeclaration.fileOffset) { for (Procedure procedure in _extensionTypeDeclaration.procedures) { String name = procedure.name.text; switch (procedure.kind) { @@ -54,19 +60,20 @@ class DillExtensionTypeDeclarationBuilder "$procedure (${procedure.kind})."); case ProcedureKind.Setter: // Coverage-ignore(suite): Not run. - scope.addLocalMember(name, new DillSetterBuilder(procedure, this), + nameSpace.addLocalMember(name, new DillSetterBuilder(procedure, this), setter: true); break; case ProcedureKind.Getter: - scope.addLocalMember(name, new DillGetterBuilder(procedure, this), + nameSpace.addLocalMember(name, new DillGetterBuilder(procedure, this), setter: false); break; case ProcedureKind.Operator: - scope.addLocalMember(name, new DillOperatorBuilder(procedure, this), + nameSpace.addLocalMember( + name, new DillOperatorBuilder(procedure, this), setter: false); break; case ProcedureKind.Method: - scope.addLocalMember(name, new DillMethodBuilder(procedure, this), + nameSpace.addLocalMember(name, new DillMethodBuilder(procedure, this), setter: false); break; } @@ -78,7 +85,7 @@ class DillExtensionTypeDeclarationBuilder case ExtensionTypeMemberKind.Method: if (descriptor.isStatic) { Procedure procedure = descriptor.memberReference.asProcedure; - scope.addLocalMember( + nameSpace.addLocalMember( name.text, new DillExtensionTypeStaticMethodBuilder( procedure, descriptor, this), @@ -89,7 +96,7 @@ class DillExtensionTypeDeclarationBuilder assert( tearOff != null, // Coverage-ignore(suite): Not run. "No tear found for ${descriptor}"); - scope.addLocalMember( + nameSpace.addLocalMember( name.text, new DillExtensionTypeInstanceMethodBuilder( procedure, descriptor, this, tearOff!), @@ -98,25 +105,25 @@ class DillExtensionTypeDeclarationBuilder break; case ExtensionTypeMemberKind.Getter: Procedure procedure = descriptor.memberReference.asProcedure; - scope.addLocalMember(name.text, + nameSpace.addLocalMember(name.text, new DillExtensionTypeGetterBuilder(procedure, descriptor, this), setter: false); break; case ExtensionTypeMemberKind.Field: Field field = descriptor.memberReference.asField; - scope.addLocalMember(name.text, + nameSpace.addLocalMember(name.text, new DillExtensionTypeFieldBuilder(field, descriptor, this), setter: false); break; case ExtensionTypeMemberKind.Setter: Procedure procedure = descriptor.memberReference.asProcedure; - scope.addLocalMember(name.text, + nameSpace.addLocalMember(name.text, new DillExtensionTypeSetterBuilder(procedure, descriptor, this), setter: true); break; case ExtensionTypeMemberKind.Operator: Procedure procedure = descriptor.memberReference.asProcedure; - scope.addLocalMember(name.text, + nameSpace.addLocalMember(name.text, new DillExtensionTypeOperatorBuilder(procedure, descriptor, this), setter: false); break; @@ -144,6 +151,9 @@ class DillExtensionTypeDeclarationBuilder @override DillLibraryBuilder get libraryBuilder => parent as DillLibraryBuilder; + @override + NameSpace get nameSpace => scope; + @override DartType get declaredRepresentationType => _extensionTypeDeclaration.declaredRepresentationType; diff --git a/pkg/front_end/lib/src/dill/dill_library_builder.dart b/pkg/front_end/lib/src/dill/dill_library_builder.dart index 35677743e7de..c478e4950e56 100644 --- a/pkg/front_end/lib/src/dill/dill_library_builder.dart +++ b/pkg/front_end/lib/src/dill/dill_library_builder.dart @@ -150,6 +150,9 @@ class DillLibraryBuilder extends LibraryBuilderImpl { @override Scope get scope => _scope; + @override + Scope get nameSpace => _scope; + @override Scope get exportScope => _exportScope; @@ -235,17 +238,17 @@ class DillLibraryBuilder extends LibraryBuilderImpl { @override void becomeCoreLibrary() { - if (scope.lookupLocalMember("dynamic", setter: false) == null) { + if (nameSpace.lookupLocalMember("dynamic", setter: false) == null) { _addBuilder("dynamic", new DynamicTypeDeclarationBuilder(const DynamicType(), this, -1)); } - if (scope.lookupLocalMember("Never", setter: false) == null) { + if (nameSpace.lookupLocalMember("Never", setter: false) == null) { _addBuilder( "Never", new NeverTypeDeclarationBuilder( const NeverType.nonNullable(), this, -1)); } - assert(scope.lookupLocalMember("Null", setter: false) != null, + assert(nameSpace.lookupLocalMember("Null", setter: false) != null, "No class 'Null' found in dart:core."); } @@ -346,12 +349,13 @@ class DillLibraryBuilder extends LibraryBuilderImpl { bool isSetter = declaration.isSetter; if (isSetter) { - scope.addLocalMember(name, declaration as MemberBuilder, setter: true); + nameSpace.addLocalMember(name, declaration as MemberBuilder, + setter: true); } else { - scope.addLocalMember(name, declaration, setter: false); + nameSpace.addLocalMember(name, declaration, setter: false); } if (declaration.isExtension) { - scope.addExtension(declaration as ExtensionBuilder); + nameSpace.addExtension(declaration as ExtensionBuilder); } if (!name.startsWith("_") && !name.contains('#')) { if (isSetter) { @@ -497,14 +501,14 @@ class DillLibraryBuilder extends LibraryBuilderImpl { @override // Coverage-ignore(suite): Not run. Iterator fullMemberIterator() { - return scope.filteredIterator( + return nameSpace.filteredIterator( includeDuplicates: false, includeAugmentations: false); } @override // Coverage-ignore(suite): Not run. NameIterator fullMemberNameIterator() { - return scope.filteredNameIterator( + return nameSpace.filteredNameIterator( includeDuplicates: false, includeAugmentations: false); } diff --git a/pkg/front_end/lib/src/kernel/macro/annotation_parser.dart b/pkg/front_end/lib/src/kernel/macro/annotation_parser.dart index b98b4cc5de23..f065b9b0dd9b 100644 --- a/pkg/front_end/lib/src/kernel/macro/annotation_parser.dart +++ b/pkg/front_end/lib/src/kernel/macro/annotation_parser.dart @@ -28,7 +28,7 @@ List? prebuildAnnotations( {required SourceLibraryBuilder enclosingLibrary, required List? metadataBuilders, required Uri fileUri, - required Scope scope, + required LookupScope scope, required Set currentMacroDeclarations}) { if (metadataBuilders == null) return null; List? result; @@ -154,7 +154,7 @@ class _MacroListener implements Listener { @override final Uri uri; - final Scope scope; + final LookupScope scope; final List<_Node> _stack = []; diff --git a/pkg/front_end/lib/src/kernel/macro/introspectors.dart b/pkg/front_end/lib/src/kernel/macro/introspectors.dart index a1aeba611865..8a885f92ac73 100644 --- a/pkg/front_end/lib/src/kernel/macro/introspectors.dart +++ b/pkg/front_end/lib/src/kernel/macro/introspectors.dart @@ -689,8 +689,8 @@ class _TypePhaseIntrospector implements macro.TypePhaseIntrospector { memberName = name.substring(0, name.length - 1); isSetter = true; } - Builder? builder = - libraryBuilder.scope.lookupLocalMember(memberName, setter: isSetter); + Builder? builder = libraryBuilder.nameSpace + .lookupLocalMember(memberName, setter: isSetter); if (builder == null) { return new Future.error( new macro.MacroImplementationExceptionImpl( diff --git a/pkg/front_end/lib/src/source/class_declaration.dart b/pkg/front_end/lib/src/source/class_declaration.dart index 4fb91079c550..0489aef95ea3 100644 --- a/pkg/front_end/lib/src/source/class_declaration.dart +++ b/pkg/front_end/lib/src/source/class_declaration.dart @@ -247,7 +247,7 @@ class ClassDeclarationMemberIterator( + : _iterator = classDeclaration.nameSpace.filteredIterator( parent: classDeclaration, includeDuplicates: includeDuplicates, includeAugmentations: false); @@ -261,7 +261,7 @@ class ClassDeclarationMemberIterator( + _iterator = augmentationClassDeclaration.nameSpace.filteredIterator( parent: augmentationClassDeclaration, includeDuplicates: includeDuplicates, includeAugmentations: false); @@ -299,7 +299,7 @@ class ClassDeclarationMemberNameIterator( + : _iterator = classDeclaration.nameSpace.filteredNameIterator( parent: classDeclaration, includeDuplicates: includeDuplicates, includeAugmentations: false); @@ -313,10 +313,11 @@ class ClassDeclarationMemberNameIterator( - parent: augmentationClassDeclaration, - includeDuplicates: includeDuplicates, - includeAugmentations: false); + _iterator = augmentationClassDeclaration.nameSpace + .filteredNameIterator( + parent: augmentationClassDeclaration, + includeDuplicates: includeDuplicates, + includeAugmentations: false); } if (_iterator != null) { if (_iterator!.moveNext()) { diff --git a/pkg/front_end/lib/src/source/source_builder_mixins.dart b/pkg/front_end/lib/src/source/source_builder_mixins.dart index 7ed1776be746..48d01ec6f4e3 100644 --- a/pkg/front_end/lib/src/source/source_builder_mixins.dart +++ b/pkg/front_end/lib/src/source/source_builder_mixins.dart @@ -48,7 +48,7 @@ mixin SourceDeclarationBuilderMixin implements DeclarationBuilderMixin { /// library. void buildInternal(LibraryBuilder coreLibrary, {required bool addMembersToLibrary}) { - SourceLibraryBuilder.checkMemberConflicts(libraryBuilder, scope, + SourceLibraryBuilder.checkMemberConflicts(libraryBuilder, nameSpace, checkForInstanceVsStaticConflict: true, checkForMethodVsSetterConflict: true); @@ -94,13 +94,13 @@ mixin SourceDeclarationBuilderMixin implements DeclarationBuilderMixin { } } - scope.unfilteredNameIterator.forEach(buildBuilders); + nameSpace.unfilteredNameIterator.forEach(buildBuilders); constructorScope.unfilteredNameIterator.forEach(buildBuilders); } int buildBodyNodes({required bool addMembersToLibrary}) { int count = 0; - Iterator iterator = scope + Iterator iterator = nameSpace .filteredIterator( parent: this, includeDuplicates: false, includeAugmentations: true) .join(constructorScope.filteredIterator( @@ -132,7 +132,7 @@ mixin SourceDeclarationBuilderMixin implements DeclarationBuilderMixin { libraryBuilder.checkTypesInFunctionBuilder(builder, typeEnvironment); if (builder.isGetter) { Builder? setterDeclaration = - scope.lookupLocalMember(builder.name, setter: true); + nameSpace.lookupLocalMember(builder.name, setter: true); if (setterDeclaration != null) { libraryBuilder.checkGetterSetterTypes(builder, setterDeclaration as ProcedureBuilder, typeEnvironment); @@ -181,7 +181,7 @@ mixin SourceDeclarationBuilderMixin implements DeclarationBuilderMixin { } } - Iterator iterator = scope.filteredIterator( + Iterator iterator = nameSpace.filteredIterator( parent: this, includeDuplicates: false, includeAugmentations: true); while (iterator.moveNext()) { iterator.current.buildOutlineExpressions( @@ -296,7 +296,7 @@ mixin SourceTypedDeclarationBuilderMixin implements IDeclarationBuilder { while (iterator.moveNext()) { String name = iterator.name; MemberBuilder constructor = iterator.current; - Builder? member = scope.lookupLocalMember(name, setter: false); + Builder? member = nameSpace.lookupLocalMember(name, setter: false); if (member == null) continue; if (!member.isStatic) continue; // TODO(ahe): Revisit these messages. It seems like the last two should @@ -317,7 +317,7 @@ mixin SourceTypedDeclarationBuilderMixin implements IDeclarationBuilder { } } - scope.forEachLocalSetter((String name, Builder setter) { + nameSpace.forEachLocalSetter((String name, Builder setter) { Builder? constructor = constructorScope.lookupLocalMember(name); if (constructor == null || !setter.isStatic) return; // Coverage-ignore-block(suite): Not run. diff --git a/pkg/front_end/lib/src/source/source_class_builder.dart b/pkg/front_end/lib/src/source/source_class_builder.dart index d6c5fa87efbe..d1d08494ddb4 100644 --- a/pkg/front_end/lib/src/source/source_class_builder.dart +++ b/pkg/front_end/lib/src/source/source_class_builder.dart @@ -90,6 +90,12 @@ class SourceClassBuilder extends ClassBuilderImpl implements Comparable, ClassDeclaration { final Class actualCls; + @override + final Scope scope; + + @override + final ConstructorScope constructorScope; + @override List? typeVariables; @@ -166,8 +172,8 @@ class SourceClassBuilder extends ClassBuilderImpl this.interfaceBuilders, this.onTypes, this.typeParameterScope, - Scope scope, - ConstructorScope constructors, + this.scope, + this.constructorScope, SourceLibraryBuilder parent, this.constructorReferences, int startCharOffset, @@ -188,11 +194,13 @@ class SourceClassBuilder extends ClassBuilderImpl startCharOffset, nameOffset, charEndOffset, indexedContainer, isAugmentation: isAugmentation), isAugmentation = isAugmentation, - super(metadata, modifiers, name, scope, constructors, parent, - nameOffset) { + super(metadata, modifiers, name, parent, nameOffset) { actualCls.hasConstConstructor = declaresConstConstructor; } + @override + NameSpace get nameSpace => scope; + MergedClassMemberScope get mergedScope => _mergedScope ??= isAugmenting ? // Coverage-ignore(suite): Not run. @@ -215,7 +223,7 @@ class SourceClassBuilder extends ClassBuilderImpl super.libraryBuilder as SourceLibraryBuilder; Class build(LibraryBuilder coreLibrary) { - SourceLibraryBuilder.checkMemberConflicts(libraryBuilder, scope, + SourceLibraryBuilder.checkMemberConflicts(libraryBuilder, nameSpace, // These checks are performed as part of the class hierarchy // computation. checkForInstanceVsStaticConflict: false, @@ -253,7 +261,7 @@ class SourceClassBuilder extends ClassBuilderImpl } } - scope.unfilteredIterator.forEach(buildBuilders); + nameSpace.unfilteredIterator.forEach(buildBuilders); constructorScope.unfilteredIterator.forEach(buildBuilders); if (supertypeBuilder != null) { supertypeBuilder = _checkSupertype(supertypeBuilder!); @@ -396,7 +404,7 @@ class SourceClassBuilder extends ClassBuilderImpl .filteredIterator( parent: this, includeDuplicates: false, includeAugmentations: true) .forEach(build); - scope + nameSpace .filteredIterator( parent: this, includeDuplicates: false, includeAugmentations: true) .forEach(build); @@ -652,14 +660,14 @@ class SourceClassBuilder extends ClassBuilderImpl hierarchyBuilder.getNodeFromClass(interfaceClass); for (String restrictedMemberName in restrictedNames) { // TODO(johnniwinther): Handle injected members. - Builder? member = superclassHierarchyNode.classBuilder.scope + Builder? member = superclassHierarchyNode.classBuilder.nameSpace .lookupLocalMember(restrictedMemberName, setter: false); if (member is MemberBuilder && !member.isAbstract) { restrictedMembersInSuperclasses[restrictedMemberName] ??= superclassHierarchyNode.classBuilder; } } - Builder? member = superclassHierarchyNode.classBuilder.scope + Builder? member = superclassHierarchyNode.classBuilder.nameSpace .lookupLocalMember("values", setter: false); if (member is MemberBuilder && !member.isAbstract) { superclassDeclaringConcreteValues ??= member.classBuilder; @@ -680,7 +688,7 @@ class SourceClassBuilder extends ClassBuilderImpl if (hasEnumSuperinterface && cls != underscoreEnumClass) { // Instance members named `values` are restricted. Builder? customValuesDeclaration = - scope.lookupLocalMember("values", setter: false); + nameSpace.lookupLocalMember("values", setter: false); if (customValuesDeclaration != null && !customValuesDeclaration.isStatic) { // Retrieve the earliest declaration for error reporting. @@ -696,7 +704,7 @@ class SourceClassBuilder extends ClassBuilderImpl fileUri); } customValuesDeclaration = - scope.lookupLocalMember("values", setter: true); + nameSpace.lookupLocalMember("values", setter: true); if (customValuesDeclaration != null && !customValuesDeclaration.isStatic) { // Retrieve the earliest declaration for error reporting. @@ -724,7 +732,7 @@ class SourceClassBuilder extends ClassBuilderImpl // operator == are restricted. for (String restrictedMemberName in restrictedNames) { Builder? member = - scope.lookupLocalMember(restrictedMemberName, setter: false); + nameSpace.lookupLocalMember(restrictedMemberName, setter: false); if (member is MemberBuilder && !member.isAbstract) { libraryBuilder.addProblem( templateEnumImplementerContainsRestrictedInstanceDeclaration @@ -1165,7 +1173,7 @@ class SourceClassBuilder extends ClassBuilderImpl } } - scope + nameSpace .filteredIterator( parent: this, includeDuplicates: true, includeAugmentations: true) .forEach(buildMembers); diff --git a/pkg/front_end/lib/src/source/source_extension_builder.dart b/pkg/front_end/lib/src/source/source_extension_builder.dart index 4e107b5af907..1dbe80f0513a 100644 --- a/pkg/front_end/lib/src/source/source_extension_builder.dart +++ b/pkg/front_end/lib/src/source/source_extension_builder.dart @@ -32,6 +32,12 @@ class SourceExtensionBuilder extends ExtensionBuilderImpl MergedClassMemberScope? _mergedScope; + @override + final Scope scope; + + @override + final ConstructorScope constructorScope; + @override final List? typeParameters; @@ -50,7 +56,7 @@ class SourceExtensionBuilder extends ExtensionBuilderImpl this.typeParameters, this.onType, this.typeParameterScope, - Scope scope, + this.scope, SourceLibraryBuilder parent, int startOffset, int nameOffset, @@ -65,11 +71,14 @@ class SourceExtensionBuilder extends ExtensionBuilderImpl ..isExtensionTypeDeclaration = false ..isUnnamedExtension = extensionName.isUnnamedExtension ..fileOffset = nameOffset, - super(metadata, modifiers, extensionName.name, parent, nameOffset, - scope) { + constructorScope = new ConstructorScope(extensionName.name, const {}), + super(metadata, modifiers, extensionName.name, parent, nameOffset) { extensionName.attachExtension(_extension); } + @override + NameSpace get nameSpace => scope; + @override SourceLibraryBuilder get libraryBuilder => super.libraryBuilder as SourceLibraryBuilder; @@ -197,16 +206,16 @@ class SourceExtensionBuilder extends ExtensionBuilderImpl // TODO(johnniwinther): Check that type parameters and on-type match // with origin declaration. - scope.forEachLocalMember((String name, Builder member) { + nameSpace.forEachLocalMember((String name, Builder member) { Builder? memberAugmentation = - augmentation.scope.lookupLocalMember(name, setter: false); + augmentation.nameSpace.lookupLocalMember(name, setter: false); if (memberAugmentation != null) { member.applyAugmentation(memberAugmentation); } }); - scope.forEachLocalSetter((String name, Builder member) { + nameSpace.forEachLocalSetter((String name, Builder member) { Builder? memberAugmentation = - augmentation.scope.lookupLocalMember(name, setter: true); + augmentation.nameSpace.lookupLocalMember(name, setter: true); if (memberAugmentation != null) { member.applyAugmentation(memberAugmentation); } diff --git a/pkg/front_end/lib/src/source/source_extension_type_declaration_builder.dart b/pkg/front_end/lib/src/source/source_extension_type_declaration_builder.dart index 81d9c42c05a6..e6512c9ad452 100644 --- a/pkg/front_end/lib/src/source/source_extension_type_declaration_builder.dart +++ b/pkg/front_end/lib/src/source/source_extension_type_declaration_builder.dart @@ -55,6 +55,12 @@ class SourceExtensionTypeDeclarationBuilder MergedClassMemberScope? _mergedScope; + @override + final Scope scope; + + @override + final ConstructorScope constructorScope; + @override final List? typeParameters; @@ -75,8 +81,8 @@ class SourceExtensionTypeDeclarationBuilder this.typeParameters, this.interfaceBuilders, this.typeParameterScope, - Scope scope, - ConstructorScope constructorScope, + this.scope, + this.constructorScope, SourceLibraryBuilder parent, this.constructorReferences, int startOffset, @@ -91,8 +97,10 @@ class SourceExtensionTypeDeclarationBuilder typeParameters), reference: indexedContainer?.reference) ..fileOffset = nameOffset, - super(metadata, modifiers, name, parent, nameOffset, scope, - constructorScope); + super(metadata, modifiers, name, parent, nameOffset); + + @override + NameSpace get nameSpace => scope; @override SourceLibraryBuilder get libraryBuilder => @@ -686,16 +694,16 @@ class SourceExtensionTypeDeclarationBuilder void applyAugmentation(Builder augmentation) { if (augmentation is SourceExtensionTypeDeclarationBuilder) { augmentation._origin = this; - scope.forEachLocalMember((String name, Builder member) { + nameSpace.forEachLocalMember((String name, Builder member) { Builder? memberAugmentation = - augmentation.scope.lookupLocalMember(name, setter: false); + augmentation.nameSpace.lookupLocalMember(name, setter: false); if (memberAugmentation != null) { member.applyAugmentation(memberAugmentation); } }); - scope.forEachLocalSetter((String name, Builder member) { + nameSpace.forEachLocalSetter((String name, Builder member) { Builder? memberAugmentation = - augmentation.scope.lookupLocalMember(name, setter: true); + augmentation.nameSpace.lookupLocalMember(name, setter: true); if (memberAugmentation != null) { member.applyAugmentation(memberAugmentation); } diff --git a/pkg/front_end/lib/src/source/source_library_builder.dart b/pkg/front_end/lib/src/source/source_library_builder.dart index 1ce347c3fa9d..317d20f5ed64 100644 --- a/pkg/front_end/lib/src/source/source_library_builder.dart +++ b/pkg/front_end/lib/src/source/source_library_builder.dart @@ -384,6 +384,10 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { @override Scope get scope => _scope; + + @override + Scope get nameSpace => _scope; + @override Scope get exportScope => _exportScope; @@ -503,8 +507,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { return compilationUnit.addBuilder(name, declaration, charOffset); } - /// Checks [scope] for conflicts between setters and non-setters and reports - /// them in [sourceLibraryBuilder]. + /// Checks [nameSpace] for conflicts between setters and non-setters and + /// reports them in [sourceLibraryBuilder]. /// /// If [checkForInstanceVsStaticConflict] is `true`, conflicts between /// instance and static members of the same name are reported. @@ -512,11 +516,11 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { /// If [checkForMethodVsSetterConflict] is `true`, conflicts between /// methods and setters of the same name are reported. static void checkMemberConflicts( - SourceLibraryBuilder sourceLibraryBuilder, Scope scope, + SourceLibraryBuilder sourceLibraryBuilder, NameSpace nameSpace, {required bool checkForInstanceVsStaticConflict, required bool checkForMethodVsSetterConflict}) { - scope.forEachLocalSetter((String name, MemberBuilder setter) { - Builder? getable = scope.lookupLocalMember(name, setter: false); + nameSpace.forEachLocalSetter((String name, MemberBuilder setter) { + Builder? getable = nameSpace.lookupLocalMember(name, setter: false); if (getable == null) { // Setter without getter. return; @@ -646,7 +650,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { } void buildInitialScopes() { - NameIterator iterator = scope.filteredNameIterator( + NameIterator iterator = nameSpace.filteredNameIterator( includeDuplicates: false, includeAugmentations: false); UriOffset uriOffset = new UriOffset(fileUri, TreeNode.noOffset); while (iterator.moveNext()) { @@ -876,7 +880,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { localMembersIteratorOfType(); while (extensionIterator.moveNext()) { SourceExtensionBuilder extension_ = extensionIterator.current; - for (Builder member in extension_.scope.localMembers) { + for (Builder member in extension_.nameSpace.localMembers) { if (member is SourceProcedureBuilder && !member.isStatic && member.isGetter) { @@ -899,7 +903,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { individualPropertyReasons[representationGetter] = PropertyNonPromotabilityReason.isNotPrivate; } - for (Builder member in extensionType.scope.localMembers) { + for (Builder member in extensionType.nameSpace.localMembers) { if (member is SourceProcedureBuilder && !member.isStatic && member.isGetter) { @@ -948,18 +952,18 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { @override // Coverage-ignore(suite): Not run. void becomeCoreLibrary() { - if (scope.lookupLocalMember("dynamic", setter: false) == null) { + if (nameSpace.lookupLocalMember("dynamic", setter: false) == null) { addBuilder("dynamic", new DynamicTypeDeclarationBuilder(const DynamicType(), this, -1), -1); } - if (scope.lookupLocalMember("Never", setter: false) == null) { + if (nameSpace.lookupLocalMember("Never", setter: false) == null) { addBuilder( "Never", new NeverTypeDeclarationBuilder( const NeverType.nonNullable(), this, -1), -1); } - assert(scope.lookupLocalMember("Null", setter: false) != null, + assert(nameSpace.lookupLocalMember("Null", setter: false) != null, "No class 'Null' found in dart:core."); } @@ -2158,7 +2162,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { declaration.checkTypes(this, typeEnvironment); if (declaration.isGetter) { Builder? setterDeclaration = - scope.lookupLocalMember(declaration.name, setter: true); + nameSpace.lookupLocalMember(declaration.name, setter: true); if (setterDeclaration != null) { checkGetterSetterTypes(declaration, setterDeclaration as ProcedureBuilder, typeEnvironment); @@ -2750,7 +2754,7 @@ class SourceLibraryBuilderMemberNameIterator SourceLibraryBuilderMemberNameIterator._( SourceLibraryBuilder libraryBuilder, this.augmentationBuilders, {required this.includeDuplicates}) - : _iterator = libraryBuilder.scope.filteredNameIterator( + : _iterator = libraryBuilder.nameSpace.filteredNameIterator( parent: libraryBuilder, includeDuplicates: includeDuplicates, includeAugmentations: false); @@ -2765,7 +2769,7 @@ class SourceLibraryBuilderMemberNameIterator if (augmentationBuilders != null && augmentationBuilders!.moveNext()) { SourceLibraryBuilder augmentationLibraryBuilder = augmentationBuilders!.current; - _iterator = augmentationLibraryBuilder.scope.filteredNameIterator( + _iterator = augmentationLibraryBuilder.nameSpace.filteredNameIterator( parent: augmentationLibraryBuilder, includeDuplicates: includeDuplicates, includeAugmentations: false); diff --git a/pkg/front_end/lib/src/testing/id_testing_utils.dart b/pkg/front_end/lib/src/testing/id_testing_utils.dart index a711e0d69ac8..f896aae54763 100644 --- a/pkg/front_end/lib/src/testing/id_testing_utils.dart +++ b/pkg/front_end/lib/src/testing/id_testing_utils.dart @@ -140,7 +140,7 @@ ClassBuilder? lookupClassBuilder( LibraryBuilder libraryBuilder = lookupLibraryBuilder( compilerResult, cls.enclosingLibrary, required: required)!; - ClassBuilder? clsBuilder = libraryBuilder.scope + ClassBuilder? clsBuilder = libraryBuilder.nameSpace .lookupLocalMember(cls.name, setter: false) as ClassBuilder?; if (clsBuilder == null && required) { throw new ArgumentError("ClassBuilder for $cls not found."); @@ -155,7 +155,7 @@ ExtensionBuilder? lookupExtensionBuilder( compilerResult, extension.enclosingLibrary, required: required)!; ExtensionBuilder? extensionBuilder; - libraryBuilder.scope.forEachLocalExtension((ExtensionBuilder builder) { + libraryBuilder.nameSpace.forEachLocalExtension((ExtensionBuilder builder) { if (builder.extension == extension) { extensionBuilder = builder; } @@ -179,7 +179,7 @@ MemberBuilder? lookupClassMemberBuilder(InternalCompilerResult compilerResult, memberBuilder = classBuilder.constructorScope.lookupLocalMember(memberName); } else { - memberBuilder = classBuilder.scope.lookupLocalMember(memberName, + memberBuilder = classBuilder.nameSpace.lookupLocalMember(memberName, setter: member is Procedure && member.isSetter) as MemberBuilder?; } } @@ -218,7 +218,7 @@ MemberBuilder? lookupMemberBuilder( LibraryBuilder libraryBuilder = lookupLibraryBuilder( compilerResult, member.enclosingLibrary, required: required)!; - memberBuilder = libraryBuilder.scope.lookupLocalMember(member.name.text, + memberBuilder = libraryBuilder.nameSpace.lookupLocalMember(member.name.text, setter: member is Procedure && member.isSetter) as MemberBuilder?; } if (memberBuilder == null && required) { @@ -240,7 +240,7 @@ MemberBuilder? lookupExtensionMemberBuilder( lookupExtensionBuilder(compilerResult, extension, required: required); MemberBuilder? memberBuilder; if (extensionBuilder != null) { - memberBuilder = extensionBuilder.scope + memberBuilder = extensionBuilder.nameSpace .lookupLocalMember(memberName, setter: isSetter) as MemberBuilder?; } if (memberBuilder == null && required) { diff --git a/pkg/front_end/test/coverage_suite_expected.dart b/pkg/front_end/test/coverage_suite_expected.dart index 261dd04362e5..e0fbba4f7383 100644 --- a/pkg/front_end/test/coverage_suite_expected.dart +++ b/pkg/front_end/test/coverage_suite_expected.dart @@ -163,10 +163,10 @@ const Map _expect = { hitCount: 25, missCount: 0, ), - // 84.0%. + // 86.0655737704918%. "package:front_end/src/base/local_scope.dart": ( hitCount: 105, - missCount: 20, + missCount: 17, ), // 100.0%. "package:front_end/src/base/messages.dart": ( @@ -260,7 +260,7 @@ const Map _expect = { ), // 100.0%. "package:front_end/src/builder/extension_builder.dart": ( - hitCount: 4, + hitCount: 3, missCount: 0, ), // 100.0%. @@ -410,12 +410,12 @@ const Map _expect = { ), // 100.0%. "package:front_end/src/dill/dill_class_builder.dart": ( - hitCount: 169, + hitCount: 171, missCount: 0, ), // 100.0%. "package:front_end/src/dill/dill_extension_builder.dart": ( - hitCount: 72, + hitCount: 76, missCount: 0, ), // 100.0%. @@ -425,7 +425,7 @@ const Map _expect = { ), // 100.0%. "package:front_end/src/dill/dill_extension_type_declaration_builder.dart": ( - hitCount: 146, + hitCount: 148, missCount: 0, ), // 100.0%. @@ -435,7 +435,7 @@ const Map _expect = { ), // 100.0%. "package:front_end/src/dill/dill_library_builder.dart": ( - hitCount: 336, + hitCount: 338, missCount: 0, ), // 100.0%. @@ -708,6 +708,11 @@ const Map _expect = { hitCount: 0, missCount: 0, ), + // 0.0%. + "package:front_end/src/macros/macro_injected_impl.dart": ( + hitCount: 0, + missCount: 1, + ), // 100.0%. "package:front_end/src/macros/macro_serializer.dart": ( hitCount: 0, @@ -780,7 +785,7 @@ const Map _expect = { ), // 100.0%. "package:front_end/src/source/source_class_builder.dart": ( - hitCount: 1211, + hitCount: 1213, missCount: 0, ), // 99.4729907773386%. @@ -800,18 +805,18 @@ const Map _expect = { ), // 100.0%. "package:front_end/src/source/source_extension_builder.dart": ( - hitCount: 68, + hitCount: 72, missCount: 0, ), // 100.0%. "package:front_end/src/source/source_extension_type_declaration_builder.dart": ( - hitCount: 424, + hitCount: 426, missCount: 0, ), // 100.0%. "package:front_end/src/source/source_factory_builder.dart": ( - hitCount: 581, + hitCount: 570, missCount: 0, ), // 100.0%. @@ -826,7 +831,7 @@ const Map _expect = { ), // 100.0%. "package:front_end/src/source/source_library_builder.dart": ( - hitCount: 1404, + hitCount: 1406, missCount: 0, ), // 100.0%. @@ -891,7 +896,7 @@ const Map _expect = { ), // 100.0%. "package:front_end/src/type_inference/inference_visitor.dart": ( - hitCount: 7796, + hitCount: 7798, missCount: 0, ), // 100.0%. diff --git a/pkg/front_end/test/dill_type_alias_builder_type_calc_test.dart b/pkg/front_end/test/dill_type_alias_builder_type_calc_test.dart index 1b2b0bcc3476..6081dd629a9e 100644 --- a/pkg/front_end/test/dill_type_alias_builder_type_calc_test.dart +++ b/pkg/front_end/test/dill_type_alias_builder_type_calc_test.dart @@ -39,7 +39,7 @@ void main() {} ]; for (LibraryBuilder builder in builders) { if (builder is! DillLibraryBuilder) continue; - builder.scope.forEachLocalMember((name, member) { + builder.nameSpace.forEachLocalMember((name, member) { if (member is! DillTypeAliasBuilder) return; try { member.type;