[pypy-svn] r16332 - in pypy/dist/pypy/interpreter: astcompiler pyparser pyparser/test

ludal at codespeak.net ludal at codespeak.net
Tue Aug 23 19:58:19 CEST 2005


Author: ludal
Date: Tue Aug 23 19:58:15 2005
New Revision: 16332

Modified:
   pypy/dist/pypy/interpreter/astcompiler/ast.py
   pypy/dist/pypy/interpreter/astcompiler/ast.txt
   pypy/dist/pypy/interpreter/astcompiler/astgen.py
   pypy/dist/pypy/interpreter/astcompiler/pyassem.py
   pypy/dist/pypy/interpreter/astcompiler/pycodegen.py
   pypy/dist/pypy/interpreter/astcompiler/symbols.py
   pypy/dist/pypy/interpreter/astcompiler/visitor.py
   pypy/dist/pypy/interpreter/pyparser/astbuilder.py
   pypy/dist/pypy/interpreter/pyparser/test/test_astcompiler.py
Log:
 - get rid of the $*$@@#!! visitor pattern used in the compiler module
 - add to compile test all the tests from test_astbuilder
 - bug fixes of the compiler to make those test pass


Modified: pypy/dist/pypy/interpreter/astcompiler/ast.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/ast.py	(original)
+++ pypy/dist/pypy/interpreter/astcompiler/ast.py	Tue Aug 23 19:58:15 2005
@@ -2,7 +2,7 @@
 
 This file is automatically generated by Tools/compiler/astgen.py
 """
-from consts import CO_VARARGS, CO_VARKEYWORDS
+from consts import CO_VARARGS, CO_VARKEYWORDS, OP_ASSIGN
 
 def flatten(list):
     l = []
@@ -34,7 +34,7 @@
         return self.getChildren()
     def getChildNodes(self):
         return [] # implemented by subclasses
-    def visit(self, visitor, *args):
+    def accept(self, visitor, *args):
         return visitor.visitNode(self, *args)
     def flatten(self):
         res = []
@@ -47,7 +47,7 @@
         return res
 
 class EmptyNode(Node):
-    def visit(self, visitor, *args):
+    def accept(self, visitor, *args):
         return visitor.visitEmptyNode(self, *args)
 
 class Expression(Node):
@@ -66,7 +66,7 @@
     def __repr__(self):
         return "Expression(%s)" % (repr(self.node))
 
-    def visit(self, visitor, *args):
+    def accept(self, visitor, *args):
         return visitor.visitExpression(self, *args)
 
 class Add(Node):
@@ -84,8 +84,8 @@
     def __repr__(self):
         return "Add((%s, %s))" % (repr(self.left), repr(self.right))
 
-    def accept(self, visitor, args):
-        return visitor.visitAdd(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitAdd(self, *args)
 
 class And(Node):
     def __init__(self, nodes, lineno=None):
@@ -103,8 +103,8 @@
     def __repr__(self):
         return "And(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitAnd(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitAnd(self, *args)
 
 class AssAttr(Node):
     def __init__(self, expr, attrname, flags, lineno=None):
@@ -122,8 +122,8 @@
     def __repr__(self):
         return "AssAttr(%s, %s, %s)" % (repr(self.expr), repr(self.attrname), repr(self.flags))
 
-    def accept(self, visitor, args):
-        return visitor.visitAssAttr(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitAssAttr(self, *args)
 
 class AssList(Node):
     def __init__(self, nodes, lineno=None):
@@ -141,8 +141,8 @@
     def __repr__(self):
         return "AssList(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitAssList(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitAssList(self, *args)
 
 class AssName(Node):
     def __init__(self, name, flags, lineno=None):
@@ -159,8 +159,8 @@
     def __repr__(self):
         return "AssName(%s, %s)" % (repr(self.name), repr(self.flags))
 
-    def accept(self, visitor, args):
-        return visitor.visitAssName(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitAssName(self, *args)
 
 class AssTuple(Node):
     def __init__(self, nodes, lineno=None):
@@ -178,8 +178,8 @@
     def __repr__(self):
         return "AssTuple(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitAssTuple(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitAssTuple(self, *args)
 
 class Assert(Node):
     def __init__(self, test, fail, lineno=None):
@@ -203,8 +203,8 @@
     def __repr__(self):
         return "Assert(%s, %s)" % (repr(self.test), repr(self.fail))
 
-    def accept(self, visitor, args):
-        return visitor.visitAssert(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitAssert(self, *args)
 
 class Assign(Node):
     def __init__(self, nodes, expr, lineno=None):
@@ -227,8 +227,8 @@
     def __repr__(self):
         return "Assign(%s, %s)" % (repr(self.nodes), repr(self.expr))
 
-    def accept(self, visitor, args):
-        return visitor.visitAssign(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitAssign(self, *args)
 
 class AugAssign(Node):
     def __init__(self, node, op, expr, lineno=None):
@@ -246,8 +246,8 @@
     def __repr__(self):
         return "AugAssign(%s, %s, %s)" % (repr(self.node), repr(self.op), repr(self.expr))
 
-    def accept(self, visitor, args):
-        return visitor.visitAugAssign(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitAugAssign(self, *args)
 
 class Backquote(Node):
     def __init__(self, expr, lineno=None):
@@ -263,8 +263,8 @@
     def __repr__(self):
         return "Backquote(%s)" % (repr(self.expr),)
 
-    def accept(self, visitor, args):
-        return visitor.visitBackquote(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitBackquote(self, *args)
 
 class Bitand(Node):
     def __init__(self, nodes, lineno=None):
@@ -282,8 +282,8 @@
     def __repr__(self):
         return "Bitand(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitBitand(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitBitand(self, *args)
 
 class Bitor(Node):
     def __init__(self, nodes, lineno=None):
@@ -301,8 +301,8 @@
     def __repr__(self):
         return "Bitor(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitBitor(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitBitor(self, *args)
 
 class Bitxor(Node):
     def __init__(self, nodes, lineno=None):
@@ -320,8 +320,8 @@
     def __repr__(self):
         return "Bitxor(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitBitxor(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitBitxor(self, *args)
 
 class Break(Node):
     def __init__(self, lineno=None):
@@ -336,8 +336,8 @@
     def __repr__(self):
         return "Break()"
 
-    def accept(self, visitor, args):
-        return visitor.visitBreak(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitBreak(self, *args)
 
 class CallFunc(Node):
     def __init__(self, node, args, star_args = None, dstar_args = None, lineno=None):
@@ -368,8 +368,8 @@
     def __repr__(self):
         return "CallFunc(%s, %s, %s, %s)" % (repr(self.node), repr(self.args), repr(self.star_args), repr(self.dstar_args))
 
-    def accept(self, visitor, args):
-        return visitor.visitCallFunc(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitCallFunc(self, *args)
 
 class Class(Node):
     def __init__(self, name, bases, doc, code, lineno=None):
@@ -396,8 +396,8 @@
     def __repr__(self):
         return "Class(%s, %s, %s, %s)" % (repr(self.name), repr(self.bases), repr(self.doc), repr(self.code))
 
-    def accept(self, visitor, args):
-        return visitor.visitClass(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitClass(self, *args)
 
 class Compare(Node):
     def __init__(self, expr, ops, lineno=None):
@@ -420,8 +420,8 @@
     def __repr__(self):
         return "Compare(%s, %s)" % (repr(self.expr), repr(self.ops))
 
-    def accept(self, visitor, args):
-        return visitor.visitCompare(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitCompare(self, *args)
 
 class Const(Node):
     def __init__(self, value, lineno=None):
@@ -437,8 +437,8 @@
     def __repr__(self):
         return "Const(%s)" % (repr(self.value),)
 
-    def accept(self, visitor, args):
-        return visitor.visitConst(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitConst(self, *args)
 
 class Continue(Node):
     def __init__(self, lineno=None):
@@ -453,8 +453,8 @@
     def __repr__(self):
         return "Continue()"
 
-    def accept(self, visitor, args):
-        return visitor.visitContinue(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitContinue(self, *args)
 
 class Decorators(Node):
     def __init__(self, nodes, lineno=None):
@@ -472,8 +472,8 @@
     def __repr__(self):
         return "Decorators(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitDecorators(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitDecorators(self, *args)
 
 class Dict(Node):
     def __init__(self, items, lineno=None):
@@ -491,8 +491,8 @@
     def __repr__(self):
         return "Dict(%s)" % (repr(self.items),)
 
-    def accept(self, visitor, args):
-        return visitor.visitDict(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitDict(self, *args)
 
 class Discard(Node):
     def __init__(self, expr, lineno=None):
@@ -508,8 +508,8 @@
     def __repr__(self):
         return "Discard(%s)" % (repr(self.expr),)
 
-    def accept(self, visitor, args):
-        return visitor.visitDiscard(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitDiscard(self, *args)
 
 class Div(Node):
     def __init__(self, (left, right), lineno=None):
@@ -526,8 +526,8 @@
     def __repr__(self):
         return "Div((%s, %s))" % (repr(self.left), repr(self.right))
 
-    def accept(self, visitor, args):
-        return visitor.visitDiv(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitDiv(self, *args)
 
 class Ellipsis(Node):
     def __init__(self, lineno=None):
@@ -542,8 +542,8 @@
     def __repr__(self):
         return "Ellipsis()"
 
-    def accept(self, visitor, args):
-        return visitor.visitEllipsis(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitEllipsis(self, *args)
 
 class Exec(Node):
     def __init__(self, expr, locals, globals, lineno=None):
@@ -571,8 +571,8 @@
     def __repr__(self):
         return "Exec(%s, %s, %s)" % (repr(self.expr), repr(self.locals), repr(self.globals))
 
-    def accept(self, visitor, args):
-        return visitor.visitExec(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitExec(self, *args)
 
 class FloorDiv(Node):
     def __init__(self, (left, right), lineno=None):
@@ -589,8 +589,8 @@
     def __repr__(self):
         return "FloorDiv((%s, %s))" % (repr(self.left), repr(self.right))
 
-    def accept(self, visitor, args):
-        return visitor.visitFloorDiv(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitFloorDiv(self, *args)
 
 class For(Node):
     def __init__(self, assign, list, body, else_, lineno=None):
@@ -620,8 +620,8 @@
     def __repr__(self):
         return "For(%s, %s, %s, %s)" % (repr(self.assign), repr(self.list), repr(self.body), repr(self.else_))
 
-    def accept(self, visitor, args):
-        return visitor.visitFor(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitFor(self, *args)
 
 class From(Node):
     def __init__(self, modname, names, lineno=None):
@@ -638,8 +638,8 @@
     def __repr__(self):
         return "From(%s, %s)" % (repr(self.modname), repr(self.names))
 
-    def accept(self, visitor, args):
-        return visitor.visitFrom(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitFrom(self, *args)
 
 class Function(Node):
     def __init__(self, decorators, name, argnames, defaults, flags, doc, code, lineno=None):
@@ -681,14 +681,14 @@
     def __repr__(self):
         return "Function(%s, %s, %s, %s, %s, %s, %s)" % (repr(self.decorators), repr(self.name), repr(self.argnames), repr(self.defaults), repr(self.flags), repr(self.doc), repr(self.code))
 
-    def accept(self, visitor, args):
-        return visitor.visitFunction(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitFunction(self, *args)
 
 class GenExpr(Node):
     def __init__(self, code, lineno=None):
         Node.__init__(self, lineno)
         self.code = code
-        self.argnames = ['[outmost-iterable]']
+        self.argnames = [AssName('[outmost-iterable]', OP_ASSIGN)]
         self.varargs = self.kwargs = None
     
 
@@ -702,8 +702,8 @@
     def __repr__(self):
         return "GenExpr(%s)" % (repr(self.code),)
 
-    def accept(self, visitor, args):
-        return visitor.visitGenExpr(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitGenExpr(self, *args)
 
 class GenExprFor(Node):
     def __init__(self, assign, iter, ifs, lineno=None):
@@ -731,8 +731,8 @@
     def __repr__(self):
         return "GenExprFor(%s, %s, %s)" % (repr(self.assign), repr(self.iter), repr(self.ifs))
 
-    def accept(self, visitor, args):
-        return visitor.visitGenExprFor(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitGenExprFor(self, *args)
 
 class GenExprIf(Node):
     def __init__(self, test, lineno=None):
@@ -748,8 +748,8 @@
     def __repr__(self):
         return "GenExprIf(%s)" % (repr(self.test),)
 
-    def accept(self, visitor, args):
-        return visitor.visitGenExprIf(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitGenExprIf(self, *args)
 
 class GenExprInner(Node):
     def __init__(self, expr, quals, lineno=None):
@@ -772,8 +772,8 @@
     def __repr__(self):
         return "GenExprInner(%s, %s)" % (repr(self.expr), repr(self.quals))
 
-    def accept(self, visitor, args):
-        return visitor.visitGenExprInner(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitGenExprInner(self, *args)
 
 class Getattr(Node):
     def __init__(self, expr, attrname, lineno=None):
@@ -790,8 +790,8 @@
     def __repr__(self):
         return "Getattr(%s, %s)" % (repr(self.expr), repr(self.attrname))
 
-    def accept(self, visitor, args):
-        return visitor.visitGetattr(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitGetattr(self, *args)
 
 class Global(Node):
     def __init__(self, names, lineno=None):
@@ -807,8 +807,8 @@
     def __repr__(self):
         return "Global(%s)" % (repr(self.names),)
 
-    def accept(self, visitor, args):
-        return visitor.visitGlobal(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitGlobal(self, *args)
 
 class If(Node):
     def __init__(self, tests, else_, lineno=None):
@@ -832,8 +832,8 @@
     def __repr__(self):
         return "If(%s, %s)" % (repr(self.tests), repr(self.else_))
 
-    def accept(self, visitor, args):
-        return visitor.visitIf(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitIf(self, *args)
 
 class Import(Node):
     def __init__(self, names, lineno=None):
@@ -849,8 +849,8 @@
     def __repr__(self):
         return "Import(%s)" % (repr(self.names),)
 
-    def accept(self, visitor, args):
-        return visitor.visitImport(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitImport(self, *args)
 
 class Invert(Node):
     def __init__(self, expr, lineno=None):
@@ -866,8 +866,8 @@
     def __repr__(self):
         return "Invert(%s)" % (repr(self.expr),)
 
-    def accept(self, visitor, args):
-        return visitor.visitInvert(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitInvert(self, *args)
 
 class Keyword(Node):
     def __init__(self, name, expr, lineno=None):
@@ -884,8 +884,8 @@
     def __repr__(self):
         return "Keyword(%s, %s)" % (repr(self.name), repr(self.expr))
 
-    def accept(self, visitor, args):
-        return visitor.visitKeyword(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitKeyword(self, *args)
 
 class Lambda(Node):
     def __init__(self, argnames, defaults, flags, code, lineno=None):
@@ -919,8 +919,8 @@
     def __repr__(self):
         return "Lambda(%s, %s, %s, %s)" % (repr(self.argnames), repr(self.defaults), repr(self.flags), repr(self.code))
 
-    def accept(self, visitor, args):
-        return visitor.visitLambda(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitLambda(self, *args)
 
 class LeftShift(Node):
     def __init__(self, (left, right), lineno=None):
@@ -937,8 +937,8 @@
     def __repr__(self):
         return "LeftShift((%s, %s))" % (repr(self.left), repr(self.right))
 
-    def accept(self, visitor, args):
-        return visitor.visitLeftShift(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitLeftShift(self, *args)
 
 class List(Node):
     def __init__(self, nodes, lineno=None):
@@ -956,8 +956,8 @@
     def __repr__(self):
         return "List(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitList(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitList(self, *args)
 
 class ListComp(Node):
     def __init__(self, expr, quals, lineno=None):
@@ -980,8 +980,8 @@
     def __repr__(self):
         return "ListComp(%s, %s)" % (repr(self.expr), repr(self.quals))
 
-    def accept(self, visitor, args):
-        return visitor.visitListComp(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitListComp(self, *args)
 
 class ListCompFor(Node):
     def __init__(self, assign, list, ifs, lineno=None):
@@ -1007,8 +1007,8 @@
     def __repr__(self):
         return "ListCompFor(%s, %s, %s)" % (repr(self.assign), repr(self.list), repr(self.ifs))
 
-    def accept(self, visitor, args):
-        return visitor.visitListCompFor(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitListCompFor(self, *args)
 
 class ListCompIf(Node):
     def __init__(self, test, lineno=None):
@@ -1024,8 +1024,8 @@
     def __repr__(self):
         return "ListCompIf(%s)" % (repr(self.test),)
 
-    def accept(self, visitor, args):
-        return visitor.visitListCompIf(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitListCompIf(self, *args)
 
 class Mod(Node):
     def __init__(self, (left, right), lineno=None):
@@ -1042,8 +1042,8 @@
     def __repr__(self):
         return "Mod((%s, %s))" % (repr(self.left), repr(self.right))
 
-    def accept(self, visitor, args):
-        return visitor.visitMod(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitMod(self, *args)
 
 class Module(Node):
     def __init__(self, doc, node, lineno=None):
@@ -1060,8 +1060,8 @@
     def __repr__(self):
         return "Module(%s, %s)" % (repr(self.doc), repr(self.node))
 
-    def accept(self, visitor, args):
-        return visitor.visitModule(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitModule(self, *args)
 
 class Mul(Node):
     def __init__(self, (left, right), lineno=None):
@@ -1078,8 +1078,8 @@
     def __repr__(self):
         return "Mul((%s, %s))" % (repr(self.left), repr(self.right))
 
-    def accept(self, visitor, args):
-        return visitor.visitMul(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitMul(self, *args)
 
 class Name(Node):
     def __init__(self, varname, lineno=None):
@@ -1095,8 +1095,24 @@
     def __repr__(self):
         return "Name(%s)" % (repr(self.varname),)
 
-    def accept(self, visitor, args):
-        return visitor.visitName(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitName(self, *args)
+
+class NoneConst(Node):
+    def __init__(self, lineno=None):
+        Node.__init__(self, lineno)
+
+    def getChildren(self):
+        return ()
+
+    def getChildNodes(self):
+        return ()
+
+    def __repr__(self):
+        return "NoneConst()"
+
+    def accept(self, visitor, *args):
+        return visitor.visitNoneConst(self, *args)
 
 class Not(Node):
     def __init__(self, expr, lineno=None):
@@ -1112,8 +1128,25 @@
     def __repr__(self):
         return "Not(%s)" % (repr(self.expr),)
 
-    def accept(self, visitor, args):
-        return visitor.visitNot(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitNot(self, *args)
+
+class NumberConst(Node):
+    def __init__(self, number_value, lineno=None):
+        Node.__init__(self, lineno)
+        self.number_value = number_value
+
+    def getChildren(self):
+        return self.number_value,
+
+    def getChildNodes(self):
+        return []
+
+    def __repr__(self):
+        return "NumberConst(%s)" % (repr(self.number_value),)
+
+    def accept(self, visitor, *args):
+        return visitor.visitNumberConst(self, *args)
 
 class Or(Node):
     def __init__(self, nodes, lineno=None):
@@ -1131,8 +1164,8 @@
     def __repr__(self):
         return "Or(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitOr(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitOr(self, *args)
 
 class Pass(Node):
     def __init__(self, lineno=None):
@@ -1147,8 +1180,8 @@
     def __repr__(self):
         return "Pass()"
 
-    def accept(self, visitor, args):
-        return visitor.visitPass(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitPass(self, *args)
 
 class Power(Node):
     def __init__(self, (left, right), lineno=None):
@@ -1165,8 +1198,8 @@
     def __repr__(self):
         return "Power((%s, %s))" % (repr(self.left), repr(self.right))
 
-    def accept(self, visitor, args):
-        return visitor.visitPower(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitPower(self, *args)
 
 class Print(Node):
     def __init__(self, nodes, dest, lineno=None):
@@ -1190,8 +1223,8 @@
     def __repr__(self):
         return "Print(%s, %s)" % (repr(self.nodes), repr(self.dest))
 
-    def accept(self, visitor, args):
-        return visitor.visitPrint(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitPrint(self, *args)
 
 class Printnl(Node):
     def __init__(self, nodes, dest, lineno=None):
@@ -1215,8 +1248,8 @@
     def __repr__(self):
         return "Printnl(%s, %s)" % (repr(self.nodes), repr(self.dest))
 
-    def accept(self, visitor, args):
-        return visitor.visitPrintnl(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitPrintnl(self, *args)
 
 class Raise(Node):
     def __init__(self, expr1, expr2, expr3, lineno=None):
@@ -1245,8 +1278,8 @@
     def __repr__(self):
         return "Raise(%s, %s, %s)" % (repr(self.expr1), repr(self.expr2), repr(self.expr3))
 
-    def accept(self, visitor, args):
-        return visitor.visitRaise(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitRaise(self, *args)
 
 class Return(Node):
     def __init__(self, value, lineno=None):
@@ -1262,8 +1295,8 @@
     def __repr__(self):
         return "Return(%s)" % (repr(self.value),)
 
-    def accept(self, visitor, args):
-        return visitor.visitReturn(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitReturn(self, *args)
 
 class RightShift(Node):
     def __init__(self, (left, right), lineno=None):
@@ -1280,8 +1313,8 @@
     def __repr__(self):
         return "RightShift((%s, %s))" % (repr(self.left), repr(self.right))
 
-    def accept(self, visitor, args):
-        return visitor.visitRightShift(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitRightShift(self, *args)
 
 class Slice(Node):
     def __init__(self, expr, flags, lower, upper, lineno=None):
@@ -1311,8 +1344,8 @@
     def __repr__(self):
         return "Slice(%s, %s, %s, %s)" % (repr(self.expr), repr(self.flags), repr(self.lower), repr(self.upper))
 
-    def accept(self, visitor, args):
-        return visitor.visitSlice(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitSlice(self, *args)
 
 class Sliceobj(Node):
     def __init__(self, nodes, lineno=None):
@@ -1330,8 +1363,8 @@
     def __repr__(self):
         return "Sliceobj(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitSliceobj(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitSliceobj(self, *args)
 
 class Stmt(Node):
     def __init__(self, nodes, lineno=None):
@@ -1349,8 +1382,25 @@
     def __repr__(self):
         return "Stmt(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitStmt(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitStmt(self, *args)
+
+class StringConst(Node):
+    def __init__(self, string_value, lineno=None):
+        Node.__init__(self, lineno)
+        self.string_value = string_value
+
+    def getChildren(self):
+        return self.string_value,
+
+    def getChildNodes(self):
+        return []
+
+    def __repr__(self):
+        return "StringConst(%s)" % (repr(self.string_value),)
+
+    def accept(self, visitor, *args):
+        return visitor.visitStringConst(self, *args)
 
 class Sub(Node):
     def __init__(self, (left, right), lineno=None):
@@ -1367,8 +1417,8 @@
     def __repr__(self):
         return "Sub((%s, %s))" % (repr(self.left), repr(self.right))
 
-    def accept(self, visitor, args):
-        return visitor.visitSub(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitSub(self, *args)
 
 class Subscript(Node):
     def __init__(self, expr, flags, subs, lineno=None):
@@ -1393,8 +1443,8 @@
     def __repr__(self):
         return "Subscript(%s, %s, %s)" % (repr(self.expr), repr(self.flags), repr(self.subs))
 
-    def accept(self, visitor, args):
-        return visitor.visitSubscript(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitSubscript(self, *args)
 
 class TryExcept(Node):
     def __init__(self, body, handlers, else_, lineno=None):
@@ -1421,8 +1471,8 @@
     def __repr__(self):
         return "TryExcept(%s, %s, %s)" % (repr(self.body), repr(self.handlers), repr(self.else_))
 
-    def accept(self, visitor, args):
-        return visitor.visitTryExcept(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitTryExcept(self, *args)
 
 class TryFinally(Node):
     def __init__(self, body, final, lineno=None):
@@ -1439,8 +1489,8 @@
     def __repr__(self):
         return "TryFinally(%s, %s)" % (repr(self.body), repr(self.final))
 
-    def accept(self, visitor, args):
-        return visitor.visitTryFinally(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitTryFinally(self, *args)
 
 class Tuple(Node):
     def __init__(self, nodes, lineno=None):
@@ -1458,8 +1508,8 @@
     def __repr__(self):
         return "Tuple(%s)" % (repr(self.nodes),)
 
-    def accept(self, visitor, args):
-        return visitor.visitTuple(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitTuple(self, *args)
 
 class UnaryAdd(Node):
     def __init__(self, expr, lineno=None):
@@ -1475,8 +1525,8 @@
     def __repr__(self):
         return "UnaryAdd(%s)" % (repr(self.expr),)
 
-    def accept(self, visitor, args):
-        return visitor.visitUnaryAdd(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitUnaryAdd(self, *args)
 
 class UnarySub(Node):
     def __init__(self, expr, lineno=None):
@@ -1492,8 +1542,8 @@
     def __repr__(self):
         return "UnarySub(%s)" % (repr(self.expr),)
 
-    def accept(self, visitor, args):
-        return visitor.visitUnarySub(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitUnarySub(self, *args)
 
 class While(Node):
     def __init__(self, test, body, else_, lineno=None):
@@ -1520,8 +1570,8 @@
     def __repr__(self):
         return "While(%s, %s, %s)" % (repr(self.test), repr(self.body), repr(self.else_))
 
-    def accept(self, visitor, args):
-        return visitor.visitWhile(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitWhile(self, *args)
 
 class Yield(Node):
     def __init__(self, value, lineno=None):
@@ -1537,8 +1587,8 @@
     def __repr__(self):
         return "Yield(%s)" % (repr(self.value),)
 
-    def accept(self, visitor, args):
-        return visitor.visitYield(self, args)
+    def accept(self, visitor, *args):
+        return visitor.visitYield(self, *args)
 
 
 class ASTVisitor(object):
@@ -1547,151 +1597,157 @@
     It could also use to identify base type for visit arguments of AST nodes
     """
 
-    def default(self, node, args):
+    def default(self, node, *args):
         for child in node.getChildNodes():
-            child.visit(self, args)
+            child.accept(self, *args)
 
 
-    def visitAdd(self, args):
-        return self.default( args )
-    def visitAnd(self, args):
-        return self.default( args )
-    def visitAssAttr(self, args):
-        return self.default( args )
-    def visitAssList(self, args):
-        return self.default( args )
-    def visitAssName(self, args):
-        return self.default( args )
-    def visitAssTuple(self, args):
-        return self.default( args )
-    def visitAssert(self, args):
-        return self.default( args )
-    def visitAssign(self, args):
-        return self.default( args )
-    def visitAugAssign(self, args):
-        return self.default( args )
-    def visitBackquote(self, args):
-        return self.default( args )
-    def visitBitand(self, args):
-        return self.default( args )
-    def visitBitor(self, args):
-        return self.default( args )
-    def visitBitxor(self, args):
-        return self.default( args )
-    def visitBreak(self, args):
-        return self.default( args )
-    def visitCallFunc(self, args):
-        return self.default( args )
-    def visitClass(self, args):
-        return self.default( args )
-    def visitCompare(self, args):
-        return self.default( args )
-    def visitConst(self, args):
-        return self.default( args )
-    def visitContinue(self, args):
-        return self.default( args )
-    def visitDecorators(self, args):
-        return self.default( args )
-    def visitDict(self, args):
-        return self.default( args )
-    def visitDiscard(self, args):
-        return self.default( args )
-    def visitDiv(self, args):
-        return self.default( args )
-    def visitEllipsis(self, args):
-        return self.default( args )
-    def visitExec(self, args):
-        return self.default( args )
-    def visitFloorDiv(self, args):
-        return self.default( args )
-    def visitFor(self, args):
-        return self.default( args )
-    def visitFrom(self, args):
-        return self.default( args )
-    def visitFunction(self, args):
-        return self.default( args )
-    def visitGenExpr(self, args):
-        return self.default( args )
-    def visitGenExprFor(self, args):
-        return self.default( args )
-    def visitGenExprIf(self, args):
-        return self.default( args )
-    def visitGenExprInner(self, args):
-        return self.default( args )
-    def visitGetattr(self, args):
-        return self.default( args )
-    def visitGlobal(self, args):
-        return self.default( args )
-    def visitIf(self, args):
-        return self.default( args )
-    def visitImport(self, args):
-        return self.default( args )
-    def visitInvert(self, args):
-        return self.default( args )
-    def visitKeyword(self, args):
-        return self.default( args )
-    def visitLambda(self, args):
-        return self.default( args )
-    def visitLeftShift(self, args):
-        return self.default( args )
-    def visitList(self, args):
-        return self.default( args )
-    def visitListComp(self, args):
-        return self.default( args )
-    def visitListCompFor(self, args):
-        return self.default( args )
-    def visitListCompIf(self, args):
-        return self.default( args )
-    def visitMod(self, args):
-        return self.default( args )
-    def visitModule(self, args):
-        return self.default( args )
-    def visitMul(self, args):
-        return self.default( args )
-    def visitName(self, args):
-        return self.default( args )
-    def visitNot(self, args):
-        return self.default( args )
-    def visitOr(self, args):
-        return self.default( args )
-    def visitPass(self, args):
-        return self.default( args )
-    def visitPower(self, args):
-        return self.default( args )
-    def visitPrint(self, args):
-        return self.default( args )
-    def visitPrintnl(self, args):
-        return self.default( args )
-    def visitRaise(self, args):
-        return self.default( args )
-    def visitReturn(self, args):
-        return self.default( args )
-    def visitRightShift(self, args):
-        return self.default( args )
-    def visitSlice(self, args):
-        return self.default( args )
-    def visitSliceobj(self, args):
-        return self.default( args )
-    def visitStmt(self, args):
-        return self.default( args )
-    def visitSub(self, args):
-        return self.default( args )
-    def visitSubscript(self, args):
-        return self.default( args )
-    def visitTryExcept(self, args):
-        return self.default( args )
-    def visitTryFinally(self, args):
-        return self.default( args )
-    def visitTuple(self, args):
-        return self.default( args )
-    def visitUnaryAdd(self, args):
-        return self.default( args )
-    def visitUnarySub(self, args):
-        return self.default( args )
-    def visitWhile(self, args):
-        return self.default( args )
-    def visitYield(self, args):
-        return self.default( args )
+    def visitAdd(self, node, *args):
+        return self.default( node, *args )
+    def visitAnd(self, node, *args):
+        return self.default( node, *args )
+    def visitAssAttr(self, node, *args):
+        return self.default( node, *args )
+    def visitAssList(self, node, *args):
+        return self.default( node, *args )
+    def visitAssName(self, node, *args):
+        return self.default( node, *args )
+    def visitAssTuple(self, node, *args):
+        return self.default( node, *args )
+    def visitAssert(self, node, *args):
+        return self.default( node, *args )
+    def visitAssign(self, node, *args):
+        return self.default( node, *args )
+    def visitAugAssign(self, node, *args):
+        return self.default( node, *args )
+    def visitBackquote(self, node, *args):
+        return self.default( node, *args )
+    def visitBitand(self, node, *args):
+        return self.default( node, *args )
+    def visitBitor(self, node, *args):
+        return self.default( node, *args )
+    def visitBitxor(self, node, *args):
+        return self.default( node, *args )
+    def visitBreak(self, node, *args):
+        return self.default( node, *args )
+    def visitCallFunc(self, node, *args):
+        return self.default( node, *args )
+    def visitClass(self, node, *args):
+        return self.default( node, *args )
+    def visitCompare(self, node, *args):
+        return self.default( node, *args )
+    def visitConst(self, node, *args):
+        return self.default( node, *args )
+    def visitContinue(self, node, *args):
+        return self.default( node, *args )
+    def visitDecorators(self, node, *args):
+        return self.default( node, *args )
+    def visitDict(self, node, *args):
+        return self.default( node, *args )
+    def visitDiscard(self, node, *args):
+        return self.default( node, *args )
+    def visitDiv(self, node, *args):
+        return self.default( node, *args )
+    def visitEllipsis(self, node, *args):
+        return self.default( node, *args )
+    def visitExec(self, node, *args):
+        return self.default( node, *args )
+    def visitFloorDiv(self, node, *args):
+        return self.default( node, *args )
+    def visitFor(self, node, *args):
+        return self.default( node, *args )
+    def visitFrom(self, node, *args):
+        return self.default( node, *args )
+    def visitFunction(self, node, *args):
+        return self.default( node, *args )
+    def visitGenExpr(self, node, *args):
+        return self.default( node, *args )
+    def visitGenExprFor(self, node, *args):
+        return self.default( node, *args )
+    def visitGenExprIf(self, node, *args):
+        return self.default( node, *args )
+    def visitGenExprInner(self, node, *args):
+        return self.default( node, *args )
+    def visitGetattr(self, node, *args):
+        return self.default( node, *args )
+    def visitGlobal(self, node, *args):
+        return self.default( node, *args )
+    def visitIf(self, node, *args):
+        return self.default( node, *args )
+    def visitImport(self, node, *args):
+        return self.default( node, *args )
+    def visitInvert(self, node, *args):
+        return self.default( node, *args )
+    def visitKeyword(self, node, *args):
+        return self.default( node, *args )
+    def visitLambda(self, node, *args):
+        return self.default( node, *args )
+    def visitLeftShift(self, node, *args):
+        return self.default( node, *args )
+    def visitList(self, node, *args):
+        return self.default( node, *args )
+    def visitListComp(self, node, *args):
+        return self.default( node, *args )
+    def visitListCompFor(self, node, *args):
+        return self.default( node, *args )
+    def visitListCompIf(self, node, *args):
+        return self.default( node, *args )
+    def visitMod(self, node, *args):
+        return self.default( node, *args )
+    def visitModule(self, node, *args):
+        return self.default( node, *args )
+    def visitMul(self, node, *args):
+        return self.default( node, *args )
+    def visitName(self, node, *args):
+        return self.default( node, *args )
+    def visitNoneConst(self, node, *args):
+        return self.default( node, *args )
+    def visitNot(self, node, *args):
+        return self.default( node, *args )
+    def visitNumberConst(self, node, *args):
+        return self.default( node, *args )
+    def visitOr(self, node, *args):
+        return self.default( node, *args )
+    def visitPass(self, node, *args):
+        return self.default( node, *args )
+    def visitPower(self, node, *args):
+        return self.default( node, *args )
+    def visitPrint(self, node, *args):
+        return self.default( node, *args )
+    def visitPrintnl(self, node, *args):
+        return self.default( node, *args )
+    def visitRaise(self, node, *args):
+        return self.default( node, *args )
+    def visitReturn(self, node, *args):
+        return self.default( node, *args )
+    def visitRightShift(self, node, *args):
+        return self.default( node, *args )
+    def visitSlice(self, node, *args):
+        return self.default( node, *args )
+    def visitSliceobj(self, node, *args):
+        return self.default( node, *args )
+    def visitStmt(self, node, *args):
+        return self.default( node, *args )
+    def visitStringConst(self, node, *args):
+        return self.default( node, *args )
+    def visitSub(self, node, *args):
+        return self.default( node, *args )
+    def visitSubscript(self, node, *args):
+        return self.default( node, *args )
+    def visitTryExcept(self, node, *args):
+        return self.default( node, *args )
+    def visitTryFinally(self, node, *args):
+        return self.default( node, *args )
+    def visitTuple(self, node, *args):
+        return self.default( node, *args )
+    def visitUnaryAdd(self, node, *args):
+        return self.default( node, *args )
+    def visitUnarySub(self, node, *args):
+        return self.default( node, *args )
+    def visitWhile(self, node, *args):
+        return self.default( node, *args )
+    def visitYield(self, node, *args):
+        return self.default( node, *args )
 
 for name, obj in globals().items():
     if isinstance(obj, type) and issubclass(obj, Node):

