From 98458a3076c5d4fc2942cbd3e260999d1adcfe9a Mon Sep 17 00:00:00 2001 From: Araq Date: Mon, 18 Jun 2012 02:08:49 +0200 Subject: [PATCH] next steps for full closure support (2) --- compiler/lambdalifting.nim | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/compiler/lambdalifting.nim b/compiler/lambdalifting.nim index ea5aea449c..2b0aba147b 100644 --- a/compiler/lambdalifting.nim +++ b/compiler/lambdalifting.nim @@ -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``