`Inject` proc 参数到模板 body

`Inject` proc argument into template body

给定以下代码段:

template myProc(body: untyped) =
  template doStuff(stuffBody: untyped) = 
    proc doStuffArg(a: int) = stuffBody

  body

myProc:
  doStuff:
    echo a

doStuffArg(123)

只要 a 没有在 doStuff body 中使用,代码就可以正常工作。有没有办法让 doStuff body 意识到这个论点?

在此特定示例中,两个模板都必须标记为脏,以防止重写旨在使模板 hygienic:

的 AST
template myProc(body: untyped) {.dirty.} =
  template doStuff(stuffBody: untyped) {.dirty.} =
    proc doStuffArg(a: int) = stuffBody

  body

myProc:
  doStuff:
    echo a

doStuffArg(123)