Modified: pypy/dist/pypy/interpreter/astcompiler/ast.txt
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/ast.txt	(original)
+++ pypy/dist/pypy/interpreter/astcompiler/ast.txt	Tue Aug 23 19:58:15 2005
@@ -27,6 +27,9 @@
 Return: value
 Yield: value
 Const: value*
+NoneConst:
+StringConst: string_value*
+NumberConst: number_value*
 Print: nodes!, dest&
 Printnl: nodes!, dest&
 Discard: expr
@@ -92,7 +95,7 @@
         self.kwargs = 1
 
 init(GenExpr):
-    self.argnames = ['[outmost-iterable]']
+    self.argnames = [AssName('[outmost-iterable]', OP_ASSIGN)]
     self.varargs = self.kwargs = None
 
 init(GenExprFor):

Modified: pypy/dist/pypy/interpreter/astcompiler/astgen.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/astgen.py	(original)
+++ pypy/dist/pypy/interpreter/astcompiler/astgen.py	Tue Aug 23 19:58:15 2005
@@ -192,12 +192,12 @@
             print >> buf, '        return "%s()"' % self.name
 
     def _gen_visit(self, buf):
-        print >> buf, "    def accept(self, visitor, args):"
-        print >> buf, "        return visitor.visit%s(self, args)" % self.name
+        print >> buf, "    def accept(self, visitor, *args):"
+        print >> buf, "        return visitor.visit%s(self, *args)" % self.name
 
     def gen_base_visit(self, buf):
