mirror of https://github.com/python/cpython
PEP 227 implementation
Track changes to new opcodes. Add hasfree list that applies to all ops that use the closure.
This commit is contained in:
parent
903f654ac9
commit
a39414b15c
16
Lib/dis.py
16
Lib/dis.py
|
@ -6,7 +6,7 @@ import types
|
|||
|
||||
__all__ = ["dis","disassemble","distb","disco","opname","cmp_op",
|
||||
"hasconst","hasname","hasjrel","hasjabs","haslocal",
|
||||
"hascompare"]
|
||||
"hascompare", "hasfree"]
|
||||
|
||||
def dis(x=None):
|
||||
"""Disassemble classes, methods, functions, or code.
|
||||
|
@ -60,6 +60,7 @@ def disassemble(co, lasti=-1):
|
|||
n = len(code)
|
||||
i = 0
|
||||
extended_arg = 0
|
||||
free = None
|
||||
while i < n:
|
||||
c = code[i]
|
||||
op = ord(c)
|
||||
|
@ -88,6 +89,10 @@ def disassemble(co, lasti=-1):
|
|||
print '(' + co.co_varnames[oparg] + ')',
|
||||
elif op in hascompare:
|
||||
print '(' + cmp_op[oparg] + ')',
|
||||
elif op in hasfree:
|
||||
if free is None:
|
||||
free = co.co_cellvars + co.co_freevars
|
||||
print '(' + free[oparg] + ')',
|
||||
print
|
||||
|
||||
disco = disassemble # XXX For backwards compatibility
|
||||
|
@ -127,6 +132,7 @@ hasjrel = []
|
|||
hasjabs = []
|
||||
haslocal = []
|
||||
hascompare = []
|
||||
hasfree = []
|
||||
|
||||
opname = [''] * 256
|
||||
for op in range(256): opname[op] = '<' + `op` + '>'
|
||||
|
@ -272,6 +278,14 @@ def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8)
|
|||
def_op('MAKE_FUNCTION', 132) # Number of args with default values
|
||||
def_op('BUILD_SLICE', 133) # Number of items
|
||||
|
||||
def_op('MAKE_CLOSURE', 134)
|
||||
def_op('LOAD_CLOSURE', 135)
|
||||
hasfree.append(135)
|
||||
def_op('LOAD_DEREF', 136)
|
||||
hasfree.append(136)
|
||||
def_op('STORE_DEREF', 137)
|
||||
hasfree.append(137)
|
||||
|
||||
def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8)
|
||||
def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8)
|
||||
def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8)
|
||||
|
|
Loading…
Reference in New Issue