Commit aaa5c5f9 authored by Stefan Behnel's avatar Stefan Behnel

compile classes in Visitor.py into real extension classes

parent 6bb7b10d
......@@ -49,10 +49,7 @@ class IterationTransform(Visitor.VisitorTransform):
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
......@@ -361,10 +358,7 @@ class SwitchTransform(Visitor.VisitorTransform):
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):
......@@ -417,9 +411,7 @@ 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):
......@@ -534,9 +526,7 @@ 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):
......@@ -614,9 +604,7 @@ 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):
......
......@@ -21,9 +21,7 @@ class NameNodeCollector(TreeVisitor):
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)
......@@ -423,10 +421,6 @@ class InterpretCompilerDirectives(CythonTransform, SkipDeclarations):
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
# decorator), returns (optionname, value).
......@@ -595,10 +589,7 @@ class ComprehensionTransform(VisitorTransform):
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,
......
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
......@@ -143,7 +143,8 @@ class VisitorTransform(TreeVisitor):
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)
......@@ -159,6 +160,10 @@ class VisitorTransform(TreeVisitor):
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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment