[pypy-svn] r20853 - pypy/dist/pypy/interpreter/astcompiler

ludal at codespeak.net ludal at codespeak.net
Wed Dec 7 18:07:37 CET 2005


Author: ludal
Date: Wed Dec  7 18:07:36 2005
New Revision: 20853

Modified:
   pypy/dist/pypy/interpreter/astcompiler/ast.py
   pypy/dist/pypy/interpreter/astcompiler/astgen.py
Log:
implements some descr as methods to correctly unwrap and annotate self


Modified: pypy/dist/pypy/interpreter/astcompiler/ast.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/ast.py	(original)
+++ pypy/dist/pypy/interpreter/astcompiler/ast.py	Wed Dec  7 18:07:36 2005
@@ -6,7 +6,7 @@
 from consts import CO_VARARGS, CO_VARKEYWORDS, OP_ASSIGN
 from pypy.interpreter.baseobjspace import Wrappable
 from pypy.interpreter.typedef import TypeDef
-from pypy.interpreter.gateway import interp2app
+from pypy.interpreter.gateway import interp2app, W_Root, ObjSpace
 from pypy.interpreter.argument import Arguments
 
 def flatten(list):
@@ -58,21 +58,20 @@
 
     def descr_repr( self, space ):
 	return space.wrap( self.__repr__() )
-
-def descr_node_repr( space, w_obj ):
-    return w_obj.descr_repr( space )
     
