diff -r dd3992754141 Lib/dis.py --- a/Lib/dis.py Sat Dec 10 22:20:23 2011 +0100 +++ b/Lib/dis.py Sun Dec 11 00:29:35 2011 +0100 @@ -144,7 +144,7 @@ """Print details of methods, functions, or code to stdout.""" print(code_info(co)) -def disassemble(co, lasti=-1): +def disassemble(co, lasti=-1, nesting_level=0): """Disassemble a code object.""" code = co.co_code labels = findlabels(code) @@ -162,6 +162,8 @@ else: print(' ', end=' ') + print(" " * nesting_level, end="") + if i == lasti: print('-->', end=' ') else: print(' ', end=' ') if i in labels: print('>>', end=' ') @@ -169,6 +171,7 @@ print(repr(i).rjust(4), end=' ') print(opname[op].ljust(20), end=' ') i = i+1 + nested_code_object = None if op >= HAVE_ARGUMENT: oparg = code[i] + code[i+1]*256 + extended_arg extended_arg = 0 @@ -178,6 +181,8 @@ print(repr(oparg).rjust(5), end=' ') if op in hasconst: print('(' + repr(co.co_consts[oparg]) + ')', end=' ') + if hasattr(co.co_consts[oparg], "co_code"): + nested_code_object = co.co_consts[oparg] elif op in hasname: print('(' + co.co_names[oparg] + ')', end=' ') elif op in hasjrel: @@ -192,6 +197,10 @@ print('(' + free[oparg] + ')', end=' ') print() + if nested_code_object: + disassemble(nested_code_object, + lasti=lasti, nesting_level=nesting_level+1) + def _disassemble_bytes(code, lasti=-1, varnames=None, names=None, constants=None): labels = findlabels(code)