Skip to content

Commit a9205b7

Browse files
committed
gh-105481: simplify definition of pseudo ops in Lib/opcode.py
1 parent 2bd04d4 commit a9205b7

File tree

3 files changed

+24
-26
lines changed

3 files changed

+24
-26
lines changed

Lib/opcode.py

+18-25
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,11 @@
1919

2020
cmp_op = ('<', '<=', '==', '!=', '>', '>=')
2121

22-
def is_pseudo(op):
23-
return op >= MIN_PSEUDO_OPCODE and op <= MAX_PSEUDO_OPCODE
24-
2522
opmap = {}
2623

27-
# pseudo opcodes (used in the compiler) mapped to the values
28-
# they can become in the actual code.
29-
_pseudo_ops = {}
30-
3124
def def_op(name, op):
3225
opmap[name] = op
3326

34-
def pseudo_op(name, op, real_ops):
35-
def_op(name, op)
36-
_pseudo_ops[name] = real_ops
37-
38-
3927
# Instruction opcodes for compiled code
4028
# Blank lines correspond to available opcodes
4129

@@ -213,24 +201,29 @@ def pseudo_op(name, op, real_ops):
213201

214202

215203
MIN_PSEUDO_OPCODE = 256
204+
MAX_PSEUDO_OPCODE = -1
216205

217-
pseudo_op('SETUP_FINALLY', 256, ['NOP'])
218-
pseudo_op('SETUP_CLEANUP', 257, ['NOP'])
219-
pseudo_op('SETUP_WITH', 258, ['NOP'])
220-
pseudo_op('POP_BLOCK', 259, ['NOP'])
206+
def pseudo_op(name, op):
207+
global MAX_PSEUDO_OPCODE
208+
if op > MAX_PSEUDO_OPCODE:
209+
MAX_PSEUDO_OPCODE = op
210+
def_op(name, op)
221211

222-
pseudo_op('JUMP', 260, ['JUMP_FORWARD', 'JUMP_BACKWARD'])
223-
pseudo_op('JUMP_NO_INTERRUPT', 261, ['JUMP_FORWARD', 'JUMP_BACKWARD_NO_INTERRUPT'])
212+
pseudo_op('SETUP_FINALLY', 256)
213+
pseudo_op('SETUP_CLEANUP', 257)
214+
pseudo_op('SETUP_WITH', 258)
215+
pseudo_op('POP_BLOCK', 259)
224216

225-
pseudo_op('LOAD_METHOD', 262, ['LOAD_ATTR'])
226-
pseudo_op('LOAD_SUPER_METHOD', 263, ['LOAD_SUPER_ATTR'])
227-
pseudo_op('LOAD_ZERO_SUPER_METHOD', 264, ['LOAD_SUPER_ATTR'])
228-
pseudo_op('LOAD_ZERO_SUPER_ATTR', 265, ['LOAD_SUPER_ATTR'])
217+
pseudo_op('JUMP', 260)
218+
pseudo_op('JUMP_NO_INTERRUPT', 261)
229219

230-
pseudo_op('STORE_FAST_MAYBE_NULL', 266, ['STORE_FAST'])
231-
pseudo_op('LOAD_CLOSURE', 267, ['LOAD_FAST'])
220+
pseudo_op('LOAD_METHOD', 262)
221+
pseudo_op('LOAD_SUPER_METHOD', 263)
222+
pseudo_op('LOAD_ZERO_SUPER_METHOD', 264)
223+
pseudo_op('LOAD_ZERO_SUPER_ATTR', 265)
232224

233-
MAX_PSEUDO_OPCODE = MIN_PSEUDO_OPCODE + len(_pseudo_ops) - 1
225+
pseudo_op('STORE_FAST_MAYBE_NULL', 266)
226+
pseudo_op('LOAD_CLOSURE', 267)
234227

235228
del def_op, pseudo_op
236229

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Remove ``opcode.is_pseudo``, which was added in 3.12, was never documented
2+
and not intended to be used externally. It is a shortcut for ``op >=
3+
opcode.MIN_PSEUDO_OPCODE and op <= opcode.MAX_PSEUDO_OPCODE``.

Tools/build/generate_opcode_h.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,14 @@ def main(opcode_py,
7272
opcode = get_python_module_dict(opcode_py)
7373
opmap = opcode['opmap']
7474
opname = opcode['opname']
75-
is_pseudo = opcode['is_pseudo']
7675

7776
MIN_PSEUDO_OPCODE = opcode["MIN_PSEUDO_OPCODE"]
7877
MAX_PSEUDO_OPCODE = opcode["MAX_PSEUDO_OPCODE"]
7978
MIN_INSTRUMENTED_OPCODE = opcode["MIN_INSTRUMENTED_OPCODE"]
8079

80+
def is_pseudo(op):
81+
return op >= MIN_PSEUDO_OPCODE and op <= MAX_PSEUDO_OPCODE
82+
8183
NUM_OPCODES = len(opname)
8284
used = [ False ] * len(opname)
8385
next_op = 1

0 commit comments

Comments
 (0)