1# (C) Copyright 2016-2017, 2020 by Rocky Bernstein
2"""
3CPython 3.2 bytecode opcodes
4
5This is a like Python 3.2's opcode.py with some classification
6of stack usage.
7"""
8
9import xdis.opcodes.opcode_3x as opcode_3x
10from xdis.opcodes.base import (
11    extended_format_ATTR,
12    extended_format_CALL_FUNCTION,
13    extended_format_MAKE_FUNCTION_older,
14    extended_format_RAISE_VARARGS_older,
15    extended_format_RETURN_VALUE,
16    finalize_opcodes,
17    format_CALL_FUNCTION_pos_name_encoded,
18    format_MAKE_FUNCTION_default_argc,
19    format_RAISE_VARARGS_older,
20    format_extended_arg,
21    init_opdata,
22    update_pj3,
23)
24
25# FIXME: can we DRY this even more?
26
27version = 3.2
28python_implementation = "CPython"
29
30l = locals()
31
32init_opdata(l, opcode_3x, version)
33
34# There are no opcodes to add or change.
35# If there were, they'd be listed below.
36
37update_pj3(globals(), l)
38
39opcode_arg_fmt = {
40    "CALL_FUNCTION": format_CALL_FUNCTION_pos_name_encoded,
41    "EXTENDED_ARG": format_extended_arg,
42    "MAKE_FUNCTION": format_MAKE_FUNCTION_default_argc,
43    "RAISE_VARARGS": format_RAISE_VARARGS_older,
44}
45
46opcode_extended_fmt = {
47    "CALL_FUNCTION": extended_format_CALL_FUNCTION,
48    "LOAD_ATTR": extended_format_ATTR,
49    "MAKE_FUNCTION": extended_format_MAKE_FUNCTION_older,
50    "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
51    "RETURN_VALUE": extended_format_RETURN_VALUE,
52    "STORE_ATTR": extended_format_ATTR,
53}
54
55finalize_opcodes(l)
56