diff options
author | Yuriy Glukhov <yglukhov@users.noreply.github.com> | 2018-09-07 17:30:50 +0300 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-09-07 16:30:50 +0200 |
commit | 1e6eca973d9ef19176fe26d6bba394cd5a043897 (patch) | |
tree | a44c039e26cc0bb75039c1f983aa727e2256299f | |
parent | e81fe6d32f485f721fccd87e922addc5715a5fdd (diff) | |
download | Nim-1e6eca973d9ef19176fe26d6bba394cd5a043897.tar.gz |
Fixes #8243 (#8904)
-rw-r--r-- | compiler/closureiters.nim | 19 | ||||
-rw-r--r-- | tests/iter/tyieldintry.nim | 23 |
2 files changed, 42 insertions, 0 deletions
diff --git a/compiler/closureiters.nim b/compiler/closureiters.nim index e3e9c2236..b0857e6c7 100644 --- a/compiler/closureiters.nim +++ b/compiler/closureiters.nim @@ -712,6 +712,25 @@ proc lowerStmtListExprs(ctx: var Ctx, n: PNode, needsSplit: var bool): PNode = result.add(n) + of nkBracketExpr: + var lhsNeedsSplit = false + var rhsNeedsSplit = false + n[0] = ctx.lowerStmtListExprs(n[0], lhsNeedsSplit) + n[1] = ctx.lowerStmtListExprs(n[1], rhsNeedsSplit) + if lhsNeedsSplit or rhsNeedsSplit: + needsSplit = true + result = newNodeI(nkStmtListExpr, n.info) + if lhsNeedsSplit: + let (st, ex) = exprToStmtList(n[0]) + result.add(st) + n[0] = ex + + if rhsNeedsSplit: + let (st, ex) = exprToStmtList(n[1]) + result.add(st) + n[1] = ex + result.add(n) + of nkWhileStmt: var ns = false diff --git a/tests/iter/tyieldintry.nim b/tests/iter/tyieldintry.nim index 48d05e866..6d24417a6 100644 --- a/tests/iter/tyieldintry.nim +++ b/tests/iter/tyieldintry.nim @@ -416,5 +416,28 @@ block: #8851 test(it, 1) +block: # 8243 + iterator it(): int {.closure.} = + template yieldAndSeq: seq[int] = + yield 1 + @[123, 5, 123] + + checkpoint(yieldAndSeq[1]) + + test(it, 1, 5) + +block: + iterator it(): int {.closure.} = + template yieldAndSeq: seq[int] = + yield 1 + @[123, 5, 123] + + template yieldAndNum: int = + yield 2 + 1 + + checkpoint(yieldAndSeq[yieldAndNum]) + + test(it, 1, 2, 5) echo "ok" |