| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- # (C) Copyright 2021-2024 by Rocky Bernstein
- """
- PYPY 3.7 opcodes
- This is a like PyPy 3.7's opcode.py with some classification
- of stack usage and information for formatting instructions.
- """
- import sys
- from typing import List
- import xdis.opcodes.opcode_37 as opcode_37
- from xdis.opcodes.base import (
- call_op,
- def_op,
- finalize_opcodes,
- init_opdata,
- name_op,
- rm_op,
- store_op,
- update_pj3,
- varargs_op,
- )
- from xdis.opcodes.opcode_36pypy import opcode_arg_fmt36pypy, opcode_extended_fmt36pypy
- from xdis.opcodes.opcode_37 import opcode_arg_fmt37, opcode_extended_fmt37
- version_tuple = (3, 7)
- python_implementation = "PyPy"
- # oppush[op] => number of stack entries pushed
- oppush: List[int] = [0] * 256
- # oppop[op] => number of stack entries popped
- oppop: List[int] = [0] * 256
- loc = locals()
- init_opdata(loc, opcode_37, version_tuple, is_pypy=True)
- # FIXME: DRY common PYPY opcode additions
- # fmt: off
- rm_op(loc, "BUILD_TUPLE_UNPACK_WITH_CALL", 158)
- rm_op(loc, "LOAD_METHOD", 160)
- call_op(loc, "CALL_FUNCTION_KW", 141, 9, 1) # #args + (#kwargs << 8)
- call_op(loc, "CALL_FUNCTION_EX", 142, -2, 1)
- # The following were removed from 3.7 but still in some versions Pypy 3.7
- store_op(loc, 'STORE_ANNOTATION', 127, 1, 0, is_type="name")
- # PyPy only
- # ----------
- name_op(loc, "LOOKUP_METHOD", 201, 1, 2)
- loc["hasvargs"].append(202)
- call_op(loc, "CALL_METHOD_KW", 204, -1, 1)
- # Used only in single-mode compilation list-comprehension generators
- varargs_op(loc, "BUILD_LIST_FROM_ARG", 203)
- # PyPy 3.6.1 (and 2.7.13) start to introduce LOAD_REVDB_VAR
- if sys.version_info[:3] >= (3, 6, 1):
- def_op(loc, "LOAD_REVDB_VAR", 205)
- # fmt: on
- opcode_arg_fmt = opcode_arg_fmt37pypy = {**opcode_arg_fmt37, **opcode_arg_fmt36pypy}
- opcode_extended_fmt = opcode_extended_fmt37pypy = {
- **opcode_extended_fmt37,
- **opcode_extended_fmt36pypy,
- }
- update_pj3(globals(), loc)
- finalize_opcodes(loc)
|