annotate Lib/dis.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents a86ea2cceaec
children 14025a4f793e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Disassembler
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 import sys
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 import string
5189
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
5 import types
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
4988
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
7 def dis(x=None):
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
8 if not x:
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
9 distb()
5189
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
10 return
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
11 if type(x) is types.InstanceType:
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
12 x = x.__class__
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
13 if hasattr(x, '__dict__'):
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
14 items = x.__dict__.items()
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
15 items.sort()
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
16 for name, x1 in items:
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
17 if type(x1) in (types.MethodType,
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
18 types.FunctionType,
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
19 types.CodeType):
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
20 print "Disassembly of %s:" % name
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
21 try:
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
22 dis(x1)
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
23 except TypeError, msg:
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
24 print "Sorry:", msg
bab9196a8f30 Support disassembly of a variety of objects through dis.dis().
Guido van Rossum <guido@python.org>
parents: 4989
diff changeset
25 print
4988
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
26 else:
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
27 if hasattr(x, 'im_func'):
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
28 x = x.im_func
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
29 if hasattr(x, 'func_code'):
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
30 x = x.func_code
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
31 if hasattr(x, 'co_code'):
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
32 disassemble(x)
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
33 else:
4989
65148ded5108 Of course, when the type of the argument to dis() is unsupported, it
Guido van Rossum <guido@python.org>
parents: 4988
diff changeset
34 raise TypeError, \
4988
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
35 "don't know how to disassemble %s objects" % \
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
36 type(x).__name__
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
4988
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
38 def distb(tb=None):
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
39 if not tb:
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
40 try:
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
41 tb = sys.last_traceback
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
42 except AttributeError:
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
43 raise RuntimeError, "no last traceback to disassemble"
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
44 while tb.tb_next: tb = tb.tb_next
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 disassemble(tb.tb_frame.f_code, tb.tb_lasti)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46
4988
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
47 def disassemble(co, lasti=-1):
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 code = co.co_code
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 labels = findlabels(code)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 n = len(code)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 i = 0
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 while i < n:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 c = code[i]
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 op = ord(c)
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 490
diff changeset
55 if op == SET_LINENO and i > 0: print # Extra blank line
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 490
diff changeset
56 if i == lasti: print '-->',
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 else: print ' ',
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 if i in labels: print '>>',
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 else: print ' ',
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 print string.rjust(`i`, 4),
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 print string.ljust(opname[op], 15),
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 i = i+1
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 if op >= HAVE_ARGUMENT:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 oparg = ord(code[i]) + ord(code[i+1])*256
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 i = i+2
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 print string.rjust(`oparg`, 5),
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 if op in hasconst:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 print '(' + `co.co_consts[oparg]` + ')',
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 elif op in hasname:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 print '(' + co.co_names[oparg] + ')',
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 elif op in hasjrel:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 print '(to ' + `i + oparg` + ')',
4303
388f9c2220ce Show names of locals in disco (Ka-Ping Yee)
Guido van Rossum <guido@python.org>
parents: 4271
diff changeset
73 elif op in haslocal:
388f9c2220ce Show names of locals in disco (Ka-Ping Yee)
Guido van Rossum <guido@python.org>
parents: 4271
diff changeset
74 print '(' + co.co_varnames[oparg] + ')',
4974
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
75 elif op in hascompare:
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
76 print '(' + cmp_op[oparg] + ')',
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 print
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78
4988
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
79 disco = disassemble
df385cc0d2e3 More user friedly interface:
Guido van Rossum <guido@python.org>
parents: 4974
diff changeset
80
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 def findlabels(code):
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 labels = []
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 n = len(code)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 i = 0
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 while i < n:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 c = code[i]
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 op = ord(c)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 i = i+1
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 if op >= HAVE_ARGUMENT:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 oparg = ord(code[i]) + ord(code[i+1])*256
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 i = i+2
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 label = -1
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 if op in hasjrel:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 label = i+oparg
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 elif op in hasjabs:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 label = oparg
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 if label >= 0:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 if label not in labels:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 labels.append(label)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 return labels
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101
4974
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
102 cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
103 'is not', 'exception match', 'BAD')
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
104
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 hasconst = []
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 hasname = []
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 hasjrel = []
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 hasjabs = []
4303
388f9c2220ce Show names of locals in disco (Ka-Ping Yee)
Guido van Rossum <guido@python.org>
parents: 4271
diff changeset
109 haslocal = []
4974
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
110 hascompare = []
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111
1403
6278933d02e3 * string.py: added rindex(), rfind(); changed index() to interpret
Guido van Rossum <guido@python.org>
parents: 1264
diff changeset
112 opname = [''] * 256
6278933d02e3 * string.py: added rindex(), rfind(); changed index() to interpret
Guido van Rossum <guido@python.org>
parents: 1264
diff changeset
113 for op in range(256): opname[op] = '<' + `op` + '>'
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
114
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 def def_op(name, op):
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 opname[op] = name
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
117
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 def name_op(name, op):
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 opname[op] = name
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 hasname.append(op)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
121
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 def jrel_op(name, op):
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 opname[op] = name
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 hasjrel.append(op)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 def jabs_op(name, op):
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 opname[op] = name
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 hasjabs.append(op)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
129
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 # Instruction opcodes for compiled code
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
131
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 def_op('STOP_CODE', 0)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 def_op('POP_TOP', 1)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 def_op('ROT_TWO', 2)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 def_op('ROT_THREE', 3)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 def_op('DUP_TOP', 4)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
137
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 def_op('UNARY_POSITIVE', 10)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 def_op('UNARY_NEGATIVE', 11)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 def_op('UNARY_NOT', 12)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 def_op('UNARY_CONVERT', 13)
5475
a86ea2cceaec Modernized for 1.5
Guido van Rossum <guido@python.org>
parents: 5189
diff changeset
142
1264
6c58dc1d2f9d Updated because of new opcodes introduced for "fast" local variables.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
143 def_op('UNARY_INVERT', 15)
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
144
3753
97d2278a331b New opcodes BINARY_POWER, RAISE_VARARGS, CALL_FUNCTION, MAKE_FUNCTION
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
145 def_op('BINARY_POWER', 19)
5475
a86ea2cceaec Modernized for 1.5
Guido van Rossum <guido@python.org>
parents: 5189
diff changeset
146
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 def_op('BINARY_MULTIPLY', 20)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 def_op('BINARY_DIVIDE', 21)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 def_op('BINARY_MODULO', 22)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 def_op('BINARY_ADD', 23)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 def_op('BINARY_SUBTRACT', 24)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 def_op('BINARY_SUBSCR', 25)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
153
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 def_op('SLICE+0', 30)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 def_op('SLICE+1', 31)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 def_op('SLICE+2', 32)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 def_op('SLICE+3', 33)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
158
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 def_op('STORE_SLICE+0', 40)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 def_op('STORE_SLICE+1', 41)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 def_op('STORE_SLICE+2', 42)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 def_op('STORE_SLICE+3', 43)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
163
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 def_op('DELETE_SLICE+0', 50)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 def_op('DELETE_SLICE+1', 51)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 def_op('DELETE_SLICE+2', 52)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 def_op('DELETE_SLICE+3', 53)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
168
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 def_op('STORE_SUBSCR', 60)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 def_op('DELETE_SUBSCR', 61)
5475
a86ea2cceaec Modernized for 1.5
Guido van Rossum <guido@python.org>
parents: 5189
diff changeset
171
4974
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
172 def_op('BINARY_LSHIFT', 62)
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
173 def_op('BINARY_RSHIFT', 63)
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
174 def_op('BINARY_AND', 64)
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
175 def_op('BINARY_XOR', 65)
39745574bf07 Merge several mods:
Guido van Rossum <guido@python.org>
parents: 4303
diff changeset
176 def_op('BINARY_OR', 66)
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
177
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 def_op('PRINT_EXPR', 70)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 def_op('PRINT_ITEM', 71)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 def_op('PRINT_NEWLINE', 72)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
181
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 def_op('BREAK_LOOP', 80)
5475
a86ea2cceaec Modernized for 1.5
Guido van Rossum <guido@python.org>
parents: 5189
diff changeset
183
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 def_op('LOAD_LOCALS', 82)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 def_op('RETURN_VALUE', 83)
5475
a86ea2cceaec Modernized for 1.5
Guido van Rossum <guido@python.org>
parents: 5189
diff changeset
186
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1403
diff changeset
187 def_op('EXEC_STMT', 85)
5475
a86ea2cceaec Modernized for 1.5
Guido van Rossum <guido@python.org>
parents: 5189
diff changeset
188
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 def_op('POP_BLOCK', 87)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 def_op('END_FINALLY', 88)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 def_op('BUILD_CLASS', 89)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
192
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 HAVE_ARGUMENT = 90 # Opcodes from here have an argument:
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
194
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 name_op('STORE_NAME', 90) # Index in name list
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 name_op('DELETE_NAME', 91) # ""
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 def_op('UNPACK_TUPLE', 92) # Number of tuple items
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 def_op('UNPACK_LIST', 93) # Number of list items
490
023c7f69d240 New opcodes: UNPACK_ARG, STORE_GLOBAL, DELETE_GLOBAL, LOAD_LOCAL, LOAD_GLOBAL
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
199 def_op('UNPACK_ARG', 94) # Number of arguments expected
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 name_op('STORE_ATTR', 95) # Index in name list
490
023c7f69d240 New opcodes: UNPACK_ARG, STORE_GLOBAL, DELETE_GLOBAL, LOAD_LOCAL, LOAD_GLOBAL
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
201 name_op('DELETE_ATTR', 96) # ""
023c7f69d240 New opcodes: UNPACK_ARG, STORE_GLOBAL, DELETE_GLOBAL, LOAD_LOCAL, LOAD_GLOBAL
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
202 name_op('STORE_GLOBAL', 97) # ""
023c7f69d240 New opcodes: UNPACK_ARG, STORE_GLOBAL, DELETE_GLOBAL, LOAD_LOCAL, LOAD_GLOBAL
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
203 name_op('DELETE_GLOBAL', 98) # ""
1264
6c58dc1d2f9d Updated because of new opcodes introduced for "fast" local variables.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
204 name_op('UNPACK_VARARG', 99) # Minimal number of arguments
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
205
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 def_op('LOAD_CONST', 100) # Index in const list
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 hasconst.append(100)
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 name_op('LOAD_NAME', 101) # Index in name list
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 def_op('BUILD_TUPLE', 102) # Number of tuple items
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 def_op('BUILD_LIST', 103) # Number of list items
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 def_op('BUILD_MAP', 104) # Always zero for now
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 name_op('LOAD_ATTR', 105) # Index in name list
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 def_op('COMPARE_OP', 106) # Comparison operator
5475
a86ea2cceaec Modernized for 1.5
Guido van Rossum <guido@python.org>
parents: 5189
diff changeset
214 hascompare.append(106)
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 name_op('IMPORT_NAME', 107) # Index in name list
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 name_op('IMPORT_FROM', 108) # Index in name list
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
217
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 jrel_op('JUMP_IF_FALSE', 111) # ""
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 jrel_op('JUMP_IF_TRUE', 112) # ""
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 jabs_op('JUMP_ABSOLUTE', 113) # Target byte offset from beginning of code
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 jrel_op('FOR_LOOP', 114) # Number of bytes to skip
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
223
490
023c7f69d240 New opcodes: UNPACK_ARG, STORE_GLOBAL, DELETE_GLOBAL, LOAD_LOCAL, LOAD_GLOBAL
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
224 name_op('LOAD_LOCAL', 115) # Index in name list
023c7f69d240 New opcodes: UNPACK_ARG, STORE_GLOBAL, DELETE_GLOBAL, LOAD_LOCAL, LOAD_GLOBAL
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
225 name_op('LOAD_GLOBAL', 116) # Index in name list
5475
a86ea2cceaec Modernized for 1.5
Guido van Rossum <guido@python.org>
parents: 5189
diff changeset
226
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1403
diff changeset
227 def_op('SET_FUNC_ARGS', 117) # Argcount
490
023c7f69d240 New opcodes: UNPACK_ARG, STORE_GLOBAL, DELETE_GLOBAL, LOAD_LOCAL, LOAD_GLOBAL
Guido van Rossum <guido@python.org>
parents: 103
diff changeset
228
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 jrel_op('SETUP_LOOP', 120) # Distance to target address
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 jrel_op('SETUP_EXCEPT', 121) # ""
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 jrel_op('SETUP_FINALLY', 122) # ""
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
232
1264
6c58dc1d2f9d Updated because of new opcodes introduced for "fast" local variables.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
233 def_op('LOAD_FAST', 124) # Local variable number
4303
388f9c2220ce Show names of locals in disco (Ka-Ping Yee)
Guido van Rossum <guido@python.org>
parents: 4271
diff changeset
234 haslocal.append(124)
1264
6c58dc1d2f9d Updated because of new opcodes introduced for "fast" local variables.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
235 def_op('STORE_FAST', 125) # Local variable number
4303
388f9c2220ce Show names of locals in disco (Ka-Ping Yee)
Guido van Rossum <guido@python.org>
parents: 4271
diff changeset
236 haslocal.append(125)
1264
6c58dc1d2f9d Updated because of new opcodes introduced for "fast" local variables.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
237 def_op('DELETE_FAST', 126) # Local variable number
4303
388f9c2220ce Show names of locals in disco (Ka-Ping Yee)
Guido van Rossum <guido@python.org>
parents: 4271
diff changeset
238 haslocal.append(126)
1264
6c58dc1d2f9d Updated because of new opcodes introduced for "fast" local variables.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
239
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
240 def_op('SET_LINENO', 127) # Current line number
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 SET_LINENO = 127
3753
97d2278a331b New opcodes BINARY_POWER, RAISE_VARARGS, CALL_FUNCTION, MAKE_FUNCTION
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
242
97d2278a331b New opcodes BINARY_POWER, RAISE_VARARGS, CALL_FUNCTION, MAKE_FUNCTION
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
243 def_op('RAISE_VARARGS', 130)
97d2278a331b New opcodes BINARY_POWER, RAISE_VARARGS, CALL_FUNCTION, MAKE_FUNCTION
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
244 def_op('CALL_FUNCTION', 131)
97d2278a331b New opcodes BINARY_POWER, RAISE_VARARGS, CALL_FUNCTION, MAKE_FUNCTION
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
245 def_op('MAKE_FUNCTION', 132)
3820
f7f3e4b5693c Added BUILD_SLICE opcode.
Guido van Rossum <guido@python.org>
parents: 3753
diff changeset
246 def_op('BUILD_SLICE', 133)