further steps for closure support

This commit is contained in:
Araq 2012-02-08 09:10:59 +01:00
commit 2c4a1dbc0c
7 changed files with 101 additions and 57 deletions

View file

@ -658,6 +658,8 @@ proc semLambda(c: PContext, n: PNode): PNode =
else:
LocalError(n.info, errImplOfXexpected, s.name.s)
sideEffectsCheck(c, s)
if s.typ.callConv == ccClosure and s.owner.kind == skModule:
localError(s.info, errXCannotBeClosure, s.name.s)
closeScope(c.tab) # close scope for parameters
popOwner()
result.typ = s.typ
@ -754,6 +756,8 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
incl(s.flags, sfForward)
elif sfBorrow in s.flags: semBorrow(c, n, s)
sideEffectsCheck(c, s)
if s.typ.callConv == ccClosure and s.owner.kind == skModule:
localError(s.info, errXCannotBeClosure, s.name.s)
closeScope(c.tab) # close scope for parameters
popOwner()