Skip to content

Commit dfdba15

Browse files
committed
[ASTGen] Generrate MacroExpansionExpr
1 parent 2c1ada6 commit dfdba15

File tree

7 files changed

+156
-8
lines changed

7 files changed

+156
-8
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -966,6 +966,14 @@ BridgedAssociatedTypeDecl BridgedAssociatedTypeDecl_createParsed(
966966
BridgedNullableTypeRepr opaqueDefaultType,
967967
BridgedNullableTrailingWhereClause genericWhereClause);
968968

969+
SWIFT_NAME("BridgedMacroExpansionDecl.createParsed(_:poundLoc:macroNameRef:"
970+
"macroNameLoc:leftAngleLoc:genericArgs:rightAngleLoc:args:)")
971+
BridgedMacroExpansionDecl BridgedMacroExpansionDecl_createParsed(
972+
BridgedDeclContext cDeclContext, BridgedSourceLoc cPoundLoc,
973+
BridgedDeclNameRef cMacroNameRef, BridgedDeclNameLoc cMacroNameLoc,
974+
BridgedSourceLoc cLeftAngleLoc, BridgedArrayRef cGenericArgs,
975+
BridgedSourceLoc cRightAngleLoc, BridgedNullableArgumentList cArgList);
976+
969977
SWIFT_NAME(
970978
"BridgedExtensionDecl.createParsed(_:declContext:extensionKeywordLoc:"
971979
"extendedType:inheritedTypes:genericWhereClause:braceRange:)")
@@ -1325,6 +1333,14 @@ BridgedIsExpr BridgedIsExpr_createParsed(BridgedASTContext cContext,
13251333
BridgedSourceLoc cIsLoc,
13261334
BridgedTypeRepr cType);
13271335

