diff options
author | Araq <rumpf_a@web.de> | 2014-06-30 22:24:08 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-06-30 22:24:08 +0200 |
commit | 0339b9d386bd0efa3c31bd05c25cd9ed0f1c7dd5 (patch) | |
tree | c6e28c8401a78e5d9fd04fec89a65e2cfbe51681 | |
parent | b89495ef0f6bb60a3296fbaa7c4397dcd269f73d (diff) | |
download | Nim-0339b9d386bd0efa3c31bd05c25cd9ed0f1c7dd5.tar.gz |
fixes #1319
-rw-r--r-- | compiler/transf.nim | 5 | ||||
-rw-r--r-- | tests/macros/tbindsym.nim | 25 |
2 files changed, 29 insertions, 1 deletions
diff --git a/compiler/transf.nim b/compiler/transf.nim index fb5e321b6..dece1ac18 100644 --- a/compiler/transf.nim +++ b/compiler/transf.nim @@ -546,7 +546,7 @@ proc flattenTree(root: PNode): PNode = flattenTreeAux(result, root, op) else: result = root - + proc transformCall(c: PTransf, n: PNode): PTransNode = var n = flattenTree(n) var op = getMergeOp(n) @@ -565,6 +565,9 @@ proc transformCall(c: PTransf, n: PNode): PTransNode = inc(j) add(result, a.PTransNode) if len(result) == 2: result = result[1] + elif getMagic(n) == mNBindSym: + # for bindSym(myconst) we MUST NOT perform constant folding: + result = n.PTransNode else: let s = transformSons(c, n).PNode # bugfix: check after 'transformSons' if it's still a method call: diff --git a/tests/macros/tbindsym.nim b/tests/macros/tbindsym.nim new file mode 100644 index 000000000..e1e3b5112 --- /dev/null +++ b/tests/macros/tbindsym.nim @@ -0,0 +1,25 @@ +discard """ + output: '''TFoo +TBar''' +""" + +# bug #1319 + +import macros + +type + TTextKind = enum + TFoo, TBar + +macro test: stmt = + var x = @[TFoo, TBar] + result = newStmtList() + for i in x: + result.add newCall(newIdentNode("echo"), + case i + of TFoo: + bindSym("TFoo") + of TBar: + bindSym("TBar")) + +test() |