swiftlang/swift-syntax

[macros] Further improve specializing generics in macros

Opened this issue · 1 comments

Description

In #2450 we introduced

@freestanding(expression)
public macro checkGeneric_root<DAS>() = #externalMacro(module: "MacroDefinition", type: "GenericToVoidMacro")

@freestanding(expression)
public macro checkGeneric<DAS>() = #checkGeneric_root<DAS>()

such that the DAS gets replaced in every expansion:

checkGeneric<String> -> checkGeneric_root<String>

but the following cases are not replaced yet:

Would it make sense to specialize macros with types that aren’t part of the second-level macro? Ie. would the following make sense?

macro gen<T>(a: T) = #externalMacro …
macro genString(a: String) = #gen<String>(a: a)

And then #genString(a: "x") would have the intermediate expansion step #gen(a: "x")


Similarly, would it make sense to allow generic nesting in a second-level macro definition? Ie. would something like the following make sense?

macro gen<T>(a: T) = #externalMacro …
macro genArray<T>(a: [T]) = #gen<Array<T>>(a: a)

And then #genArray(a: [1]) would have the intermediate expansion step #gen<Array>(a: [1])


#2450 (comment)

Steps to Reproduce

No response

Radar

rdar://122364628

I wanted to work on this issue but I had difficulties understanding what exactly the issue is. May anyone familiar with the issue give a brief explanation for me?