Macros 从发射杂注中删除堆栈跟踪

Macros 从发射杂注中删除堆栈跟踪,macros,nim-lang,Macros,Nim Lang,如何创建不添加stacktrace的emit宏 import macros macro emitWithoutStacktrace(): stmt = result = newStmtList() result.add quote do: {.push stacktrace: off.} result.add(newNimNode(nnkPragma).add(newNimNode(nnkExprColonExpr).add(newIdentNode("emit"), n

如何创建不添加stacktrace的emit宏

import macros

macro emitWithoutStacktrace(): stmt = 
  result = newStmtList()
  result.add quote do:
    {.push stacktrace: off.}
  result.add(newNimNode(nnkPragma).add(newNimNode(nnkExprColonExpr).add(newIdentNode("emit"), newStrLitNode("foobar"))))
  result.add quote do:
    {.pop stacktrace: off.}

proc main = 
  emitWithoutStacktrace()

main()
产生

N_NIMCALL(void, main_104042)(void) {
    nimfr("main", "test.nim")
    nimln(7, "test.nim");
    foobar
    popFrame();
}
我想去哪里

N_NIMCALL(void, main_104042)(void) {
    foobar
    popFrame();
}

如果没有任何其他编译器参数,如
--stacktrace:off

,请注意,此代码也会发生同样的情况:

proc main =
  {.push stacktrace: off.}
  echo "hi"
  {.pop.}

main()
相反,您需要用push/pop环绕整个过程:

{.push stacktrace: off.}
proc main =
  echo "hi"
{.pop.}

main()

我昨天刚在尝试执行
{.push rangechecks:on.}

{.push linedir:off.}
时注意到了这一点,它应该可以工作,但不能工作。也许这是个bug?@user60561,不,linedir不起作用。还有
nimln