mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Address XXX comment in dis.py: inspect.py now attempts to reuse the dis.py compiler flag values before resorting to defining its own
This commit is contained in:
parent
77203adb7e
commit
09c8123e6f
3 changed files with 22 additions and 8 deletions
|
@ -68,9 +68,10 @@ def distb(tb=None):
|
||||||
while tb.tb_next: tb = tb.tb_next
|
while tb.tb_next: tb = tb.tb_next
|
||||||
disassemble(tb.tb_frame.f_code, tb.tb_lasti)
|
disassemble(tb.tb_frame.f_code, tb.tb_lasti)
|
||||||
|
|
||||||
# XXX This duplicates information from code.h, also duplicated in inspect.py.
|
# The inspect module interrogates this dictionary to build its
|
||||||
# XXX Maybe this ought to be put in a central location, like opcode.py?
|
# list of CO_* constants. It is also used by pretty_flags to
|
||||||
flag2name = {
|
# turn the co_flags field into a human readable list.
|
||||||
|
COMPILER_FLAG_NAMES = {
|
||||||
1: "OPTIMIZED",
|
1: "OPTIMIZED",
|
||||||
2: "NEWLOCALS",
|
2: "NEWLOCALS",
|
||||||
4: "VARARGS",
|
4: "VARARGS",
|
||||||
|
@ -86,7 +87,7 @@ def pretty_flags(flags):
|
||||||
for i in range(32):
|
for i in range(32):
|
||||||
flag = 1<<i
|
flag = 1<<i
|
||||||
if flags & flag:
|
if flags & flag:
|
||||||
names.append(flag2name.get(flag, hex(flag)))
|
names.append(COMPILER_FLAG_NAMES.get(flag, hex(flag)))
|
||||||
flags ^= flag
|
flags ^= flag
|
||||||
if not flags:
|
if not flags:
|
||||||
break
|
break
|
||||||
|
|
|
@ -36,15 +36,25 @@ import types
|
||||||
import itertools
|
import itertools
|
||||||
import string
|
import string
|
||||||
import re
|
import re
|
||||||
import dis
|
|
||||||
import imp
|
import imp
|
||||||
import tokenize
|
import tokenize
|
||||||
import linecache
|
import linecache
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
# These constants are from Include/code.h.
|
|
||||||
CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS = 0x1, 0x2, 0x4, 0x8
|
# 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
|
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
|
# See Include/object.h
|
||||||
TPFLAGS_IS_ABSTRACT = 1 << 20
|
TPFLAGS_IS_ABSTRACT = 1 << 20
|
||||||
|
|
|
@ -90,6 +90,9 @@ Extensions
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Address XXX comment in dis.py by having inspect.py prefer to reuse the
|
||||||
|
dis.py compiler flag values over defining its own
|
||||||
|
|
||||||
- Issue #9147: Added dis.code_info() which is similar to show_code()
|
- Issue #9147: Added dis.code_info() which is similar to show_code()
|
||||||
but returns formatted code information in a string rather than
|
but returns formatted code information in a string rather than
|
||||||
displaying on screen.
|
displaying on screen.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue