[pypy-svn] r17407 - pypy/dist/pypy/interpreter/astcompiler
pedronis at codespeak.net
pedronis at codespeak.net
Fri Sep 9 17:06:18 CEST 2005
Author: pedronis
Date: Fri Sep 9 17:06:16 2005
New Revision: 17407
Modified:
pypy/dist/pypy/interpreter/astcompiler/ast.py
pypy/dist/pypy/interpreter/astcompiler/ast.txt
pypy/dist/pypy/interpreter/astcompiler/astgen.py
Log:
introduce some more common bases in the ast hierarchy to avoid all attributes to migrate to Node.
Some more work required on this.
Modified: pypy/dist/pypy/interpreter/astcompiler/ast.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/ast.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/ast.py Fri Sep 9 17:06:16 2005
@@ -72,7 +72,58 @@
def accept(self, visitor):
return visitor.visitExpression(self)
-class Add(Node):
+class AbstractFunction(Node):
+ def __init__(self, lineno=-1):
+ Node.__init__(self, lineno)
+
+ def getChildren(self):
+ "NOT_RPYTHON"
+ return []
+
+ def getChildNodes(self):
+ return []
+
+ def __repr__(self):
+ return "AbstractFunction()"
+
+ def accept(self, visitor):
+ return visitor.visitAbstractFunction(self)
+
+class AbstractTest(Node):
+ def __init__(self, lineno=-1):
+ Node.__init__(self, lineno)
+
+ def getChildren(self):
+ "NOT_RPYTHON"
+ return []
+
+ def getChildNodes(self):
+ return []
+
+ def __repr__(self):
+ return "AbstractTest()"
+
+ def accept(self, visitor):
+ return visitor.visitAbstractTest(self)
+
+class BinaryOp(Node):
+ def __init__(self, lineno=-1):
+ Node.__init__(self, lineno)
+
+ def getChildren(self):
+ "NOT_RPYTHON"
+ return []
+
+ def getChildNodes(self):
+ return []
+
+ def __repr__(self):
+ return "BinaryOp()"
+
+ def accept(self, visitor):
+ return visitor.visitBinaryOp(self)
+
+class Add(BinaryOp):
def __init__(self, (left, right), lineno=-1):
Node.__init__(self, lineno)
self.left = left
@@ -91,7 +142,7 @@
def accept(self, visitor):
return visitor.visitAdd(self)
-class And(Node):
+class And(AbstractTest):
def __init__(self, nodes, lineno=-1):
Node.__init__(self, lineno)
self.nodes = nodes
@@ -274,7 +325,24 @@
def accept(self, visitor):
return visitor.visitAugAssign(self)
-class Backquote(Node):
+class UnaryOp(Node):
+ def __init__(self, lineno=-1):
+ Node.__init__(self, lineno)
+
+ def getChildren(self):
+ "NOT_RPYTHON"
+ return []
+
+ def getChildNodes(self):
+ return []
+
+ def __repr__(self):
+ return "UnaryOp()"
+
+ def accept(self, visitor):
+ return visitor.visitUnaryOp(self)
+
+class Backquote(UnaryOp):
def __init__(self, expr, lineno=-1):
Node.__init__(self, lineno)
self.expr = expr
@@ -292,7 +360,24 @@
def accept(self, visitor):
return visitor.visitBackquote(self)
-class Bitand(Node):
+class BitOp(Node):
+ def __init__(self, lineno=-1):
+ Node.__init__(self, lineno)
+
+ def getChildren(self):
+ "NOT_RPYTHON"
+ return []
+
+ def getChildNodes(self):
+ return []
+
+ def __repr__(self):
+ return "BitOp()"
+
+ def accept(self, visitor):
+ return visitor.visitBitOp(self)
+
+class Bitand(BitOp):
def __init__(self, nodes, lineno=-1):
Node.__init__(self, lineno)
self.nodes = nodes
@@ -312,7 +397,7 @@
def accept(self, visitor):
return visitor.visitBitand(self)
-class Bitor(Node):
+class Bitor(BitOp):
def __init__(self, nodes, lineno=-1):
Node.__init__(self, lineno)
self.nodes = nodes
@@ -332,7 +417,7 @@
def accept(self, visitor):
return visitor.visitBitor(self)
-class Bitxor(Node):
+class Bitxor(BitOp):
def __init__(self, nodes, lineno=-1):
Node.__init__(self, lineno)
self.nodes = nodes
@@ -556,7 +641,7 @@
def accept(self, visitor):
return visitor.visitDiscard(self)
-class Div(Node):
+class Div(BinaryOp):
def __init__(self, (left, right), lineno=-1):
Node.__init__(self, lineno)
self.left = left
@@ -622,7 +707,7 @@
def accept(self, visitor):
return visitor.visitExec(self)
-class FloorDiv(Node):
+class FloorDiv(BinaryOp):
def __init__(self, (left, right), lineno=-1):
Node.__init__(self, lineno)
self.left = left
@@ -692,7 +777,7 @@
def accept(self, visitor):
return visitor.visitFrom(self)
-class Function(Node):
+class Function(AbstractFunction):
def __init__(self, decorators, name, argnames, defaults, flags, doc, code, lineno=-1):
Node.__init__(self, lineno)
self.decorators = decorators
@@ -736,7 +821,7 @@
def accept(self, visitor):
return visitor.visitFunction(self)
-class GenExpr(Node):
+class GenExpr(AbstractFunction):
def __init__(self, code, lineno=-1):
Node.__init__(self, lineno)
self.code = code
@@ -917,7 +1002,7 @@
def accept(self, visitor):
return visitor.visitImport(self)
-class Invert(Node):
+class Invert(UnaryOp):
def __init__(self, expr, lineno=-1):
Node.__init__(self, lineno)
self.expr = expr
@@ -954,7 +1039,7 @@
def accept(self, visitor):
return visitor.visitKeyword(self)
-class Lambda(Node):
+class Lambda(AbstractFunction):
def __init__(self, argnames, defaults, flags, code, lineno=-1):
Node.__init__(self, lineno)
self.argnames = argnames
@@ -990,7 +1075,7 @@
def accept(self, visitor):
return visitor.visitLambda(self)
-class LeftShift(Node):
+class LeftShift(BinaryOp):
def __init__(self, (left, right), lineno=-1):
Node.__init__(self, lineno)
self.left = left
@@ -1100,7 +1185,7 @@
def accept(self, visitor):
return visitor.visitListCompIf(self)
-class Mod(Node):
+class Mod(BinaryOp):
def __init__(self, (left, right), lineno=-1):
Node.__init__(self, lineno)
self.left = left
@@ -1138,7 +1223,7 @@
def accept(self, visitor):
return visitor.visitModule(self)
-class Mul(Node):
+class Mul(BinaryOp):
def __init__(self, (left, right), lineno=-1):
Node.__init__(self, lineno)
self.left = left
@@ -1192,7 +1277,7 @@
def accept(self, visitor):
return visitor.visitNoneConst(self)
-class Not(Node):
+class Not(UnaryOp):
def __init__(self, expr, lineno=-1):
Node.__init__(self, lineno)
self.expr = expr
@@ -1228,7 +1313,7 @@
def accept(self, visitor):
return visitor.visitNumberConst(self)
-class Or(Node):
+class Or(AbstractTest):
def __init__(self, nodes, lineno=-1):
Node.__init__(self, lineno)
self.nodes = nodes
@@ -1265,7 +1350,7 @@
def accept(self, visitor):
return visitor.visitPass(self)
-class Power(Node):
+class Power(BinaryOp):
def __init__(self, (left, right), lineno=-1):
Node.__init__(self, lineno)
self.left = left
@@ -1385,7 +1470,7 @@
def accept(self, visitor):
return visitor.visitReturn(self)
-class RightShift(Node):
+class RightShift(BinaryOp):
def __init__(self, (left, right), lineno=-1):
Node.__init__(self, lineno)
self.left = left
@@ -1494,7 +1579,7 @@
def accept(self, visitor):
return visitor.visitStringConst(self)
-class Sub(Node):
+class Sub(BinaryOp):
def __init__(self, (left, right), lineno=-1):
Node.__init__(self, lineno)
self.left = left
@@ -1616,7 +1701,7 @@
def accept(self, visitor):
return visitor.visitTuple(self)
-class UnaryAdd(Node):
+class UnaryAdd(UnaryOp):
def __init__(self, expr, lineno=-1):
Node.__init__(self, lineno)
self.expr = expr
@@ -1634,7 +1719,7 @@
def accept(self, visitor):
return visitor.visitUnaryAdd(self)
-class UnarySub(Node):
+class UnarySub(UnaryOp):
def __init__(self, expr, lineno=-1):
Node.__init__(self, lineno)
self.expr = expr
@@ -1717,6 +1802,10 @@
return self.default(node)
+ def visitAbstractFunction(self, node):
+ return self.default( node )
+ def visitAbstractTest(self, node):
+ return self.default( node )
def visitAdd(self, node):
return self.default( node )
def visitAnd(self, node):
@@ -1737,6 +1826,10 @@
return self.default( node )
def visitBackquote(self, node):
return self.default( node )
+ def visitBinaryOp(self, node):
+ return self.default( node )
+ def visitBitOp(self, node):
+ return self.default( node )
def visitBitand(self, node):
return self.default( node )
def visitBitor(self, node):
@@ -1857,6 +1950,8 @@
return self.default( node )
def visitUnaryAdd(self, node):
return self.default( node )
+ def visitUnaryOp(self, node):
+ return self.default( node )
def visitUnarySub(self, node):
return self.default( node )
def visitWhile(self, node):
Modified: pypy/dist/pypy/interpreter/astcompiler/ast.txt
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/ast.txt (original)
+++ pypy/dist/pypy/interpreter/astcompiler/ast.txt Fri Sep 9 17:06:16 2005
@@ -9,8 +9,9 @@
Module: doc*, node
Stmt: nodes!
Decorators: nodes!
-Function: decorators&, name*, argnames*, defaults!, flags*, doc*, code
-Lambda: argnames*, defaults!, flags*, code
+AbstractFunction:
+Function(AbstractFunction): decorators&, name*, argnames*, defaults!, flags*, doc*, code
+Lambda(AbstractFunction): argnames*, defaults!, flags*, code
Class: name*, bases!, doc*, code
Pass:
Break:
@@ -42,17 +43,18 @@
ListComp: expr, quals!
ListCompFor: assign, list, ifs!
ListCompIf: test
-GenExpr: code
+GenExpr(AbstractFunction): code
GenExprInner: expr, quals!
GenExprFor: assign, iter, ifs!
GenExprIf: test
List: nodes!
Dict: items!
-Not: expr
+UnaryOp:
+Not(UnaryOp): expr
Compare: expr, ops!
Name: varname*
Global: names*
-Backquote: expr
+Backquote(UnaryOp): expr
Getattr: expr, attrname*
CallFunc: node, args!, star_args& = None, dstar_args& = None
Keyword: name*, expr
@@ -62,23 +64,26 @@
Slice: expr, flags*, lower&, upper&
Assert: test, fail&
Tuple: nodes!
-Or: nodes!
-And: nodes!
-Bitor: nodes!
-Bitxor: nodes!
-Bitand: nodes!
-LeftShift: (left, right)
-RightShift: (left, right)
-Add: (left, right)
-Sub: (left, right)
-Mul: (left, right)
-Div: (left, right)
-Mod: (left, right)
-Power: (left, right)
-FloorDiv: (left, right)
-UnaryAdd: expr
-UnarySub: expr
-Invert: expr
+AbstractTest:
+Or(AbstractTest): nodes!
+And(AbstractTest): nodes!
+BitOp:
+Bitor(BitOp): nodes!
+Bitxor(BitOp): nodes!
+Bitand(BitOp): nodes!
+BinaryOp:
+LeftShift(BinaryOp): (left, right)
+RightShift(BinaryOp): (left, right)
+Add(BinaryOp): (left, right)
+Sub(BinaryOp): (left, right)
+Mul(BinaryOp): (left, right)
+Div(BinaryOp): (left, right)
+Mod(BinaryOp): (left, right)
+Power(BinaryOp): (left, right)
+FloorDiv(BinaryOp): (left, right)
+UnaryAdd(UnaryOp): expr
+UnarySub(UnaryOp): expr
+Invert(UnaryOp): expr
init(Function):
self.varargs = self.kwargs = 0
Modified: pypy/dist/pypy/interpreter/astcompiler/astgen.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/astgen.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/astgen.py Fri Sep 9 17:06:16 2005
@@ -58,7 +58,7 @@
if self.parent:
self.parent = classes[self.parent]
else:
- self.parent = NodeInfo("Node","")
+ self.parent = Node_NodeInfo
def get_argnames(self):
if '(' in self.args:
@@ -232,6 +232,8 @@
print >> buf, " def visit%s(self, node):" % self.name
print >> buf, " return self.default( node )"
+Node_NodeInfo = NodeInfo("Node","")
+
rx_init = re.compile('init\((.*)\):')
rx_flatten_nodes = re.compile('flatten_nodes\((.*)\.(.*)\):')
rx_additional_methods = re.compile('(.*)\.(.*)\((.*?)\):')
@@ -331,8 +333,15 @@
print prologue
print
classes = parse_spec(SPEC)
- for info in classes:
+ emitted = {Node_NodeInfo: True}
+ def emit(info):
+ if info in emitted:
+ return
+ emitted[info] = True
+ emit(info.parent)
print info.gen_source()
+ for info in classes:
+ emit(info)
gen_ast_visitor(classes)
print epilogue
More information about the Pypy-commit
mailing list