summaryrefslogtreecommitdiff
path: root/lab/show_pyc.py
diff options
context:
space:
mode:
Diffstat (limited to 'lab/show_pyc.py')
-rw-r--r--lab/show_pyc.py49
1 files changed, 20 insertions, 29 deletions
diff --git a/lab/show_pyc.py b/lab/show_pyc.py
index 2e21eb64..393e84d2 100644
--- a/lab/show_pyc.py
+++ b/lab/show_pyc.py
@@ -28,18 +28,16 @@ def show_pyc_file(fname):
flags = struct.unpack('<L', f.read(4))[0]
hash_based = flags & 0x01
check_source = flags & 0x02
- print("flags 0x%08x" % (flags,))
+ print(f"flags 0x{flags:08x}")
if hash_based:
source_hash = f.read(8)
read_date_and_size = False
if read_date_and_size:
moddate = f.read(4)
modtime = time.asctime(time.localtime(struct.unpack('<L', moddate)[0]))
- print("moddate %s (%s)" % (binascii.hexlify(moddate), modtime))
- if sys.version_info >= (3, 3):
- # 3.3 added another long to the header (size).
- size = f.read(4)
- print("pysize %s (%d)" % (binascii.hexlify(size), struct.unpack('<L', size)[0]))
+ print(f"moddate {binascii.hexlify(moddate)} ({modtime})")
+ size = f.read(4)
+ print("pysize %s (%d)" % (binascii.hexlify(size), struct.unpack('<L', size)[0]))
code = marshal.load(f)
show_code(code)
@@ -92,13 +90,13 @@ def show_code(code, indent='', number=None):
label = ""
if number is not None:
label = "%d: " % number
- print("%s%scode" % (indent, label))
+ print(f"{indent}{label}code")
indent += " "
- print("%sname %r" % (indent, code.co_name))
+ print(f"{indent}name {code.co_name!r}")
print("%sargcount %d" % (indent, code.co_argcount))
print("%snlocals %d" % (indent, code.co_nlocals))
print("%sstacksize %d" % (indent, code.co_stacksize))
- print("%sflags %04x: %s" % (indent, code.co_flags, flag_words(code.co_flags, CO_FLAGS)))
+ print(f"{indent}flags {code.co_flags:04x}: {flag_words(code.co_flags, CO_FLAGS)}")
show_hex("code", code.co_code, indent=indent)
dis.disassemble(code)
print("%sconsts" % indent)
@@ -107,43 +105,36 @@ def show_code(code, indent='', number=None):
show_code(const, indent+" ", number=i)
else:
print(" %s%d: %r" % (indent, i, const))
- print("%snames %r" % (indent, code.co_names))
- print("%svarnames %r" % (indent, code.co_varnames))
- print("%sfreevars %r" % (indent, code.co_freevars))
- print("%scellvars %r" % (indent, code.co_cellvars))
- print("%sfilename %r" % (indent, code.co_filename))
+ print(f"{indent}names {code.co_names!r}")
+ print(f"{indent}varnames {code.co_varnames!r}")
+ print(f"{indent}freevars {code.co_freevars!r}")
+ print(f"{indent}cellvars {code.co_cellvars!r}")
+ print(f"{indent}filename {code.co_filename!r}")
print("%sfirstlineno %d" % (indent, code.co_firstlineno))
show_hex("lnotab", code.co_lnotab, indent=indent)
- print(" %s%s" % (indent, ", ".join("%r:%r" % (line, byte) for byte, line in lnotab_interpreted(code))))
+ print(" {}{}".format(indent, ", ".join(f"{line!r}:{byte!r}" for byte, line in lnotab_interpreted(code))))
if hasattr(code, "co_linetable"):
show_hex("linetable", code.co_linetable, indent=indent)
if hasattr(code, "co_lines"):
- print(" %sco_lines %s" % (
+ print(" {}co_lines {}".format(
indent,
- ", ".join("%r:%r-%r" % (line, start, end) for start, end, line in code.co_lines())
+ ", ".join(f"{line!r}:{start!r}-{end!r}" for start, end, line in code.co_lines())
))
def show_hex(label, h, indent):
h = binascii.hexlify(h)
if len(h) < 60:
- print("%s%s %s" % (indent, label, h.decode('ascii')))
+ print("{}{} {}".format(indent, label, h.decode('ascii')))
else:
- print("%s%s" % (indent, label))
+ print(f"{indent}{label}")
for i in range(0, len(h), 60):
- print("%s %s" % (indent, h[i:i+60].decode('ascii')))
+ print("{} {}".format(indent, h[i:i+60].decode('ascii')))
-if sys.version_info >= (3,):
- def bytes_to_ints(bytes_value):
- return bytes_value
-else:
- def bytes_to_ints(bytes_value):
- for byte in bytes_value:
- yield ord(byte)
def lnotab_interpreted(code):
# Adapted from dis.py in the standard library.
- byte_increments = bytes_to_ints(code.co_lnotab[0::2])
- line_increments = bytes_to_ints(code.co_lnotab[1::2])
+ byte_increments = code.co_lnotab[0::2]
+ line_increments = code.co_lnotab[1::2]
last_line_num = None
line_num = code.co_firstlineno