summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-06-30 22:24:08 +0200
committerAraq <rumpf_a@web.de>2014-06-30 22:24:08 +0200
commit0339b9d386bd0efa3c31bd05c25cd9ed0f1c7dd5 (patch)
treec6e28c8401a78e5d9fd04fec89a65e2cfbe51681
parentb89495ef0f6bb60a3296fbaa7c4397dcd269f73d (diff)
downloadNim-0339b9d386bd0efa3c31bd05c25cd9ed0f1c7dd5.tar.gz
fixes #1319
-rw-r--r--compiler/transf.nim5
-rw-r--r--tests/macros/tbindsym.nim25
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()