From 0b24adb80aa2ab12e8e8eff970dc5f99f6ed6d8d Mon Sep 17 00:00:00 2001 From: Jon Riehl Date: Fri, 7 Jun 2013 15:30:45 -0500 Subject: [PATCH] Modified various passes to use the inspect module instead of using type comparisons or isinstance. --- llpython/byte_control.py | 4 ++-- llpython/byte_flow.py | 5 ++--- llpython/opcode_util.py | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/llpython/byte_control.py b/llpython/byte_control.py index efd54aa..93e0d83 100644 --- a/llpython/byte_control.py +++ b/llpython/byte_control.py @@ -6,7 +6,7 @@ from __future__ import absolute_import import opcode import pprint -import types +import inspect from . import opcode_util from .bytecode_visitor import BasicBlockVisitor, BenignBytecodeVisitorMixin @@ -281,7 +281,7 @@ def main (*args, **kws): def _visit(obj): print("_" * 70) print(obj) - if type(obj) == types.FunctionType: + if inspect.isfunction(obj): cfg = build_cfg(obj) else: cfg = ControlFlowBuilder.build_cfg_from_co(obj) diff --git a/llpython/byte_flow.py b/llpython/byte_flow.py index 452a7f7..76e1a23 100644 --- a/llpython/byte_flow.py +++ b/llpython/byte_flow.py @@ -5,7 +5,7 @@ from __future__ import absolute_import import dis import opcode import pprint -import types +import inspect from .bytecode_visitor import BasicBlockVisitor from . import opcode_util @@ -341,11 +341,10 @@ def build_flow(func): # ______________________________________________________________________ def demo_flow_builder(builder_cls, *args): - import pprint def _visit(obj): print("_" * 70) print(obj) - if type(obj) == types.FunctionType: + if inspect.isfunction(obj): flow = builder_cls.build_flow(obj) else: flow = builder_cls.build_flow_from_co(obj) diff --git a/llpython/opcode_util.py b/llpython/opcode_util.py index e79257e..727e4ce 100644 --- a/llpython/opcode_util.py +++ b/llpython/opcode_util.py @@ -4,7 +4,7 @@ from collections import namedtuple import dis import opcode -import types +import inspect # ______________________________________________________________________ # Module data @@ -208,7 +208,7 @@ def itercodeobjs(codeobj): "Iterator that traverses code objects via the co_consts member." yield codeobj for const in codeobj.co_consts: - if isinstance(const, types.CodeType): + if inspect.iscode(const): for childobj in itercodeobjs(const): yield childobj