PyDict_Next_entry = Symtab.Entry(
PyDict_Next_name, PyDict_Next_name, PyDict_Next_func_type)
- def visit_Node(self, node):
- # descend into statements (loops) and nodes (comprehensions)
- self.visitchildren(node)
- return node
+ visit_Node = Visitor.VisitorTransform.recurse_to_children
def visit_ModuleNode(self, node):
self.current_scope = node.scope
cases = cases,
else_clause = node.else_clause)
-
- def visit_Node(self, node):
- self.visitchildren(node)
- return node
+ visit_Node = Visitor.VisitorTransform.recurse_to_children
class FlattenInListTransform(Visitor.VisitorTransform, SkipDeclarations):
condition = reduce(concat, conds)
return UtilNodes.EvalWithTempExprNode(lhs, condition)
- def visit_Node(self, node):
- self.visitchildren(node)
- return node
+ visit_Node = Visitor.VisitorTransform.recurse_to_children
class FlattenBuiltinTypeCreation(Visitor.VisitorTransform):
return node
return node.arg
- def visit_Node(self, node):
- self.visitchildren(node)
- return node
+ visit_Node = Visitor.VisitorTransform.recurse_to_children
class ConstantFolding(Visitor.VisitorTransform, SkipDeclarations):
self.current_scope = old_scope
return node
- def visit_Node(self, node):
- self.visitchildren(node)
- return node
+ visit_Node = Visitor.VisitorTransform.recurse_to_children
class FinalOptimizePhase(Visitor.CythonTransform):
super(NameNodeCollector, self).__init__()
self.name_nodes = []
- def visit_Node(self, node):
- self.visitchildren(node)
- return node
+ visit_Node = TreeVisitor.visitchildren
def visit_NameNode(self, node):
self.name_nodes.append(node)
else:
node.cython_attribute = self.option_names.get(node.name)
return node
-
- def visit_Node(self, node):
- self.visitchildren(node)
- return node
def try_to_parse_option(self, node):
# If node is the contents of an option (in a with statement or
self.visitchildren(node)
return node
- def visit_Node(self, node):
- # descend into statements (loops) and nodes (comprehensions)
- self.visitchildren(node)
- return node
+ visit_Node = VisitorTransform.recurse_to_children
def visit_ComprehensionNode(self, node):
if type(node.loop) not in (Nodes.ForInStatNode,
--- /dev/null
+cdef class BasicVisitor:
+ cdef object dispatch_table
+ cpdef visit(self, obj)
+
+cdef class TreeVisitor(BasicVisitor):
+ cdef public access_path
+ cpdef visitchild(self, child, parent, attrname, idx)
+
+cdef class VisitorTransform(TreeVisitor):
+ cpdef visitchildren(self, parent, attrs=*)
+ cpdef recurse_to_children(self, node)
+
+cdef class CythonTransform(VisitorTransform):
+ cdef public context
+ cdef public current_directives
are within a StatListNode or similar before doing this.)
"""
def visitchildren(self, parent, attrs=None):
- result = super(VisitorTransform, self).visitchildren(parent, attrs)
+# result = super(VisitorTransform, self).visitchildren(parent, attrs)
+ result = TreeVisitor.visitchildren(self, parent, attrs)
for attr, newnode in result.iteritems():
if not isinstance(newnode, list):
setattr(parent, attr, newnode)
newlist.append(x)
setattr(parent, attr, newlist)
return result
+
+ def recurse_to_children(self, node):
+ self.visitchildren(node)
+ return node
def __call__(self, root):
return self.visit(root)