clean up compiled code in Visitor.py
authorStefan Behnel <scoder@users.berlios.de>
Fri, 3 Jul 2009 19:30:55 +0000 (21:30 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Fri, 3 Jul 2009 19:30:55 +0000 (21:30 +0200)
Cython/Compiler/Visitor.pxd
Cython/Compiler/Visitor.py

index 86be5c03157abb5f7beab0e822726391688c187c..bfe352c45468f993526b2148ef77bb2ff5188f3b 100644 (file)
@@ -5,9 +5,9 @@ cdef class BasicVisitor:
 cdef class TreeVisitor(BasicVisitor):
     cdef public list access_path
     cpdef visitchild(self, child, parent, attrname, idx)
+    cpdef visitchildren(self, parent, attrs=*)
 
 cdef class VisitorTransform(TreeVisitor):
-    cdef object _super_visitchildren
     cpdef visitchildren(self, parent, attrs=*)
     cpdef recurse_to_children(self, node)
 
index 220179d0c5b5a8d86386000c47d3aafde6dca63a..823301985a996bd574bd280f756bdaee96c9abd7 100644 (file)
@@ -187,14 +187,13 @@ class TreeVisitor(BasicVisitor):
         or a list of return values (in the case of multiple children
         in an attribute)).
         """
-
         if parent is None: return None
         result = {}
         for attr in parent.child_attrs:
             if attrs is not None and attr not in attrs: continue
             child = getattr(parent, attr)
             if child is not None:
-                if isinstance(child, list):
+                if type(child) is list:
                     childretval = [self.visitchild(x, parent, attr, idx) for idx, x in enumerate(child)]
                 else:
                     childretval = self.visitchild(child, parent, attr, None)
@@ -223,22 +222,18 @@ class VisitorTransform(TreeVisitor):
     was not, an exception will be raised. (Typically you want to ensure that you
     are within a StatListNode or similar before doing this.)
     """
-    def __init__(self):
-        super(VisitorTransform, self).__init__()
-        self._super_visitchildren = super(VisitorTransform, self).visitchildren
-
     def visitchildren(self, parent, attrs=None):
         result = cython.declare(dict)
-        result = self._super_visitchildren(parent, attrs)
+        result = TreeVisitor.visitchildren(self, parent, attrs)
         for attr, newnode in result.iteritems():
-            if not isinstance(newnode, list):
+            if not type(newnode) is list:
                 setattr(parent, attr, newnode)
             else:
                 # Flatten the list one level and remove any None
                 newlist = []
                 for x in newnode:
                     if x is not None:
-                        if isinstance(x, list):
+                        if type(x) is list:
                             newlist += x
                         else:
                             newlist.append(x)