Macros nim-自定义宏/pragma以获取完整模块的ast,但获取;无法附加自定义杂注";
我想通过nim访问完整模块(文件)的AST。我发现,任何宏都可以用作自定义pragma,所以我在foo.nim文件中做了如下操作:Macros nim-自定义宏/pragma以获取完整模块的ast,但获取;无法附加自定义杂注";,macros,metaprogramming,nim-lang,Macros,Metaprogramming,Nim Lang,我想通过nim访问完整模块(文件)的AST。我发现,任何宏都可以用作自定义pragma,所以我在foo.nim文件中做了如下操作: import macros macro getAst(ast: untyped): untyped = echo "ast = ", treeRepr(ast) {.getAst.} # <-- This should invoke the getAst() macro with the AST of the file proc
import macros
macro getAst(ast: untyped): untyped =
echo "ast = ", treeRepr(ast)
{.getAst.} # <-- This should invoke the getAst() macro with the AST of the file
proc hello() =
echo "hello world"
无法将自定义杂注附加到文件,但您可以这样做
proc hello() {.getAst.} =
echo "hello world"
将pragma附加到进程。我不确定,但似乎{.push.}
不适用于宏,只适用于模板
杂注,如下所示:
template dbIgnore {.pragma.}
{.push dbIgnore.}
因此,最好的选择是使用pragma注释所有需要的过程
我知道可以为每个进程添加pragma,但我想要的是将所有进程添加到“全局”映射中。那可能吗?据我所知,我只会在进程上使用pragma时获得带注释进程的AST,我不知道如何从pragma宏中向“全局”AST添加内容。不可能获得全局AST,至少如果没有一些非常粗糙的术语重写解决方案。最好的选择是只使用pragma注释procs。
template dbIgnore {.pragma.}
{.push dbIgnore.}