def write(fd, ast): assert isinstance(ast, nodes.FunctionDefinition) visitor = Visitor() traverse.traverse(visitor, ast.statements) _process_queue(fd, visitor.print_queue)
def _gather_slots(node): class Collector(traverse.Visitor): def __init__(self): self.slots = set() def visit_identifier(self, node): if node.type == nodes.Identifier.T_SLOT: self.slots.add(node.slot) collector = Collector() traverse.traverse(collector, node) return collector.slots
def has_same_table(node, table): class Checker(traverse.Visitor): def __init__(self, table): self.found = False self.table = table def visit_table_element(self, node): if is_equal(self.table, node): self.found = True def _visit(self, node): if not self.found: traverse.Visitor._visit(self, node) def _visit_list(self, nodes_list): if not self.found: traverse.Visitor._visit_list(self, nodes_list) checker = Checker(table) traverse.traverse(checker, node) return checker.found
def validate(ast, warped=True): visitor = Visitor(warped) traverse.traverse(visitor, ast)
def _cleanup_invalid_nodes(ast): traverse.traverse(_TreeCleanup(), ast)
def _eliminate_multres(ast): traverse.traverse(_MultresEliminator(), ast) _cleanup_invalid_nodes(ast)
def _collect_slots(ast): collector = _SlotsCollector() traverse.traverse(collector, ast) return collector.slots, collector.unused
def mark_local_definitions(ast): traverse.traverse(_LocalDefinitionsMarker(), ast)
def mark_locals(ast): traverse.traverse(_LocalsMarker(), ast)
def mark_locals(ast, alt_mode=False): traverse.traverse(_LocalsMarker(alt_mode), ast)
def _gather_statements_lists(node): collector = _StatementsCollector() traverse.traverse(collector, node) return collector.result