Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bd30795

Browse files
committed
More user friedly interface:
dis() still disassembles the last frame of the lats stack trace. dis(x) disassembles x, which may be a code object, function, or method. disassemble(co, [lasti]) disassembles a code object; the lasti argument is now optional. disco(...) is an alias for disassemble(...), for backward compatibility.
1 parent c905fff commit bd30795

1 file changed

Lines changed: 25 additions & 10 deletions

File tree

Lib/dis.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,31 @@
33
import sys
44
import string
55

6-
def dis():
7-
tb = sys.last_traceback
8-
while tb.tb_next: tb = tb.tb_next
9-
distb(tb)
10-
11-
def distb(tb):
6+
def dis(x=None):
7+
if not x:
8+
distb()
9+
else:
10+
if hasattr(x, 'im_func'):
11+
x = x.im_func
12+
if hasattr(x, 'func_code'):
13+
x = x.func_code
14+
if hasattr(x, 'co_code'):
15+
disassemble(x)
16+
else:
17+
raise ValueError, \
18+
"don't know how to disassemble %s objects" % \
19+
type(x).__name__
20+
21+
def distb(tb=None):
22+
if not tb:
23+
try:
24+
tb = sys.last_traceback
25+
except AttributeError:
26+
raise RuntimeError, "no last traceback to disassemble"
27+
while tb.tb_next: tb = tb.tb_next
1228
disassemble(tb.tb_frame.f_code, tb.tb_lasti)
1329

14-
def disco(co):
15-
disassemble(co, -1)
16-
17-
def disassemble(co, lasti):
30+
def disassemble(co, lasti=-1):
1831
code = co.co_code
1932
labels = findlabels(code)
2033
n = len(code)
@@ -46,6 +59,8 @@ def disassemble(co, lasti):
4659
print '(' + cmp_op[oparg] + ')',
4760
print
4861

62+
disco = disassemble
63+
4964
def findlabels(code):
5065
labels = []
5166
n = len(code)

0 commit comments

Comments
 (0)