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}