[Checkins] SVN: Sandbox/malthe/chameleon.core/ Fixed assignment issue where an assignment that involves the assigned variable name would fail, because dynamic scope would not be enabled due to an ordering issue.

Malthe Borch mborch at gmail.com
Sun Nov 16 22:05:22 EST 2008


Log message for revision 93031:
  Fixed assignment issue where an assignment that involves the assigned variable name would fail, because dynamic scope would not be enabled due to an ordering issue.

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

-=-
Modified: Sandbox/malthe/chameleon.core/CHANGES.txt
===================================================================
--- Sandbox/malthe/chameleon.core/CHANGES.txt	2008-11-17 01:57:13 UTC (rev 93030)
+++ Sandbox/malthe/chameleon.core/CHANGES.txt	2008-11-17 03:05:21 UTC (rev 93031)
@@ -4,6 +4,9 @@
 HEAD
 ~~~~
 
+- Visit evaluation before assignment in order to support assignments
+  that rely on the same name in the dynamic variable scope. [malthe]
+
 - Conditions may now be inverted; this facilitates the bug-fix of an
   issue where omit conditions were multi-part. [malthe]
 

Modified: Sandbox/malthe/chameleon.core/src/chameleon/core/transformer.py
===================================================================
--- Sandbox/malthe/chameleon.core/src/chameleon/core/transformer.py	2008-11-17 01:57:13 UTC (rev 93030)
+++ Sandbox/malthe/chameleon.core/src/chameleon/core/transformer.py	2008-11-17 03:05:21 UTC (rev 93031)
@@ -11,7 +11,7 @@
         if node is None:
             return None
         if type(node) is tuple:
-            return tuple([self.visit(n) for n in node])
+            return tuple(self.visit(n) for n in node)
         visitor = getattr(self, 'visit%s' % node.__class__.__name__,
                           self._visitDefault)
         return visitor(node)
@@ -85,9 +85,9 @@
         return self._clone(node, self.visit(node.test), self.visit(node.fail))
 
     def visitAssign(self, node):
-        return self._clone(node, [self.visit(x) for x in node.nodes],
-            self.visit(node.expr)
-        )
+        expr = self.visit(node.expr)
+        return self._clone(
+            node, [self.visit(x) for x in node.nodes], expr)
 
     def visitAssAttr(self, node):
         return self._clone(node, self.visit(node.expr), node.attrname,



More information about the Checkins mailing list