Source code for ducky.cc.passes.ast_dce

from pycparser import c_ast

from . import ASTOptVisitor, dump_node

[docs]class DSEVisitor(ASTOptVisitor): priority = 500
[docs] def visit_Compound(self, node): # # Any statement after "return" in a block is effectively dead # if any(isinstance(stmt, c_ast.Return) for stmt in node.block_items): self.DEBUG(self.log_prefix + 'DCE: Return present in compound block, check for dead statements') self.DOWN() for stmt in reversed(node.block_items[:]): if isinstance(stmt, c_ast.Return): break self.DEBUG(self.log_prefix + 'removing %s', dump_node(stmt)) node.block_items.remove(stmt) self.tree_modified = True self.generic_visit(node) self.UP()
from . import AST_PASSES AST_PASSES['ast-dce'] = DSEVisitor