summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorcooldome <cdome@bk.ru>2018-07-18 14:54:44 +0200
committerAndreas Rumpf <rumpf_a@web.de>2018-07-18 14:54:44 +0200
commita651809411b9b7f2d909f3ccfeeca844210a14de (patch)
tree6b69ad055c5221acdf388c1feec25ae0a5dc628e
parent6eedac3207cad9f7b4bfe8d631a9373a91b85846 (diff)
downloadNim-a651809411b9b7f2d909f3ccfeeca844210a14de.tar.gz
Fixes #8343, Fixes #8344 (#8347)
-rw-r--r--compiler/renderer.nim8
-rw-r--r--tests/macros/tmacrostmt.nim17
2 files changed, 19 insertions, 6 deletions
diff --git a/compiler/renderer.nim b/compiler/renderer.nim
index 83cf288ff..ae5b05b18 100644
--- a/compiler/renderer.nim
+++ b/compiler/renderer.nim
@@ -627,11 +627,12 @@ proc gstmts(g: var TSrcGen, n: PNode, c: TContext, doIndent=true) =
       gcoms(g)
     if doIndent: dedent(g)
   else:
-    if rfLongMode in c.flags: indentNL(g)
+    indentNL(g)
     gsub(g, n)
     gcoms(g)
+    dedent(g)
     optNL(g)
-    if rfLongMode in c.flags: dedent(g)
+
 
 proc gif(g: var TSrcGen, n: PNode) =
   var c: TContext
@@ -785,10 +786,7 @@ proc gblock(g: var TSrcGen, n: PNode) =
   if longMode(g, n) or (lsub(g, n.sons[1]) + g.lineLen > MaxLineLen):
     incl(c.flags, rfLongMode)
   gcoms(g)
-  # XXX I don't get why this is needed here! gstmts should already handle this!
-  indentNL(g)
   gstmts(g, n.sons[1], c)
-  dedent(g)
 
 proc gstaticStmt(g: var TSrcGen, n: PNode) =
   var c: TContext
diff --git a/tests/macros/tmacrostmt.nim b/tests/macros/tmacrostmt.nim
index a6e1e66dd..abb4cc050 100644
--- a/tests/macros/tmacrostmt.nim
+++ b/tests/macros/tmacrostmt.nim
@@ -43,4 +43,19 @@ macro repr_and_parse(fn: typed): typed =
   echo fn_impl.repr
   result = parseStmt(fn_impl.repr)
 
-repr_and_parse(f)
\ No newline at end of file
+repr_and_parse(f)
+
+
+#------------------------------------
+# bugs #8343 and #8344 
+proc one_if_proc(x, y : int): int =
+  if x < y: result = x
+  else: result = y
+
+proc test_block(x, y : int): int =
+  block label:
+    result = x
+    result = y
+
+repr_and_parse(one_if_proc)
+repr_and_parse(test_block)