From 5f81cab357a2e00a6a89401ada9b083fbbacae33 Mon Sep 17 00:00:00 2001 From: Jon Riehl Date: Tue, 11 Jun 2013 17:11:38 -0500 Subject: [PATCH] Moved most of bytecode_visitor.BytecodeFlowVisitor into a new parent class GenericFlowVisitor, which is a useful starting point for address-based flow visitors. --- llpython/bytecode_visitor.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/llpython/bytecode_visitor.py b/llpython/bytecode_visitor.py index bbd2f01..0b2dff3 100644 --- a/llpython/bytecode_visitor.py +++ b/llpython/bytecode_visitor.py @@ -190,7 +190,7 @@ class BasicBlockVisitor (BytecodeVisitor): # ______________________________________________________________________ -class BytecodeFlowVisitor (BytecodeVisitor): +class GenericFlowVisitor (BytecodeVisitor): def visit (self, flow): self.block_list = list(flow.keys()) self.block_list.sort() @@ -209,15 +209,6 @@ class BytecodeFlowVisitor (BytecodeVisitor): del self.block_list return self.exit_flow_object(flow) - def visit_op (self, i, op, arg, *args, **kws): - new_args = [] - for child_i, child_op, _, child_arg, child_args in args: - new_args.extend(self.visit_op(child_i, child_op, child_arg, - *child_args)) - ret_val = super(BytecodeFlowVisitor, self).visit_op(i, op, arg, - *new_args) - return ret_val - def enter_flow_object (self, flow): self.new_flow = {} @@ -234,6 +225,18 @@ class BytecodeFlowVisitor (BytecodeVisitor): # ______________________________________________________________________ +class BytecodeFlowVisitor (GenericFlowVisitor): + def visit_op (self, i, op, arg, *args, **kws): + new_args = [] + for child_i, child_op, _, child_arg, child_args in args: + new_args.extend(self.visit_op(child_i, child_op, child_arg, + *child_args)) + ret_val = super(BytecodeFlowVisitor, self).visit_op(i, op, arg, + *new_args) + return ret_val + +# ______________________________________________________________________ + class BenignBytecodeVisitorMixin (object): def _do_nothing (self, i, op, arg, *args, **kws): return [(i, op, self.opnames[op], arg, args)]