[Checkins] SVN: Sandbox/malthe/chameleon.core/ Make sure passed arguments are passed in to nested scopes (closures); this prevents an error being raised if the variable is used before a redefine in that scope.

Malthe Borch mborch at gmail.com
Sun Nov 16 07:32:30 EST 2008


Log message for revision 93008:
  Make sure passed arguments are passed in to nested scopes (closures); this prevents an error being raised if the variable is used before a redefine in that scope.

Changed:
  U   Sandbox/malthe/chameleon.core/CHANGES.txt
  U   Sandbox/malthe/chameleon.core/src/chameleon/core/translation.py

-=-
Modified: Sandbox/malthe/chameleon.core/CHANGES.txt
===================================================================
--- Sandbox/malthe/chameleon.core/CHANGES.txt	2008-11-16 12:31:20 UTC (rev 93007)
+++ Sandbox/malthe/chameleon.core/CHANGES.txt	2008-11-16 12:32:30 UTC (rev 93008)
@@ -4,6 +4,9 @@
 HEAD
 ~~~~
 
+- Make sure that arguments passed into the `render`-method are
+  introduced in every nested scope. [malthe]
+
 - Added translation language to main scope and make sure redefining it
   inside a closure does not cause issues with nested scope
   locals. [malthe]

Modified: Sandbox/malthe/chameleon.core/src/chameleon/core/translation.py
===================================================================
--- Sandbox/malthe/chameleon.core/src/chameleon/core/translation.py	2008-11-16 12:31:20 UTC (rev 93007)
+++ Sandbox/malthe/chameleon.core/src/chameleon/core/translation.py	2008-11-16 12:32:30 UTC (rev 93008)
@@ -329,12 +329,16 @@
                 callback = self.symbols.slot+element.node.fill_slot
                 remote_scope = self.symbols.scope+"_remote"
                 kwargs.append((callback, callback))
-                
+
+                scope_args = tuple(
+                    "%s=%s" % (variable, variable) for variable in \
+                    itertools.chain(*self.stream.scope))
+
                 subclauses = []
                 subclauses.append(
                     clauses.Method(
                     callback, (
-                    remote_scope, "%s=%s" % (self.symbols.domain, self.symbols.domain)),
+                    remote_scope,) + scope_args,
                     types.value('%s.getvalue()' % self.symbols.out)))
                 subclauses.append(
                     clauses.UpdateScope(self.symbols.scope, remote_scope))
@@ -342,9 +346,6 @@
                     types.template('%(init)s.initialize_stream()'),
                     (self.symbols.out, self.symbols.write)))
                 subclauses.append(clauses.Visit(element.node))
-                
-                #subclauses.append(clauses.Assign(
-                #    types.template('%(out)s.getvalue()'), variable))
                 _.append(clauses.Group(subclauses))
 
             _.append(clauses.Assign(self.use_macro, self.symbols.metal))



More information about the Checkins mailing list