[pypy-svn] r50256 - in pypy/branch/astcompilertests/pypy/interpreter/astcompiler: . test

arigo at codespeak.net arigo at codespeak.net
Wed Jan 2 13:44:28 CET 2008


Author: arigo
Date: Wed Jan  2 13:44:27 2008
New Revision: 50256

Modified:
   pypy/branch/astcompilertests/pypy/interpreter/astcompiler/ast.py
   pypy/branch/astcompilertests/pypy/interpreter/astcompiler/ast.txt
   pypy/branch/astcompilertests/pypy/interpreter/astcompiler/astgen.py
   pypy/branch/astcompilertests/pypy/interpreter/astcompiler/opt.py
   pypy/branch/astcompilertests/pypy/interpreter/astcompiler/test/test_ast.py
Log:
Translation fixes.


Modified: pypy/branch/astcompilertests/pypy/interpreter/astcompiler/ast.py
==============================================================================
--- pypy/branch/astcompilertests/pypy/interpreter/astcompiler/ast.py	(original)
+++ pypy/branch/astcompilertests/pypy/interpreter/astcompiler/ast.py	Wed Jan  2 13:44:27 2008
@@ -45,7 +45,7 @@
     def accept(self, visitor):
         raise NotImplementedError
     def mutate(self, visitor):
-        return visitor.visitNode(self)
+        raise NotImplementedError
     def flatten(self):
         res = []
         nodes = self.getChildNodes()