-        print >> buf, "    def visit%s(self, args):" % self.name
-        print >> buf, "        return self.default( args )"
+        print >> buf, "    def visit%s(self, node, *args):" % self.name
+        print >> buf, "        return self.default( node, *args )"
 
 rx_init = re.compile('init\((.*)\):')
 
@@ -233,9 +233,9 @@
     It could also use to identify base type for visit arguments of AST nodes
     """
 
-    def default(self, node, args):
+    def default(self, node, *args):
         for child in node.getChildNodes():
-            child.visit(self, args)
+            child.accept(self, *args)
 
 '''
 
@@ -265,7 +265,7 @@
 
 This file is automatically generated by Tools/compiler/astgen.py
 """
-from consts import CO_VARARGS, CO_VARKEYWORDS
+from consts import CO_VARARGS, CO_VARKEYWORDS, OP_ASSIGN
 
 def flatten(list):
     l = []
@@ -297,7 +297,7 @@
         return self.getChildren()
     def getChildNodes(self):
         return [] # implemented by subclasses
-    def visit(self, visitor, *args):
+    def accept(self, visitor, *args):
         return visitor.visitNode(self, *args)
     def flatten(self):
         res = []
@@ -310,7 +310,7 @@
         return res
 
 class EmptyNode(Node):
