diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2010-08-17 10:18:16 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2010-08-17 10:18:16 (GMT) |
commit | 09c8123e6f2d01444b03e7971f3e3dec37474490 (patch) | |
tree | ef40c7e94ccba25249313ecd46de2b131e99fd8a /Lib | |
parent | 77203adb7e3c50775b768a846ebc03514e69be77 (diff) | |
download | cpython-09c8123e6f2d01444b03e7971f3e3dec37474490.zip cpython-09c8123e6f2d01444b03e7971f3e3dec37474490.tar.gz cpython-09c8123e6f2d01444b03e7971f3e3dec37474490.tar.bz2 |
Address XXX comment in dis.py: inspect.py now attempts to reuse the dis.py compiler flag values before resorting to defining its own
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/dis.py | 9 | ||||
-rw-r--r-- | Lib/inspect.py | 18 |
2 files changed, 19 insertions, 8 deletions
@@ -68,9 +68,10 @@ def distb(tb=None): while tb.tb_next: tb = tb.tb_next disassemble(tb.tb_frame.f_code, tb.tb_lasti) -# XXX This duplicates information from code.h, also duplicated in inspect.py. -# XXX Maybe this ought to be put in a central location, like opcode.py? -flag2name = { +# The inspect module interrogates this dictionary to build its +# list of CO_* constants. It is also used by pretty_flags to +# turn the co_flags field into a human readable list. +COMPILER_FLAG_NAMES = { 1: "OPTIMIZED", 2: "NEWLOCALS", 4: "VARARGS", @@ -86,7 +87,7 @@ def pretty_flags(flags): for i in range(32): flag = 1<<i if flags & flag: - names.append(flag2name.get(flag, hex(flag))) + names.append(COMPILER_FLAG_NAMES.get(flag, hex(flag))) flags ^= flag if not flags: break diff --git a/Lib/inspect.py b/Lib/inspect.py index 61c2502..f894da2 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -36,15 +36,25 @@ import types import itertools import string import re -import dis import imp import tokenize import linecache from operator import attrgetter from collections import namedtuple -# These constants are from Include/code.h. -CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS = 0x1, 0x2, 0x4, 0x8 -CO_NESTED, CO_GENERATOR, CO_NOFREE = 0x10, 0x20, 0x40 + +# Create constants for the compiler flags in Include/code.h +# We try to get them from dis to avoid duplication, but fall +# back to hardcording so the dependency is optional +try: + from dis import COMPILER_FLAG_NAMES as _flag_names +except ImportError: + CO_OPTIMIZED, CO_NEWLOCALS = 0x1, 0x2 + CO_VARARGS, CO_VARKEYWORDS = 0x4, 0x8 + CO_NESTED, CO_GENERATOR, CO_NOFREE = 0x10, 0x20, 0x40 +else: + mod_dict = globals() + for k, v in _flag_names.items(): + mod_dict["CO_" + v] = k # See Include/object.h TPFLAGS_IS_ABSTRACT = 1 << 20 |