diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2024-09-03 00:12:48 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-02 18:12:48 +0200 |
commit | c8af0996fd74a0851ae956fbab9071579e8bf531 (patch) | |
tree | 5f5fb5f2b13315cdb08ee7d87c214a5ef24072a2 /compiler | |
parent | 5e55e16ad83483f15f5a5df7dfdccf70ed9e3e8e (diff) | |
download | Nim-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.nim | 12 |
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] |