python_assembler/instructions/
mod.rs

1use serde::{Deserialize, Serialize};
2
3#[allow(non_camel_case_types)]
4#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
5pub enum PythonInstruction {
6    // Opcodes without arguments
7    POP_TOP,
8    ROT_TWO,
9    ROT_THREE,
10    PUSH_NULL,
11    CACHE,
12    DUP_TOP,
13    DUP_TOP_TWO,
14    ROT_FOUR,
15    NOP,
16    UNARY_POSITIVE,
17    UNARY_NEGATIVE,
18    UNARY_NOT,
19    UNARY_INVERT,
20    GET_ITER,
21    GET_YIELD_FROM_ITER,
22    PRINT_EXPR,
23    LOAD_BUILD_CLASS,
24    BEFORE_ASYNC_WITH,
25    BEFORE_WITH,
26    END_ASYNC_FOR,
27    SETUP_ANNOTATIONS,
28    POP_BLOCK,
29    POP_EXCEPT,
30    POP_FINALLY,
31    RERAISE,
32    RETURN_VALUE,
33    // Python 3.12: 返回常量(如 None),带参数索引
34    RETURN_CONST(u32),
35    SETUP_ASYNC_WITH,
36    SETUP_WITH,
37    YIELD_VALUE,
38    END_ASYNC_WITH,
39    WITH_CLEANUP_START,
40    WITH_CLEANUP_FINISH,
41    ASYNC_WITH_CLEANUP_START,
42    ASYNC_WITH_CLEANUP_FINISH,
43    MATCH_SEQUENCE,
44    MATCH_MAPPING,
45    MATCH_KEYS,
46    MATCH_CLASS,
47    COPY_DICT_WITHOUT_KEYS,
48    GEN_START,
49    YIELD_FROM,
50    GET_AWAITABLE_CORO,
51    GET_AITER_CORO,
52    GET_ANEXT_CORO,
53    END_ASYNC_FOR_CORO,
54    SEND,
55    POP_FRAME,
56    RESUME,
57
58    // Opcodes with arguments
59    POP_JUMP_IF_FALSE(u32),
60    POP_JUMP_IF_TRUE(u32),
61    POP_JUMP_IF_NONE(u32),
62    POP_JUMP_IF_NOT_NONE(u32),
63    JUMP_IF_FALSE_OR_POP(u32),
64    JUMP_IF_TRUE_OR_POP(u32),
65    JUMP_FORWARD(u32),
66    JUMP_BACKWARD(u32),
67    LOAD_CONST(u32),
68    LOAD_NAME(u32),
69    STORE_NAME(u32),
70    LOAD_FAST(u32),
71    STORE_FAST(u32),
72    LOAD_GLOBAL(u32),
73    STORE_GLOBAL(u32),
74    LOAD_ATTR(u32),
75    CALL_FUNCTION(u32),
76    MAKE_FUNCTION(u32),
77    PRECALL(u32),
78    CALL(u32),
79    BUILD_TUPLE(u32),
80    BUILD_LIST(u32),
81    BUILD_SET(u32),
82    BUILD_MAP(u32),
83    BUILD_CONST_KEY_MAP(u32),
84    COMPARE_OP(u32),
85    // Python 3.12: 统一二元操作指令
86    BINARY_OP(u32),
87    IMPORT_NAME(u32),
88    IMPORT_FROM(u32),
89    FOR_ITER(u32),
90    GET_AWAITABLE(u32),
91    GET_AITER(u32),
92    GET_ANEXT(u32),
93    SETUP_FINALLY(u32),
94    SETUP_EXCEPT(u32),
95    SETUP_LOOP(u32),
96    EXTENDED_ARG(u32),
97    LOAD_DEREF(u32),
98    STORE_DEREF(u32),
99    DELETE_DEREF(u32),
100    LOAD_CLASSDEREF(u32),
101    LOAD_SUPER_ATTR(u32),
102    LOAD_METHOD(u32),
103    CALL_METHOD(u32),
104    CALL_FINALLY(u32),
105    CALL_INTRINSIC_1(u32),
106    CALL_INTRINSIC_2(u32),
107    KW_NAMES(u32),
108    LIST_APPEND(u32),
109    SET_ADD(u32),
110    MAP_ADD(u32),
111    LIST_EXTEND(u32),
112    SET_UPDATE(u32),
113    DICT_UPDATE(u32),
114    DICT_MERGE(u32),
115    // Placeholder for unknown opcodes
116    UNKNOWN(u8, Option<u32>),
117}
118