From 874c6104fdb464d47f36c1154f47b58fdb7d5ebf Mon Sep 17 00:00:00 2001 From: Johnni Winther Date: Tue, 25 Jun 2024 13:57:58 +0000 Subject: [PATCH] [cfe] Move libraryTypeParameterScopeBuilder to SourceCompilationUnit Change-Id: Ie56319e75d276d6598c06648fadedced7d0b2c73 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/372504 Commit-Queue: Johnni Winther Reviewed-by: Jens Johansen --- .../lib/src/builder/library_builder.dart | 3 + .../lib/src/source/outline_builder.dart | 26 ++++--- .../src/source/source_library_builder.dart | 71 ++++++++++--------- 3 files changed, 55 insertions(+), 45 deletions(-) diff --git a/pkg/front_end/lib/src/builder/library_builder.dart b/pkg/front_end/lib/src/builder/library_builder.dart index ade0aa6e769..4ba5087fd55 100644 --- a/pkg/front_end/lib/src/builder/library_builder.dart +++ b/pkg/front_end/lib/src/builder/library_builder.dart @@ -118,6 +118,9 @@ abstract class SourceCompilationUnit implements CompilationUnit { // TODO(johnniwinther): Remove this. SourceLibraryBuilder get sourceLibraryBuilder; + // TODO(johnniwinther): Remove this. + TypeParameterScopeBuilder get libraryTypeParameterScopeBuilder; + abstract OffsetMap offsetMap; LibraryFeatures get libraryFeatures; diff --git a/pkg/front_end/lib/src/source/outline_builder.dart b/pkg/front_end/lib/src/source/outline_builder.dart index 2d7acd2a29c..dcee17232c4 100644 --- a/pkg/front_end/lib/src/source/outline_builder.dart +++ b/pkg/front_end/lib/src/source/outline_builder.dart @@ -1144,7 +1144,8 @@ class OutlineBuilder extends StackListenerImpl { // should not shadow these unresolved types. compilationUnit.currentTypeParameterScopeBuilder.resolveNamedTypes( compilationUnit.currentTypeParameterScopeBuilder.typeVariables, - _libraryBuilder); + _libraryBuilder, + compilationUnit); } @override @@ -1337,7 +1338,7 @@ class OutlineBuilder extends StackListenerImpl { compilationUnit .endNestedDeclaration( TypeParameterScopeKind.classDeclaration, "") - .resolveNamedTypes(typeVariables, _libraryBuilder); + .resolveNamedTypes(typeVariables, _libraryBuilder, compilationUnit); } else { Identifier identifier = name as Identifier; final int startCharOffset = @@ -1444,7 +1445,7 @@ class OutlineBuilder extends StackListenerImpl { compilationUnit .endNestedDeclaration( TypeParameterScopeKind.mixinDeclaration, "") - .resolveNamedTypes(typeVariables, _libraryBuilder); + .resolveNamedTypes(typeVariables, _libraryBuilder, compilationUnit); } else { Identifier identifier = name as Identifier; int startOffset = @@ -1743,7 +1744,8 @@ class OutlineBuilder extends StackListenerImpl { _ ) = _createSyntheticTypeVariables( compilationUnit.currentTypeParameterScopeBuilder, scopeBuilder, null); - scopeBuilder.resolveNamedTypes(typeVariables, _libraryBuilder); + scopeBuilder.resolveNamedTypes( + typeVariables, _libraryBuilder, compilationUnit); compilationUnit.addPrimaryConstructor( offsetMap: _offsetMap, @@ -1826,7 +1828,7 @@ class OutlineBuilder extends StackListenerImpl { checkEmpty(beginToken.charOffset); compilationUnit .endNestedDeclaration(TypeParameterScopeKind.topLevelMethod, "#method") - .resolveNamedTypes(typeVariables, _libraryBuilder); + .resolveNamedTypes(typeVariables, _libraryBuilder, compilationUnit); if (identifier is Identifier) { final int startCharOffset = metadata == null ? beginToken.charOffset : metadata.first.charOffset; @@ -2152,7 +2154,8 @@ class OutlineBuilder extends StackListenerImpl { "Unexpected identifier $identifier (${identifier.runtimeType})"); nativeMethodName = null; inConstructor = false; - declarationBuilder.resolveNamedTypes(typeVariables, _libraryBuilder); + declarationBuilder.resolveNamedTypes( + typeVariables, _libraryBuilder, compilationUnit); popDeclarationContext(); return; } @@ -2346,7 +2349,8 @@ class OutlineBuilder extends StackListenerImpl { } } - declarationBuilder.resolveNamedTypes(typeVariables, _libraryBuilder); + declarationBuilder.resolveNamedTypes( + typeVariables, _libraryBuilder, compilationUnit); if (constructorName != null) { if (isConst && bodyKind != MethodBody.Abstract && @@ -2520,7 +2524,7 @@ class OutlineBuilder extends StackListenerImpl { compilationUnit .endNestedDeclaration( TypeParameterScopeKind.namedMixinApplication, "") - .resolveNamedTypes(typeVariables, _libraryBuilder); + .resolveNamedTypes(typeVariables, _libraryBuilder, compilationUnit); } else { Identifier identifier = name as Identifier; String classNameForErrors = identifier.name; @@ -3100,7 +3104,7 @@ class OutlineBuilder extends StackListenerImpl { compilationUnit .endNestedDeclaration( TypeParameterScopeKind.enumDeclaration, "") - .resolveNamedTypes(typeVariables, _libraryBuilder); + .resolveNamedTypes(typeVariables, _libraryBuilder, compilationUnit); } compilationUnit.endIndexedContainer(); @@ -3300,7 +3304,7 @@ class OutlineBuilder extends StackListenerImpl { compilationUnit .endNestedDeclaration( TypeParameterScopeKind.typedef, "") - .resolveNamedTypes(typeVariables, _libraryBuilder); + .resolveNamedTypes(typeVariables, _libraryBuilder, compilationUnit); popDeclarationContext(DeclarationContext.Typedef); return; } @@ -3327,7 +3331,7 @@ class OutlineBuilder extends StackListenerImpl { compilationUnit .endNestedDeclaration( TypeParameterScopeKind.functionType, "") - .resolveNamedTypes(typeVariables, _libraryBuilder); + .resolveNamedTypes(typeVariables, _libraryBuilder, compilationUnit); popDeclarationContext(DeclarationContext.Typedef); return; } 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 43e746b9c6d..8850cbcd52c 100644 --- a/pkg/front_end/lib/src/source/source_library_builder.dart +++ b/pkg/front_end/lib/src/source/source_library_builder.dart @@ -125,6 +125,9 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { SourceLibraryBuilder? _libraryBuilder; + @override + final TypeParameterScopeBuilder libraryTypeParameterScopeBuilder; + /// Map used to find objects created in the [OutlineBuilder] from within /// the [DietListener]. /// @@ -138,7 +141,8 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { final List exports = []; - SourceCompilationUnitImpl(this._sourceLibraryBuilder); + SourceCompilationUnitImpl( + this._sourceLibraryBuilder, this.libraryTypeParameterScopeBuilder); @override SourceLibraryBuilder get sourceLibraryBuilder => _sourceLibraryBuilder; @@ -930,7 +934,7 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { // Nested declaration began in `OutlineBuilder.beginEnum`. TypeParameterScopeBuilder declaration = endNestedDeclaration(TypeParameterScopeKind.enumDeclaration, name) - ..resolveNamedTypes(typeVariables, _sourceLibraryBuilder); + ..resolveNamedTypes(typeVariables, _sourceLibraryBuilder, this); Map members = declaration.members!; Map constructors = declaration.constructors!; Map setters = declaration.setters!; @@ -1085,9 +1089,8 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { // Nested declaration began in `OutlineBuilder.beginClassDeclaration`. TypeParameterScopeBuilder declaration = endNestedDeclaration(kind, className) - ..resolveNamedTypes(typeVariables, _sourceLibraryBuilder); - assert(declaration.parent == - _sourceLibraryBuilder._libraryTypeParameterScopeBuilder); + ..resolveNamedTypes(typeVariables, _sourceLibraryBuilder, this); + assert(declaration.parent == libraryTypeParameterScopeBuilder); Map members = declaration.members!; Map constructors = declaration.constructors!; Map setters = declaration.setters!; @@ -1211,7 +1214,7 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { required bool isMixinClass}) { // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`. endNestedDeclaration(TypeParameterScopeKind.namedMixinApplication, name) - .resolveNamedTypes(typeVariables, _sourceLibraryBuilder); + .resolveNamedTypes(typeVariables, _sourceLibraryBuilder, this); supertype = _applyMixins(supertype, mixinApplication, startCharOffset, charOffset, charEndOffset, name, false, metadata: metadata, @@ -1460,7 +1463,7 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { TypeParameterScopeKind.unnamedMixinApplication, "mixin application"); mixinDeclaration.resolveNamedTypes( - applicationTypeVariables, _sourceLibraryBuilder); + applicationTypeVariables, _sourceLibraryBuilder, this); applicationTypeArguments = []; for (NominalVariableBuilder typeVariable in typeVariables) { @@ -1577,9 +1580,8 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { // `OutlineBuilder.beginExtensionDeclarationPrelude`. TypeParameterScopeBuilder declaration = endNestedDeclaration(TypeParameterScopeKind.extensionDeclaration, name) - ..resolveNamedTypes(typeVariables, _sourceLibraryBuilder); - assert(declaration.parent == - _sourceLibraryBuilder._libraryTypeParameterScopeBuilder); + ..resolveNamedTypes(typeVariables, _sourceLibraryBuilder, this); + assert(declaration.parent == libraryTypeParameterScopeBuilder); Map members = declaration.members!; Map constructors = declaration.constructors!; Map setters = declaration.setters!; @@ -1664,9 +1666,8 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { // Nested declaration began in `OutlineBuilder.beginExtensionDeclaration`. TypeParameterScopeBuilder declaration = endNestedDeclaration( TypeParameterScopeKind.extensionTypeDeclaration, name) - ..resolveNamedTypes(typeVariables, _sourceLibraryBuilder); - assert(declaration.parent == - _sourceLibraryBuilder._libraryTypeParameterScopeBuilder); + ..resolveNamedTypes(typeVariables, _sourceLibraryBuilder, this); + assert(declaration.parent == libraryTypeParameterScopeBuilder); Map members = declaration.members!; Map constructors = declaration.constructors!; Map setters = declaration.setters!; @@ -1771,7 +1772,7 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { _checkTypeVariables(typeVariables, typedefBuilder); // Nested declaration began in `OutlineBuilder.beginFunctionTypeAlias`. endNestedDeclaration(TypeParameterScopeKind.typedef, "#typedef") - .resolveNamedTypes(typeVariables, _sourceLibraryBuilder); + .resolveNamedTypes(typeVariables, _sourceLibraryBuilder, this); _sourceLibraryBuilder.addBuilder(name, typedefBuilder, charOffset, getterReference: referenceFrom?.reference); } @@ -2100,7 +2101,7 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { _sourceLibraryBuilder.currentTypeParameterScopeBuilder = savedDeclaration; factoryDeclaration.resolveNamedTypes( - procedureBuilder.typeVariables, _sourceLibraryBuilder); + procedureBuilder.typeVariables, _sourceLibraryBuilder, this); _sourceLibraryBuilder.addBuilder( procedureName, procedureBuilder, charOffset, getterReference: constructorReference); @@ -2720,15 +2721,11 @@ class SourceCompilationUnitImpl implements SourceCompilationUnit { } class SourceLibraryBuilder extends LibraryBuilderImpl { - late final SourceCompilationUnit compilationUnit = - new SourceCompilationUnitImpl(this); + late final SourceCompilationUnit compilationUnit; @override final SourceLoader loader; - // TODO(johnniwinther): Move this to [SourceCompilationUnitImpl]. - final TypeParameterScopeBuilder _libraryTypeParameterScopeBuilder; - final List constructorReferences = []; @@ -2914,7 +2911,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { this.fileUri, this._packageUri, this.packageLanguageVersion, - this._libraryTypeParameterScopeBuilder, + TypeParameterScopeBuilder libraryTypeParameterScopeBuilder, this.importScope, SourceLibraryBuilder? origin, this.library, @@ -2925,7 +2922,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { required bool isPatch, Map? omittedTypes}) : _languageVersion = packageLanguageVersion, - currentTypeParameterScopeBuilder = _libraryTypeParameterScopeBuilder, + currentTypeParameterScopeBuilder = libraryTypeParameterScopeBuilder, _immediateOrigin = origin, _omittedTypeDeclarationBuilders = omittedTypes, libraryName = new LibraryName(library.reference), @@ -2933,7 +2930,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { isPatchLibrary = isPatch, super( fileUri, - _libraryTypeParameterScopeBuilder.toScope(importScope, + libraryTypeParameterScopeBuilder.toScope(importScope, omittedTypeDeclarationBuilders: omittedTypes), origin?.exportScope ?? new Scope.top(kind: ScopeKind.library)) { assert( @@ -2946,6 +2943,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { !importUri.isScheme('dart') || _packageUri == null, "Package uri '$_packageUri' set on dart: library with import uri " "'${importUri}'."); + compilationUnit = + new SourceCompilationUnitImpl(this, libraryTypeParameterScopeBuilder); } MergedLibraryScope get mergedScope { @@ -3138,7 +3137,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { } List get unresolvedNamedTypes => - _libraryTypeParameterScopeBuilder.unresolvedNamedTypes; + compilationUnit.libraryTypeParameterScopeBuilder.unresolvedNamedTypes; @override bool get isSynthetic => accessProblem != null; @@ -3253,7 +3252,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { if (declaration is SourceExtensionBuilder && declaration.isUnnamedExtension) { assert(currentTypeParameterScopeBuilder == - _libraryTypeParameterScopeBuilder); + compilationUnit.libraryTypeParameterScopeBuilder); declaration.parent = this; currentTypeParameterScopeBuilder.extensions!.add(declaration); return declaration; @@ -3264,7 +3263,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { if (setterReference != null) { loader.buildersCreatedWithReferences[setterReference] = declaration; } - if (currentTypeParameterScopeBuilder == _libraryTypeParameterScopeBuilder) { + if (currentTypeParameterScopeBuilder == + compilationUnit.libraryTypeParameterScopeBuilder) { if (declaration is MemberBuilder) { declaration.parent = this; } else if (declaration is TypeDeclarationBuilder) { @@ -3277,7 +3277,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { } } else { assert(currentTypeParameterScopeBuilder.parent == - _libraryTypeParameterScopeBuilder); + compilationUnit.libraryTypeParameterScopeBuilder); } bool isConstructor = declaration is FunctionBuilder && (declaration.isConstructor || declaration.isFactory); @@ -4689,7 +4689,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { } for (Builder? declaration - in _libraryTypeParameterScopeBuilder.members!.values) { + in compilationUnit.libraryTypeParameterScopeBuilder.members!.values) { while (declaration != null) { if (declaration is TypeAliasBuilder && declaration.typeVariablesCount > 0) { @@ -5017,15 +5017,15 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { } for (Builder declaration - in _libraryTypeParameterScopeBuilder.members!.values) { + in compilationUnit.libraryTypeParameterScopeBuilder.members!.values) { computeDefaultValuesForDeclaration(declaration); } for (Builder declaration - in _libraryTypeParameterScopeBuilder.setters!.values) { + in compilationUnit.libraryTypeParameterScopeBuilder.setters!.values) { computeDefaultValuesForDeclaration(declaration); } for (ExtensionBuilder declaration - in _libraryTypeParameterScopeBuilder.extensions!) { + in compilationUnit.libraryTypeParameterScopeBuilder.extensions!) { if (declaration is SourceExtensionBuilder && declaration.isUnnamedExtension) { computeDefaultValuesForDeclaration(declaration); @@ -6208,8 +6208,11 @@ class TypeParameterScopeBuilder { /// Resolves type variables in [unresolvedNamedTypes] and propagate other /// types to [parent]. - void resolveNamedTypes(List? typeVariables, - SourceLibraryBuilder library) { + void resolveNamedTypes( + List? typeVariables, + // TODO(johnniwinther): Remove [library]: + SourceLibraryBuilder library, + SourceCompilationUnit compilationUnit) { Map? map; if (typeVariables != null) { map = {}; @@ -6240,7 +6243,7 @@ class TypeParameterScopeBuilder { int nameLength = typeName.fullNameLength; Message message = templateNotAPrefixInTypeAnnotation.withArguments( qualifier, typeName.name); - library.addProblem( + compilationUnit.addProblem( message, nameOffset, nameLength, namedTypeBuilder.fileUri!); namedTypeBuilder.bind( library,