Skip to content

Commit 3cdcab2

Browse files
committed
[ASTGen] MacroExpansionExpr at top-level can be decl
1 parent f3191c8 commit 3cdcab2

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

lib/ASTGen/Sources/ASTGen/ASTGen.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,17 @@ struct ASTGenVisitor {
128128
case .generated(let generated):
129129
return generated
130130
case .ignored:
131-
// Let regular 'self.generate(expr:)' generate the macro expansions.
132131
break
133132
}
133+
134+
// In non-script files, macro expansion at top-level must be a decl.
135+
if !declContext.parentSourceFile.isScriptMode {
136+
return withDeclContext(parentDC) {
137+
return .decl(self.generateMacroExpansionDecl(macroExpansionExpr: node).asDecl)
138+
}
139+
}
140+
141+
// Otherwise, let regular 'self.generate(expr:)' generate the macro expansions.
134142
}
135143
return .expr(self.generate(expr: node))
136144
}

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,21 @@ extension ASTGenVisitor {
855855

856856
return decl
857857
}
858+
859+
func generateMacroExpansionDecl(macroExpansionExpr node: MacroExpansionExprSyntax) -> BridgedMacroExpansionDecl {
860+
let info = self.generate(freestandingMacroExpansion: node)
861+
return .createParsed(
862+
self.declContext,
863+
poundLoc: info.poundLoc,
864+
macroNameRef: info.macroNameRef,
865+
macroNameLoc: info.macroNameLoc,
866+
leftAngleLoc: info.leftAngleLoc,
867+
genericArgs: info.genericArgs,
868+
rightAngleLoc: info.rightAngleLoc,
869+
args: info.arguments
870+
)
871+
}
872+
858873
}
859874

860875
// MARK: - OperatorDecl

0 commit comments

Comments
 (0)