VM now supports lambda lifting
This commit is contained in:
parent
be45263623
commit
27ec76dd3a
6 changed files with 71 additions and 29 deletions
|
|
@ -207,7 +207,7 @@ proc newCall(a, b: PSym): PNode =
|
|||
|
||||
proc addHiddenParam(routine: PSym, param: PSym) =
|
||||
var params = routine.ast.sons[paramsPos]
|
||||
param.position = params.len
|
||||
param.position = params.len-1
|
||||
addSon(params, newSymNode(param))
|
||||
incl(routine.typ.flags, tfCapturesEnv)
|
||||
#echo "produced environment: ", param.id, " for ", routine.name.s
|
||||
|
|
@ -549,6 +549,8 @@ proc transformOuterProc(o: POuterContext, n: PNode): PNode =
|
|||
if x != nil: n.sons[i] = x
|
||||
|
||||
proc liftLambdas*(fn: PSym, body: PNode): PNode =
|
||||
# XXX gCmd == cmdCompileToJS does not suffice! The compiletime stuff needs
|
||||
# the transformation even when compiling to JS ...
|
||||
if body.kind == nkEmpty or gCmd == cmdCompileToJS:
|
||||
# ignore forward declaration:
|
||||
result = body
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue