Macros 从发射杂注中删除堆栈跟踪
如何创建不添加stacktrace的emit宏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
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
。