From 2294c02cc899d42695e659572e75d7f87680de2b Mon Sep 17 00:00:00 2001 From: Araq Date: Thu, 21 Jun 2012 09:03:49 +0200 Subject: and another closure bugfix --- compiler/lambdalifting.nim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'compiler/lambdalifting.nim') diff --git a/compiler/lambdalifting.nim b/compiler/lambdalifting.nim index 2bf6ac57e..0052e178b 100644 --- a/compiler/lambdalifting.nim +++ b/compiler/lambdalifting.nim @@ -302,7 +302,7 @@ proc transformInnerProc(o: POuterContext, i: PInnerContext, n: PNode): PNode = let s = n.sym if s == i.fn: # recursive calls go through (lambda, hiddenParam): - assert i.closureParam != nil + assert i.closureParam != nil, i.fn.name.s result = makeClosure(s, i.closureParam, n.info) elif isInnerProc(s, o.fn) and s.typ.callConv == ccClosure: # ugh: call to some other inner proc; @@ -340,8 +340,10 @@ proc searchForInnerProcs(o: POuterContext, n: PNode) = # dummy closure param needed? if inner.closureParam == nil and n.sym.typ.callConv == ccClosure: dummyClosureParam(o, inner) - let ti = transformInnerProc(o, inner, body) - if ti != nil: n.sym.ast.sons[bodyPos] = ti + # only transform if it really needs a closure: + if inner.closureParam != nil: + let ti = transformInnerProc(o, inner, body) + if ti != nil: n.sym.ast.sons[bodyPos] = ti of nkLambdaKinds: searchForInnerProcs(o, n.sons[namePos]) of nkWhileStmt, nkForStmt, nkParForStmt, nkBlockStmt: -- cgit 1.4.1-2-gfad0