[pypy-svn] r14348 - pypy/dist/pypy/interpreter/astcompiler
ludal at codespeak.net
ludal at codespeak.net
Wed Jul 6 18:45:40 CEST 2005
Author: ludal
Date: Wed Jul 6 18:45:36 2005
New Revision: 14348
Added:
pypy/dist/pypy/interpreter/astcompiler/ast.txt
- copied unchanged from r14148, pypy/branch/pycompiler/module/recparser/compiler/ast.txt
pypy/dist/pypy/interpreter/astcompiler/astgen.py
- copied, changed from r14148, pypy/branch/pycompiler/module/recparser/compiler/astgen.py
Modified:
pypy/dist/pypy/interpreter/astcompiler/ast.py
pypy/dist/pypy/interpreter/astcompiler/transformer.py
Log:
(WIP) changes to the ast generator to allow an rpython visitor implementation
Modified: pypy/dist/pypy/interpreter/astcompiler/ast.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/ast.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/ast.py Wed Jul 6 18:45:36 2005
@@ -31,9 +31,12 @@
return self.getChildren()
def getChildNodes(self):
pass # implemented by subclasses
+ def visit(self, visitor, *args):
+ return visitor.visitNode(self, *args)
class EmptyNode(Node):
- pass
+ def visit(self, visitor, *args):
+ return visitor.visitEmptyNode(self, *args)
class Expression(Node):
# Expression is an artificial node class to support "eval"
@@ -50,6 +53,9 @@
def __repr__(self):
return "Expression(%s)" % (repr(self.node))
+ def visit(self, visitor, *args):
+ return visitor.visitExpression(self, *args)
+
class Add(Node):
def __init__(self, (left, right), lineno=None):
self.left = left
@@ -65,6 +71,9 @@
def __repr__(self):
return "Add((%s, %s))" % (repr(self.left), repr(self.right))
+ def accept(self, visitor, args):
+ return visitor.visitAdd(self, args)
+
class And(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -81,6 +90,9 @@
def __repr__(self):
return "And(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitAnd(self, args)
+
class AssAttr(Node):
def __init__(self, expr, attrname, flags, lineno=None):
self.expr = expr
@@ -97,6 +109,9 @@
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)
+
class AssList(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -113,6 +128,9 @@
def __repr__(self):
return "AssList(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitAssList(self, args)
+
class AssName(Node):
def __init__(self, name, flags, lineno=None):
self.name = name
@@ -128,6 +146,9 @@
def __repr__(self):
return "AssName(%s, %s)" % (repr(self.name), repr(self.flags))
+ def accept(self, visitor, args):
+ return visitor.visitAssName(self, args)
+
class AssTuple(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -144,6 +165,9 @@
def __repr__(self):
return "AssTuple(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitAssTuple(self, args)
+
class Assert(Node):
def __init__(self, test, fail, lineno=None):
self.test = test
@@ -166,6 +190,9 @@
def __repr__(self):
return "Assert(%s, %s)" % (repr(self.test), repr(self.fail))
+ def accept(self, visitor, args):
+ return visitor.visitAssert(self, args)
+
class Assign(Node):
def __init__(self, nodes, expr, lineno=None):
self.nodes = nodes
@@ -187,6 +214,9 @@
def __repr__(self):
return "Assign(%s, %s)" % (repr(self.nodes), repr(self.expr))
+ def accept(self, visitor, args):
+ return visitor.visitAssign(self, args)
+
class AugAssign(Node):
def __init__(self, node, op, expr, lineno=None):
self.node = node
@@ -203,6 +233,9 @@
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)
+
class Backquote(Node):
def __init__(self, expr, lineno=None):
self.expr = expr
@@ -217,6 +250,9 @@
def __repr__(self):
return "Backquote(%s)" % (repr(self.expr),)
+ def accept(self, visitor, args):
+ return visitor.visitBackquote(self, args)
+
class Bitand(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -233,6 +269,9 @@
def __repr__(self):
return "Bitand(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitBitand(self, args)
+
class Bitor(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -249,6 +288,9 @@
def __repr__(self):
return "Bitor(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitBitor(self, args)
+
class Bitxor(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -265,6 +307,9 @@
def __repr__(self):
return "Bitxor(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitBitxor(self, args)
+
class Break(Node):
def __init__(self, lineno=None):
self.lineno = lineno
@@ -278,6 +323,9 @@
def __repr__(self):
return "Break()"
+ 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):
self.node = node
@@ -307,6 +355,9 @@
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)
+
class Class(Node):
def __init__(self, name, bases, doc, code, lineno=None):
self.name = name
@@ -332,6 +383,9 @@
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)
+
class Compare(Node):
def __init__(self, expr, ops, lineno=None):
self.expr = expr
@@ -353,6 +407,9 @@
def __repr__(self):
return "Compare(%s, %s)" % (repr(self.expr), repr(self.ops))
+ def accept(self, visitor, args):
+ return visitor.visitCompare(self, args)
+
class Const(Node):
def __init__(self, value, lineno=None):
self.value = value
@@ -367,6 +424,9 @@
def __repr__(self):
return "Const(%s)" % (repr(self.value),)
+ def accept(self, visitor, args):
+ return visitor.visitConst(self, args)
+
class Continue(Node):
def __init__(self, lineno=None):
self.lineno = lineno
@@ -380,6 +440,9 @@
def __repr__(self):
return "Continue()"
+ def accept(self, visitor, args):
+ return visitor.visitContinue(self, args)
+
class Decorators(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -396,6 +459,9 @@
def __repr__(self):
return "Decorators(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitDecorators(self, args)
+
class Dict(Node):
def __init__(self, items, lineno=None):
self.items = items
@@ -412,6 +478,9 @@
def __repr__(self):
return "Dict(%s)" % (repr(self.items),)
+ def accept(self, visitor, args):
+ return visitor.visitDict(self, args)
+
class Discard(Node):
def __init__(self, expr, lineno=None):
self.expr = expr
@@ -426,6 +495,9 @@
def __repr__(self):
return "Discard(%s)" % (repr(self.expr),)
+ def accept(self, visitor, args):
+ return visitor.visitDiscard(self, args)
+
class Div(Node):
def __init__(self, (left, right), lineno=None):
self.left = left
@@ -441,6 +513,9 @@
def __repr__(self):
return "Div((%s, %s))" % (repr(self.left), repr(self.right))
+ def accept(self, visitor, args):
+ return visitor.visitDiv(self, args)
+
class Ellipsis(Node):
def __init__(self, lineno=None):
self.lineno = lineno
@@ -454,6 +529,9 @@
def __repr__(self):
return "Ellipsis()"
+ def accept(self, visitor, args):
+ return visitor.visitEllipsis(self, args)
+
class Exec(Node):
def __init__(self, expr, locals, globals, lineno=None):
self.expr = expr
@@ -480,6 +558,9 @@
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)
+
class FloorDiv(Node):
def __init__(self, (left, right), lineno=None):
self.left = left
@@ -495,6 +576,9 @@
def __repr__(self):
return "FloorDiv((%s, %s))" % (repr(self.left), repr(self.right))
+ def accept(self, visitor, args):
+ return visitor.visitFloorDiv(self, args)
+
class For(Node):
def __init__(self, assign, list, body, else_, lineno=None):
self.assign = assign
@@ -523,6 +607,9 @@
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)
+
class From(Node):
def __init__(self, modname, names, lineno=None):
self.modname = modname
@@ -538,6 +625,9 @@
def __repr__(self):
return "From(%s, %s)" % (repr(self.modname), repr(self.names))
+ 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):
self.decorators = decorators
@@ -553,7 +643,7 @@
self.varargs = 1
if flags & CO_VARKEYWORDS:
self.kwargs = 1
-
+
def getChildren(self):
@@ -578,13 +668,16 @@
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)
+
class GenExpr(Node):
def __init__(self, code, lineno=None):
self.code = code
self.lineno = lineno
self.argnames = ['[outmost-iterable]']
self.varargs = self.kwargs = None
-
+
def getChildren(self):
@@ -596,6 +689,9 @@
def __repr__(self):
return "GenExpr(%s)" % (repr(self.code),)
+ def accept(self, visitor, args):
+ return visitor.visitGenExpr(self, args)
+
class GenExprFor(Node):
def __init__(self, assign, iter, ifs, lineno=None):
self.assign = assign
@@ -622,6 +718,9 @@
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)
+
class GenExprIf(Node):
def __init__(self, test, lineno=None):
self.test = test
@@ -636,6 +735,9 @@
def __repr__(self):
return "GenExprIf(%s)" % (repr(self.test),)
+ def accept(self, visitor, args):
+ return visitor.visitGenExprIf(self, args)
+
class GenExprInner(Node):
def __init__(self, expr, quals, lineno=None):
self.expr = expr
@@ -657,6 +759,9 @@
def __repr__(self):
return "GenExprInner(%s, %s)" % (repr(self.expr), repr(self.quals))
+ def accept(self, visitor, args):
+ return visitor.visitGenExprInner(self, args)
+
class Getattr(Node):
def __init__(self, expr, attrname, lineno=None):
self.expr = expr
@@ -672,6 +777,9 @@
def __repr__(self):
return "Getattr(%s, %s)" % (repr(self.expr), repr(self.attrname))
+ def accept(self, visitor, args):
+ return visitor.visitGetattr(self, args)
+
class Global(Node):
def __init__(self, names, lineno=None):
self.names = names
@@ -686,6 +794,9 @@
def __repr__(self):
return "Global(%s)" % (repr(self.names),)
+ def accept(self, visitor, args):
+ return visitor.visitGlobal(self, args)
+
class If(Node):
def __init__(self, tests, else_, lineno=None):
self.tests = tests
@@ -708,6 +819,9 @@
def __repr__(self):
return "If(%s, %s)" % (repr(self.tests), repr(self.else_))
+ def accept(self, visitor, args):
+ return visitor.visitIf(self, args)
+
class Import(Node):
def __init__(self, names, lineno=None):
self.names = names
@@ -722,6 +836,9 @@
def __repr__(self):
return "Import(%s)" % (repr(self.names),)
+ def accept(self, visitor, args):
+ return visitor.visitImport(self, args)
+
class Invert(Node):
def __init__(self, expr, lineno=None):
self.expr = expr
@@ -736,6 +853,9 @@
def __repr__(self):
return "Invert(%s)" % (repr(self.expr),)
+ def accept(self, visitor, args):
+ return visitor.visitInvert(self, args)
+
class Keyword(Node):
def __init__(self, name, expr, lineno=None):
self.name = name
@@ -751,6 +871,9 @@
def __repr__(self):
return "Keyword(%s, %s)" % (repr(self.name), repr(self.expr))
+ def accept(self, visitor, args):
+ return visitor.visitKeyword(self, args)
+
class Lambda(Node):
def __init__(self, argnames, defaults, flags, code, lineno=None):
self.argnames = argnames
@@ -763,7 +886,7 @@
self.varargs = 1
if flags & CO_VARKEYWORDS:
self.kwargs = 1
-
+
def getChildren(self):
@@ -783,6 +906,9 @@
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)
+
class LeftShift(Node):
def __init__(self, (left, right), lineno=None):
self.left = left
@@ -798,6 +924,9 @@
def __repr__(self):
return "LeftShift((%s, %s))" % (repr(self.left), repr(self.right))
+ def accept(self, visitor, args):
+ return visitor.visitLeftShift(self, args)
+
class List(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -814,6 +943,9 @@
def __repr__(self):
return "List(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitList(self, args)
+
class ListComp(Node):
def __init__(self, expr, quals, lineno=None):
self.expr = expr
@@ -835,6 +967,9 @@
def __repr__(self):
return "ListComp(%s, %s)" % (repr(self.expr), repr(self.quals))
+ def accept(self, visitor, args):
+ return visitor.visitListComp(self, args)
+
class ListCompFor(Node):
def __init__(self, assign, list, ifs, lineno=None):
self.assign = assign
@@ -859,6 +994,9 @@
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)
+
class ListCompIf(Node):
def __init__(self, test, lineno=None):
self.test = test
@@ -873,6 +1011,9 @@
def __repr__(self):
return "ListCompIf(%s)" % (repr(self.test),)
+ def accept(self, visitor, args):
+ return visitor.visitListCompIf(self, args)
+
class Mod(Node):
def __init__(self, (left, right), lineno=None):
self.left = left
@@ -888,6 +1029,9 @@
def __repr__(self):
return "Mod((%s, %s))" % (repr(self.left), repr(self.right))
+ def accept(self, visitor, args):
+ return visitor.visitMod(self, args)
+
class Module(Node):
def __init__(self, doc, node, lineno=None):
self.doc = doc
@@ -903,6 +1047,9 @@
def __repr__(self):
return "Module(%s, %s)" % (repr(self.doc), repr(self.node))
+ def accept(self, visitor, args):
+ return visitor.visitModule(self, args)
+
class Mul(Node):
def __init__(self, (left, right), lineno=None):
self.left = left
@@ -918,6 +1065,9 @@
def __repr__(self):
return "Mul((%s, %s))" % (repr(self.left), repr(self.right))
+ def accept(self, visitor, args):
+ return visitor.visitMul(self, args)
+
class Name(Node):
def __init__(self, name, lineno=None):
self.name = name
@@ -932,6 +1082,9 @@
def __repr__(self):
return "Name(%s)" % (repr(self.name),)
+ def accept(self, visitor, args):
+ return visitor.visitName(self, args)
+
class Not(Node):
def __init__(self, expr, lineno=None):
self.expr = expr
@@ -946,6 +1099,9 @@
def __repr__(self):
return "Not(%s)" % (repr(self.expr),)
+ def accept(self, visitor, args):
+ return visitor.visitNot(self, args)
+
class Or(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -962,6 +1118,9 @@
def __repr__(self):
return "Or(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitOr(self, args)
+
class Pass(Node):
def __init__(self, lineno=None):
self.lineno = lineno
@@ -975,6 +1134,9 @@
def __repr__(self):
return "Pass()"
+ def accept(self, visitor, args):
+ return visitor.visitPass(self, args)
+
class Power(Node):
def __init__(self, (left, right), lineno=None):
self.left = left
@@ -990,6 +1152,9 @@
def __repr__(self):
return "Power((%s, %s))" % (repr(self.left), repr(self.right))
+ def accept(self, visitor, args):
+ return visitor.visitPower(self, args)
+
class Print(Node):
def __init__(self, nodes, dest, lineno=None):
self.nodes = nodes
@@ -1012,6 +1177,9 @@
def __repr__(self):
return "Print(%s, %s)" % (repr(self.nodes), repr(self.dest))
+ def accept(self, visitor, args):
+ return visitor.visitPrint(self, args)
+
class Printnl(Node):
def __init__(self, nodes, dest, lineno=None):
self.nodes = nodes
@@ -1034,6 +1202,9 @@
def __repr__(self):
return "Printnl(%s, %s)" % (repr(self.nodes), repr(self.dest))
+ def accept(self, visitor, args):
+ return visitor.visitPrintnl(self, args)
+
class Raise(Node):
def __init__(self, expr1, expr2, expr3, lineno=None):
self.expr1 = expr1
@@ -1061,6 +1232,9 @@
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)
+
class Return(Node):
def __init__(self, value, lineno=None):
self.value = value
@@ -1075,6 +1249,9 @@
def __repr__(self):
return "Return(%s)" % (repr(self.value),)
+ def accept(self, visitor, args):
+ return visitor.visitReturn(self, args)
+
class RightShift(Node):
def __init__(self, (left, right), lineno=None):
self.left = left
@@ -1090,6 +1267,9 @@
def __repr__(self):
return "RightShift((%s, %s))" % (repr(self.left), repr(self.right))
+ def accept(self, visitor, args):
+ return visitor.visitRightShift(self, args)
+
class Slice(Node):
def __init__(self, expr, flags, lower, upper, lineno=None):
self.expr = expr
@@ -1118,6 +1298,9 @@
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)
+
class Sliceobj(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -1134,6 +1317,9 @@
def __repr__(self):
return "Sliceobj(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitSliceobj(self, args)
+
class Stmt(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -1150,6 +1336,9 @@
def __repr__(self):
return "Stmt(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitStmt(self, args)
+
class Sub(Node):
def __init__(self, (left, right), lineno=None):
self.left = left
@@ -1165,6 +1354,9 @@
def __repr__(self):
return "Sub((%s, %s))" % (repr(self.left), repr(self.right))
+ def accept(self, visitor, args):
+ return visitor.visitSub(self, args)
+
class Subscript(Node):
def __init__(self, expr, flags, subs, lineno=None):
self.expr = expr
@@ -1188,6 +1380,9 @@
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)
+
class TryExcept(Node):
def __init__(self, body, handlers, else_, lineno=None):
self.body = body
@@ -1213,6 +1408,9 @@
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)
+
class TryFinally(Node):
def __init__(self, body, final, lineno=None):
self.body = body
@@ -1228,6 +1426,9 @@
def __repr__(self):
return "TryFinally(%s, %s)" % (repr(self.body), repr(self.final))
+ def accept(self, visitor, args):
+ return visitor.visitTryFinally(self, args)
+
class Tuple(Node):
def __init__(self, nodes, lineno=None):
self.nodes = nodes
@@ -1244,6 +1445,9 @@
def __repr__(self):
return "Tuple(%s)" % (repr(self.nodes),)
+ def accept(self, visitor, args):
+ return visitor.visitTuple(self, args)
+
class UnaryAdd(Node):
def __init__(self, expr, lineno=None):
self.expr = expr
@@ -1258,6 +1462,9 @@
def __repr__(self):
return "UnaryAdd(%s)" % (repr(self.expr),)
+ def accept(self, visitor, args):
+ return visitor.visitUnaryAdd(self, args)
+
class UnarySub(Node):
def __init__(self, expr, lineno=None):
self.expr = expr
@@ -1272,6 +1479,9 @@
def __repr__(self):
return "UnarySub(%s)" % (repr(self.expr),)
+ def accept(self, visitor, args):
+ return visitor.visitUnarySub(self, args)
+
class While(Node):
def __init__(self, test, body, else_, lineno=None):
self.test = test
@@ -1297,6 +1507,9 @@
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)
+
class Yield(Node):
def __init__(self, value, lineno=None):
self.value = value
@@ -1311,6 +1524,162 @@
def __repr__(self):
return "Yield(%s)" % (repr(self.value),)
+ def accept(self, visitor, args):
+ return visitor.visitYield(self, args)
+
+
+class ASTVisitor(object):
+ """This is a visitor base class used to provide the visit
+ method in replacement of the former visitor.visit = walker.dispatch
+ It could also use to identify base type for visit arguments of AST nodes
+ """
+
+ def default(self, node, args):
+ for child in node.getChildNodes():
+ child.visit(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 )
+
for name, obj in globals().items():
if isinstance(obj, type) and issubclass(obj, Node):
nodes[name.lower()] = obj
Copied: pypy/dist/pypy/interpreter/astcompiler/astgen.py (from r14148, pypy/branch/pycompiler/module/recparser/compiler/astgen.py)
==============================================================================
--- pypy/branch/pycompiler/module/recparser/compiler/astgen.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/astgen.py Wed Jul 6 18:45:36 2005
@@ -192,8 +192,12 @@
print >> buf, ' return "%s()"' % self.name
def _gen_visit(self, buf):
- print >> buf, " def visit(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 )"
rx_init = re.compile('init\((.*)\):')
@@ -222,6 +226,26 @@
cur = classes[name]
return sorted(classes.values(), key=lambda n: n.name)
+ASTVISITORCLASS='''
+class ASTVisitor(object):
+ """This is a visitor base class used to provide the visit
+ method in replacement of the former visitor.visit = walker.dispatch
+ It could also use to identify base type for visit arguments of AST nodes
+ """
+
+ def default(self, node, args):
+ for child in node.getChildNodes():
+ child.visit(self, args)
+
+'''
+
+def gen_ast_visitor(classes):
+ print ASTVISITORCLASS
+ buf = StringIO()
+ for info in classes:
+ info.gen_base_visit(buf)
+ print buf.getvalue()
+
def main():
prologue, epilogue = load_boilerplate(sys.argv[-1])
print prologue
@@ -229,6 +253,7 @@
classes = parse_spec(SPEC)
for info in classes:
print info.gen_source()
+ gen_ast_visitor(classes)
print epilogue
if __name__ == "__main__":
Modified: pypy/dist/pypy/interpreter/astcompiler/transformer.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/transformer.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/transformer.py Wed Jul 6 18:45:36 2005
@@ -21,6 +21,8 @@
# Portions of this file are:
# Copyright (C) 1997-1998 Greg Stein. All Rights Reserved.
#
+# Modified for PYPY
+#
# This module is provided under a BSD-ish license. See
# http://www.opensource.org/licenses/bsd-license.html
# and replace OWNER, ORGANIZATION, and YEAR as appropriate.
More information about the Pypy-commit
mailing list