|
7 | 7 |
|
8 | 8 | __all__ = ["cmp_op", "stack_effect", "hascompare", "opname", "opmap", |
9 | 9 | "HAVE_ARGUMENT", "EXTENDED_ARG", "hasarg", "hasconst", "hasname", |
10 | | - "hasjump", "hasjrel", "hasjabs", "hasfree", "haslocal", "hasexc"] |
| 10 | + "hasjump", "hasjrel", "hasjabs", "hasjforward", "hasjback", "hasfree", "haslocal", "hasexc"] |
11 | 11 |
|
12 | 12 | import builtins |
13 | 13 | import _opcode |
|
17 | 17 | HAVE_ARGUMENT, MIN_INSTRUMENTED_OPCODE) # noqa: F401 |
18 | 18 | EXTENDED_ARG = opmap['EXTENDED_ARG'] |
19 | 19 |
|
| 20 | +def _is_backward_jump_op(op): |
| 21 | + """Helper function to identify backward jump opcodes.""" |
| 22 | + # Get the opcode name from the op number |
| 23 | + op_name = opname[op] if op < len(opname) else None |
| 24 | + return op_name in ( |
| 25 | + 'JUMP_BACKWARD', |
| 26 | + 'JUMP_BACKWARD_NO_INTERRUPT', |
| 27 | + 'FOR_ITER', |
| 28 | + 'END_ASYNC_FOR', |
| 29 | + ) |
| 30 | + |
| 31 | + |
20 | 32 | opname = ['<%r>' % (op,) for op in range(max(opmap.values()) + 1)] |
21 | 33 | for m in (opmap, _specialized_opmap): |
22 | 34 | for op, i in m.items(): |
|
35 | 47 | haslocal = [op for op in opmap.values() if _opcode.has_local(op)] |
36 | 48 | hasexc = [op for op in opmap.values() if _opcode.has_exc(op)] |
37 | 49 |
|
| 50 | +hasjforward = [op for op in hasjump if not _is_backward_jump_op(op)] |
| 51 | +hasjback = [op for op in hasjump if _is_backward_jump_op(op)] |
| 52 | + |
| 53 | + |
| 54 | + |
| 55 | +_intrinsic_1_descs = _opcode.get_intrinsic1_descs() |
38 | 56 |
|
39 | 57 | _intrinsic_1_descs = _opcode.get_intrinsic1_descs() |
40 | 58 | _intrinsic_2_descs = _opcode.get_intrinsic2_descs() |
|
0 commit comments