1336+
SWIFT_NAME("BridgedMacroExpansionExpr.createParsed(_:poundLoc:macroNameRef:"
1337+
"macroNameLoc:leftAngleLoc:genericArgs:rightAngleLoc:args:)")
1338+
BridgedMacroExpansionExpr BridgedMacroExpansionExpr_createParsed(
1339+
BridgedDeclContext cDeclContext, BridgedSourceLoc cPoundLoc,
1340+
BridgedDeclNameRef cMacroNameRef, BridgedDeclNameLoc cMacroNameLoc,
1341+
BridgedSourceLoc cLeftAngleLoc, BridgedArrayRef cGenericArgs,
1342+
BridgedSourceLoc cRightAngleLoc, BridgedNullableArgumentList cArgList);
1343+
13281344
SWIFT_NAME("BridgedNilLiteralExpr.createParsed(_:nilKeywordLoc:)")
13291345
BridgedNilLiteralExpr
13301346
BridgedNilLiteralExpr_createParsed(BridgedASTContext cContext,

include/swift/AST/ASTBridgingWrappers.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ AST_BRIDGING_WRAPPER_NULLABLE(ParameterList)
8585
AST_BRIDGING_WRAPPER_NULLABLE(PatternBindingInitializer)
8686
AST_BRIDGING_WRAPPER_NONNULL(TypeAttributes)
8787
AST_BRIDGING_WRAPPER_NONNULL(CustomAttribute)
88-
AST_BRIDGING_WRAPPER_NONNULL(ArgumentList)
88+
AST_BRIDGING_WRAPPER_NULLABLE(ArgumentList)
8989

9090
// Non-AST types to generate wrappers for.
9191
AST_BRIDGING_WRAPPER_NULLABLE(DiagnosticEngine)

lib/AST/Bridging/DeclBridging.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,21 @@ BridgedExtensionDecl BridgedExtensionDecl_createParsed(
517517
return decl;
518518
}
519519

520+
BridgedMacroExpansionDecl BridgedMacroExpansionDecl_createParsed(
521+
BridgedDeclContext cDeclContext, BridgedSourceLoc cPoundLoc,
522+
BridgedDeclNameRef cMacroNameRef, BridgedDeclNameLoc cMacroNameLoc,
523+
BridgedSourceLoc cLeftAngleLoc, BridgedArrayRef cGenericArgs,
524+
BridgedSourceLoc cRightAngleLoc, BridgedNullableArgumentList cArgList) {
525+
auto *DC = cDeclContext.unbridged();
526+
auto &Context = DC->getASTContext();
527+
return MacroExpansionDecl::create(
528+
cDeclContext.unbridged(), cPoundLoc.unbridged(),
529+
cMacroNameRef.unbridged(), cMacroNameLoc.unbridged(),
530+
cLeftAngleLoc.unbridged(),
531+
Context.AllocateCopy(cGenericArgs.unbridged<TypeRepr *>()),
532+
cRightAngleLoc.unbridged(), cArgList.unbridged());
533+
}
534+
520535
BridgedOperatorDecl BridgedOperatorDecl_createParsed(
521536
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
522537
BridgedOperatorFixity cFixity, BridgedSourceLoc cOperatorKeywordLoc,

lib/AST/Bridging/ExprBridging.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,24 @@ BridgedIsExpr BridgedIsExpr_createParsed(BridgedASTContext cContext,
313313
cType.unbridged());
314314
}
315315

316+
BridgedMacroExpansionExpr BridgedMacroExpansionExpr_createParsed(
317+
BridgedDeclContext cDeclContext, BridgedSourceLoc cPoundLoc,
318+
BridgedDeclNameRef cMacroNameRef, BridgedDeclNameLoc cMacroNameLoc,
319+
BridgedSourceLoc cLeftAngleLoc, BridgedArrayRef cGenericArgs,
320+
BridgedSourceLoc cRightAngleLoc, BridgedNullableArgumentList cArgList) {
321+
auto *DC = cDeclContext.unbridged();
322+
auto &Context = DC->getASTContext();
323+
return MacroExpansionExpr::create(
324+
cDeclContext.unbridged(), cPoundLoc.unbridged(),
325+
/*module name=*/DeclNameRef(), /*module name loc=*/DeclNameLoc(),
326+
cMacroNameRef.unbridged(), cMacroNameLoc.unbridged(),
327+
cLeftAngleLoc.unbridged(),
328+
Context.AllocateCopy(cGenericArgs.unbridged<TypeRepr *>()),
329+
cRightAngleLoc.unbridged(), cArgList.unbridged(),
330+
DC->isTypeContext() ? MacroRole::Declaration
331+
: getFreestandingMacroRoles());
332+
}
333+
316334
BridgedNilLiteralExpr
317335
BridgedNilLiteralExpr_createParsed(BridgedASTContext cContext,
318336
BridgedSourceLoc cNilKeywordLoc) {

lib/ASTGen/Sources/ASTGen/Bridge.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ extension BridgedNullableGenericParamList: /*@retroactive*/ swiftASTGen.BridgedN
3434
extension BridgedNullableTrailingWhereClause: /*@retroactive*/ swiftASTGen.BridgedNullable {}
3535
extension BridgedNullableParameterList: /*@retroactive*/ swiftASTGen.BridgedNullable {}
3636
extension BridgedNullablePatternBindingInitializer: /*@retroactive*/ swiftASTGen.BridgedNullable {}
37+
extension BridgedNullableArgumentList: /*@retroactive*/ swiftASTGen.BridgedNullable {}
3738

3839
extension BridgedIdentifier: /*@retroactive*/ Swift.Equatable {
3940
public static func == (lhs: Self, rhs: Self) -> Bool {
@@ -79,6 +80,9 @@ extension BridgedParameterList: BridgedHasNullable {
7980
extension BridgedPatternBindingInitializer: BridgedHasNullable {
8081
typealias Nullable = BridgedNullablePatternBindingInitializer
8182
}
83+
extension BridgedArgumentList: BridgedHasNullable {
84+
typealias Nullable = BridgedNullableArgumentList
85+
}
8286

8387
public extension BridgedSourceLoc {
8488
/// Form a source location at the given absolute position in `buffer`.

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ extension ASTGenVisitor {
4848
return self.generate(initializerDecl: node).asDecl
4949
case .macroDecl:
5050
break
51-
case .macroExpansionDecl:
52-
break
51+
case .macroExpansionDecl(let node):
52+
return self.generate(macroExpansionDecl: node).asDecl
5353
case .missingDecl:
5454
break
5555
case .operatorDecl(let node):
@@ -620,6 +620,58 @@ extension ASTGenVisitor {
620620
}
621621
}
622622

623+
// MARK: - MacroExpansionDecl
624+
625+
extension ASTGenVisitor {
626+
func generate(macroExpansionDecl node: MacroExpansionDeclSyntax) -> BridgedMacroExpansionDecl {
627+
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+
}
658+
659+
let decl = BridgedMacroExpansionDecl.createParsed(
660+
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
668+
)
669+
decl.asDecl.setAttrs(attrs.attributes)
670+
671+
return decl
672+
}
673+
}
674+
623675
// MARK: - OperatorDecl
624676

625677
extension BridgedOperatorFixity {

lib/ASTGen/Sources/ASTGen/Exprs.swift

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,16 @@ func isExprMigrated(_ node: ExprSyntax) -> Bool {
4646
.discardAssignmentExpr, .declReferenceExpr, .dictionaryExpr, .doExpr,
4747
.editorPlaceholderExpr, .floatLiteralExpr, .forceUnwrapExpr, .functionCallExpr,
4848
.genericSpecializationExpr, .ifExpr, .infixOperatorExpr, .inOutExpr,
49-
.integerLiteralExpr, .isExpr, .memberAccessExpr, .nilLiteralExpr, .optionalChainingExpr,
50-
.packElementExpr, .packExpansionExpr, .patternExpr, .postfixIfConfigExpr,
49+
.integerLiteralExpr, .isExpr, .macroExpansionExpr, .memberAccessExpr, .nilLiteralExpr,
50+
.optionalChainingExpr, .packElementExpr, .packExpansionExpr, .patternExpr, .postfixIfConfigExpr,
5151
.postfixOperatorExpr, .prefixOperatorExpr, .regexLiteralExpr, .sequenceExpr,
5252
.simpleStringLiteralExpr, .subscriptCallExpr, .stringLiteralExpr, .superExpr,
5353
.switchExpr, .tryExpr, .tupleExpr, .typeExpr, .unresolvedAsExpr, .unresolvedIsExpr,
5454
.unresolvedTernaryExpr, .ternaryExpr:
5555
break
5656

5757
// Known unimplemented kinds.
58-
case .keyPathExpr, .macroExpansionExpr:
58+
case .keyPathExpr:
5959
return false
6060

6161
// Unknown expr kinds.
@@ -131,8 +131,8 @@ extension ASTGenVisitor {
131131
preconditionFailure("IsExprSyntax only appear after operator folding")
132132
case .keyPathExpr:
133133
break
134-
case .macroExpansionExpr:
135-
break
134+
case .macroExpansionExpr(let node):
135+
return self.generate(macroExpansionExpr: node).asExpr
136136
case .memberAccessExpr(let node):
137137
return self.generate(memberAccessExpr: node)
138138
case .missingExpr:
@@ -535,6 +535,49 @@ extension ASTGenVisitor {
535535
)
536536
}
537537

538+
func generate(macroExpansionExpr node: MacroExpansionExprSyntax) -> BridgedMacroExpansionExpr {
539+
let nameLoc = self.generateIdentifierAndSourceLoc(node.macroName)
540+
541+
let leftAngleLoc: BridgedSourceLoc
542+
let genericArgs: [BridgedTypeRepr]
543+
let rightAngleLoc: BridgedSourceLoc
544+
if let generics = node.genericArgumentClause {
545+
leftAngleLoc = self.generateSourceLoc(generics.leftAngle)
546+
genericArgs = generics.arguments.lazy.map {
547+
self.generate(type: $0.argument)
548+
}
549+
rightAngleLoc = self.generateSourceLoc(generics.rightAngle)
550+
} else {
551+
leftAngleLoc = nil
552+
genericArgs = []
553+
rightAngleLoc = nil
554+
}
555+
556+
let arguments: BridgedArgumentList?
557+
if (node.leftParen != nil || node.trailingClosure != nil) {
558+
arguments = self.generateArgumentList(
559+
leftParen: node.leftParen,
560+
labeledExprList: node.arguments,
561+
rightParen: node.rightParen,
562+
trailingClosure: node.trailingClosure,
563+
additionalTrailingClosures: node.additionalTrailingClosures
564+
)
565+
} else {
566+
arguments = nil
567+
}
568+
569+
return .createParsed(
570+
self.declContext,
571+
poundLoc: self.generateSourceLoc(node.pound),
572+
macroNameRef: .createParsed(.createIdentifier(nameLoc.identifier)),
573+
macroNameLoc: .createParsed(nameLoc.sourceLoc),
574+
leftAngleLoc: leftAngleLoc,
575+
genericArgs: genericArgs.lazy.bridgedArray(in: self),
576+
rightAngleLoc: rightAngleLoc,
577+
args: arguments.asNullable
578+
)
579+
}
580+
538581
func generate(memberAccessExpr node: MemberAccessExprSyntax, postfixIfConfigBaseExpr: BridgedExpr? = nil) -> BridgedExpr {
539582
let baseExpr: BridgedExpr?
540583
if let base = node.base {

0 commit comments

Comments
 (0)