-    def visit(self, visitor, *args):
+    def accept(self, visitor, *args):
         return visitor.visitEmptyNode(self, *args)
 
 class Expression(Node):
@@ -329,7 +329,7 @@
     def __repr__(self):
         return "Expression(%s)" % (repr(self.node))
 
-    def visit(self, visitor, *args):
+    def accept(self, visitor, *args):
         return visitor.visitExpression(self, *args)
 
 ### EPILOGUE

Modified: pypy/dist/pypy/interpreter/astcompiler/pyassem.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/pyassem.py	(original)
+++ pypy/dist/pypy/interpreter/astcompiler/pyassem.py	Tue Aug 23 19:58:15 2005
@@ -25,6 +25,7 @@
                 print "    next", self.current.next
                 print "   ", self.current.get_children()
             print repr(block)
+        assert block is not None
         self.current = block
 
     def nextBlock(self, block=None):
@@ -354,13 +355,19 @@
         self.varnames = []
         for var in args:
             if isinstance(var, ast.AssName):
-                self.varnames.append(var.name)
+                _name = var.name
+                assert type(_name) == str
+                self.varnames.append( _name )
             elif isinstance(var, TupleArg):
-                self.varnames.append(var.getName())
+                _name = var.getName()
+                assert type(_name) == str
+                self.varnames.append( _name )
             elif isinstance(var, ast.AssTuple):
                 for n in var.flatten():
                     assert isinstance(n, ast.AssName)
-                    self.varnames.append(n.name)
+                    _name = n.name
+                    assert type(_name) == str
+                    self.varnames.append( _name )
         self.stage = RAW
         self.orderedblocks = []
 

Modified: pypy/dist/pypy/interpreter/astcompiler/pycodegen.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/pycodegen.py	(original)
+++ pypy/dist/pypy/interpreter/astcompiler/pycodegen.py	Tue Aug 23 19:58:15 2005
@@ -127,7 +127,7 @@
         mtime = struct.pack('<i', mtime)
         return self.MAGIC + mtime
 
-class LocalNameFinder:
+class LocalNameFinder(ast.ASTVisitor):
     """Find local names in scope"""
     def __init__(self, names=()):
         self.names = misc.Set()
@@ -176,7 +176,7 @@
             return 1
     return 0
 
