next steps for full closure support (2)

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

View file

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