@@ -364,12 +364,7 @@
         return visitor.visitAnd(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitAnd(self)
 
     def fget_nodes( space, self):
@@ -550,12 +545,7 @@
         return visitor.visitAssList(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitAssList(self)
 
     def fget_nodes( space, self):
@@ -697,12 +687,7 @@
         return visitor.visitAssTuple(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitAssTuple(self)
 
     def fget_nodes( space, self):
@@ -859,12 +844,7 @@
         return visitor.visitAssign(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         self.expr = self.expr.mutate(visitor)
         return visitor.visitAssign(self)
 
@@ -1156,12 +1136,7 @@
         return visitor.visitBitand(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitBitand(self)
 
     def fget_nodes( space, self):
@@ -1234,12 +1209,7 @@
         return visitor.visitBitor(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitBitor(self)
 
     def fget_nodes( space, self):
@@ -1312,12 +1282,7 @@
         return visitor.visitBitxor(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitBitxor(self)
 
     def fget_nodes( space, self):
@@ -1443,12 +1408,7 @@
 
     def mutate(self, visitor):
         self.node = self.node.mutate(visitor)
-        newlist = []
-        for n in self.args:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.args[:] = newlist
+        visitor._mutate_list(self.args)
         if self.star_args is not None:
             self.star_args = self.star_args.mutate(visitor)
         if self.dstar_args is not None:
@@ -1567,12 +1527,7 @@
         return visitor.visitClass(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.bases:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.bases[:] = newlist
+        visitor._mutate_list(self.bases)
         self.code = self.code.mutate(visitor)
         return visitor.visitClass(self)
 
@@ -1688,7 +1643,11 @@
 
     def mutate(self, visitor):
         self.expr = self.expr.mutate(visitor)
-        self.ops[:] = [(op_name, node.mutate(visitor)) for (op_name, node) in self.ops]
+        for i in range(len(self.ops)):
+
+            op_name, node = self.ops[i]
+
+            self.ops[i] = op_name, node.mutate(visitor)
 
         return visitor.visitCompare(self)
 
@@ -1934,12 +1893,7 @@
         return visitor.visitDecorators(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitDecorators(self)
 
     def fget_nodes( space, self):
@@ -2032,7 +1986,11 @@
         return visitor.visitDict(self)
 
     def mutate(self, visitor):
-        self.items[:] = [(n.mutate(visitor), o.mutate(visitor)) for (n, o) in self.items]
+        for i in range(len(self.items)):
+
+            n, o = self.items[i]
+
+            self.items[i] = n.mutate(visitor), o.mutate(visitor)
 
         return visitor.visitDict(self)
 
@@ -2645,18 +2603,8 @@
     def mutate(self, visitor):
         if self.decorators is not None:
             self.decorators = self.decorators.mutate(visitor)
-        newlist = []
-        for n in self.argnames:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.argnames[:] = newlist
-        newlist = []
-        for n in self.defaults:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.defaults[:] = newlist
+        visitor._mutate_list(self.argnames)
+        visitor._mutate_list(self.defaults)
         self.code = self.code.mutate(visitor)
         return visitor.visitFunction(self)
 
@@ -2865,12 +2813,7 @@
     def mutate(self, visitor):
         self.assign = self.assign.mutate(visitor)
         self.iter = self.iter.mutate(visitor)
-        newlist = []
-        for n in self.ifs:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.ifs[:] = newlist
+        visitor._mutate_list(self.ifs)
         return visitor.visitGenExprFor(self)
 
     def fget_assign( space, self):
@@ -3015,12 +2958,7 @@
 
     def mutate(self, visitor):
         self.expr = self.expr.mutate(visitor)
-        newlist = []
-        for n in self.quals:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.quals[:] = newlist
+        visitor._mutate_list(self.quals)
         return visitor.visitGenExprInner(self)
 
     def fget_expr( space, self):
@@ -3231,7 +3169,11 @@
         return visitor.visitIf(self)
 
     def mutate(self, visitor):
-        self.tests[:] = [(n.mutate(visitor), o.mutate(visitor)) for (n, o) in self.tests]
+        for i in range(len(self.tests)):
+
+            n, o = self.tests[i]
+
+            self.tests[i] = n.mutate(visitor), o.mutate(visitor)
 
         if self.else_ is not None:
             self.else_ = self.else_.mutate(visitor)
@@ -3516,18 +3458,8 @@
         return visitor.visitLambda(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.argnames:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.argnames[:] = newlist
-        newlist = []
-        for n in self.defaults:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.defaults[:] = newlist
+        visitor._mutate_list(self.argnames)
+        visitor._mutate_list(self.defaults)
         self.code = self.code.mutate(visitor)
         return visitor.visitLambda(self)
 
@@ -3703,12 +3635,7 @@
         return visitor.visitList(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitList(self)
 
     def fget_nodes( space, self):
@@ -3787,12 +3714,7 @@
 
     def mutate(self, visitor):
         self.expr = self.expr.mutate(visitor)
-        newlist = []
-        for n in self.quals:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.quals[:] = newlist
+        visitor._mutate_list(self.quals)
         return visitor.visitListComp(self)
 
     def fget_expr( space, self):
@@ -3876,12 +3798,7 @@
     def mutate(self, visitor):
         self.assign = self.assign.mutate(visitor)
         self.list = self.list.mutate(visitor)
-        newlist = []
-        for n in self.ifs:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.ifs[:] = newlist
+        visitor._mutate_list(self.ifs)
         return visitor.visitListCompFor(self)
 
     def fget_assign( space, self):
@@ -4355,12 +4272,7 @@
         return visitor.visitOr(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitOr(self)
 
     def fget_nodes( space, self):
@@ -4545,12 +4457,7 @@
         return visitor.visitPrint(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         if self.dest is not None:
             self.dest = self.dest.mutate(visitor)
         return visitor.visitPrint(self)
@@ -4647,12 +4554,7 @@
         return visitor.visitPrintnl(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         if self.dest is not None:
             self.dest = self.dest.mutate(visitor)
         return visitor.visitPrintnl(self)
@@ -5088,12 +4990,7 @@
         return visitor.visitSliceobj(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitSliceobj(self)
 
     def fget_nodes( space, self):
@@ -5166,12 +5063,7 @@
         return visitor.visitStmt(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitStmt(self)
 
     def fget_nodes( space, self):
@@ -5423,9 +5315,9 @@
 
     def mutate(self, visitor):
         self.body = self.body.mutate(visitor)
-        newhandlers = []
+        for i in range(len(self.handlers)):
 
-        for expr1, expr2, body in self.handlers:
+            expr1, expr2, body = self.handlers[i]
 
             if expr1 is not None:
 
@@ -5439,9 +5331,7 @@
 
                 body = body.mutate(visitor)
 
-            newhandlers.append((expr1, expr2, body))
-
-        self.handlers[:] = newhandlers
+            self.handlers[i] = expr1, expr2, body
 
         if self.else_ is not None:
             self.else_ = self.else_.mutate(visitor)
@@ -5616,12 +5506,7 @@
         return visitor.visitTuple(self)
 
     def mutate(self, visitor):
-        newlist = []
-        for n in self.nodes:
-            item = n.mutate(visitor)
-            if item is not None:
-                newlist.append(item)
-        self.nodes[:] = newlist
+        visitor._mutate_list(self.nodes)
         return visitor.visitTuple(self)
 
     def fget_nodes( space, self):
@@ -6032,6 +5917,17 @@
     def default(self, node):
         for child in node.getChildNodes():
             child.accept(self)
+        return node
+
+    def _mutate_list(self, lst):
+        i = 0
+        while i < len(lst):
+            item = lst[i].mutate(self)
+            if item is not None:
+                lst[i] = item
+                i += 1
+            else:
+                del lst[i]
 
     def visitExpression(self, node):
         return self.default(node)

Modified: pypy/branch/astcompilertests/pypy/interpreter/astcompiler/ast.txt
==============================================================================
--- pypy/branch/astcompilertests/pypy/interpreter/astcompiler/ast.txt	(original)
+++ pypy/branch/astcompilertests/pypy/interpreter/astcompiler/ast.txt	Wed Jan  2 13:44:27 2008
@@ -127,7 +127,9 @@
         nodelist.append(node)
 
 mutate(Compare.ops):
-    self.ops[:] = [(op_name, node.mutate(visitor)) for (op_name, node) in self.ops]
+    for i in range(len(self.ops)):
+        op_name, node = self.ops[i]
+        self.ops[i] = op_name, node.mutate(visitor)
 
 flatten_nodes(TryExcept.handlers):
     # handlers is a list of triplets (expr1, expr2, body)
@@ -140,16 +142,15 @@
             nodelist.append(body)
 
 mutate(TryExcept.handlers):
-    newhandlers = []
-    for expr1, expr2, body in self.handlers:
+    for i in range(len(self.handlers)):
+        expr1, expr2, body = self.handlers[i]
         if expr1 is not None:
             expr1 = expr1.mutate(visitor)
         if expr2 is not None:
             expr2 = expr2.mutate(visitor)
         if body is not None:
             body = body.mutate(visitor)
-        newhandlers.append((expr1, expr2, body))
-    self.handlers[:] = newhandlers
+        self.handlers[i] = expr1, expr2, body
 
 flatten_nodes(Dict.items):
     # items is a list of couples (node (key), node (value))
@@ -158,7 +159,9 @@
         nodelist.append(value)
 
 mutate(Dict.items):
-    self.items[:] = [(n.mutate(visitor), o.mutate(visitor)) for (n, o) in self.items]
+    for i in range(len(self.items)):
+        n, o = self.items[i]
+        self.items[i] = n.mutate(visitor), o.mutate(visitor)
 
 flatten_nodes(If.tests):
     # tests is a list of couples (node (test), node (suite))
@@ -167,7 +170,9 @@
         nodelist.append(suite)
 
 mutate(If.tests):
-    self.tests[:] = [(n.mutate(visitor), o.mutate(visitor)) for (n, o) in self.tests]
+    for i in range(len(self.tests)):
+        n, o = self.tests[i]
+        self.tests[i] = n.mutate(visitor), o.mutate(visitor)
 
 AssTuple.getArgNames(self):
     argnames = []

Modified: pypy/branch/astcompilertests/pypy/interpreter/astcompiler/astgen.py
==============================================================================
--- pypy/branch/astcompilertests/pypy/interpreter/astcompiler/astgen.py	(original)
+++ pypy/branch/astcompilertests/pypy/interpreter/astcompiler/astgen.py	Wed Jan  2 13:44:27 2008
@@ -324,12 +324,8 @@
                     print >> buf, "        if self.%s is not None:" % (argname,)
                     print >> buf, "            self.%s = self.%s.mutate(visitor)" % (argname,argname)
                 elif self.argprops[argname] == P_NESTED:
-                    print >> buf, "        newlist = []"
-                    print >> buf, "        for n in self.%s:"%(argname)
-                    print >> buf, "            item = n.mutate(visitor)"
-                    print >> buf, "            if item is not None:"
-                    print >> buf, "                newlist.append(item)"
-                    print >> buf, "        self.%s[:] = newlist"%(argname)
+                    print >> buf, "        visitor._mutate_list(self.%s)"%(
+                        argname,)
         print >> buf, "        return visitor.visit%s(self)" % self.name
 
     def _gen_fget_func(self, buf, attr, prop ):
@@ -602,6 +598,17 @@
     def default(self, node):
         for child in node.getChildNodes():
             child.accept(self)
+        return node
+
+    def _mutate_list(self, lst):
+        i = 0
+        while i < len(lst):
+            item = lst[i].mutate(self)
+            if item is not None:
+                lst[i] = item
+                i += 1
+            else:
+                del lst[i]
 
     def visitExpression(self, node):
         return self.default(node)
@@ -695,7 +702,7 @@
     def accept(self, visitor):
         raise NotImplementedError
     def mutate(self, visitor):
-        return visitor.visitNode(self)
+        raise NotImplementedError
     def flatten(self):
         res = []
         nodes = self.getChildNodes()

Modified: pypy/branch/astcompilertests/pypy/interpreter/astcompiler/opt.py
==============================================================================
--- pypy/branch/astcompilertests/pypy/interpreter/astcompiler/opt.py	(original)
+++ pypy/branch/astcompilertests/pypy/interpreter/astcompiler/opt.py	Wed Jan  2 13:44:27 2008
@@ -84,11 +84,6 @@
         def __init__(self, space):
             self.space = space
 
-        def default(self, node):
-            for child in node.getChildNodes():
-                child.accept(self)
-            return node
-
         def _visitUnaryOp(self, node, constant_fold):
             expr = node.expr
             if isinstance(expr, ast.Const):

Modified: pypy/branch/astcompilertests/pypy/interpreter/astcompiler/test/test_ast.py
==============================================================================
--- pypy/branch/astcompilertests/pypy/interpreter/astcompiler/test/test_ast.py	(original)
+++ pypy/branch/astcompilertests/pypy/interpreter/astcompiler/test/test_ast.py	Wed Jan  2 13:44:27 2008
@@ -2,14 +2,7 @@
 from pypy.module.recparser.pyparser import source2ast
 from pypy.interpreter.pyparser.test.test_astbuilder import FakeSpace
 
-class BaseVisitor:
-    def __getattr__(self, attr):
-        if attr.startswith('visit'):
-            return self.default
-        else:
-            raise AttributeError(attr)
-    def default(self, node):
-        return node
+class BaseVisitor(ast.ASTVisitor):
     def visitAdd(self, node):
         return ast.Const(3)
 


More information about the pypy-svn mailing list