-class CodeGenerator:
+class CodeGenerator(ast.ASTVisitor):
     """Defines basic code generator for Python bytecode
 
     This class is an abstract base class.  Concrete subclasses must
@@ -217,23 +217,23 @@
 
 
     def emit(self, *inst ):
-        self.graph.emit( *inst )
+        return self.graph.emit( *inst )
 
     def nextBlock(self, block=None ):
         """graph delegation"""
-        self.graph.newBlock( block )
+        return self.graph.nextBlock( block )
 
     def startBlock(self, block ):
         """graph delegation"""
-        self.graph.startBlock( block )
+        return self.graph.startBlock( block )
 
     def newBlock(self):
         """graph delegation"""
-        self.graph.newBlock()
+        return self.graph.newBlock()
 
     def setDocstring(self, doc):
         """graph delegation"""
-        self.graph.setDocstring( doc )
+        return self.graph.setDocstring( doc )
     
     def getCode(self):
         """Return a code object"""
@@ -344,7 +344,7 @@
             self.storeName('__doc__')
         lnf = walk(node.node, self.NameFinder(), verbose=0)
         self.locals.push(lnf.getLocals())
-        self.visit(node.node)
+        node.node.accept( self )
         self.emit('LOAD_CONST', None)
         self.emit('RETURN_VALUE')
 
@@ -352,7 +352,7 @@
         self.set_lineno(node)
         self.scopes = self.parseSymbols(node)
         self.scope = self.scopes[node]
-        self.visit(node.node)
+        node.node.accept( self )
         self.emit('RETURN_VALUE')
 
     def visitFunction(self, node):
@@ -367,7 +367,7 @@
     def _visitFuncOrLambda(self, node, isLambda=0):
         if not isLambda and node.decorators:
             for decorator in node.decorators.nodes:
-                self.visit(decorator)
+                decorator.accept( self )
             ndecorators = len(node.decorators.nodes)
         else:
             ndecorators = 0
@@ -378,7 +378,7 @@
         gen.finish()
         self.set_lineno(node)
         for default in node.defaults:
-            self.visit(default)
+            default.accept( self )
         frees = gen.scope.get_free_vars()
         if frees:
             for name in frees:
@@ -400,7 +400,7 @@
         self.set_lineno(node)
         self.emit('LOAD_CONST', node.name)
         for base in node.bases:
-            self.visit(base)
+            base.accept( self )
         self.emit('BUILD_TUPLE', len(node.bases))
         frees = gen.scope.get_free_vars()
         for name in frees:
@@ -427,17 +427,17 @@
                 # XXX will need to check generator stuff here
                 continue
             self.set_lineno(test)
-            self.visit(test)
+            test.accept( self )
             nextTest = self.newBlock()
             self.emit('JUMP_IF_FALSE', nextTest)
             self.nextBlock()
             self.emit('POP_TOP')
-            self.visit(suite)
+            suite.accept( self )
             self.emit('JUMP_FORWARD', end)
             self.startBlock(nextTest)
             self.emit('POP_TOP')
         if node.else_:
-            self.visit(node.else_)
+            node.else_.accept( self )
         self.nextBlock(end)
 
     def visitWhile(self, node):
@@ -453,12 +453,12 @@
         self.setups.push((LOOP, loop))
 
         self.set_lineno(node, force=True)
-        self.visit(node.test)
+        node.test.accept( self )
         self.emit('JUMP_IF_FALSE', else_ or after)
 
         self.nextBlock()
         self.emit('POP_TOP')
-        self.visit(node.body)
+        node.body.accept( self )
         self.emit('JUMP_ABSOLUTE', loop)
 
         self.startBlock(else_) # or just the POPs if not else clause
@@ -466,7 +466,7 @@
         self.emit('POP_BLOCK')
         self.setups.pop()
         if node.else_:
-            self.visit(node.else_)
+            node.else_.accept( self )
         self.nextBlock(after)
 
     def visitFor(self, node):
@@ -477,20 +477,20 @@
 
         self.set_lineno(node)
         self.emit('SETUP_LOOP', after)
-        self.visit(node.list)
+        node.list.accept( self )
         self.emit('GET_ITER')
 
         self.nextBlock(start)
         self.set_lineno(node, force=1)
         self.emit('FOR_ITER', anchor)
-        self.visit(node.assign)
-        self.visit(node.body)
+        node.assign.accept( self )
+        node.body.accept( self )
         self.emit('JUMP_ABSOLUTE', start)
         self.nextBlock(anchor)
         self.emit('POP_BLOCK')
         self.setups.pop()
         if node.else_:
-            self.visit(node.else_)
+            node.else_.accept( self )
         self.nextBlock(after)
 
     def visitBreak(self, node):
@@ -528,11 +528,11 @@
     def visitTest(self, node, jump):
         end = self.newBlock()
         for child in node.nodes[:-1]:
-            self.visit(child)
+            child.accept( self )
             self.emit(jump, end)
             self.nextBlock()
             self.emit('POP_TOP')
-        self.visit(node.nodes[-1])
+        node.nodes[-1].accept( self )
         self.nextBlock(end)
 
     def visitAnd(self, node):
@@ -542,10 +542,10 @@
         self.visitTest(node, 'JUMP_IF_TRUE')
 
     def visitCompare(self, node):
-        self.visit(node.expr)
+        node.expr.accept( self )
         cleanup = self.newBlock()
         for op, code in node.ops[:-1]:
-            self.visit(code)
+            code.accept( self )
             self.emit('DUP_TOP')
             self.emit('ROT_THREE')
             self.emit('COMPARE_OP', op)
@@ -555,7 +555,7 @@
         # now do the last comparison
         if node.ops:
             op, code = node.ops[-1]
-            self.visit(code)
+            code.accept( self )
             self.emit('COMPARE_OP', op)
         if len(node.ops) > 1:
             end = self.newBlock()
@@ -580,16 +580,16 @@
 
         stack = []
         for i, for_ in zip(range(len(node.quals)), node.quals):
-            start, anchor = self.visit(for_)
+            start, anchor = for_.accept( self )
             cont = None
             for if_ in for_.ifs:
                 if cont is None:
                     cont = self.newBlock()
-                self.visit(if_, cont)
+                if_.accept( self, cont)
             stack.insert(0, (start, cont, anchor))
 
         self._implicitNameOp('LOAD', append)
-        self.visit(node.expr)
+        node.expr.accept( self )
         self.emit('CALL_FUNCTION', 1)
         self.emit('POP_TOP')
 
@@ -610,18 +610,18 @@
         start = self.newBlock()
         anchor = self.newBlock()
 
-        self.visit(node.list)
+        node.list.accept( self )
         self.emit('GET_ITER')
         self.nextBlock(start)
         self.set_lineno(node, force=True)
         self.emit('FOR_ITER', anchor)
         self.nextBlock()
-        self.visit(node.assign)
+        node.assign.accept( self )
         return start, anchor
 
     def visitListCompIf(self, node, branch):
         self.set_lineno(node, force=True)
-        self.visit(node.test)
+        node.test.accept( self )
         self.emit('JUMP_IF_FALSE', branch)
         self.newBlock()
         self.emit('POP_TOP')
@@ -643,7 +643,7 @@
             self.emit('MAKE_FUNCTION', 0)
 
         # precomputation of outmost iterable
-        self.visit(node.code.quals[0].iter)
+        node.code.quals[0].iter.accept( self )
         self.emit('GET_ITER')
         self.emit('CALL_FUNCTION', 1)
 
@@ -653,15 +653,15 @@
 
         stack = []
         for i, for_ in zip(range(len(node.quals)), node.quals):
-            start, anchor = self.visit(for_)
+            start, anchor = for_.accept( self )
             cont = None
             for if_ in for_.ifs:
                 if cont is None:
                     cont = self.newBlock()
-                self.visit(if_, cont)
+                if_.accept( self, cont)
             stack.insert(0, (start, cont, anchor))
 
-        self.visit(node.expr)
+        node.expr.accept( self )
         self.emit('YIELD_VALUE')
 
         for start, cont, anchor in stack:
@@ -682,19 +682,19 @@
         if node.is_outmost:
             self.loadName('[outmost-iterable]')
         else:
-            self.visit(node.iter)
+            node.iter.accept( self )
             self.emit('GET_ITER')
 
         self.nextBlock(start)
         self.set_lineno(node, force=True)
         self.emit('FOR_ITER', anchor)
         self.nextBlock()
-        self.visit(node.assign)
+        node.assign.accept( self )
         return start, anchor
 
     def visitGenExprIf(self, node, branch):
         self.set_lineno(node, force=True)
-        self.visit(node.test)
+        node.test.accept( self )
         self.emit('JUMP_IF_FALSE', branch)
         self.newBlock()
         self.emit('POP_TOP')
@@ -711,13 +711,13 @@
             # loaded as a global even if there is a local name.  I guess this
             # is a sort of renaming op.
             self.nextBlock()
-            self.visit(node.test)
+            node.test.accept( self )
             self.emit('JUMP_IF_TRUE', end)
             self.nextBlock()
             self.emit('POP_TOP')
             self.emit('LOAD_GLOBAL', 'AssertionError')
             if node.fail:
-                self.visit(node.fail)
+                node.fail.accept( self )
                 self.emit('RAISE_VARARGS', 2)
             else:
                 self.emit('RAISE_VARARGS', 1)
@@ -728,13 +728,13 @@
         self.set_lineno(node)
         n = 0
         if node.expr1:
-            self.visit(node.expr1)
+            node.expr1.accept( self )
             n = n + 1
         if node.expr2:
-            self.visit(node.expr2)
+            node.expr2.accept( self )
             n = n + 1
         if node.expr3:
-            self.visit(node.expr3)
+            node.expr3.accept( self )
             n = n + 1
         self.emit('RAISE_VARARGS', n)
 
@@ -750,7 +750,7 @@
         self.emit('SETUP_EXCEPT', handlers)
         self.nextBlock(body)
         self.setups.push((EXCEPT, body))
-        self.visit(node.body)
+        node.body.accept( self )
         self.emit('POP_BLOCK')
         self.setups.pop()
         self.emit('JUMP_FORWARD', lElse)
@@ -762,7 +762,7 @@
             self.set_lineno(expr)
             if expr:
                 self.emit('DUP_TOP')
-                self.visit(expr)
+                expr.accept( self )
                 self.emit('COMPARE_OP', 'exception match')
                 next = self.newBlock()
                 self.emit('JUMP_IF_FALSE', next)
@@ -770,11 +770,11 @@
                 self.emit('POP_TOP')
             self.emit('POP_TOP')
             if target:
-                self.visit(target)
+                target.accept( self )
             else:
                 self.emit('POP_TOP')
             self.emit('POP_TOP')
-            self.visit(body)
+            body.accept( self )
             self.emit('JUMP_FORWARD', end)
             if expr:
                 self.nextBlock(next)
@@ -785,7 +785,7 @@
         self.emit('END_FINALLY')
         if node.else_:
             self.nextBlock(lElse)
-            self.visit(node.else_)
+            node.else_.accept( self )
         self.nextBlock(end)
 
     def visitTryFinally(self, node):
@@ -795,13 +795,13 @@
         self.emit('SETUP_FINALLY', final)
         self.nextBlock(body)
         self.setups.push((TRY_FINALLY, body))
-        self.visit(node.body)
+        node.body.accept( self )
         self.emit('POP_BLOCK')
         self.setups.pop()
         self.emit('LOAD_CONST', None)
         self.nextBlock(final)
         self.setups.push((END_FINALLY, final))
-        self.visit(node.final)
+        node.final.accept( self )
         self.emit('END_FINALLY')
         self.setups.pop()
 
@@ -809,7 +809,7 @@
 
     def visitDiscard(self, node):
         self.set_lineno(node)
-        self.visit(node.expr)
+        node.expr.accept( self )
         self.emit('POP_TOP')
 
     def visitConst(self, node):
@@ -826,7 +826,7 @@
 
     def visitKeyword(self, node):
         self.emit('LOAD_CONST', node.name)
-        self.visit(node.expr)
+        node.expr.accept( self )
 
     def visitGlobal(self, node):
         # no code to generate
@@ -877,21 +877,21 @@
             self.emit('LOAD_ATTR', elt)
 
     def visitGetattr(self, node):
-        self.visit(node.expr)
+        node.expr.accept( self )
         self.emit('LOAD_ATTR', self.mangle(node.attrname))
 
     # next five implement assignments
 
     def visitAssign(self, node):
         self.set_lineno(node)
-        self.visit(node.expr)
+        node.expr.accept( self )
         dups = len(node.nodes) - 1
         for i in range(len(node.nodes)):
             elt = node.nodes[i]
             if i < dups:
                 self.emit('DUP_TOP')
             if isinstance(elt, ast.Node):
-                self.visit(elt)
+                elt.accept( self )
 
     def visitAssName(self, node):
         if node.flags == 'OP_ASSIGN':
@@ -903,7 +903,7 @@
             print "oops", node.flags
 
     def visitAssAttr(self, node):
-        self.visit(node.expr)
+        node.expr.accept( self )
         if node.flags == 'OP_ASSIGN':
             self.emit('STORE_ATTR', self.mangle(node.attrname))
         elif node.flags == 'OP_DELETE':
@@ -916,7 +916,7 @@
         if findOp(node) != 'OP_DELETE':
             self.emit(op, len(node.nodes))
         for child in node.nodes:
-            self.visit(child)
+            child.accept( self )
 
     if VERSION > 1:
         visitAssTuple = _visitAssSequence
@@ -933,10 +933,10 @@
     def visitAugAssign(self, node):
         self.set_lineno(node)
         aug_node = wrap_aug(node.node)
-        self.visit(aug_node, "load")
-        self.visit(node.expr)
+        aug_node.accept( self, "load")
+        node.expr.accept( self )
         self.emit(self._augmented_opcode[node.op])
-        self.visit(aug_node, "store")
+        aug_node.accept( self, "store")
 
     _augmented_opcode = {
         '+=' : 'INPLACE_ADD',
@@ -961,7 +961,7 @@
 
     def visitAugGetattr(self, node, mode):
         if mode == "load":
-            self.visit(node.expr)
+            node.expr.accept( self )
             self.emit('DUP_TOP')
             self.emit('LOAD_ATTR', self.mangle(node.attrname))
         elif mode == "store":
@@ -995,32 +995,32 @@
             self.emit('STORE_SUBSCR')
 
     def visitExec(self, node):
-        self.visit(node.expr)
+        node.expr.accept( self )
         if node.locals is None:
             self.emit('LOAD_CONST', None)
         else:
-            self.visit(node.locals)
+            node.locals.accept( self )
         if node.globals is None:
             self.emit('DUP_TOP')
         else:
-            self.visit(node.globals)
+            node.globals.accept( self )
         self.emit('EXEC_STMT')
 
     def visitCallFunc(self, node):
         pos = 0
         kw = 0
         self.set_lineno(node)
-        self.visit(node.node)
+        node.node.accept( self )
         for arg in node.args:
-            self.visit(arg)
+            arg.accept( self )
             if isinstance(arg, ast.Keyword):
                 kw = kw + 1
             else:
                 pos = pos + 1
         if node.star_args is not None:
-            self.visit(node.star_args)
+            node.star_args.accept( self )
         if node.dstar_args is not None:
-            self.visit(node.dstar_args)
+            node.dstar_args.accept( self )
         have_star = node.star_args is not None
         have_dstar = node.dstar_args is not None
         opcode = callfunc_opcode_info[have_star, have_dstar]
@@ -1029,11 +1029,11 @@
     def visitPrint(self, node, newline=0):
         self.set_lineno(node)
         if node.dest:
-            self.visit(node.dest)
+            node.dest.accept( self )
         for child in node.nodes:
             if node.dest:
                 self.emit('DUP_TOP')
-            self.visit(child)
+            child.accept( self )
             if node.dest:
                 self.emit('ROT_TWO')
                 self.emit('PRINT_ITEM_TO')
@@ -1051,25 +1051,25 @@
 
     def visitReturn(self, node):
         self.set_lineno(node)
-        self.visit(node.value)
+        node.value.accept( self )
         self.emit('RETURN_VALUE')
 
     def visitYield(self, node):
         self.set_lineno(node)
-        self.visit(node.value)
+        node.value.accept( self )
         self.emit('YIELD_VALUE')
 
     # slice and subscript stuff
 
     def visitSlice(self, node, aug_flag=None):
         # aug_flag is used by visitAugSlice
-        self.visit(node.expr)
+        node.expr.accept( self )
         slice = 0
         if node.lower:
-            self.visit(node.lower)
+            node.lower.accept( self )
             slice = slice | 1
         if node.upper:
-            self.visit(node.upper)
+            node.upper.accept( self )
             slice = slice | 2
         if aug_flag:
             if slice == 0:
@@ -1089,9 +1089,9 @@
             raise
 
     def visitSubscript(self, node, aug_flag=None):
-        self.visit(node.expr)
+        node.expr.accept( self )
         for sub in node.subs:
-            self.visit(sub)
+            sub.accept( self )
         if aug_flag:
             self.emit('DUP_TOPX', 2)
         if len(node.subs) > 1:
@@ -1106,8 +1106,8 @@
     # binary ops
 
     def binaryOp(self, node, op):
-        self.visit(node.left)
-        self.visit(node.right)
+        node.left.accept( self )
+        node.right.accept( self )
         self.emit(op)
 
     def visitAdd(self, node):
@@ -1140,7 +1140,7 @@
     # unary ops
 
     def unaryOp(self, node, op):
-        self.visit(node.expr)
+        node.expr.accept( self )
         self.emit(op)
 
     def visitInvert(self, node):
@@ -1164,9 +1164,9 @@
     # bit ops
 
     def bitOp(self, nodes, op):
-        self.visit(nodes[0])
+        nodes[0].accept( self )
         for node in nodes[1:]:
-            self.visit(node)
+            node.accept( self )
             self.emit(op)
 
     def visitBitand(self, node):
@@ -1186,18 +1186,18 @@
     def visitTuple(self, node):
         self.set_lineno(node)
         for elt in node.nodes:
-            self.visit(elt)
+            elt.accept( self )
         self.emit('BUILD_TUPLE', len(node.nodes))
 
     def visitList(self, node):
         self.set_lineno(node)
         for elt in node.nodes:
-            self.visit(elt)
+            elt.accept( self )
         self.emit('BUILD_LIST', len(node.nodes))
 
     def visitSliceobj(self, node):
         for child in node.nodes:
-            self.visit(child)
+            child.accept( self )
         self.emit('BUILD_SLICE', len(node.nodes))
 
     def visitDict(self, node):
@@ -1205,8 +1205,8 @@
         self.emit('BUILD_MAP', 0)
         for k, v in node.items:
             self.emit('DUP_TOP')
-            self.visit(k)
-            self.visit(v)
+            k.accept( self )
+            v.accept( self )
             self.emit('ROT_THREE')
             self.emit('STORE_SUBSCR')
 
@@ -1259,7 +1259,7 @@
     def visitDiscard(self, node):
         # XXX Discard means it's an expression.  Perhaps this is a bad
         # name.
-        self.visit(node.expr)
+        node.expr.accept( self )
         self.emit('PRINT_EXPR')
 
 class AbstractFunctionCode:

Modified: pypy/dist/pypy/interpreter/astcompiler/symbols.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/symbols.py	(original)
+++ pypy/dist/pypy/interpreter/astcompiler/symbols.py	Tue Aug 23 19:58:15 2005
@@ -211,7 +211,7 @@
     def __init__(self, name, module):
         self.__super_init(name, module, name)
 
-class SymbolVisitor:
+class SymbolVisitor(ast.ASTVisitor):
     def __init__(self):
         self.scopes = {}
         self.klass = None
@@ -220,22 +220,22 @@
 
     def visitModule(self, node):
         scope = self.module = self.scopes[node] = ModuleScope()
-        self.visit(node.node, scope)
+        node.node.accept(self, scope)
 
     visitExpression = visitModule
 
     def visitFunction(self, node, parent):
         if node.decorators:
-            self.visit(node.decorators, parent)
+            node.decorators.accept(self, parent)
         parent.add_def(node.name)
         for n in node.defaults:
-            self.visit(n, parent)
+            n.accept( self, parent)
         scope = FunctionScope(node.name, self.module, self.klass)
         if parent.nested or isinstance(parent, FunctionScope):
             scope.nested = 1
         self.scopes[node] = scope
         self._do_args(scope, node.argnames)
-        self.visit(node.code, scope)
+        node.code.accept(self, scope)
         self.handle_free_vars(scope, parent)
 
     def visitGenExpr(self, node, parent):
@@ -245,24 +245,24 @@
             scope.nested = 1
 
         self.scopes[node] = scope
-        self.visit(node.code, scope)
+        node.code.accept(self, scope)
 
         self.handle_free_vars(scope, parent)
 
     def visitGenExprInner(self, node, scope):
         for genfor in node.quals:
-            self.visit(genfor, scope)
+            genfor.accept( self, scope)
 
-        self.visit(node.expr, scope)
+        node.expr.accept( self, scope)
 
     def visitGenExprFor(self, node, scope):
-        self.visit(node.assign, scope, 1)
-        self.visit(node.iter, scope)
+        node.assign.accept(self, scope, 1)
+        node.iter.accept(self, scope)
         for if_ in node.ifs:
-            self.visit(if_, scope)
+            if_.accept( self, scope)
 
     def visitGenExprIf(self, node, scope):
-        self.visit(node.test, scope)
+        node.test.accept( self, scope)
 
     def visitLambda(self, node, parent, assign=0):
         # Lambda is an expression, so it could appear in an expression
@@ -271,13 +271,13 @@
         assert not assign
 
         for n in node.defaults:
-            self.visit(n, parent)
+            n.accept( self, parent)
         scope = LambdaScope(self.module, self.klass)
         if parent.nested or isinstance(parent, FunctionScope):
             scope.nested = 1
         self.scopes[node] = scope
         self._do_args(scope, node.argnames)
-        self.visit(node.code, scope)
+        node.code.accept(self, scope)
         self.handle_free_vars(scope, parent)
 
     def _do_args(self, scope, args):
@@ -296,7 +296,7 @@
     def visitClass(self, node, parent):
         parent.add_def(node.name)
         for n in node.bases:
-            self.visit(n, parent)
+            n.accept(self, parent)
         scope = ClassScope(node.name, self.module)
         if parent.nested or isinstance(parent, FunctionScope):
             scope.nested = 1
@@ -306,7 +306,7 @@
         self.scopes[node] = scope
         prev = self.klass
         self.klass = node.name
-        self.visit(node.code, scope)
+        node.code.accept(self, scope)
         self.klass = prev
         self.handle_free_vars(scope, parent)
 
@@ -325,11 +325,11 @@
     # operations that bind new names
 
     def visitFor(self, node, scope):
-        self.visit(node.assign, scope, 1)
-        self.visit(node.list, scope)
-        self.visit(node.body, scope)
+        node.assign.accept( self, scope, 1)
+        node.list.accept( self, scope)
+        node.body.accept( self, scope)
         if node.else_:
-            self.visit(node.else_, scope)
+            node.else_.accept( self, scope)
 
     def visitFrom(self, node, scope):
         for name, asname in node.names:
@@ -362,34 +362,34 @@
         the assign flag to their children.
         """
         for n in node.nodes:
