| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- # (C) Copyright 2017, 2019-2021, 2023-2024 by Rocky Bernstein
- """
- CPython 3.0 bytecode opcodes
- This is a like Python 3.0's opcode.py with some classification
- of stack usage and information for formatting instructions.
- """
- import xdis.opcodes.opcode_31 as opcode_31
- from xdis.opcodes.base import (
- def_op,
- finalize_opcodes,
- init_opdata,
- jrel_op,
- rm_op,
- update_pj2,
- )
- from xdis.opcodes.opcode_33 import opcode_arg_fmt33, opcode_extended_fmt33
- version_tuple = (3, 0)
- python_implementation = "CPython"
- loc = locals()
- init_opdata(loc, opcode_31, version_tuple)
- # These are in Python 3.x but not in Python 3.0
- # fmt: off
- rm_op(loc, "JUMP_IF_FALSE_OR_POP", 111)
- rm_op(loc, "JUMP_IF_TRUE_OR_POP", 112)
- rm_op(loc, "POP_JUMP_IF_FALSE", 114)
- rm_op(loc, "POP_JUMP_IF_TRUE", 115)
- rm_op(loc, "LIST_APPEND", 145)
- rm_op(loc, "SET_ADD", 146)
- rm_op(loc, "MAP_ADD", 147)
- # These are are in 3.0 but are not in 3.1 or they have
- # different opcode numbers. Note: As a result of opcode value
- # changes, these have to be applied *after* removing ops (with
- # the same name).
- # OP NAME OPCODE POP PUSH
- #--------------------------------------------
- def_op(loc, "SET_ADD", 17, 2, 0) # Calls set.add(TOS1[-i], TOS).
- # Used to implement set comprehensions.
- def_op(loc, "LIST_APPEND", 18, 2, 0) # Calls list.append(TOS1, TOS).
- # Used to implement list comprehensions.
- jrel_op(loc, "JUMP_IF_FALSE", 111, 1, 1)
- jrel_op(loc, "JUMP_IF_TRUE", 112, 1, 1)
- # fmt: on
- # Yes, pj2 not pj3 - Python 3.0 is more like 2.7 here with its
- # JUMP_IF rather than POP_JUMP_IF.
- opcode_arg_fmt = opcode_arg_fmt31 = opcode_arg_fmt33
- opcode_extended_fmt = opcode_extended_fmt31 = opcode_extended_fmt33
- update_pj2(globals(), loc)
- finalize_opcodes(loc)
|