another bit less overhead inside of Visitor classes
authorStefan Behnel <scoder@users.berlios.de>
Thu, 11 Nov 2010 20:08:34 +0000 (21:08 +0100)
committerStefan Behnel <scoder@users.berlios.de>
Thu, 11 Nov 2010 20:08:34 +0000 (21:08 +0100)
Cython/Compiler/Visitor.pxd
Cython/Compiler/Visitor.py

index 46ab02fb5173310e4df906f0ff5a6cf571ceeaa3..4ca2e3f7693496ad6d609308b47365a6730beacb 100644 (file)
@@ -3,14 +3,15 @@ cimport cython
 cdef class BasicVisitor:
     cdef dict dispatch_table
     cpdef visit(self, obj)
-    cpdef find_handler(self, obj)
+    cdef _visit(self, obj)
+    cdef find_handler(self, obj)
 
 cdef class TreeVisitor(BasicVisitor):
     cdef public list access_path
     cpdef visitchild(self, child, parent, attrname, idx)
     @cython.locals(idx=int)
     cdef dict _visitchildren(self, parent, attrs)
-#    cpdef visitchildren(self, parent, attrs=*)
+    cpdef visitchildren(self, parent, attrs=*)
 
 cdef class VisitorTransform(TreeVisitor):
     cpdef visitchildren(self, parent, attrs=*)
index 224dbc42e6f948e26599c9b631f8c729a78f526c..6b89cca94dee4bcd5ae198ee99f93d8e01f0cc1b 100644 (file)
@@ -20,6 +20,9 @@ class BasicVisitor(object):
         self.dispatch_table = {}
 
     def visit(self, obj):
+        return self._visit(obj)
+
+    def _visit(self, obj):
         try:
             handler_method = self.dispatch_table[type(obj)]
         except KeyError:
@@ -176,7 +179,7 @@ class TreeVisitor(BasicVisitor):
     def visitchild(self, child, parent, attrname, idx):
         self.access_path.append((parent, attrname, idx))
         try:
-            result = self.visit(child)
+            result = self._visit(child)
         except Errors.CompileError:
             raise
         except Exception, e:
@@ -256,7 +259,7 @@ class VisitorTransform(TreeVisitor):
         return node
     
     def __call__(self, root):
-        return self.visit(root)
+        return self._visit(root)
 
 class CythonTransform(VisitorTransform):
     """
@@ -388,7 +391,7 @@ class PrintTree(TreeVisitor):
 
     def __call__(self, tree, phase=None):
         print("Parse tree dump at phase '%s'" % phase)
-        self.visit(tree)
+        self._visit(tree)
         return tree
 
     # Don't do anything about process_list, the defaults gives