-            self.visit(n, scope, 1)
-        self.visit(node.expr, scope)
+            n.accept( self, scope, 1)
+        node.expr.accept( self, scope)
 
     def visitAssName(self, node, scope, assign=1):
         scope.add_def(node.name)
 
     def visitAssAttr(self, node, scope, assign=0):
-        self.visit(node.expr, scope, 0)
+        node.expr.accept( self, scope, 0)
 
     def visitSubscript(self, node, scope, assign=0):
-        self.visit(node.expr, scope, 0)
+        node.expr.accept( self, scope, 0)
         for n in node.subs:
-            self.visit(n, scope, 0)
+            n.accept( self, scope, 0)
 
     def visitSlice(self, node, scope, assign=0):
-        self.visit(node.expr, scope, 0)
+        node.expr.accept( self, scope, 0)
         if node.lower:
-            self.visit(node.lower, scope, 0)
+            node.lower.accept( self, scope, 0)
         if node.upper:
-            self.visit(node.upper, scope, 0)
+            node.upper.accept( self, scope, 0)
 
     def visitAugAssign(self, node, scope):
         # If the LHS is a name, then this counts as assignment.
         # Otherwise, it's just use.
-        self.visit(node.node, scope)
+        node.node.accept( self, scope)
         if isinstance(node.node, ast.Name):
