next steps for full closure support (2)

This commit is contained in:
Araq
2012-06-18 02:08:49 +02:00
parent d5b01dfb7c
commit 98458a3076

View File

@@ -404,14 +404,12 @@ proc generateClosureCreation(o: POuterContext, scope: PEnv): PNode =
result.add(newCall(getSysSym"internalNew", env))
# add assignment statements:
for v, scope2 in idTablePairs(o.localsToEnv):
if scope2 == scope:
let local = PSym(v)
let fieldAccess = indirectAccess(env, local, env.info)
if sfByCopy in local.flags or local.kind == skParam:
# add ``env.param = param``
result.add(newAsgnStmt(fieldAccess, newSymNode(local)))
IdNodeTablePut(o.localsToAccess, local, fieldAccess)
for local in scope.capturedVars:
let fieldAccess = indirectAccess(env, local, env.info)
if sfByCopy in local.flags or local.kind == skParam:
# add ``env.param = param``
result.add(newAsgnStmt(fieldAccess, newSymNode(local)))
IdNodeTablePut(o.localsToAccess, local, fieldAccess)
# add support for 'up' references:
for e, field in items(scope.deps):
# add ``env.up = env2``