[ASTGen] Handle trailing where clause in macro declarations

This commit is contained in:
Rintaro Ishizaki
2025-03-16 11:41:10 -07:00
parent 3cdcab23df
commit ddd5b12661
4 changed files with 19 additions and 5 deletions

View File

@@ -1602,13 +1602,15 @@ BridgedAssociatedTypeDecl BridgedAssociatedTypeDecl_createParsed(
SWIFT_NAME(
"BridgedMacroDecl.createParsed(_:declContext:macroKeywordLoc:name:nameLoc:"
"genericParamList:paramList:arrowLoc:resultType:definition:)")
"genericParamList:paramList:arrowLoc:resultType:definition:"
"genericWhereClause:)")
BridgedMacroDecl BridgedMacroDecl_createParsed(
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
BridgedSourceLoc cMacroLoc, BridgedIdentifier cName,
BridgedSourceLoc cNameLoc, BridgedNullableGenericParamList cGenericParams,
BridgedParameterList cParams, BridgedSourceLoc cArrowLoc,
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition);
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition,
BridgedNullableTrailingWhereClause genericWhereClause);
SWIFT_NAME("BridgedMacroExpansionDecl.createParsed(_:poundLoc:macroNameRef:"
"macroNameLoc:leftAngleLoc:genericArgs:rightAngleLoc:args:)")

View File

@@ -290,15 +290,18 @@ BridgedMacroDecl BridgedMacroDecl_createParsed(
BridgedSourceLoc cMacroLoc, BridgedIdentifier cName,
BridgedSourceLoc cNameLoc, BridgedNullableGenericParamList cGenericParams,
BridgedParameterList cParams, BridgedSourceLoc cArrowLoc,
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition) {
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition,
BridgedNullableTrailingWhereClause genericWhereClause) {
ASTContext &context = cContext.unbridged();
auto *params = cParams.unbridged();
DeclName fullName = DeclName(context, cName.unbridged(), params);
return new (context)
auto *decl = new (context)
MacroDecl(cMacroLoc.unbridged(), fullName, cNameLoc.unbridged(),
cGenericParams.unbridged(), params, cArrowLoc.unbridged(),
cResultType.unbridged(), cDefinition.unbridged(),
cDeclContext.unbridged());
decl->setTrailingWhereClause(genericWhereClause.unbridged());
return decl;
}
BridgedTypeAliasDecl BridgedTypeAliasDecl_createParsed(

View File

@@ -820,9 +820,11 @@ extension ASTGenVisitor {
paramList: self.generate(functionParameterClause: node.signature.parameterClause, for: .macro),
arrowLoc: self.generateSourceLoc(node.signature.returnClause?.arrow),
resultType: self.generate(type: node.signature.returnClause?.type),
definition: self.generate(expr: node.definition?.value)
definition: self.generate(expr: node.definition?.value),
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause)
)
decl.asDecl.attachParsedAttrs(attrs.attributes)
return decl;
}
}

View File

@@ -146,3 +146,10 @@ struct S3 {
self._x = MyWrapperThingy(storage: x)
}
}
protocol MyType {
associatedtype Value
associatedtype Entity
}
@attached(peer, names: named(bar))
macro Wrapper<Value>(get: (Value.Entity) async throws -> Value.Value) = #externalMacro(module: "MacroDefinition", type: "WrapperMacro") where Value: MyType