-def descr_getChildNodes( space, w_obj ):
-    lst = w_obj.getChildNodes()
-    return space.newlist( lst )
-
-def descr_accept( space, w_obj, w_visitor ):
-    return w_obj.descr_accept( space, w_visitor )
+    def descr_getChildNodes( self, space ):
+        lst = self.getChildNodes()
+        return space.newlist( [ self.wrap( it ) for it in lst ] )
+
+def descr_node_accept( space, w_self, w_visitor ):
+    w_callable = space.getattr(w_visitor, space.wrap('visitNode'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args( w_callable, args )
 
 Node.typedef = TypeDef('ASTNode',
-		       #__repr__ = interp2app(descr_node_repr),
-		       getChildNodes = interp2app(descr_getChildNodes),
-		       accept = interp2app(descr_accept),
+		       #__repr__ = interp2app(descr_node_repr, unwrap_spec=['self', ObjSpace] ),
+		       getChildNodes = interp2app(Node.descr_getChildNodes, unwrap_spec=[ 'self', ObjSpace ] ),
+		       accept = interp2app(descr_node_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ),
 		       )
 
         
@@ -118,10 +117,13 @@
     def accept(self, visitor):
         return visitor.visitAbstractFunction(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAbstractFunction'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_AbstractFunction_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAbstractFunction'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+AbstractFunction.typedef = TypeDef('AbstractFunction', Node.typedef, 
+                     accept=interp2app(descr_AbstractFunction_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class AbstractTest(Node):
     def __init__(self, lineno=-1):
@@ -140,10 +142,13 @@
     def accept(self, visitor):
         return visitor.visitAbstractTest(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAbstractTest'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_AbstractTest_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAbstractTest'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+AbstractTest.typedef = TypeDef('AbstractTest', Node.typedef, 
+                     accept=interp2app(descr_AbstractTest_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class BinaryOp(Node):
     def __init__(self, lineno=-1):
@@ -162,10 +167,13 @@
     def accept(self, visitor):
         return visitor.visitBinaryOp(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitBinaryOp'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_BinaryOp_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitBinaryOp'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+BinaryOp.typedef = TypeDef('BinaryOp', Node.typedef, 
+                     accept=interp2app(descr_BinaryOp_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Add(BinaryOp):
     def __init__(self, (left, right), lineno=-1):
@@ -186,10 +194,13 @@
     def accept(self, visitor):
         return visitor.visitAdd(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAdd'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Add_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAdd'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Add.typedef = TypeDef('Add', Node.typedef, 
+                     accept=interp2app(descr_Add_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class And(AbstractTest):
     def __init__(self, nodes, lineno=-1):
@@ -211,10 +222,13 @@
     def accept(self, visitor):
         return visitor.visitAnd(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAnd'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_And_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAnd'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+And.typedef = TypeDef('And', Node.typedef, 
+                     accept=interp2app(descr_And_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class AssAttr(Node):
     def __init__(self, expr, attrname, flags, lineno=-1):
@@ -236,10 +250,13 @@
     def accept(self, visitor):
         return visitor.visitAssAttr(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAssAttr'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_AssAttr_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAssAttr'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+AssAttr.typedef = TypeDef('AssAttr', Node.typedef, 
+                     accept=interp2app(descr_AssAttr_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class AssSeq(Node):
     def __init__(self, lineno=-1):
@@ -258,10 +275,13 @@
     def accept(self, visitor):
         return visitor.visitAssSeq(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAssSeq'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_AssSeq_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAssSeq'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+AssSeq.typedef = TypeDef('AssSeq', Node.typedef, 
+                     accept=interp2app(descr_AssSeq_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class AssList(AssSeq):
     def __init__(self, nodes, lineno=-1):
@@ -283,10 +303,13 @@
     def accept(self, visitor):
         return visitor.visitAssList(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAssList'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_AssList_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAssList'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+AssList.typedef = TypeDef('AssList', Node.typedef, 
+                     accept=interp2app(descr_AssList_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class AssName(Node):
     def __init__(self, name, flags, lineno=-1):
@@ -307,10 +330,13 @@
     def accept(self, visitor):
         return visitor.visitAssName(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAssName'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_AssName_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAssName'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+AssName.typedef = TypeDef('AssName', Node.typedef, 
+                     accept=interp2app(descr_AssName_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class AssTuple(AssSeq):
     def __init__(self, nodes, lineno=-1):
@@ -345,10 +371,13 @@
     def accept(self, visitor):
         return visitor.visitAssTuple(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAssTuple'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_AssTuple_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAssTuple'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+AssTuple.typedef = TypeDef('AssTuple', Node.typedef, 
+                     accept=interp2app(descr_AssTuple_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Assert(Node):
     def __init__(self, test, fail, lineno=-1):
@@ -376,10 +405,13 @@
     def accept(self, visitor):
         return visitor.visitAssert(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAssert'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Assert_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAssert'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Assert.typedef = TypeDef('Assert', Node.typedef, 
+                     accept=interp2app(descr_Assert_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Assign(Node):
     def __init__(self, nodes, expr, lineno=-1):
@@ -406,10 +438,13 @@
     def accept(self, visitor):
         return visitor.visitAssign(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAssign'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Assign_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAssign'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Assign.typedef = TypeDef('Assign', Node.typedef, 
+                     accept=interp2app(descr_Assign_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class AugAssign(Node):
     def __init__(self, node, op, expr, lineno=-1):
@@ -431,10 +466,13 @@
     def accept(self, visitor):
         return visitor.visitAugAssign(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitAugAssign'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_AugAssign_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitAugAssign'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+AugAssign.typedef = TypeDef('AugAssign', Node.typedef, 
+                     accept=interp2app(descr_AugAssign_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class UnaryOp(Node):
     def __init__(self, lineno=-1):
@@ -453,10 +491,13 @@
     def accept(self, visitor):
         return visitor.visitUnaryOp(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitUnaryOp'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_UnaryOp_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitUnaryOp'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+UnaryOp.typedef = TypeDef('UnaryOp', Node.typedef, 
+                     accept=interp2app(descr_UnaryOp_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Backquote(UnaryOp):
     def __init__(self, expr, lineno=-1):
@@ -476,10 +517,13 @@
     def accept(self, visitor):
         return visitor.visitBackquote(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitBackquote'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Backquote_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitBackquote'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Backquote.typedef = TypeDef('Backquote', Node.typedef, 
+                     accept=interp2app(descr_Backquote_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class BitOp(Node):
     def __init__(self, lineno=-1):
@@ -498,10 +542,13 @@
     def accept(self, visitor):
         return visitor.visitBitOp(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitBitOp'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_BitOp_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitBitOp'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+BitOp.typedef = TypeDef('BitOp', Node.typedef, 
+                     accept=interp2app(descr_BitOp_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Bitand(BitOp):
     def __init__(self, nodes, lineno=-1):
@@ -523,10 +570,13 @@
     def accept(self, visitor):
         return visitor.visitBitand(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitBitand'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Bitand_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitBitand'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Bitand.typedef = TypeDef('Bitand', Node.typedef, 
+                     accept=interp2app(descr_Bitand_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Bitor(BitOp):
     def __init__(self, nodes, lineno=-1):
@@ -548,10 +598,13 @@
     def accept(self, visitor):
         return visitor.visitBitor(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitBitor'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Bitor_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitBitor'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Bitor.typedef = TypeDef('Bitor', Node.typedef, 
+                     accept=interp2app(descr_Bitor_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Bitxor(BitOp):
     def __init__(self, nodes, lineno=-1):
@@ -573,10 +626,13 @@
     def accept(self, visitor):
         return visitor.visitBitxor(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitBitxor'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Bitxor_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitBitxor'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Bitxor.typedef = TypeDef('Bitxor', Node.typedef, 
+                     accept=interp2app(descr_Bitxor_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Break(Node):
     def __init__(self, lineno=-1):
@@ -595,10 +651,13 @@
     def accept(self, visitor):
         return visitor.visitBreak(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitBreak'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Break_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitBreak'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Break.typedef = TypeDef('Break', Node.typedef, 
+                     accept=interp2app(descr_Break_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class CallFunc(Node):
     def __init__(self, node, args, star_args = None, dstar_args = None, lineno=-1):
@@ -633,10 +692,13 @@
     def accept(self, visitor):
         return visitor.visitCallFunc(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitCallFunc'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_CallFunc_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitCallFunc'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+CallFunc.typedef = TypeDef('CallFunc', Node.typedef, 
+                     accept=interp2app(descr_CallFunc_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Class(Node):
     def __init__(self, name, bases, doc, code, lineno=-1):
@@ -667,10 +729,13 @@
     def accept(self, visitor):
         return visitor.visitClass(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitClass'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Class_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitClass'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Class.typedef = TypeDef('Class', Node.typedef, 
+                     accept=interp2app(descr_Class_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Compare(Node):
     def __init__(self, expr, ops, lineno=-1):
@@ -700,10 +765,13 @@
     def accept(self, visitor):
         return visitor.visitCompare(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitCompare'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Compare_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitCompare'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Compare.typedef = TypeDef('Compare', Node.typedef, 
+                     accept=interp2app(descr_Compare_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Const(Node):
     def __init__(self, value, lineno=-1):
@@ -723,10 +791,13 @@
     def accept(self, visitor):
         return visitor.visitConst(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitConst'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Const_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitConst'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Const.typedef = TypeDef('Const', Node.typedef, 
+                     accept=interp2app(descr_Const_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Continue(Node):
     def __init__(self, lineno=-1):
@@ -745,10 +816,13 @@
     def accept(self, visitor):
         return visitor.visitContinue(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitContinue'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Continue_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitContinue'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Continue.typedef = TypeDef('Continue', Node.typedef, 
+                     accept=interp2app(descr_Continue_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Decorators(Node):
     def __init__(self, nodes, lineno=-1):
@@ -770,10 +844,13 @@
     def accept(self, visitor):
         return visitor.visitDecorators(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitDecorators'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Decorators_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitDecorators'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Decorators.typedef = TypeDef('Decorators', Node.typedef, 
+                     accept=interp2app(descr_Decorators_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Dict(Node):
     def __init__(self, items, lineno=-1):
@@ -799,10 +876,13 @@
     def accept(self, visitor):
         return visitor.visitDict(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitDict'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Dict_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitDict'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Dict.typedef = TypeDef('Dict', Node.typedef, 
+                     accept=interp2app(descr_Dict_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Discard(Node):
     def __init__(self, expr, lineno=-1):
@@ -822,10 +902,13 @@
     def accept(self, visitor):
         return visitor.visitDiscard(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitDiscard'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Discard_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitDiscard'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Discard.typedef = TypeDef('Discard', Node.typedef, 
+                     accept=interp2app(descr_Discard_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Div(BinaryOp):
     def __init__(self, (left, right), lineno=-1):
@@ -846,10 +929,13 @@
     def accept(self, visitor):
         return visitor.visitDiv(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitDiv'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Div_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitDiv'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Div.typedef = TypeDef('Div', Node.typedef, 
+                     accept=interp2app(descr_Div_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Ellipsis(Node):
     def __init__(self, lineno=-1):
@@ -868,10 +954,13 @@
     def accept(self, visitor):
         return visitor.visitEllipsis(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitEllipsis'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Ellipsis_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitEllipsis'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Ellipsis.typedef = TypeDef('Ellipsis', Node.typedef, 
+                     accept=interp2app(descr_Ellipsis_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Exec(Node):
     def __init__(self, expr, locals, globals, lineno=-1):
@@ -903,10 +992,13 @@
     def accept(self, visitor):
         return visitor.visitExec(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitExec'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Exec_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitExec'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Exec.typedef = TypeDef('Exec', Node.typedef, 
+                     accept=interp2app(descr_Exec_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class FloorDiv(BinaryOp):
     def __init__(self, (left, right), lineno=-1):
@@ -927,10 +1019,13 @@
     def accept(self, visitor):
         return visitor.visitFloorDiv(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitFloorDiv'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_FloorDiv_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitFloorDiv'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+FloorDiv.typedef = TypeDef('FloorDiv', Node.typedef, 
+                     accept=interp2app(descr_FloorDiv_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class For(Node):
     def __init__(self, assign, list, body, else_, lineno=-1):
@@ -964,10 +1059,13 @@
     def accept(self, visitor):
         return visitor.visitFor(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitFor'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_For_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitFor'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+For.typedef = TypeDef('For', Node.typedef, 
+                     accept=interp2app(descr_For_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class From(Node):
     def __init__(self, modname, names, lineno=-1):
@@ -988,10 +1086,13 @@
     def accept(self, visitor):
         return visitor.visitFrom(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitFrom'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_From_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitFrom'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+From.typedef = TypeDef('From', Node.typedef, 
+                     accept=interp2app(descr_From_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Function(AbstractFunction):
     def __init__(self, decorators, name, argnames, defaults, flags, doc, code, lineno=-1):
@@ -1037,10 +1138,13 @@
     def accept(self, visitor):
         return visitor.visitFunction(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitFunction'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Function_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitFunction'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Function.typedef = TypeDef('Function', Node.typedef, 
+                     accept=interp2app(descr_Function_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class GenExpr(AbstractFunction):
     def __init__(self, code, lineno=-1):
@@ -1064,10 +1168,13 @@
     def accept(self, visitor):
         return visitor.visitGenExpr(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitGenExpr'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_GenExpr_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitGenExpr'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+GenExpr.typedef = TypeDef('GenExpr', Node.typedef, 
+                     accept=interp2app(descr_GenExpr_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class GenExprFor(Node):
     def __init__(self, assign, iter, ifs, lineno=-1):
@@ -1100,10 +1207,13 @@
     def accept(self, visitor):
         return visitor.visitGenExprFor(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitGenExprFor'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_GenExprFor_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitGenExprFor'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+GenExprFor.typedef = TypeDef('GenExprFor', Node.typedef, 
+                     accept=interp2app(descr_GenExprFor_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class GenExprIf(Node):
     def __init__(self, test, lineno=-1):
@@ -1123,10 +1233,13 @@
     def accept(self, visitor):
         return visitor.visitGenExprIf(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitGenExprIf'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_GenExprIf_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitGenExprIf'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+GenExprIf.typedef = TypeDef('GenExprIf', Node.typedef, 
+                     accept=interp2app(descr_GenExprIf_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class GenExprInner(Node):
     def __init__(self, expr, quals, lineno=-1):
@@ -1153,10 +1266,13 @@
     def accept(self, visitor):
         return visitor.visitGenExprInner(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitGenExprInner'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_GenExprInner_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitGenExprInner'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+GenExprInner.typedef = TypeDef('GenExprInner', Node.typedef, 
+                     accept=interp2app(descr_GenExprInner_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Getattr(Node):
     def __init__(self, expr, attrname, lineno=-1):
@@ -1177,10 +1293,13 @@
     def accept(self, visitor):
         return visitor.visitGetattr(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitGetattr'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Getattr_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitGetattr'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Getattr.typedef = TypeDef('Getattr', Node.typedef, 
+                     accept=interp2app(descr_Getattr_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Global(Node):
     def __init__(self, names, lineno=-1):
@@ -1200,10 +1319,13 @@
     def accept(self, visitor):
         return visitor.visitGlobal(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitGlobal'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Global_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitGlobal'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Global.typedef = TypeDef('Global', Node.typedef, 
+                     accept=interp2app(descr_Global_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class If(Node):
     def __init__(self, tests, else_, lineno=-1):
@@ -1235,10 +1357,13 @@
     def accept(self, visitor):
         return visitor.visitIf(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitIf'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_If_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitIf'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+If.typedef = TypeDef('If', Node.typedef, 
+                     accept=interp2app(descr_If_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Import(Node):
     def __init__(self, names, lineno=-1):
@@ -1258,10 +1383,13 @@
     def accept(self, visitor):
         return visitor.visitImport(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitImport'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Import_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitImport'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Import.typedef = TypeDef('Import', Node.typedef, 
+                     accept=interp2app(descr_Import_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Invert(UnaryOp):
     def __init__(self, expr, lineno=-1):
@@ -1281,10 +1409,13 @@
     def accept(self, visitor):
         return visitor.visitInvert(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitInvert'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Invert_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitInvert'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Invert.typedef = TypeDef('Invert', Node.typedef, 
+                     accept=interp2app(descr_Invert_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Keyword(Node):
     def __init__(self, name, expr, lineno=-1):
@@ -1305,10 +1436,13 @@
     def accept(self, visitor):
         return visitor.visitKeyword(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitKeyword'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Keyword_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitKeyword'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Keyword.typedef = TypeDef('Keyword', Node.typedef, 
+                     accept=interp2app(descr_Keyword_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Lambda(AbstractFunction):
     def __init__(self, argnames, defaults, flags, code, lineno=-1):
@@ -1346,10 +1480,13 @@
     def accept(self, visitor):
         return visitor.visitLambda(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitLambda'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Lambda_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitLambda'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Lambda.typedef = TypeDef('Lambda', Node.typedef, 
+                     accept=interp2app(descr_Lambda_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class LeftShift(BinaryOp):
     def __init__(self, (left, right), lineno=-1):
@@ -1370,10 +1507,13 @@
     def accept(self, visitor):
         return visitor.visitLeftShift(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitLeftShift'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_LeftShift_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitLeftShift'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+LeftShift.typedef = TypeDef('LeftShift', Node.typedef, 
+                     accept=interp2app(descr_LeftShift_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class List(Node):
     def __init__(self, nodes, lineno=-1):
@@ -1395,10 +1535,13 @@
     def accept(self, visitor):
         return visitor.visitList(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitList'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_List_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitList'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+List.typedef = TypeDef('List', Node.typedef, 
+                     accept=interp2app(descr_List_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class ListComp(Node):
     def __init__(self, expr, quals, lineno=-1):
@@ -1425,10 +1568,13 @@
     def accept(self, visitor):
         return visitor.visitListComp(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitListComp'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_ListComp_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitListComp'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+ListComp.typedef = TypeDef('ListComp', Node.typedef, 
+                     accept=interp2app(descr_ListComp_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class ListCompFor(Node):
     def __init__(self, assign, list, ifs, lineno=-1):
@@ -1458,10 +1604,13 @@
     def accept(self, visitor):
         return visitor.visitListCompFor(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitListCompFor'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_ListCompFor_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitListCompFor'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+ListCompFor.typedef = TypeDef('ListCompFor', Node.typedef, 
+                     accept=interp2app(descr_ListCompFor_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class ListCompIf(Node):
     def __init__(self, test, lineno=-1):
@@ -1481,10 +1630,13 @@
     def accept(self, visitor):
         return visitor.visitListCompIf(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitListCompIf'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_ListCompIf_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitListCompIf'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+ListCompIf.typedef = TypeDef('ListCompIf', Node.typedef, 
+                     accept=interp2app(descr_ListCompIf_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Mod(BinaryOp):
     def __init__(self, (left, right), lineno=-1):
@@ -1505,10 +1657,13 @@
     def accept(self, visitor):
         return visitor.visitMod(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitMod'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Mod_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitMod'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Mod.typedef = TypeDef('Mod', Node.typedef, 
+                     accept=interp2app(descr_Mod_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Module(Node):
     def __init__(self, doc, node, lineno=-1):
@@ -1529,10 +1684,13 @@
     def accept(self, visitor):
         return visitor.visitModule(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitModule'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Module_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitModule'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Module.typedef = TypeDef('Module', Node.typedef, 
+                     accept=interp2app(descr_Module_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Mul(BinaryOp):
     def __init__(self, (left, right), lineno=-1):
@@ -1553,10 +1711,13 @@
     def accept(self, visitor):
         return visitor.visitMul(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitMul'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Mul_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitMul'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Mul.typedef = TypeDef('Mul', Node.typedef, 
+                     accept=interp2app(descr_Mul_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Name(Node):
     def __init__(self, varname, lineno=-1):
@@ -1576,10 +1737,13 @@
     def accept(self, visitor):
         return visitor.visitName(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitName'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Name_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitName'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Name.typedef = TypeDef('Name', Node.typedef, 
+                     accept=interp2app(descr_Name_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class NoneConst(Node):
     def __init__(self, lineno=-1):
@@ -1598,10 +1762,13 @@
     def accept(self, visitor):
         return visitor.visitNoneConst(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitNoneConst'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_NoneConst_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitNoneConst'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+NoneConst.typedef = TypeDef('NoneConst', Node.typedef, 
+                     accept=interp2app(descr_NoneConst_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Not(UnaryOp):
     def __init__(self, expr, lineno=-1):
@@ -1621,10 +1788,13 @@
     def accept(self, visitor):
         return visitor.visitNot(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitNot'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Not_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitNot'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Not.typedef = TypeDef('Not', Node.typedef, 
+                     accept=interp2app(descr_Not_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class NumberConst(Node):
     def __init__(self, number_value, lineno=-1):
@@ -1644,10 +1814,13 @@
     def accept(self, visitor):
         return visitor.visitNumberConst(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitNumberConst'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_NumberConst_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitNumberConst'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+NumberConst.typedef = TypeDef('NumberConst', Node.typedef, 
+                     accept=interp2app(descr_NumberConst_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Or(AbstractTest):
     def __init__(self, nodes, lineno=-1):
@@ -1669,10 +1842,13 @@
     def accept(self, visitor):
         return visitor.visitOr(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitOr'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Or_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitOr'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Or.typedef = TypeDef('Or', Node.typedef, 
+                     accept=interp2app(descr_Or_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Pass(Node):
     def __init__(self, lineno=-1):
@@ -1691,10 +1867,13 @@
     def accept(self, visitor):
         return visitor.visitPass(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitPass'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Pass_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitPass'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Pass.typedef = TypeDef('Pass', Node.typedef, 
+                     accept=interp2app(descr_Pass_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Power(BinaryOp):
     def __init__(self, (left, right), lineno=-1):
@@ -1715,10 +1894,13 @@
     def accept(self, visitor):
         return visitor.visitPower(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitPower'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Power_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitPower'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Power.typedef = TypeDef('Power', Node.typedef, 
+                     accept=interp2app(descr_Power_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Print(Node):
     def __init__(self, nodes, dest, lineno=-1):
@@ -1746,10 +1928,13 @@
     def accept(self, visitor):
         return visitor.visitPrint(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitPrint'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Print_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitPrint'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Print.typedef = TypeDef('Print', Node.typedef, 
+                     accept=interp2app(descr_Print_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Printnl(Node):
     def __init__(self, nodes, dest, lineno=-1):
@@ -1777,10 +1962,13 @@
     def accept(self, visitor):
         return visitor.visitPrintnl(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitPrintnl'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Printnl_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitPrintnl'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Printnl.typedef = TypeDef('Printnl', Node.typedef, 
+                     accept=interp2app(descr_Printnl_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Raise(Node):
     def __init__(self, expr1, expr2, expr3, lineno=-1):
@@ -1813,10 +2001,13 @@
     def accept(self, visitor):
         return visitor.visitRaise(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitRaise'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Raise_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitRaise'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Raise.typedef = TypeDef('Raise', Node.typedef, 
+                     accept=interp2app(descr_Raise_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Return(Node):
     def __init__(self, value, lineno=-1):
@@ -1839,10 +2030,13 @@
     def accept(self, visitor):
         return visitor.visitReturn(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitReturn'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Return_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitReturn'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Return.typedef = TypeDef('Return', Node.typedef, 
+                     accept=interp2app(descr_Return_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class RightShift(BinaryOp):
     def __init__(self, (left, right), lineno=-1):
@@ -1863,10 +2057,13 @@
     def accept(self, visitor):
         return visitor.visitRightShift(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitRightShift'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_RightShift_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitRightShift'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+RightShift.typedef = TypeDef('RightShift', Node.typedef, 
+                     accept=interp2app(descr_RightShift_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Slice(Node):
     def __init__(self, expr, flags, lower, upper, lineno=-1):
@@ -1900,10 +2097,13 @@
     def accept(self, visitor):
         return visitor.visitSlice(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitSlice'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Slice_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitSlice'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Slice.typedef = TypeDef('Slice', Node.typedef, 
+                     accept=interp2app(descr_Slice_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Sliceobj(Node):
     def __init__(self, nodes, lineno=-1):
@@ -1925,10 +2125,13 @@
     def accept(self, visitor):
         return visitor.visitSliceobj(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitSliceobj'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Sliceobj_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitSliceobj'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Sliceobj.typedef = TypeDef('Sliceobj', Node.typedef, 
+                     accept=interp2app(descr_Sliceobj_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Stmt(Node):
     def __init__(self, nodes, lineno=-1):
@@ -1950,10 +2153,13 @@
     def accept(self, visitor):
         return visitor.visitStmt(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitStmt'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Stmt_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitStmt'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Stmt.typedef = TypeDef('Stmt', Node.typedef, 
+                     accept=interp2app(descr_Stmt_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class StringConst(Node):
     def __init__(self, string_value, lineno=-1):
@@ -1973,10 +2179,13 @@
     def accept(self, visitor):
         return visitor.visitStringConst(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitStringConst'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_StringConst_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitStringConst'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+StringConst.typedef = TypeDef('StringConst', Node.typedef, 
+                     accept=interp2app(descr_StringConst_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Sub(BinaryOp):
     def __init__(self, (left, right), lineno=-1):
@@ -1997,10 +2206,13 @@
     def accept(self, visitor):
         return visitor.visitSub(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitSub'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Sub_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitSub'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Sub.typedef = TypeDef('Sub', Node.typedef, 
+                     accept=interp2app(descr_Sub_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Subscript(Node):
     def __init__(self, expr, flags, subs, lineno=-1):
@@ -2029,10 +2241,13 @@
     def accept(self, visitor):
         return visitor.visitSubscript(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitSubscript'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Subscript_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitSubscript'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Subscript.typedef = TypeDef('Subscript', Node.typedef, 
+                     accept=interp2app(descr_Subscript_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class TryExcept(Node):
     def __init__(self, body, handlers, else_, lineno=-1):
@@ -2071,10 +2286,13 @@
     def accept(self, visitor):
         return visitor.visitTryExcept(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitTryExcept'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_TryExcept_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitTryExcept'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+TryExcept.typedef = TypeDef('TryExcept', Node.typedef, 
+                     accept=interp2app(descr_TryExcept_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class TryFinally(Node):
     def __init__(self, body, final, lineno=-1):
@@ -2095,10 +2313,13 @@
     def accept(self, visitor):
         return visitor.visitTryFinally(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitTryFinally'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_TryFinally_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitTryFinally'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+TryFinally.typedef = TypeDef('TryFinally', Node.typedef, 
+                     accept=interp2app(descr_TryFinally_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Tuple(Node):
     def __init__(self, nodes, lineno=-1):
@@ -2120,10 +2341,13 @@
     def accept(self, visitor):
         return visitor.visitTuple(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitTuple'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Tuple_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitTuple'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Tuple.typedef = TypeDef('Tuple', Node.typedef, 
+                     accept=interp2app(descr_Tuple_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class UnaryAdd(UnaryOp):
     def __init__(self, expr, lineno=-1):
@@ -2143,10 +2367,13 @@
     def accept(self, visitor):
         return visitor.visitUnaryAdd(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitUnaryAdd'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_UnaryAdd_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitUnaryAdd'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+UnaryAdd.typedef = TypeDef('UnaryAdd', Node.typedef, 
+                     accept=interp2app(descr_UnaryAdd_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class UnarySub(UnaryOp):
     def __init__(self, expr, lineno=-1):
@@ -2166,10 +2393,13 @@
     def accept(self, visitor):
         return visitor.visitUnarySub(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitUnarySub'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_UnarySub_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitUnarySub'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+UnarySub.typedef = TypeDef('UnarySub', Node.typedef, 
+                     accept=interp2app(descr_UnarySub_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class While(Node):
     def __init__(self, test, body, else_, lineno=-1):
@@ -2200,10 +2430,13 @@
     def accept(self, visitor):
         return visitor.visitWhile(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitWhile'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_While_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitWhile'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+While.typedef = TypeDef('While', Node.typedef, 
+                     accept=interp2app(descr_While_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 class Yield(Node):
     def __init__(self, value, lineno=-1):
@@ -2223,10 +2456,13 @@
     def accept(self, visitor):
         return visitor.visitYield(self)
 
-    def descr_accept(self, space, w_visitor):
-        w_callable = space.getattr(w_visitor, space.wrap('visitYield'))
-        args = Arguments(space, [ self ])
-        return space.call_args(w_callable, args)
+def descr_Yield_accept( space, w_self, w_visitor):
+    w_callable = space.getattr(w_visitor, space.wrap('visitYield'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args(w_callable, args)
+
+Yield.typedef = TypeDef('Yield', Node.typedef, 
+                     accept=interp2app(descr_Yield_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))
 
 
 class ASTVisitor(object):

Modified: pypy/dist/pypy/interpreter/astcompiler/astgen.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/astgen.py	(original)
+++ pypy/dist/pypy/interpreter/astcompiler/astgen.py	Wed Dec  7 18:07:36 2005
@@ -106,7 +106,7 @@
         print >> buf
         self._gen_visit(buf)
         print >> buf
-        self._gen_descr_visit(buf)
+        self._gen_typedef(buf)
         buf.seek(0, 0)
         return buf.read()
 
@@ -218,11 +218,15 @@
         print >> buf, "    def accept(self, visitor):"
         print >> buf, "        return visitor.visit%s(self)" % self.name
 
-    def _gen_descr_visit(self, buf):
-        print >> buf, "    def descr_accept(self, space, w_visitor):"
-        print >> buf, "        w_callable = space.getattr(w_visitor, space.wrap('visit%s'))" % self.name
-        print >> buf, "        args = Arguments(space, [ self ])"
-        print >> buf, "        return space.call_args(w_callable, args)"
+    def _gen_typedef(self, buf):
+        print >> buf, "def descr_%s_accept( space, w_self, w_visitor):" %self.name
+        print >> buf, "    w_callable = space.getattr(w_visitor, space.wrap('visit%s'))" % self.name
+        print >> buf, "    args = Arguments(space, [ w_self ])"
+        print >> buf, "    return space.call_args(w_callable, args)"
+        print >> buf, ""
+        print >> buf, "%s.typedef = TypeDef('%s', Node.typedef, " % (self.name,self.name)
+        print >> buf, "                     accept=interp2app(descr_%s_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ))" % self.name
+
 
     def _gen_additional_methods(self, buf):
         for key, value in self.additional_methods.iteritems():
@@ -354,7 +358,7 @@
 from consts import CO_VARARGS, CO_VARKEYWORDS, OP_ASSIGN
 from pypy.interpreter.baseobjspace import Wrappable
 from pypy.interpreter.typedef import TypeDef
-from pypy.interpreter.gateway import interp2app
+from pypy.interpreter.gateway import interp2app, W_Root, ObjSpace
 from pypy.interpreter.argument import Arguments
 
 def flatten(list):
@@ -406,21 +410,20 @@
 
     def descr_repr( self, space ):
 	return space.wrap( self.__repr__() )
-
-def descr_node_repr( space, w_obj ):
-    return w_obj.descr_repr( space )
     
-def descr_getChildNodes( space, w_obj ):
-    lst = w_obj.getChildNodes()
-    return space.newlist( lst )
-
-def descr_accept( space, w_obj, w_visitor ):
-    return w_obj.descr_accept( space, w_visitor )
+    def descr_getChildNodes( self, space ):
+        lst = self.getChildNodes()
+        return space.newlist( [ self.wrap( it ) for it in lst ] )
+
+def descr_node_accept( space, w_self, w_visitor ):
+    w_callable = space.getattr(w_visitor, space.wrap('visitNode'))
+    args = Arguments(space, [ w_self ])
+    return space.call_args( w_callable, args )
 
 Node.typedef = TypeDef('ASTNode',
-		       #__repr__ = interp2app(descr_node_repr),
-		       getChildNodes = interp2app(descr_getChildNodes),
-		       accept = interp2app(descr_accept),
+		       #__repr__ = interp2app(descr_node_repr, unwrap_spec=['self', ObjSpace] ),
+		       getChildNodes = interp2app(Node.descr_getChildNodes, unwrap_spec=[ 'self', ObjSpace ] ),
+		       accept = interp2app(descr_node_accept, unwrap_spec=[ ObjSpace, W_Root, W_Root ] ),
 		       )
 
         



More information about the Pypy-commit mailing list