Skip to main content

python_assembler/instructions/
mod.rs

1#![doc = include_str!("readme.md")]
2use serde::{Deserialize, Serialize};
3
4/// 表示 Python 字节码指令。
5#[allow(non_camel_case_types)]
6#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub enum PythonInstruction {
8    /// 缓存操作码。
9    CACHE,
10    /// 二进制模运算。
11    BINARY_MODULO,
12    /// 就地模运算。
13    INPLACE_MODULO,
14    /// 弹出栈顶元素。
15    POP_TOP,
16    /// 推送 None 到栈顶。
17    PUSH_NULL,
18    /// 解释器退出。
19    INTERPRETER_EXIT,
20    /// 结束 for 循环。
21    END_FOR,
22    /// 结束 send 操作。
23    END_SEND,
24    /// 无操作。
25    NOP,
26    /// 一元负号。
27    UNARY_NEGATIVE,
28    /// 逻辑非。
29    UNARY_NOT,
30    /// 按位取反。
31    UNARY_INVERT,
32    /// 保留操作码。
33    RESERVED,
34    /// 二进制切片。
35    BINARY_SLICE,
36    /// 获取长度。
37    GET_LEN,
38    /// 匹配映射。
39    MATCH_MAPPING,
40    /// 匹配序列。
41    MATCH_SEQUENCE,
42    /// 匹配键。
43    MATCH_KEYS,
44    /// 推送异常信息。
45    PUSH_EXC_INFO,
46    /// 检查异常匹配。
47    CHECK_EXC_MATCH,
48    /// 检查异常组匹配。
49    CHECK_EG_MATCH,
50    /// 带有异常处理的 with 语句开始。
51    WITH_EXCEPT_START,
52    /// 异步 with 语句之前。
53    BEFORE_ASYNC_WITH,
54    /// with 语句之前。
55    BEFORE_WITH,
56    /// 结束异步 for 循环。
57    END_ASYNC_FOR,
58    /// 清理并抛出异常。
59    CLEANUP_THROW,
60    /// 获取迭代器。
61    GET_ITER,
62    /// 获取 yield from 迭代器。
63    GET_YIELD_FROM_ITER,
64    /// 加载 build_class。
65    LOAD_BUILD_CLASS,
66    /// 加载 AssertionError。
67    LOAD_ASSERTION_ERROR,
68    /// 返回生成器。
69    RETURN_GENERATOR,
70    /// 设置注解。
71    SETUP_ANNOTATIONS,
72    /// 加载局部变量。
73    LOAD_LOCALS,
74    /// 弹出异常。
75    POP_EXCEPT,
76    /// 创建 cell 对象。
77    MAKE_CELL,
78    /// 加载闭包。
79    LOAD_CLOSURE,
80    /// 复制自由变量。
81    COPY_FREE_VARS,
82    /// yield 值。
83    YIELD_VALUE,
84    /// 恢复执行。
85    RESUME,
86    /// 带有工具的 for 循环结束。
87    INSTRUMENTED_END_FOR,
88    /// 带有工具的 send 结束。
89    INSTRUMENTED_END_SEND,
90    /// 带有工具的指令。
91    INSTRUMENTED_INSTRUCTION,
92    /// 带有工具的行。
93    INSTRUMENTED_LINE,
94    /// 弹出块。
95    POP_BLOCK,
96    /// 带有工具的如果为假则跳转。
97    INSTRUMENTED_POP_JUMP_IF_FALSE,
98    /// 带有工具的如果为真则跳转。
99    INSTRUMENTED_POP_JUMP_IF_TRUE,
100    /// 带有工具的向前跳转。
101    INSTRUMENTED_JUMP_FORWARD,
102    /// 带有工具的向后跳转。
103    INSTRUMENTED_JUMP_BACKWARD,
104    /// 带有工具的返回值。
105    INSTRUMENTED_RETURN_VALUE,
106    /// 带有工具的 yield 值。
107    INSTRUMENTED_YIELD_VALUE,
108    /// 带有工具的异步 for 循环结束。
109    INSTRUMENTED_END_ASYNC_FOR,
110    /// 带有工具的设置 finally 块。
111    INSTRUMENTED_SETUP_FINALLY,
112    /// 带有工具的恢复执行。
113    INSTRUMENTED_RESUME,
114    /// 带有工具的删除下标。
115    INSTRUMENTED_DELETE_SUBSCR,
116    /// 带有工具的存储下标。
117    INSTRUMENTED_STORE_SUBSCR,
118    /// 带有工具的调用。
119    INSTRUMENTED_CALL,
120    /// 带有工具的扩展参数。
121    INSTRUMENTED_EXTENDED_ARG,
122    /// 带有工具的列表追加。
123    INSTRUMENTED_LIST_APPEND,
124    /// 带有工具的集合添加。
125    INSTRUMENTED_SET_ADD,
126    /// 带有工具的映射添加。
127    INSTRUMENTED_MAP_ADD,
128    /// 带有工具的 for 迭代器。
129    INSTRUMENTED_FOR_ITER,
130    /// 带有工具的加载 super 属性。
131    INSTRUMENTED_LOAD_SUPER_ATTR,
132    /// 带有工具的如果为 None 则弹出并跳转。
133    INSTRUMENTED_POP_JUMP_IF_NONE,
134    /// 带有工具的如果不为 None 则弹出并跳转。
135    INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
136    /// 带有工具的调用函数。
137    INSTRUMENTED_CALL_FUNCTION_EX,
138    /// 带有工具的返回常量。
139    INSTRUMENTED_RETURN_CONST,
140    /// 旋转栈顶两个元素。
141    ROT_TWO,
142    /// 旋转栈顶三个元素。
143    ROT_THREE,
144    /// 复制栈顶元素。
145    DUP_TOP,
146    /// 复制栈顶两个元素。
147    DUP_TOP_TWO,
148    /// 旋转栈顶四个元素。
149    ROT_FOUR,
150    /// 一元正号。
151    UNARY_POSITIVE,
152    /// 弹出 finally 块。
153    POP_FINALLY,
154    /// 返回值。
155    RETURN_VALUE,
156    /// 设置清理。
157    SETUP_CLEANUP(u32),
158    /// 设置 with 语句。
159    SETUP_WITH(u32),
160    /// 结束异步 with 语句。
161    END_ASYNC_WITH,
162    /// with 语句清理开始。
163    WITH_CLEANUP_START,
164    /// with 语句清理完成。
165    WITH_CLEANUP_FINISH,
166    /// 异步 with 语句清理开始。
167    ASYNC_WITH_CLEANUP_START,
168    /// 异步 with 语句清理完成。
169    ASYNC_WITH_CLEANUP_FINISH,
170    /// 生成器开始。
171    GEN_START,
172    /// 获取可等待协程。
173    GET_AWAITABLE_CORO,
174    /// 获取异步迭代器协程。
175    GET_AITER_CORO,
176    /// 获取异步 next 协程。
177    GET_ANEXT_CORO,
178    /// 结束异步 for 协程。
179    END_ASYNC_FOR_CORO,
180    /// 发送值。
181    SEND(u32),
182    /// 弹出栈帧。
183    POP_FRAME,
184    /// 返回常量。
185    RETURN_CONST(u32),
186    /// 设置异步 with 语句。
187    SETUP_ASYNC_WITH(u32),
188    /// 就地加法。
189    INPLACE_ADD(u32),
190    /// 就地减法。
191    INPLACE_SUBTRACT(u32),
192    /// 就地乘法。
193    INPLACE_MULTIPLY(u32),
194    /// 就地真除法。
195    INPLACE_TRUE_DIVIDE(u32),
196    /// 存储下标。
197    STORE_SUBSCR(u32),
198    /// 删除下标。
199    DELETE_SUBSCR(u32),
200    /// 存储映射。
201    STORE_MAP(u32),
202    /// 调用函数(扩展)。
203    CALL_FUNCTION_EX(u32),
204    /// 格式化值。
205    FORMAT_VALUE(u32),
206    /// 如果为假则弹出并跳转。
207    POP_JUMP_IF_FALSE(u32),
208    /// 如果为真则弹出并跳转。
209    POP_JUMP_IF_TRUE(u32),
210    /// 如果为 None 则弹出并跳转。
211    POP_JUMP_IF_NONE(u32),
212    /// 如果不为 None 则弹出并跳转。
213    POP_JUMP_IF_NOT_NONE(u32),
214    /// 如果为假则跳转或弹出。
215    JUMP_IF_FALSE_OR_POP(u32),
216    /// 如果为真则跳转或弹出。
217    JUMP_IF_TRUE_OR_POP(u32),
218    /// 向前跳转。
219    JUMP_FORWARD(u32),
220    /// 向后跳转。
221    JUMP_BACKWARD(u32),
222    /// 加载常量。
223    LOAD_CONST(u32),
224    /// 加载名称。
225    LOAD_NAME(u32),
226    /// 存储名称。
227    STORE_NAME(u32),
228    /// 删除名称。
229    DELETE_NAME(u32),
230    /// 加载快速变量。
231    LOAD_FAST(u32),
232    /// 存储快速变量。
233    STORE_FAST(u32),
234    /// 删除快速变量。
235    DELETE_FAST(u32),
236    /// 加载全局变量。
237    LOAD_GLOBAL(u32),
238    /// 存储全局变量。
239    STORE_GLOBAL(u32),
240    /// 删除全局变量。
241    DELETE_GLOBAL(u32),
242    /// 加载属性。
243    LOAD_ATTR(u32),
244    /// 存储属性。
245    STORE_ATTR(u32),
246    /// 删除属性。
247    DELETE_ATTR(u32),
248    /// 比较操作。
249    COMPARE_OP(u32),
250    /// 二进制操作。
251    BINARY_OP(u32),
252    /// 导入名称。
253    IMPORT_NAME(u32),
254    /// 从模块导入。
255    IMPORT_FROM(u32),
256    /// for 循环迭代器。
257    FOR_ITER(u32),
258    /// 获取可等待对象。
259    GET_AWAITABLE(u32),
260    /// 获取异步迭代器。
261    GET_AITER(u32),
262    /// 获取异步 next。
263    GET_ANEXT(u32),
264    /// 如果异常不匹配则跳转。
265    JUMP_IF_NOT_EXC_MATCH(u32),
266    /// 设置 finally 块。
267    SETUP_FINALLY(u32),
268    /// 设置 except 块。
269    SETUP_EXCEPT(u32),
270    /// 设置循环块。
271    SETUP_LOOP(u32),
272    /// 扩展参数。
273    EXTENDED_ARG(u32),
274    /// 加载解引用变量。
275    LOAD_DEREF(u32),
276    /// 存储解引用变量。
277    STORE_DEREF(u32),
278    /// 删除解引用变量。
279    DELETE_DEREF(u32),
280    /// 加载类解引用变量。
281    LOAD_CLASSDEREF(u32),
282    /// 复制局部变量。
283    COPY_LOCAL(u32),
284    /// 加载 super 属性。
285    LOAD_SUPER_ATTR(u32),
286    /// 创建函数。
287    MAKE_FUNCTION(u32),
288    /// 调用函数。
289    CALL_FUNCTION(u32),
290    /// 调用带关键字参数的函数。
291    CALL_FUNCTION_KW(u32),
292    /// 加载方法。
293    LOAD_METHOD(u32),
294    /// 调用方法。
295    CALL_METHOD(u32),
296    /// 构建元组。
297    BUILD_TUPLE(u32),
298    /// 构建列表。
299    BUILD_LIST(u32),
300    /// 构建集合。
301    BUILD_SET(u32),
302    /// 构建字典。
303    BUILD_MAP(u32),
304    /// 构建常量键字典。
305    BUILD_CONST_KEY_MAP(u32),
306    /// 构建字符串。
307    BUILD_STRING(u32),
308    /// 列表追加。
309    LIST_APPEND(u32),
310    /// 集合添加。
311    SET_ADD(u32),
312    /// 映射添加。
313    MAP_ADD(u32),
314    /// 列表扩展。
315    LIST_EXTEND(u32),
316    /// 集合更新。
317    SET_UPDATE(u32),
318    /// 字典更新。
319    DICT_UPDATE(u32),
320    /// 字典合并。
321    DICT_MERGE(u32),
322    /// 匹配类。
323    MATCH_CLASS(u32),
324    /// 复制不带键的字典。
325    COPY_DICT_WITHOUT_KEYS(u32),
326    /// yield from。
327    YIELD_FROM(u32),
328    /// 调用 finally。
329    CALL_FINALLY(u32),
330    /// 调用内置函数 1。
331    CALL_INTRINSIC_1(u32),
332    /// 调用内置函数 2。
333    CALL_INTRINSIC_2(u32),
334    /// 关键字参数名称。
335    KW_NAMES(u32),
336    /// 跳转。
337    JUMP(u32),
338    /// 无中断跳转。
339    JUMP_NO_INTERRUPT(u32),
340    /// 是操作。
341    IS_OP(u32),
342    /// 包含操作。
343    CONTAINS_OP(u32),
344    /// 复制。
345    COPY(u32),
346    /// 交换。
347    SWAP(u32),
348    /// 解包序列。
349    UNPACK_SEQUENCE(u32),
350    /// 解包扩展。
351    UNPACK_EX(u32),
352    /// 调用。
353    CALL(u32),
354    /// 关键字调用。
355    CALL_KW(u32),
356    /// 从字典或解引用加载。
357    LOAD_FROM_DICT_OR_DEREF(u32),
358    /// 加载 super 方法。
359    LOAD_SUPER_METHOD(u32),
360    /// 加载零参数 super 方法。
361    LOAD_ZERO_SUPER_METHOD(u32),
362    /// 存储快速变量(可能为 None)。
363    STORE_FAST_MAYBE_NULL(u32),
364    /// 重新抛出异常。
365    RERAISE(u32),
366    /// 二进制下标操作。
367    BINARY_SUBSCR,
368    /// 存储切片。
369    STORE_SLICE,
370    /// 绝对跳转指令,包含跳转目标地址。
371    JUMP_ABSOLUTE(u32),
372    /// 如果不为 None 则向前弹出并跳转。
373    POP_JUMP_FORWARD_IF_NOT_NONE(u32),
374    /// 如果为 None 则向前弹出并跳转。
375    POP_JUMP_FORWARD_IF_NONE(u32),
376    /// 抛出可变参数异常。
377    RAISE_VARARGS(u32),
378    /// 解析失败的未知的指令,包含操作码和可能的参数。
379    UNKNOWN(u8, Option<u32>),
380}