From 159a2ff955e7160bbb9b80c8048efea4826363e6 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Mon, 4 Jan 2016 02:04:59 +0100 Subject: [PATCH] fixes #3636 --- compiler/ast.nim | 2 +- compiler/lambdalifting.nim | 21 +++++++++++++-------- compiler/semexprs.nim | 1 + tests/iter/twrap_walkdir.nim | 16 ++++++++++++++++ 4 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 tests/iter/twrap_walkdir.nim diff --git a/compiler/ast.nim b/compiler/ast.nim index f34358788a..2ce0afcc3d 100644 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -932,7 +932,7 @@ const skMacro, skTemplate, skConverter, skEnumField, skLet, skStub, skAlias} PersistentNodeFlags*: TNodeFlags = {nfBase2, nfBase8, nfBase16, nfDotSetter, nfDotField, - nfIsRef, nfIsCursor} + nfIsRef, nfIsCursor, nfLL} namePos* = 0 patternPos* = 1 # empty except for term rewriting macros genericParamsPos* = 2 diff --git a/compiler/lambdalifting.nim b/compiler/lambdalifting.nim index 9b83204fe9..9c64037a86 100644 --- a/compiler/lambdalifting.nim +++ b/compiler/lambdalifting.nim @@ -633,7 +633,6 @@ proc wrapIterBody(n: PNode; owner: PSym): PNode = getStateField(owner), info)) stateAsgnStmt.add(newIntTypeNode(nkIntLit, -1, getSysType(tyInt))) result.add(stateAsgnStmt) - result.flags.incl nfLL proc symToClosure(n: PNode; owner: PSym; d: DetectionPass; c: var LiftingPass): PNode = @@ -671,6 +670,8 @@ proc liftCapturedVars(n: PNode; owner: PSym; d: DetectionPass; let s = n.sym if isInnerProc(s): if not c.processed.containsOrIncl(s.id): + #if s.name.s == "temp": + # echo renderTree(s.getBody, {renderIds}) let body = wrapIterBody(liftCapturedVars(s.getBody, s, d, c), s) if c.envvars.getOrDefault(s.id).isNil: s.ast.sons[bodyPos] = body @@ -696,13 +697,17 @@ proc liftCapturedVars(n: PNode; owner: PSym; d: DetectionPass; m.typ = n.typ result = liftCapturedVars(m, owner, d, c) else: - if owner.isIterator and n.kind == nkYieldStmt: - result = transformYield(n, owner, d, c) - elif owner.isIterator and n.kind == nkReturnStmt: - result = transformReturn(n, owner, d, c) - else: - for i in 0..