From 7c065bfadf472bd569773c98a50b8986136afb43 Mon Sep 17 00:00:00 2001 From: Araq Date: Sun, 6 Apr 2014 22:05:42 +0200 Subject: [PATCH] fixes #798 --- compiler/hlo.nim | 3 ++- tests/{patterns => trmacros}/targlist.nim | 0 tests/{patterns => trmacros}/tcse.nim | 0 tests/{patterns => trmacros}/thoist.nim | 0 tests/{patterns => trmacros}/tmatrix.nim | 0 tests/{patterns => trmacros}/tnoalias.nim | 0 tests/{patterns => trmacros}/tnoendlessrec.nim | 0 tests/{patterns => trmacros}/tor.nim | 9 ++++++++- tests/{patterns => trmacros}/tpartial.nim | 0 tests/{patterns => trmacros}/tpatterns.nim | 0 tests/{patterns => trmacros}/tstar.nim | 0 tests/{patterns => trmacros}/tstmtlist.nim | 0 12 files changed, 10 insertions(+), 2 deletions(-) rename tests/{patterns => trmacros}/targlist.nim (100%) rename tests/{patterns => trmacros}/tcse.nim (100%) rename tests/{patterns => trmacros}/thoist.nim (100%) rename tests/{patterns => trmacros}/tmatrix.nim (100%) rename tests/{patterns => trmacros}/tnoalias.nim (100%) rename tests/{patterns => trmacros}/tnoendlessrec.nim (100%) rename tests/{patterns => trmacros}/tor.nim (71%) rename tests/{patterns => trmacros}/tpartial.nim (100%) rename tests/{patterns => trmacros}/tpatterns.nim (100%) rename tests/{patterns => trmacros}/tstar.nim (100%) rename tests/{patterns => trmacros}/tstmtlist.nim (100%) diff --git a/compiler/hlo.nim b/compiler/hlo.nim index 7982d4aa19..c75d6519fe 100644 --- a/compiler/hlo.nim +++ b/compiler/hlo.nim @@ -68,7 +68,8 @@ proc hlo(c: PContext, n: PNode): PNode = result = n else: if n.kind in {nkFastAsgn, nkAsgn, nkIdentDefs, nkVarTuple} and - n.sons[0].kind == nkSym and sfGlobal in n.sons[0].sym.flags: + n.sons[0].kind == nkSym and + {sfGlobal, sfPure} * n.sons[0].sym.flags == {sfGlobal, sfPure}: # do not optimize 'var g {.global} = re(...)' again! return n result = applyPatterns(c, n) diff --git a/tests/patterns/targlist.nim b/tests/trmacros/targlist.nim similarity index 100% rename from tests/patterns/targlist.nim rename to tests/trmacros/targlist.nim diff --git a/tests/patterns/tcse.nim b/tests/trmacros/tcse.nim similarity index 100% rename from tests/patterns/tcse.nim rename to tests/trmacros/tcse.nim diff --git a/tests/patterns/thoist.nim b/tests/trmacros/thoist.nim similarity index 100% rename from tests/patterns/thoist.nim rename to tests/trmacros/thoist.nim diff --git a/tests/patterns/tmatrix.nim b/tests/trmacros/tmatrix.nim similarity index 100% rename from tests/patterns/tmatrix.nim rename to tests/trmacros/tmatrix.nim diff --git a/tests/patterns/tnoalias.nim b/tests/trmacros/tnoalias.nim similarity index 100% rename from tests/patterns/tnoalias.nim rename to tests/trmacros/tnoalias.nim diff --git a/tests/patterns/tnoendlessrec.nim b/tests/trmacros/tnoendlessrec.nim similarity index 100% rename from tests/patterns/tnoendlessrec.nim rename to tests/trmacros/tnoendlessrec.nim diff --git a/tests/patterns/tor.nim b/tests/trmacros/tor.nim similarity index 71% rename from tests/patterns/tor.nim rename to tests/trmacros/tor.nim index 833418919e..dc72a96cd6 100644 --- a/tests/patterns/tor.nim +++ b/tests/trmacros/tor.nim @@ -1,6 +1,7 @@ discard """ output: '''3060 -true''' +true +3''' """ template arithOps: expr = (`+` | `-` | `*`) @@ -19,3 +20,9 @@ var c = false a = b and a echo a + +# bug #798 +template t012{(0|1|2){x}}(x: expr): expr = x+1 +let z = 1 +# outputs 3 thanks to fixpoint iteration: +echo z diff --git a/tests/patterns/tpartial.nim b/tests/trmacros/tpartial.nim similarity index 100% rename from tests/patterns/tpartial.nim rename to tests/trmacros/tpartial.nim diff --git a/tests/patterns/tpatterns.nim b/tests/trmacros/tpatterns.nim similarity index 100% rename from tests/patterns/tpatterns.nim rename to tests/trmacros/tpatterns.nim diff --git a/tests/patterns/tstar.nim b/tests/trmacros/tstar.nim similarity index 100% rename from tests/patterns/tstar.nim rename to tests/trmacros/tstar.nim diff --git a/tests/patterns/tstmtlist.nim b/tests/trmacros/tstmtlist.nim similarity index 100% rename from tests/patterns/tstmtlist.nim rename to tests/trmacros/tstmtlist.nim