Version 2.16.0-138.0.dev
Merge commit 'ccffa7e9ad9b19a452faf455f5dc2bacb7dd41fd' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index 9c60578..a72ac97 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -514,8 +514,8 @@
}
}
- ProcedureBuilder toStringBuilder =
- firstMemberNamed("toString") as ProcedureBuilder;
+ SourceProcedureBuilder toStringBuilder =
+ firstMemberNamed("toString") as SourceProcedureBuilder;
TypeBuilder supertypeBuilder = this.supertypeBuilder!;
ClassBuilder enumClass = supertypeBuilder.declaration as ClassBuilder;
diff --git a/pkg/front_end/lib/src/fasta/builder/function_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
index 9bd4714..40c21f0 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
@@ -45,6 +45,11 @@
/// Common base class for constructor and procedure builders.
abstract class FunctionBuilder implements MemberBuilder {
+ FunctionNode get function;
+}
+
+abstract class SourceFunctionBuilder
+ implements FunctionBuilder, SourceMemberBuilder {
List<MetadataBuilder>? get metadata;
TypeBuilder? get returnType;
@@ -94,8 +99,6 @@
String? get nativeMethodName;
- FunctionNode get function;
-
Statement? get body;
void set body(Statement? newBody);
@@ -135,7 +138,7 @@
/// Common base class for constructor and procedure builders.
abstract class FunctionBuilderImpl extends MemberBuilderImpl
- implements FunctionBuilder {
+ implements SourceFunctionBuilder {
@override
final List<MetadataBuilder>? metadata;
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index 5fc860b..9108f06 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -98,8 +98,10 @@
List<ClassMember> get localSetters;
}
+abstract class SourceMemberBuilder implements MemberBuilder {}
+
abstract class MemberBuilderImpl extends ModifierBuilderImpl
- implements MemberBuilder {
+ implements SourceMemberBuilder {
/// For top-level members, the parent is set correctly during
/// construction. However, for class members, the parent is initially the
/// library and updated later.
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 0753eef..d8fbe1d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -939,7 +939,7 @@
}
void prepareInitializers() {
- FunctionBuilder member = this.member as FunctionBuilder;
+ SourceFunctionBuilder member = this.member as SourceFunctionBuilder;
scope = member.computeFormalParameterInitializerScope(scope);
if (member is SourceConstructorBuilder) {
member.prepareInitializers();
@@ -1054,7 +1054,7 @@
}
DartType _computeReturnTypeContext(MemberBuilder member) {
- if (member is ProcedureBuilder) {
+ if (member is SourceProcedureBuilder) {
final bool isReturnTypeUndeclared = member.returnType == null &&
member.function.returnType is DynamicType;
return isReturnTypeUndeclared && libraryBuilder.isNonNullableByDefault
@@ -1073,7 +1073,7 @@
debugEvent("finishFunction");
typeInferrer.assignedVariables.finish();
- final FunctionBuilder builder = member as FunctionBuilder;
+ final SourceFunctionBuilder builder = member as SourceFunctionBuilder;
if (extensionThis != null) {
typeInferrer.flowAnalysis.declare(extensionThis!, true);
}
@@ -1126,7 +1126,7 @@
}
if (builder is SourceConstructorBuilder) {
finishConstructor(builder, asyncModifier, body);
- } else if (builder is ProcedureBuilder) {
+ } else if (builder is SourceProcedureBuilder) {
builder.asyncModifier = asyncModifier;
} else if (builder is SourceFactoryBuilder) {
builder.asyncModifier = asyncModifier;
@@ -4163,7 +4163,7 @@
if (!inCatchClause &&
functionNestingLevel == 0 &&
memberKind != MemberKind.GeneralizedFunctionType) {
- FunctionBuilder member = this.member as FunctionBuilder;
+ SourceFunctionBuilder member = this.member as SourceFunctionBuilder;
parameter = member.getFormal(name!);
if (parameter == null) {
// This happens when the list of formals (originally) contains a
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_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 6c5157d..213a84e 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
@@ -550,7 +550,7 @@
// Check fields.
checkVarianceInField(builder, typeEnvironment, cls.typeParameters);
library.checkTypesInField(builder, typeEnvironment);
- } else if (builder is ProcedureBuilder) {
+ } else if (builder is SourceProcedureBuilder) {
// Check procedures
checkVarianceInFunction(
builder.procedure, typeEnvironment, cls.typeParameters);
@@ -562,7 +562,7 @@
});
forEachConstructor((String name, MemberBuilder builder) {
- if (builder is ConstructorBuilder) {
+ if (builder is SourceConstructorBuilder) {
library.checkTypesInConstructorBuilder(builder, typeEnvironment);
} else if (builder is RedirectingFactoryBuilder) {
library.checkTypesInRedirectingFactoryBuilder(builder, typeEnvironment);
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 4760e58..29e8ce8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -262,7 +262,7 @@
if (builder is SourceFieldBuilder) {
// Check fields.
library.checkTypesInField(builder, typeEnvironment);
- } else if (builder is ProcedureBuilder) {
+ } else if (builder is SourceProcedureBuilder) {
// Check procedures
library.checkTypesInFunctionBuilder(builder, typeEnvironment);
if (builder.isGetter) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 701382f..6f3c22a 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -186,7 +186,7 @@
final SourceLibraryBuilder? _origin;
- final List<FunctionBuilder> nativeMethods = <FunctionBuilder>[];
+ final List<SourceFunctionBuilder> nativeMethods = <SourceFunctionBuilder>[];
final List<TypeVariableBuilder> unboundTypeVariables =
<TypeVariableBuilder>[];
@@ -2657,7 +2657,7 @@
}
}
}
- ProcedureBuilder procedureBuilder = new SourceProcedureBuilder(
+ SourceProcedureBuilder procedureBuilder = new SourceProcedureBuilder(
metadata,
modifiers,
returnType,
@@ -3302,7 +3302,7 @@
return count;
}
- void addNativeMethod(FunctionBuilder method) {
+ void addNativeMethod(SourceFunctionBuilder method) {
nativeMethods.add(method);
}
@@ -3316,7 +3316,7 @@
}
}
- for (FunctionBuilder method in nativeMethods) {
+ for (SourceFunctionBuilder method in nativeMethods) {
method.becomeNative(loader);
}
count += nativeMethods.length;
@@ -3678,9 +3678,9 @@
inErrorRecovery: issues.isNotEmpty);
formals = member.formals;
} else {
- assert(member is ConstructorBuilder,
+ assert(member is SourceConstructorBuilder,
"Unexpected constructor member (${member.runtimeType}).");
- formals = (member as ConstructorBuilder).formals;
+ formals = (member as SourceConstructorBuilder).formals;
}
if (formals != null && formals.isNotEmpty) {
for (FormalParameterBuilder formal in formals) {
@@ -3694,7 +3694,7 @@
});
}
declaration.forEach((String name, Builder member) {
- if (member is ProcedureBuilder) {
+ if (member is SourceProcedureBuilder) {
List<NonSimplicityIssue> issues =
getNonSimplicityIssuesForTypeVariables(member.typeVariables);
if (member.formals != null && member.formals!.isNotEmpty) {
@@ -3733,7 +3733,7 @@
count += computeDefaultTypesForVariables(declaration.typeVariables,
inErrorRecovery: issues.isNotEmpty);
_recursivelyReportGenericFunctionTypesAsBoundsForType(declaration.type);
- } else if (declaration is FunctionBuilder) {
+ } else if (declaration is SourceFunctionBuilder) {
List<NonSimplicityIssue> issues =
getNonSimplicityIssuesForTypeVariables(declaration.typeVariables);
if (declaration.formals != null && declaration.formals!.isNotEmpty) {
@@ -3761,7 +3761,7 @@
inErrorRecovery: issues.isNotEmpty);
}
declaration.forEach((String name, Builder member) {
- if (member is ProcedureBuilder) {
+ if (member is SourceProcedureBuilder) {
List<NonSimplicityIssue> issues =
getNonSimplicityIssuesForTypeVariables(member.typeVariables);
if (member.formals != null && member.formals!.isNotEmpty) {
@@ -3809,10 +3809,10 @@
for (Builder declaration
in _libraryTypeParameterScopeBuilder.setters!.values) {
assert(
- declaration is ProcedureBuilder,
+ declaration is SourceProcedureBuilder,
"Expected setter to be a ProcedureBuilder, "
"but got '${declaration.runtimeType}'");
- if (declaration is ProcedureBuilder &&
+ if (declaration is SourceProcedureBuilder &&
declaration.formals != null &&
declaration.formals!.isNotEmpty) {
for (FormalParameterBuilder formal in declaration.formals!) {
@@ -4235,7 +4235,7 @@
}
void checkTypesInFunctionBuilder(
- FunctionBuilder procedureBuilder, TypeEnvironment typeEnvironment) {
+ SourceFunctionBuilder procedureBuilder, TypeEnvironment typeEnvironment) {
checkBoundsInFunctionNode(
procedureBuilder.function, typeEnvironment, procedureBuilder.fileUri!);
if (procedureBuilder.formals != null &&
@@ -4245,7 +4245,8 @@
}
void checkTypesInConstructorBuilder(
- ConstructorBuilder constructorBuilder, TypeEnvironment typeEnvironment) {
+ SourceConstructorBuilder constructorBuilder,
+ TypeEnvironment typeEnvironment) {
checkBoundsInFunctionNode(
constructorBuilder.constructor.function, typeEnvironment, fileUri);
if (!constructorBuilder.isExternal && constructorBuilder.formals != null) {
@@ -4549,7 +4550,7 @@
Builder declaration = iterator.current;
if (declaration is FieldBuilder) {
checkTypesInField(declaration, typeEnvironment);
- } else if (declaration is ProcedureBuilder) {
+ } else if (declaration is SourceProcedureBuilder) {
checkTypesInFunctionBuilder(declaration, typeEnvironment);
if (declaration.isGetter) {
Builder? setterDeclaration =
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);
+ }
}
}
}
diff --git a/pkg/front_end/test/extensions/extensions_test.dart b/pkg/front_end/test/extensions/extensions_test.dart
index 2bb86f3..82e937b 100644
--- a/pkg/front_end/test/extensions/extensions_test.dart
+++ b/pkg/front_end/test/extensions/extensions_test.dart
@@ -240,7 +240,7 @@
MemberBuilder memberBuilder = lookupMemberBuilder(compilerResult, member)!;
Features features = new Features();
features[Tags.builderName] = memberBuilder.name;
- if (memberBuilder is FunctionBuilder) {
+ if (memberBuilder is SourceFunctionBuilder) {
if (memberBuilder.formals != null) {
for (FormalParameterBuilder parameter in memberBuilder.formals!) {
if (parameter.isRequired) {
diff --git a/tools/VERSION b/tools/VERSION
index 52d9513..9a1c513 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 16
PATCH 0
-PRERELEASE 137
+PRERELEASE 138
PRERELEASE_PATCH 0
\ No newline at end of file