fixes more regressions

This commit is contained in:
Andreas Rumpf 2016-01-13 03:03:59 +01:00
commit d0709cc758
3 changed files with 80 additions and 21 deletions

View file

@ -221,7 +221,7 @@ proc interestingIterVar(s: PSym): bool {.inline.} =
# closure iterators quite a bit.
result = s.kind in {skVar, skLet, skTemp, skForVar} and sfGlobal notin s.flags
template isIterator(owner: PSym): bool =
template isIterator*(owner: PSym): bool =
owner.kind == skIterator and owner.typ.callConv == ccClosure
proc liftIterSym*(n: PNode; owner: PSym): PNode =
@ -243,6 +243,20 @@ proc liftIterSym*(n: PNode; owner: PSym): PNode =
result.add newCall(getSysSym"internalNew", envAsNode)
result.add makeClosure(iter, envAsNode, n.info)
proc freshVarForClosureIter*(s, owner: PSym): PNode =
let envParam = getHiddenParam(owner)
let obj = envParam.typ.lastSon
addField(obj, s)
var access = newSymNode(envParam)
assert obj.kind == tyObject
let field = getFieldFromObj(obj, s)
if field != nil:
result = rawIndirectAccess(access, field, s.info)
else:
localError(s.info, "internal error: cannot generate fresh variable")
result = access
# ------------------ new stuff -------------------------------------------
proc markAsClosure(owner: PSym; n: PNode) =