diff --git a/compiler/transf.nim b/compiler/transf.nim index 34235a1099..ba9dbacaae 100644 --- a/compiler/transf.nim +++ b/compiler/transf.nim @@ -127,12 +127,12 @@ proc transformSymAux(c: PTransf, n: PNode): PNode = if s.kind in routineKinds: body = transformBody(c.graph, c.idgen, s, {useCache}+c.flags) if s.kind == skIterator: + if s.closureBody == nil: + let injected = injectDestructorCalls(c.graph, c.idgen, s, body) + let closureBody = transformClosureIterator(c.graph, c.idgen, s, injected) + s.closureBody = closureBody if c.tooEarly: return n else: - if s.closureBody == nil: - let injected = injectDestructorCalls(c.graph, c.idgen, s, body) - let closureBody = transformClosureIterator(c.graph, c.idgen, s, injected) - s.closureBody = closureBody return liftIterSym(c.graph, n, c.idgen, getCurrOwner(c)) elif s.kind in {skProc, skFunc, skConverter, skMethod} and not c.tooEarly: # top level .closure procs are still somewhat supported for 'Nake': @@ -875,6 +875,7 @@ proc transformFor(c: PTransf, n: PNode): PNode = stmtList.add(newAsgnStmt(c, nkFastAsgn, temp, arg, true)) newC.mapping[formal.itemId] = temp + let body = transformBody(c.graph, c.idgen, iter, {useCache}+c.flags) pushInfoContext(c.graph.config, n.info) inc(c.inlining)