diff options
author | Arne Döring <arne.doering@gmx.net> | 2019-08-08 16:57:06 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-08-08 16:57:06 +0200 |
commit | 44e7a7b6c2b37c0632cc030c0c90df4d92c50088 (patch) | |
tree | 683640188a37593732a11acd531632a283eb919a /tests/macros | |
parent | fda51b6ca2040ee3a6362291da872a7fbfe2b8e2 (diff) | |
download | Nim-44e7a7b6c2b37c0632cc030c0c90df4d92c50088.tar.gz |
Lock semchecked ast for macros (#11883) [bugfix]
* reject to modify type checked AST * add flag to back out * Introduce legacy feature set.
Diffstat (limited to 'tests/macros')
-rw-r--r-- | tests/macros/tlocktypednode1.nim | 12 | ||||
-rw-r--r-- | tests/macros/tlocktypednode2.nim | 12 | ||||
-rw-r--r-- | tests/macros/tlocktypednode3.nim | 15 | ||||
-rw-r--r-- | tests/macros/tmacro7.nim | 11 |
4 files changed, 44 insertions, 6 deletions
diff --git a/tests/macros/tlocktypednode1.nim b/tests/macros/tlocktypednode1.nim new file mode 100644 index 000000000..f760c7cf1 --- /dev/null +++ b/tests/macros/tlocktypednode1.nim @@ -0,0 +1,12 @@ +discard """ +errormsg: "typechecked nodes may not be modified" +""" + +import macros + +macro doSomething(arg: typed): untyped = + echo arg.treeREpr + result = arg + result.add newCall(bindSym"echo", newLit(1)) + +doSomething((echo(1); echo(2))) diff --git a/tests/macros/tlocktypednode2.nim b/tests/macros/tlocktypednode2.nim new file mode 100644 index 000000000..e921772b0 --- /dev/null +++ b/tests/macros/tlocktypednode2.nim @@ -0,0 +1,12 @@ +discard """ +errormsg: "typechecked nodes may not be modified" +""" + +import macros + +macro doSomething(arg: typed): untyped = + echo arg.treeREpr + result = arg + result[0] = newCall(bindSym"echo", newLit(1)) + +doSomething((echo(1); echo(2))) diff --git a/tests/macros/tlocktypednode3.nim b/tests/macros/tlocktypednode3.nim new file mode 100644 index 000000000..0eb9d4467 --- /dev/null +++ b/tests/macros/tlocktypednode3.nim @@ -0,0 +1,15 @@ +discard """ +errormsg: "typechecked nodes may not be modified" +""" + +import macros + +macro doSomething(arg: typed): untyped = + echo arg.treeREpr + result = arg + result.add( + newCall(bindSym"echo", newLit(3)), + newCall(bindSym"echo", newLit(1)) + ) + +doSomething((echo(1); echo(2))) diff --git a/tests/macros/tmacro7.nim b/tests/macros/tmacro7.nim index 3d450c291..602191506 100644 --- a/tests/macros/tmacro7.nim +++ b/tests/macros/tmacro7.nim @@ -1,19 +1,20 @@ discard """ - output: '''calling!stuff +output: ''' +calling!stuff calling!stuff ''' - joinable: false +disabled: true """ +# this test modifies an already semchecked ast (bad things happen) +# this test relies on the bug #4547 # issue #7792 import macros - proc callProc(str: string) = echo "calling!" & str - macro testMacro(code: typed): untyped = let stmtList = newNimNode(nnkStmtList) @@ -27,11 +28,9 @@ macro testMacro(code: typed): untyped = result = newEmptyNode() - proc main() {.testMacro.} = echo "test" echo "test2" - when isMainModule: main() |