changeset 227:98b8e1a92df8

Use list comprehension instead of `map()` in the AST transformer.
author cmlenz
date Fri, 08 Sep 2006 09:17:42 +0000
parents 09f869a98149
children f79b20a50919
files ChangeLog markup/eval.py markup/tests/eval.py
diffstat 3 files changed, 18 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -33,6 +33,7 @@
  * Fixes for `py:match` which would get confused when it should be applied
    to multiple elements (ticket #49).
  * Using namespace prefixes in XPath expressions is now supported.
+ * Expressions now correctly handle slices (ticket #51).
 
 
 Version 0.2
--- a/markup/eval.py
+++ b/markup/eval.py
@@ -241,7 +241,7 @@
 
     def visitCallFunc(self, node, *args, **kwargs):
         node.node = self.visit(node.node, *args, **kwargs)
-        node.args = map(lambda x: self.visit(x, *args, **kwargs), node.args)
+        node.args = [self.visit(x, *args, **kwargs) for x in node.args]
         if node.star_args:
             node.star_args = self.visit(node.star_args, *args, **kwargs)
         if node.dstar_args:
@@ -259,13 +259,13 @@
 
     def visitSubscript(self, node, *args, **kwargs):
         node.expr = self.visit(node.expr, *args, **kwargs)
-        node.subs = map(lambda x: self.visit(x, *args, **kwargs), node.subs)
+        node.subs = [self.visit(x, *args, **kwargs) for x in node.subs]
         return node
 
     # Operators
 
     def _visitBoolOp(self, node, *args, **kwargs):
-        node.nodes = map(lambda x: self.visit(x, *args, **kwargs), node.nodes)
+        node.nodes = [self.visit(x, *args, **kwargs) for x in node.nodes]
         return node
     visitAnd = visitOr = visitBitand = visitBitor = _visitBoolOp
 
@@ -279,8 +279,7 @@
 
     def visitCompare(self, node, *args, **kwargs):
         node.expr = self.visit(node.expr, *args, **kwargs)
-        node.ops = map(lambda (op, n): (op, self.visit(n, *args, **kwargs)),
-                       node.ops)
+        node.ops = [(op, self.visit(n, *args, **kwargs)) for op, n in  node.ops]
         return node
 
     def _visitUnaryOp(self, node, *args, **kwargs):
@@ -301,28 +300,27 @@
         return node
 
     def visitDict(self, node, *args, **kwargs):
-        node.items = map(lambda (k, v): (self.visit(k, *args, **kwargs),
-                                         self.visit(v, *args, **kwargs)),
-                         node.items)
+        node.items = [(self.visit(k, *args, **kwargs),
+                       self.visit(v, *args, **kwargs)) for k, v in node.items]
         return node
 
     def visitTuple(self, node, *args, **kwargs):
-        node.nodes = map(lambda n: self.visit(n, *args, **kwargs), node.nodes)
+        node.nodes = [self.visit(n, *args, **kwargs) for n in node.nodes]
         return node
 
     def visitList(self, node, *args, **kwargs):
-        node.nodes = map(lambda n: self.visit(n, *args, **kwargs), node.nodes)
+        node.nodes = [self.visit(n, *args, **kwargs) for n in node.nodes]
         return node
 
     def visitListComp(self, node, *args, **kwargs):
         node.expr = self.visit(node.expr, *args, **kwargs)
-        node.quals = map(lambda x: self.visit(x, *args, **kwargs), node.quals)
+        node.quals = [self.visit(x, *args, **kwargs) for x in node.quals]
         return node
 
     def visitListCompFor(self, node, *args, **kwargs):
         node.assign = self.visit(node.assign, *args, **kwargs)
         node.list = self.visit(node.list, *args, **kwargs)
-        node.ifs = map(lambda x: self.visit(x, *args, **kwargs), node.ifs)
+        node.ifs = [self.visit(x, *args, **kwargs) for x in node.ifs]
         return node
 
     def visitListCompIf(self, node, *args, **kwargs):
@@ -337,7 +335,7 @@
     def visitGenExprFor(self, node, *args, **kwargs):
         node.assign = self.visit(node.assign, *args, **kwargs)
         node.iter = self.visit(node.iter, *args, **kwargs)
-        node.ifs = map(lambda x: self.visit(x, *args, **kwargs), node.ifs)
+        node.ifs = [self.visit(x, *args, **kwargs) for x in node.ifs]
         return node
 
     def visitGenExprIf(self, node, *args, **kwargs):
@@ -346,7 +344,7 @@
 
     def visitGenExprInner(self, node, *args, **kwargs):
         node.expr = self.visit(node.expr, locals_=True, *args, **kwargs)
-        node.quals = map(lambda x: self.visit(x, *args, **kwargs), node.quals)
+        node.quals = [self.visit(x, *args, **kwargs) for x in node.quals]
         return node
 
     def visitSlice(self, node, *args, **kwargs):
@@ -358,7 +356,7 @@
         return node
 
     def visitSliceobj(self, node, *args, **kwargs):
-        node.nodes = map(lambda x: self.visit(x, *args, **kwargs), node.nodes)
+        node.nodes = [self.visit(x, *args, **kwargs) for x in node.nodes]
         return node
 
 
@@ -385,7 +383,7 @@
 
     def visitListComp(self, node, locals_=False):
         node.expr = self.visit(node.expr, locals_=True)
-        node.quals = map(lambda x: self.visit(x, locals_=True), node.quals)
+        node.quals = [self.visit(qual, locals_=True) for qual in node.quals]
         return node
 
     def visitName(self, node, locals_=False):
@@ -397,5 +395,5 @@
     def visitSubscript(self, node, locals_=False):
         return ast.CallFunc(ast.Name('_lookup_item'), [
             ast.Name('data'), self.visit(node.expr, locals_=locals_),
-            ast.Tuple(map(lambda x: self.visit(x, locals_=locals_), node.subs))
+            ast.Tuple([self.visit(sub, locals_=locals_) for sub in node.subs])
         ])
--- a/markup/tests/eval.py
+++ b/markup/tests/eval.py
@@ -250,8 +250,9 @@
         expr = Expression("[i['name'] for i in items if i['value'] > 1]")
         self.assertEqual(['b'], expr.evaluate({'items': items}))
 
-    # generator expressions only supported in Python 2.4 and up
     if sys.version_info >= (2, 4):
+        # Generator expressions only supported in Python 2.4 and up
+
         def test_generator_expression(self):
             expr = Expression("list(n for n in numbers if n < 2)")
             self.assertEqual([0, 1], expr.evaluate({'numbers': range(5)}))
Copyright (C) 2012-2017 Edgewall Software