diff options
-rw-r--r-- | compiler/vm.nim | 4 | ||||
-rw-r--r-- | tests/tools/tnimscriptwithmacro.nims | 22 | ||||
-rw-r--r-- | tests/vm/tgloballetfrommacro.nim | 13 |
3 files changed, 38 insertions, 1 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim index 31dec418f..072a1826b 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -2102,8 +2102,9 @@ proc evalMacroCall*(module: PSym; g: ModuleGraph; setupGlobalCtx(module, g) var c = PCtx g.vm + let oldMode = c.mode + c.mode = emStaticStmt c.comesFromHeuristic.line = 0'u16 - c.callsite = nOrig let start = genProc(c, sym) @@ -2142,3 +2143,4 @@ proc evalMacroCall*(module: PSym; g: ModuleGraph; if cyclicTree(result): globalError(c.config, n.info, "macro produced a cyclic tree") dec(g.config.evalMacroCounter) c.callsite = nil + c.mode = oldMode diff --git a/tests/tools/tnimscriptwithmacro.nims b/tests/tools/tnimscriptwithmacro.nims new file mode 100644 index 000000000..8b97f0769 --- /dev/null +++ b/tests/tools/tnimscriptwithmacro.nims @@ -0,0 +1,22 @@ +discard """ +cmd: "nim e $file" +output: ''' +foobar +nothing +hallo +""" + +# this test ensures that the mode is resetted correctly to repr + +import macros + +macro foobar(): void = + result = newCall(bindSym"echo", newLit("nothing")) + +echo "foobar" + +let x = 123 + +foobar() + +exec "echo hallo" diff --git a/tests/vm/tgloballetfrommacro.nim b/tests/vm/tgloballetfrommacro.nim new file mode 100644 index 000000000..14dbff1e8 --- /dev/null +++ b/tests/vm/tgloballetfrommacro.nim @@ -0,0 +1,13 @@ +discard """ +errormsg: "cannot evaluate at compile time: BUILTIN_NAMES" +line: 11 +""" + +import sets + +let BUILTIN_NAMES = toSet(["int8", "int16", "int32", "int64"]) + +macro test*(): bool = + echo "int64" notin BUILTIN_NAMES + +echo test() |