Skip to content

Commit 0030661

Browse files
committed
[ASTGen] Unify common logic among FreestandingMacroExpansion
1 parent dfdba15 commit 0030661

File tree

2 files changed

+38
-43
lines changed

2 files changed

+38
-43
lines changed

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -625,46 +625,17 @@ extension ASTGenVisitor {
625625
extension ASTGenVisitor {
626626
func generate(macroExpansionDecl node: MacroExpansionDeclSyntax) -> BridgedMacroExpansionDecl {
627627
let attrs = self.generateDeclAttributes(node, allowStatic: true)
628-
629-
let nameLoc = self.generateIdentifierAndSourceLoc(node.macroName)
630-
631-
let leftAngleLoc: BridgedSourceLoc
632-
let genericArgs: [BridgedTypeRepr]
633-
let rightAngleLoc: BridgedSourceLoc
634-
if let generics = node.genericArgumentClause {
635-
leftAngleLoc = self.generateSourceLoc(generics.leftAngle)
636-
genericArgs = generics.arguments.lazy.map {
637-
self.generate(type: $0.argument)
638-
}
639-
rightAngleLoc = self.generateSourceLoc(generics.rightAngle)
640-
} else {
641-
leftAngleLoc = nil
642-
genericArgs = []
643-
rightAngleLoc = nil
644-
}
645-
646-
let arguments: BridgedArgumentList?
647-
if (node.leftParen != nil || node.trailingClosure != nil) {
648-
arguments = self.generateArgumentList(
649-
leftParen: node.leftParen,
650-
labeledExprList: node.arguments,
651-
rightParen: node.rightParen,
652-
trailingClosure: node.trailingClosure,
653-
additionalTrailingClosures: node.additionalTrailingClosures
654-
)
655-
} else {
656-
arguments = nil
657-
}
628+
let info = self.generate(freestandingMacroExpansion: node)
658629

659630
let decl = BridgedMacroExpansionDecl.createParsed(
660631
self.declContext,
661-
poundLoc: self.generateSourceLoc(node.pound),
662-
macroNameRef: .createParsed(.createIdentifier(nameLoc.identifier)),
663-
macroNameLoc: .createParsed(nameLoc.sourceLoc),
664-
leftAngleLoc: leftAngleLoc,
665-
genericArgs: genericArgs.lazy.bridgedArray(in: self),
666-
rightAngleLoc: rightAngleLoc,
667-
args: arguments.asNullable
632+
poundLoc: info.poundLoc,
633+
macroNameRef: info.macroNameRef,
634+
macroNameLoc: info.macroNameLoc,
635+
leftAngleLoc: info.leftAngleLoc,
636+
genericArgs: info.genericArgs,
637+
rightAngleLoc: info.rightAngleLoc,
638+
args: info.arguments
668639
)
669640
decl.asDecl.setAttrs(attrs.attributes)
670641

lib/ASTGen/Sources/ASTGen/Exprs.swift

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -535,15 +535,26 @@ extension ASTGenVisitor {
535535
)
536536
}
537537

538-
func generate(macroExpansionExpr node: MacroExpansionExprSyntax) -> BridgedMacroExpansionExpr {
538+
struct FreestandingMacroExpansionInfo {
539+
var poundLoc: BridgedSourceLoc
540+
var macroNameRef: BridgedDeclNameRef
541+
var macroNameLoc: BridgedDeclNameLoc
542+
var leftAngleLoc: BridgedSourceLoc
543+
var genericArgs: BridgedArrayRef
544+
var rightAngleLoc: BridgedSourceLoc
545+
var arguments: BridgedNullableArgumentList
546+
}
547+
548+
func generate(freestandingMacroExpansion node: some FreestandingMacroExpansionSyntax) -> FreestandingMacroExpansionInfo {
549+
let poundLoc = self.generateSourceLoc(node.pound)
539550
let nameLoc = self.generateIdentifierAndSourceLoc(node.macroName)
540551

541552
let leftAngleLoc: BridgedSourceLoc
542553
let genericArgs: [BridgedTypeRepr]
543554
let rightAngleLoc: BridgedSourceLoc
544555
if let generics = node.genericArgumentClause {
545556
leftAngleLoc = self.generateSourceLoc(generics.leftAngle)
546-
genericArgs = generics.arguments.lazy.map {
557+
genericArgs = generics.arguments.map {
547558
self.generate(type: $0.argument)
548559
}
549560
rightAngleLoc = self.generateSourceLoc(generics.rightAngle)
@@ -566,15 +577,28 @@ extension ASTGenVisitor {
566577
arguments = nil
567578
}
568579

569-
return .createParsed(
570-
self.declContext,
571-
poundLoc: self.generateSourceLoc(node.pound),
580+
return FreestandingMacroExpansionInfo(
581+
poundLoc: poundLoc,
572582
macroNameRef: .createParsed(.createIdentifier(nameLoc.identifier)),
573583
macroNameLoc: .createParsed(nameLoc.sourceLoc),
574584
leftAngleLoc: leftAngleLoc,
575585
genericArgs: genericArgs.lazy.bridgedArray(in: self),
576586
rightAngleLoc: rightAngleLoc,
577-
args: arguments.asNullable
587+
arguments: arguments.asNullable
588+
)
589+
}
590+
591+
func generate(macroExpansionExpr node: MacroExpansionExprSyntax) -> BridgedMacroExpansionExpr {
592+
let info = self.generate(freestandingMacroExpansion: node)
593+
return .createParsed(
594+
self.declContext,
595+
poundLoc: info.poundLoc,
596+
macroNameRef: info.macroNameRef,
597+
macroNameLoc: info.macroNameLoc,
598+
leftAngleLoc: info.leftAngleLoc,
599+
genericArgs: info.genericArgs,
600+
rightAngleLoc: info.rightAngleLoc,
601+
args: info.arguments
578602
)
579603
}
580604

0 commit comments

Comments
 (0)