summary refs log tree commit diff stats
diff options
context:
space:
mode:
authornc-x <neelesh.chandola@outlook.com>2019-05-05 15:52:41 +0530
committerAndreas Rumpf <rumpf_a@web.de>2019-05-05 12:22:41 +0200
commite42c304e4ae623ea8dea9594b531f119bb4142e9 (patch)
tree283c96baa6b4ab443e83cab7e71cde88879122b4
parent094d71cb6f6fbdedfd43a2bc6c66b227aedf1ddf (diff)
downloadNim-e42c304e4ae623ea8dea9594b531f119bb4142e9.tar.gz
Fix loop tuple unpacking in templates (#11174)
* Fix loop tuple unpacking in templates

* Add test
-rw-r--r--compiler/semtempl.nim6
-rw-r--r--tests/tuples/tfortupleunpack.nim9
2 files changed, 14 insertions, 1 deletions
diff --git a/compiler/semtempl.nim b/compiler/semtempl.nim
index 2854c90ae..3f647cdc1 100644
--- a/compiler/semtempl.nim
+++ b/compiler/semtempl.nim
@@ -372,7 +372,11 @@ proc semTemplBody(c: var TemplCtx, n: PNode): PNode =
     openScope(c)
     n.sons[L-2] = semTemplBody(c, n.sons[L-2])
     for i in countup(0, L - 3):
-      addLocalDecl(c, n.sons[i], skForVar)
+      if n[i].kind == nkVarTuple:
+        for j in 0 ..< sonsLen(n[i])-1:
+          addLocalDecl(c, n[i][j], skForVar)
+      else:
+        addLocalDecl(c, n.sons[i], skForVar)
     openScope(c)
     n.sons[L-1] = semTemplBody(c, n.sons[L-1])
     closeScope(c)
diff --git a/tests/tuples/tfortupleunpack.nim b/tests/tuples/tfortupleunpack.nim
index 9aeb7c5d6..e222a1ae6 100644
--- a/tests/tuples/tfortupleunpack.nim
+++ b/tests/tuples/tfortupleunpack.nim
@@ -9,6 +9,7 @@ output: '''
 @[(88, 99, 11), (88, 99, 11)]
 @[(7, 6, -28), (7, 6, -28)]
 12
+110100
 '''
 """
 
@@ -41,3 +42,11 @@ proc test[n]() =
   for (a,b) in @[(1,2)]:
     echo a,b
 test[string]()
+
+iterator tuples: (int, (int, int)) = yield (1,(10, 100))
+
+template t11164 =
+  for i, (a, b) in tuples():
+    echo i, a , b
+
+t11164()