Skip to content

Commit ddd5b12

Browse files
committed
[ASTGen] Handle trailing where clause in macro declarations
1 parent 3cdcab2 commit ddd5b12

File tree

4 files changed

+19
-5
lines changed

4 files changed

+19
-5
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,13 +1602,15 @@ BridgedAssociatedTypeDecl BridgedAssociatedTypeDecl_createParsed(
16021602

16031603
SWIFT_NAME(
16041604
"BridgedMacroDecl.createParsed(_:declContext:macroKeywordLoc:name:nameLoc:"
1605-
"genericParamList:paramList:arrowLoc:resultType:definition:)")
1605+
"genericParamList:paramList:arrowLoc:resultType:definition:"
1606+
"genericWhereClause:)")
16061607
BridgedMacroDecl BridgedMacroDecl_createParsed(
16071608
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
16081609
BridgedSourceLoc cMacroLoc, BridgedIdentifier cName,
16091610
BridgedSourceLoc cNameLoc, BridgedNullableGenericParamList cGenericParams,
16101611
BridgedParameterList cParams, BridgedSourceLoc cArrowLoc,
1611-
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition);
1612+
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition,
1613+
BridgedNullableTrailingWhereClause genericWhereClause);
16121614

16131615
SWIFT_NAME("BridgedMacroExpansionDecl.createParsed(_:poundLoc:macroNameRef:"
16141616
"macroNameLoc:leftAngleLoc:genericArgs:rightAngleLoc:args:)")

lib/AST/Bridging/DeclBridging.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,15 +290,18 @@ BridgedMacroDecl BridgedMacroDecl_createParsed(
290290
BridgedSourceLoc cMacroLoc, BridgedIdentifier cName,
291291
BridgedSourceLoc cNameLoc, BridgedNullableGenericParamList cGenericParams,
292292
BridgedParameterList cParams, BridgedSourceLoc cArrowLoc,
293-
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition) {
293+
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition,
294+
BridgedNullableTrailingWhereClause genericWhereClause) {
294295
ASTContext &context = cContext.unbridged();
295296
auto *params = cParams.unbridged();
296297
DeclName fullName = DeclName(context, cName.unbridged(), params);
297-
return new (context)
298+
auto *decl = new (context)
298299
MacroDecl(cMacroLoc.unbridged(), fullName, cNameLoc.unbridged(),
299300
cGenericParams.unbridged(), params, cArrowLoc.unbridged(),
300301
cResultType.unbridged(), cDefinition.unbridged(),
301302
cDeclContext.unbridged());
303+
decl->setTrailingWhereClause(genericWhereClause.unbridged());
304+
return decl;
302305
}
303306

304307
BridgedTypeAliasDecl BridgedTypeAliasDecl_createParsed(

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -820,9 +820,11 @@ extension ASTGenVisitor {
820820
paramList: self.generate(functionParameterClause: node.signature.parameterClause, for: .macro),
821821
arrowLoc: self.generateSourceLoc(node.signature.returnClause?.arrow),
822822
resultType: self.generate(type: node.signature.returnClause?.type),
823-
definition: self.generate(expr: node.definition?.value)
823+
definition: self.generate(expr: node.definition?.value),
824+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause)
824825
)
825826
decl.asDecl.attachParsedAttrs(attrs.attributes)
827+
826828
return decl;
827829
}
828830
}

test/ASTGen/macros.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,10 @@ struct S3 {
146146
self._x = MyWrapperThingy(storage: x)
147147
}
148148
}
149+
150+
protocol MyType {
151+
associatedtype Value
152+
associatedtype Entity
153+
}
154+
@attached(peer, names: named(bar))
155+
macro Wrapper<Value>(get: (Value.Entity) async throws -> Value.Value) = #externalMacro(module: "MacroDefinition", type: "WrapperMacro") where Value: MyType

0 commit comments

Comments
 (0)