-            self.visit(node.node, scope, 1) # XXX worry about this
-        self.visit(node.expr, scope)
+            node.node.accept( self, scope, 1) # XXX worry about this
+        node.expr.accept( self, scope)
 
     # prune if statements if tests are false
 
@@ -401,16 +401,16 @@
                 if type(test.value) in self._const_types:
                     if not test.value:
                         continue
-            self.visit(test, scope)
-            self.visit(body, scope)
+            test.accept( self, scope)
+            body.accept( self, scope)
         if node.else_:
-            self.visit(node.else_, scope)
+            node.else_.accept( self, scope)
 
     # a yield statement signals a generator
 
     def visitYield(self, node, scope):
         scope.generator = 1
-        self.visit(node.value, scope)
+        node.value.accept( self, scope)
 
 def sort(l):
     l = l[:]

Modified: pypy/dist/pypy/interpreter/astcompiler/visitor.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/visitor.py	(original)
+++ pypy/dist/pypy/interpreter/astcompiler/visitor.py	Tue Aug 23 19:58:15 2005
@@ -106,6 +106,10 @@
     walker.preorder(tree, visitor)
     return walker.visitor
 
+def walk(tree, visitor, verbose=None):
+    tree.accept( visitor )
+    return visitor
+
 def dumpNode(node):
     print node.__class__
     for attr in dir(node):

Modified: pypy/dist/pypy/interpreter/pyparser/astbuilder.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyparser/astbuilder.py	(original)
+++ pypy/dist/pypy/interpreter/pyparser/astbuilder.py	Tue Aug 23 19:58:15 2005
@@ -281,7 +281,7 @@
         first_child = stmt.nodes[0]
         if isinstance(first_child, ast.Discard):
             expr = first_child.expr
-            if isinstance(expr, StringConst):
+            if isinstance(expr, ast.StringConst):
                 # This *is* a docstring, remove it from stmt list
                 del stmt.nodes[0]
                 doc = expr.string_value
@@ -495,14 +495,14 @@
         elif top.name == tok.NAME:
             builder.push( ast.Name(top.get_value()) )
         elif top.name == tok.NUMBER:
-            builder.push(NumberConst(eval_number(top.get_value())))
+            builder.push(ast.NumberConst(eval_number(top.get_value())))
         elif top.name == tok.STRING:
             # need to concatenate strings in atoms
             s = ''
             for token in atoms:
                 assert isinstance(token, TokenObject)
                 s += eval_string(token.get_value())
-            builder.push(StringConst(s))
+            builder.push(ast.StringConst(s))
         elif top.name == tok.BACKQUOTE:
             builder.push(ast.Backquote(atoms[1]))
         else:
@@ -707,7 +707,7 @@
     for n in range(0,l,2):
         node = atoms[n]
         if isinstance(node, TokenObject) and node.name == tok.NEWLINE:
-            nodes.append(ast.Discard(NoneConst()))
+            nodes.append(ast.Discard(ast.NoneConst()))
         else:
             nodes.append(node)
     builder.push(ast.Stmt(nodes))
@@ -717,7 +717,7 @@
     if len(atoms) > 2:
         assert False, "return several stmts not implemented"
     elif len(atoms) == 1:
-        builder.push(ast.Return(NoneConst(), None)) # XXX lineno
+        builder.push(ast.Return(ast.NoneConst(), None)) # XXX lineno
     else:
         builder.push(ast.Return(atoms[1], None)) # XXX lineno
 
@@ -851,7 +851,7 @@
                 sliceobj_infos = []
                 for value in sliceinfos:
                     if value is None:
-                        sliceobj_infos.append(NoneConst())
+                        sliceobj_infos.append(ast.NoneConst())
                     else:
                         sliceobj_infos.append(value)
                 builder.push(SlicelistObject('sliceobj', sliceobj_infos, None))
@@ -1306,40 +1306,6 @@
     }
 
 ## Stack elements definitions ###################################
-class StringConst(ast.Const):
-    """specicifc Const node for strings"""
-    def __init__(self, value, lineno=None):
-        self.lineno = lineno
-        # don't use "value" for attribute's name to avoid confusing
-        # the annotator
-        self.string_value = value
-
-    def __repr__(self):
-        return "Const(%s)" % (repr(self.string_value),)
-
-    def getChildren(self):
-        return self.string_value,
-
-class NumberConst(ast.Const):
-    """specific Const node for numbers"""
-    def __init__(self, value, lineno=None):
-        self.lineno = lineno
-        # don't use "value" for attribute's name to avoid confusing
-        # the annotator
-        self.number_value = value
-
-    def __repr__(self):
-        return "Const(%s)" % (repr(self.number_value),)
-
-    def getChildren(self):
-        return self.number_value,
-
-class NoneConst(ast.Const):
-    """specific Const node for None (probably not really needed)"""
-    def __init__(self, lineno=None):
-        self.lineno = lineno
-        self.value = None
-
 
 class BaseRuleObject(ast.Node):
     """Base class for unnamed rules"""

Modified: pypy/dist/pypy/interpreter/pyparser/test/test_astcompiler.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyparser/test/test_astcompiler.py	(original)
+++ pypy/dist/pypy/interpreter/pyparser/test/test_astcompiler.py	Tue Aug 23 19:58:15 2005
@@ -7,6 +7,7 @@
 
 from pypy.interpreter.astcompiler import ast, misc, pycodegen
 
+from test_astbuilder import TESTS
 
 TARGET_DICT = {
     'single' : 'single_input',
@@ -31,17 +32,18 @@
     
 
 def compare_code( code1, code2 ):
-    print "Filename", code1.co_filename, code2.co_filename
+    #print "Filename", code1.co_filename, code2.co_filename
     assert code1.co_filename == code2.co_filename
-    print repr(code1.co_code)
-    print repr(code2.co_code)
+    #print repr(code1.co_code)
+    #print repr(code2.co_code)
     assert code1.co_code == code2.co_code
+    assert code1.co_varnames == code2.co_varnames
 
 def check_compile( expr ):
     import new
     ast_tree = ast_parse_expr( expr )
     misc.set_filename("<?>", ast_tree)
-    print ast_tree
+    #print ast_tree
     codegenerator = pycodegen.InteractiveCodeGenerator(ast_tree)
     code1 = new.code(*codegenerator.getCode())
     code2 = ast_compile( expr )
@@ -65,3 +67,10 @@
     print x,y,z,t,u
 """
     check_compile( code )
+
+
+
+def test_basic_astgen():
+    for family in TESTS:
+        for expr in family:
+            yield check_compile, expr



More information about the Pypy-commit mailing list