[cfe] Move computation of macro declaration earlier
This moves the computation of macro declarations in source libraries
to right after libraries/parts relations have been finalized.
Change-Id: Ie630b1ef0794f70dba9b412ef1c1d737b5abdc3e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/225724
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
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 4cf5f7e..437924c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -386,6 +386,7 @@
await loader.buildOutlines();
loader.coreLibrary.becomeCoreLibrary();
loader.resolveParts();
+ loader.computeMacroDeclarations();
loader.computeLibraryScopes();
setupTopAndBottomTypes();
loader.resolveTypes();
@@ -394,7 +395,6 @@
dynamicType, nullType, bottomType, objectClassBuilder);
List<SourceClassBuilder> sourceClassBuilders =
loader.checkSemantics(objectClassBuilder);
- loader.computeMacroDeclarations(sourceClassBuilders);
loader.computeMacroApplications();
loader.finishTypeVariables(objectClassBuilder, dynamicType);
loader.createTypeInferenceEngine();
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 6c12705..48f3241 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1303,7 +1303,7 @@
ticker.logMs("Resolved $typeCount types");
}
- void computeMacroDeclarations(List<SourceClassBuilder> sourceClassBuilders) {
+ void computeMacroDeclarations() {
if (!enableMacros) return;
LibraryBuilder? macroLibraryBuilder = lookupLibraryBuilder(macroLibraryUri);
@@ -1325,14 +1325,18 @@
Set<ClassBuilder> macroClasses = {macroClassBuilder};
Set<Uri> macroLibraries = {macroLibraryBuilder.importUri};
- for (SourceClassBuilder sourceClassBuilder in sourceClassBuilders) {
- if (sourceClassBuilder.isMacro) {
- macroClasses.add(sourceClassBuilder);
- macroLibraries.add(sourceClassBuilder.library.importUri);
- if (retainDataForTesting) {
- (dataForTesting!.macroDeclarationData.macroDeclarations[
- sourceClassBuilder.library.importUri] ??= [])
- .add(sourceClassBuilder.name);
+ for (SourceLibraryBuilder sourceLibraryBuilder in sourceLibraryBuilders) {
+ Iterator<Builder> iterator = sourceLibraryBuilder.iterator;
+ while (iterator.moveNext()) {
+ Builder builder = iterator.current;
+ if (builder is SourceClassBuilder && builder.isMacro) {
+ macroClasses.add(builder);
+ macroLibraries.add(builder.library.importUri);
+ if (retainDataForTesting) {
+ (dataForTesting!.macroDeclarationData
+ .macroDeclarations[builder.library.importUri] ??= [])
+ .add(builder.name);
+ }
}
}
}