simple closure iterator calling closure iterator works; refs #3837
This commit is contained in:
parent
e1828733f1
commit
39b25cf4dc
2 changed files with 29 additions and 9 deletions
|
|
@ -240,16 +240,22 @@ proc liftIterSym*(n: PNode; owner: PSym): PNode =
|
||||||
result = newNodeIT(nkStmtListExpr, n.info, n.typ)
|
result = newNodeIT(nkStmtListExpr, n.info, n.typ)
|
||||||
|
|
||||||
let hp = getHiddenParam(iter)
|
let hp = getHiddenParam(iter)
|
||||||
let env = newSym(skLet, iter.name, owner, n.info)
|
var env: PNode
|
||||||
env.typ = hp.typ
|
if owner.isIterator:
|
||||||
env.flags = hp.flags
|
let it = getHiddenParam(owner)
|
||||||
|
addUniqueField(it.typ.sons[0], hp)
|
||||||
|
env = indirectAccess(newSymNode(it), hp, hp.info)
|
||||||
|
else:
|
||||||
|
let e = newSym(skLet, iter.name, owner, n.info)
|
||||||
|
e.typ = hp.typ
|
||||||
|
e.flags = hp.flags
|
||||||
|
env = newSymNode(e)
|
||||||
var v = newNodeI(nkVarSection, n.info)
|
var v = newNodeI(nkVarSection, n.info)
|
||||||
addVar(v, newSymNode(env))
|
addVar(v, env)
|
||||||
result.add(v)
|
result.add(v)
|
||||||
# add 'new' statement:
|
# add 'new' statement:
|
||||||
let envAsNode = env.newSymNode
|
result.add newCall(getSysSym"internalNew", env)
|
||||||
result.add newCall(getSysSym"internalNew", envAsNode)
|
result.add makeClosure(iter, env, n.info)
|
||||||
result.add makeClosure(iter, envAsNode, n.info)
|
|
||||||
|
|
||||||
proc freshVarForClosureIter*(s, owner: PSym): PNode =
|
proc freshVarForClosureIter*(s, owner: PSym): PNode =
|
||||||
let envParam = getHiddenParam(owner)
|
let envParam = getHiddenParam(owner)
|
||||||
|
|
|
||||||
14
tests/iter/t2closureiters.nim
Normal file
14
tests/iter/t2closureiters.nim
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
discard """
|
||||||
|
output: '''1'''
|
||||||
|
"""
|
||||||
|
# bug #3837
|
||||||
|
|
||||||
|
iterator t1(): int {.closure.} =
|
||||||
|
yield 1
|
||||||
|
|
||||||
|
iterator t2(): int {.closure.} =
|
||||||
|
for i in t1():
|
||||||
|
yield i
|
||||||
|
|
||||||
|
for i in t2():
|
||||||
|
echo $i
|
||||||
Loading…
Add table
Add a link
Reference in a new issue