Skip to content

[macros] Further improve specializing generics in macros #2476

Open
@ktoso

Description

@ktoso

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions