summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2024-09-03 00:12:48 +0800
committerGitHub <noreply@github.com>2024-09-02 18:12:48 +0200
commitc8af0996fd74a0851ae956fbab9071579e8bf531 (patch)
tree5f5fb5f2b13315cdb08ee7d87c214a5ef24072a2 /compiler
parent5e55e16ad83483f15f5a5df7dfdccf70ed9e3e8e (diff)
downloadNim-c8af0996fd74a0851ae956fbab9071579e8bf531.tar.gz
fixes #24033; Yielding from var fails with pairs and destructuring (#24046)
fixes #24033
Diffstat (limited to 'compiler')
-rw-r--r--compiler/transf.nim12
1 files changed, 9 insertions, 3 deletions
diff --git a/compiler/transf.nim b/compiler/transf.nim
index 4061a407c..52b5fc1ff 100644
--- a/compiler/transf.nim
+++ b/compiler/transf.nim
@@ -410,9 +410,15 @@ proc transformYield(c: PTransf, n: PNode): PNode =
       result.add transform(c, v)
 
       for i in 0..<c.transCon.forStmt.len - 2:
-        let lhs = c.transCon.forStmt[i]
-        let rhs = transform(c, newTupleAccess(c.graph, tmp, i))
-        result.add(asgnTo(lhs, rhs))
+        if c.transCon.forStmt[i].kind == nkVarTuple:
+          for j in 0..<c.transCon.forStmt[i].len-1:
+            let lhs = c.transCon.forStmt[i][j]
+            let rhs = transform(c, newTupleAccess(c.graph, newTupleAccess(c.graph, tmp, i), j))
+            result.add(asgnTo(lhs, rhs))
+        else:
+          let lhs = c.transCon.forStmt[i]
+          let rhs = transform(c, newTupleAccess(c.graph, tmp, i))
+          result.add(asgnTo(lhs, rhs))
     else:
       for i in 0..<c.transCon.forStmt.len - 2:
         let lhs = c.transCon.forStmt[i]