and another closure bugfix

This commit is contained in:
Araq 2012-06-21 09:03:49 +02:00
commit 2294c02cc8

View file

@ -302,7 +302,7 @@ proc transformInnerProc(o: POuterContext, i: PInnerContext, n: PNode): PNode =
let s = n.sym let s = n.sym
if s == i.fn: if s == i.fn:
# recursive calls go through (lambda, hiddenParam): # 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) result = makeClosure(s, i.closureParam, n.info)
elif isInnerProc(s, o.fn) and s.typ.callConv == ccClosure: elif isInnerProc(s, o.fn) and s.typ.callConv == ccClosure:
# ugh: call to some other inner proc; # ugh: call to some other inner proc;
@ -340,6 +340,8 @@ proc searchForInnerProcs(o: POuterContext, n: PNode) =
# dummy closure param needed? # dummy closure param needed?
if inner.closureParam == nil and n.sym.typ.callConv == ccClosure: if inner.closureParam == nil and n.sym.typ.callConv == ccClosure:
dummyClosureParam(o, inner) dummyClosureParam(o, inner)
# only transform if it really needs a closure:
if inner.closureParam != nil:
let ti = transformInnerProc(o, inner, body) let ti = transformInnerProc(o, inner, body)
if ti != nil: n.sym.ast.sons[bodyPos] = ti if ti != nil: n.sym.ast.sons[bodyPos] = ti
of nkLambdaKinds: of nkLambdaKinds: