From 573c3a0747e6379ecc2974424c6d5e5649776890 Mon Sep 17 00:00:00 2001 From: Johnni Winther Date: Thu, 5 Sep 2024 07:40:09 +0000 Subject: [PATCH] [cfe] Remove CompilationUnit.localMembersNameIterator The incremental compiler is changed to use the library builder instead of the compilation units to patch up export scopes, leaving [localMembersNameIterator] unused on [CompilationUnit]. Change-Id: Ic1527d7e2dc62fb66c2db35a85be6d53bf2c5d09 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/383620 Reviewed-by: Jens Johansen Commit-Queue: Johnni Winther --- .../lib/src/base/incremental_compiler.dart | 85 ++++++++----------- .../lib/src/builder/library_builder.dart | 7 -- .../lib/src/dill/dill_library_builder.dart | 4 - .../src/source/source_builder_factory.dart | 4 +- .../src/source/source_compilation_unit.dart | 1 - 5 files changed, 37 insertions(+), 64 deletions(-) diff --git a/pkg/front_end/lib/src/base/incremental_compiler.dart b/pkg/front_end/lib/src/base/incremental_compiler.dart index a88a327abfc0..eb209c6e841e 100644 --- a/pkg/front_end/lib/src/base/incremental_compiler.dart +++ b/pkg/front_end/lib/src/base/incremental_compiler.dart @@ -358,7 +358,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator { ?.enterPhase(BenchmarkPhases.incremental_setupInLoop); currentKernelTarget = _setupNewKernelTarget(c, uriTranslator, hierarchy, reusedLibraries, experimentalInvalidation, entryPoints); - Map>? rebuildBodiesMap = + Map? rebuildBodiesMap = _experimentalInvalidationCreateRebuildBodiesBuilders( currentKernelTarget, experimentalInvalidation, uriTranslator); entryPoints = currentKernelTarget.setEntryPoints(entryPoints); @@ -592,7 +592,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator { bool changed = false; Set newDillLibraryBuilders = new Set(); _userBuilders ??= {}; - Map>? convertedLibraries; + Map? convertedLibraries; for (SourceLibraryBuilder builder in nextGoodKernelTarget.loader.sourceLibraryBuilders) { if (cleanedUpBuilders.contains(builder)) { @@ -605,8 +605,8 @@ class IncrementalCompiler implements IncrementalKernelGenerator { newDillLibraryBuilders.add(builder.library); changed = true; if (experimentalInvalidation != null) { - convertedLibraries ??= new Map>(); - convertedLibraries[builder] = [dillBuilder.mainCompilationUnit]; + convertedLibraries ??= new Map(); + convertedLibraries[builder] = dillBuilder.mainCompilationUnit; } } nextGoodKernelTarget.loader.clearSourceLibraryBuilders(); @@ -847,39 +847,39 @@ class IncrementalCompiler implements IncrementalKernelGenerator { /// Fill in the replacement maps that describe the replacements that need to /// happen because of experimental invalidation. void _experimentalInvalidationFillReplacementMaps( - Map> rebuildBodiesMap, + Map rebuildBodiesMap, Map> replacementMap, Map> replacementSettersMap) { - for (MapEntry> entry + for (MapEntry entry in rebuildBodiesMap.entries) { Map childReplacementMap = {}; Map childReplacementSettersMap = {}; - List compilationUnits = rebuildBodiesMap[entry.key]!; + CompilationUnit mainCompilationUnit = rebuildBodiesMap[entry.key]!; replacementMap[entry.key] = childReplacementMap; replacementSettersMap[entry.key] = childReplacementSettersMap; - for (CompilationUnit compilationUnit in compilationUnits) { - NameIterator iterator = compilationUnit.localMembersNameIterator; - while (iterator.moveNext()) { - Builder childBuilder = iterator.current; - if (childBuilder is SourceExtensionBuilder && - childBuilder.isUnnamedExtension) { - continue; - } - String name = iterator.name; - Map map; - if (childBuilder.isSetter) { - map = childReplacementSettersMap; - } else { - map = childReplacementMap; - } - assert( - !map.containsKey(name), - // Coverage-ignore(suite): Not run. - "Unexpected double-entry for $name in " - "${compilationUnit.importUri} (org from ${entry.key.importUri}): " - "$childBuilder and ${map[name]}"); - map[name] = childBuilder; + NameIterator iterator = + mainCompilationUnit.libraryBuilder.localMembersNameIterator; + while (iterator.moveNext()) { + Builder childBuilder = iterator.current; + if (childBuilder is SourceExtensionBuilder && + childBuilder.isUnnamedExtension) { + continue; } + String name = iterator.name; + Map map; + if (childBuilder.isSetter) { + map = childReplacementSettersMap; + } else { + map = childReplacementMap; + } + assert( + !map.containsKey(name), + // Coverage-ignore(suite): Not run. + "Unexpected double-entry for $name in " + "${mainCompilationUnit.importUri} " + "(org from ${entry.key.importUri}): " + "$childBuilder and ${map[name]}"); + map[name] = childBuilder; } } } @@ -888,7 +888,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator { /// be rebuild special, namely they have to be /// [currentKernelTarget.loader.read] with references from the original /// [Library] for things to work. - Map> + Map _experimentalInvalidationCreateRebuildBodiesBuilders( IncrementalKernelTarget currentKernelTarget, ExperimentalInvalidation? experimentalInvalidation, @@ -896,8 +896,8 @@ class IncrementalCompiler implements IncrementalKernelGenerator { // Any builder(s) in [rebuildBodies] should be semi-reused: Create source // compilation units based on the underlying libraries. // Maps from old library builder to list of new compilation unit(s). - Map> rebuildBodiesMap = - new Map>.identity(); + Map rebuildBodiesMap = + new Map.identity(); if (experimentalInvalidation != null) { for (DillLibraryBuilder library in experimentalInvalidation.rebuildBodies) { @@ -905,24 +905,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator { .readAsEntryPoint(library.importUri, fileUri: library.fileUri, referencesFromIndex: new IndexedLibrary(library.library)); - List compilationUnits = [newMainCompilationUnit]; - rebuildBodiesMap[library] = compilationUnits; - for (LibraryPart part in library.library.parts) { - // We need to pass the reference to make any class, procedure etc - // overwrite correctly, but the library itself should not be - // over written as the library for parts are temporary "fake" - // libraries. - Uri partUri = getPartUri(library.importUri, part); - Uri? fileUri = - uriTranslator.getPartFileUri(library.library.fileUri, part); - CompilationUnit newPartCompilationUnit = currentKernelTarget.loader - .read(partUri, -1, - accessor: newMainCompilationUnit, - fileUri: fileUri, - referencesFromIndex: new IndexedLibrary(library.library), - referenceIsPartOwner: true); - compilationUnits.add(newPartCompilationUnit); - } + rebuildBodiesMap[library] = newMainCompilationUnit; } } return rebuildBodiesMap; @@ -933,7 +916,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator { /// didn't do anything special. void _experimentalInvalidationPatchUpScopes( ExperimentalInvalidation? experimentalInvalidation, - Map> rebuildBodiesMap) { + Map rebuildBodiesMap) { if (experimentalInvalidation != null) { // Maps from old library builder to map of new content. Map> replacementMap = {}; diff --git a/pkg/front_end/lib/src/builder/library_builder.dart b/pkg/front_end/lib/src/builder/library_builder.dart index 576dca6c99ca..c304a017180d 100644 --- a/pkg/front_end/lib/src/builder/library_builder.dart +++ b/pkg/front_end/lib/src/builder/library_builder.dart @@ -81,13 +81,6 @@ sealed class CompilationUnit { void addExporter(CompilationUnit exporter, List? combinators, int charOffset); - /// Returns an iterator of all members (typedefs, classes and members) - /// declared in this library, including duplicate declarations. - /// - /// Compared to [localMembersIterator] this also gives access to the name - /// that the builders are mapped to. - NameIterator get localMembersNameIterator; - /// Add a problem with a severity determined by the severity of the message. /// /// If [fileUri] is null, it defaults to `this.fileUri`. 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 687abb00aae3..23ae761e2cc2 100644 --- a/pkg/front_end/lib/src/dill/dill_library_builder.dart +++ b/pkg/front_end/lib/src/dill/dill_library_builder.dart @@ -88,10 +88,6 @@ class DillCompilationUnitImpl extends DillCompilationUnit { @override Loader get loader => _dillLibraryBuilder.loader; - @override - NameIterator get localMembersNameIterator => - _dillLibraryBuilder.localMembersNameIterator; - @override Null get partOfLibrary => _dillLibraryBuilder.partOfLibrary; diff --git a/pkg/front_end/lib/src/source/source_builder_factory.dart b/pkg/front_end/lib/src/source/source_builder_factory.dart index 3deaa368e3fb..913451580d69 100644 --- a/pkg/front_end/lib/src/source/source_builder_factory.dart +++ b/pkg/front_end/lib/src/source/source_builder_factory.dart @@ -779,7 +779,9 @@ class BuilderFactoryImpl implements BuilderFactory, BuilderFactoryResult { originImportUri: _compilationUnit.originImportUri, fileUri: newFileUri, accessor: _compilationUnit, - isPatch: _compilationUnit.isAugmenting); + isPatch: _compilationUnit.isAugmenting, + referencesFromIndex: indexedLibrary, + referenceIsPartOwner: indexedLibrary != null); _parts.add(new Part(charOffset, compilationUnit)); // TODO(ahe): [metadata] should be stored, evaluated, and added to [part]. diff --git a/pkg/front_end/lib/src/source/source_compilation_unit.dart b/pkg/front_end/lib/src/source/source_compilation_unit.dart index 22c556c8edeb..dd9d3592ca8d 100644 --- a/pkg/front_end/lib/src/source/source_compilation_unit.dart +++ b/pkg/front_end/lib/src/source/source_compilation_unit.dart @@ -300,7 +300,6 @@ class SourceCompilationUnitImpl @override bool get isSynthetic => accessProblem != null; - @override NameIterator get localMembersNameIterator => _sourceLibraryBuilder.localMembersNameIterator;