diff options
-rw-r--r-- | compiler/closureiters.nim | 4 | ||||
-rw-r--r-- | tests/iter/tyieldintry.nim | 14 |
2 files changed, 16 insertions, 2 deletions
diff --git a/compiler/closureiters.nim b/compiler/closureiters.nim index c140b5464..730350f76 100644 --- a/compiler/closureiters.nim +++ b/compiler/closureiters.nim @@ -601,7 +601,7 @@ proc lowerStmtListExprs(ctx: var Ctx, n: PNode, needsSplit: var bool): PNode = result.add(n) result.add(ctx.newEnvVarAccess(tmp)) - of nkCallKinds: + of nkCallKinds, nkChckRange: var ns = false for i in 0 ..< n.len: n[i] = ctx.lowerStmtListExprs(n[i], ns) @@ -1286,7 +1286,7 @@ proc transformClosureIterator*(g: ModuleGraph; fn: PSym, n: PNode): PNode = ctx.fn = fn if getEnvParam(fn).isNil: - # Lambda lifting was not done yet. Use temporary :state sym, which + # Lambda lifting was not done yet. Use temporary :state sym, which will # be handled specially by lambda lifting. Local temp vars (if needed) # should folllow the same logic. ctx.stateVarSym = newSym(skVar, getIdent(ctx.g.cache, ":state"), fn, fn.info) diff --git a/tests/iter/tyieldintry.nim b/tests/iter/tyieldintry.nim index 32eef494e..62c16c741 100644 --- a/tests/iter/tyieldintry.nim +++ b/tests/iter/tyieldintry.nim @@ -467,5 +467,19 @@ block: #9716 doAssert(b == "hello") test(it, 1, 1, 1) +block: # nnkChckRange + type Foo = distinct uint64 + template yieldDistinct: Foo = + yield 2 + Foo(0) + + iterator it(): int {.closure.} = + yield 1 + var a: int + a = int(yieldDistinct()) + yield 3 + + test(it, 1, 2, 3) + echo "ok" |