Kaydet (Commit) a39414b1 authored tarafından Jeremy Hylton's avatar Jeremy Hylton

PEP 227 implementation

Track changes to new opcodes.  Add hasfree list that applies to all
ops that use the closure.
üst 903f654a
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment