diff options
author | Araq <rumpf_a@web.de> | 2015-02-01 02:27:19 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2015-02-01 02:27:39 +0100 |
commit | ecc3c3bd03a1342359d454638d0c7e72338cff5a (patch) | |
tree | d131d4afb2809ec0cf3bbdc0e412edb4711b491c /compiler | |
parent | 3b45ac44e16ffa5081cc8c0706d8af1c58df2660 (diff) | |
download | Nim-ecc3c3bd03a1342359d454638d0c7e72338cff5a.tar.gz |
fixes #2023
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/lambdalifting.nim | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/compiler/lambdalifting.nim b/compiler/lambdalifting.nim index 6fa95fda2..b7dc277a4 100644 --- a/compiler/lambdalifting.nim +++ b/compiler/lambdalifting.nim @@ -719,7 +719,7 @@ proc outerProcSons(o: POuterContext, n: PNode, it: TIter) = let x = transformOuterProc(o, n.sons[i], it) if x != nil: n.sons[i] = x -proc liftIterSym(n: PNode): PNode = +proc liftIterSym(n: PNode; owner: PSym): PNode = # transforms (iter) to (let env = newClosure[iter](); (iter, env)) let iter = n.sym assert iter.kind == skClosureIterator @@ -727,7 +727,7 @@ proc liftIterSym(n: PNode): PNode = result = newNodeIT(nkStmtListExpr, n.info, n.typ) let hp = getHiddenParam(iter) - let env = newSym(skLet, iter.name, iter.owner, iter.info) + let env = newSym(skLet, iter.name, owner, n.info) env.typ = hp.typ env.flags = hp.flags var v = newNodeI(nkVarSection, n.info) @@ -867,7 +867,7 @@ proc transformOuterProc(o: POuterContext, n: PNode; it: TIter): PNode = # XXX why doesn't this work? var closure = PEnv(idTableGet(o.lambdasToEnv, local)) if closure.isNil: - return liftIterSym(n) + return liftIterSym(n, o.fn) else: let createdVar = generateIterClosureCreation(o, closure, closure.attachedNode) |