cinderx 2026.1.16.2__cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. __static__/__init__.py +641 -0
  2. __static__/compiler_flags.py +8 -0
  3. __static__/enum.py +160 -0
  4. __static__/native_utils.py +77 -0
  5. __static__/type_code.py +48 -0
  6. __strict__/__init__.py +39 -0
  7. _cinderx.so +0 -0
  8. cinderx/__init__.py +577 -0
  9. cinderx/__pycache__/__init__.cpython-314.pyc +0 -0
  10. cinderx/_asyncio.py +156 -0
  11. cinderx/compileall.py +710 -0
  12. cinderx/compiler/__init__.py +40 -0
  13. cinderx/compiler/__main__.py +137 -0
  14. cinderx/compiler/config.py +7 -0
  15. cinderx/compiler/consts.py +72 -0
  16. cinderx/compiler/debug.py +70 -0
  17. cinderx/compiler/dis_stable.py +283 -0
  18. cinderx/compiler/errors.py +151 -0
  19. cinderx/compiler/flow_graph_optimizer.py +1287 -0
  20. cinderx/compiler/future.py +91 -0
  21. cinderx/compiler/misc.py +32 -0
  22. cinderx/compiler/opcode_cinder.py +18 -0
  23. cinderx/compiler/opcode_static.py +100 -0
  24. cinderx/compiler/opcodebase.py +158 -0
  25. cinderx/compiler/opcodes.py +991 -0
  26. cinderx/compiler/optimizer.py +547 -0
  27. cinderx/compiler/pyassem.py +3711 -0
  28. cinderx/compiler/pycodegen.py +7660 -0
  29. cinderx/compiler/pysourceloader.py +62 -0
  30. cinderx/compiler/static/__init__.py +1404 -0
  31. cinderx/compiler/static/compiler.py +629 -0
  32. cinderx/compiler/static/declaration_visitor.py +335 -0
  33. cinderx/compiler/static/definite_assignment_checker.py +280 -0
  34. cinderx/compiler/static/effects.py +160 -0
  35. cinderx/compiler/static/module_table.py +666 -0
  36. cinderx/compiler/static/type_binder.py +2176 -0
  37. cinderx/compiler/static/types.py +10580 -0
  38. cinderx/compiler/static/util.py +81 -0
  39. cinderx/compiler/static/visitor.py +91 -0
  40. cinderx/compiler/strict/__init__.py +69 -0
  41. cinderx/compiler/strict/class_conflict_checker.py +249 -0
  42. cinderx/compiler/strict/code_gen_base.py +409 -0
  43. cinderx/compiler/strict/common.py +507 -0
  44. cinderx/compiler/strict/compiler.py +352 -0
  45. cinderx/compiler/strict/feature_extractor.py +130 -0
  46. cinderx/compiler/strict/flag_extractor.py +97 -0
  47. cinderx/compiler/strict/loader.py +827 -0
  48. cinderx/compiler/strict/preprocessor.py +11 -0
  49. cinderx/compiler/strict/rewriter/__init__.py +5 -0
  50. cinderx/compiler/strict/rewriter/remove_annotations.py +84 -0
  51. cinderx/compiler/strict/rewriter/rewriter.py +975 -0
  52. cinderx/compiler/strict/runtime.py +77 -0
  53. cinderx/compiler/symbols.py +1754 -0
  54. cinderx/compiler/unparse.py +414 -0
  55. cinderx/compiler/visitor.py +194 -0
  56. cinderx/jit.py +230 -0
  57. cinderx/opcode.py +202 -0
  58. cinderx/static.py +113 -0
  59. cinderx/strictmodule.py +6 -0
  60. cinderx/test_support.py +341 -0
  61. cinderx-2026.1.16.2.dist-info/METADATA +15 -0
  62. cinderx-2026.1.16.2.dist-info/RECORD +68 -0
  63. cinderx-2026.1.16.2.dist-info/WHEEL +6 -0
  64. cinderx-2026.1.16.2.dist-info/licenses/LICENSE +21 -0
  65. cinderx-2026.1.16.2.dist-info/top_level.txt +5 -0
  66. opcodes/__init__.py +0 -0
  67. opcodes/assign_opcode_numbers.py +272 -0
  68. opcodes/cinderx_opcodes.py +121 -0
@@ -0,0 +1,991 @@
1
+ # Portions copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ # pyre-strict
4
+
5
+ import sys
6
+ from opcode import (
7
+ hascompare,
8
+ hasconst,
9
+ hasfree,
10
+ hasjabs,
11
+ hasjrel,
12
+ haslocal,
13
+ hasname,
14
+ opmap,
15
+ opname,
16
+ )
17
+
18
+ from .opcodebase import Opcode
19
+
20
+ STATIC_OPMAP: dict[str, int] = {}
21
+ STATIC_OPNAMES: list[str] = [f"<{i}>" for i in range(256)]
22
+ STATIC_CONST_OPCODES: list[int] = []
23
+
24
+ if sys.version_info >= (3, 12):
25
+ # pyre-fixme[21]: Could not find name `_cache_format` in `opcode` (stubbed).
26
+ # pyre-fixme[21]: Could not find name `_inline_cache_entries` in `opcode` (stubbed).
27
+ # pyre-fixme[21]: Could not find name `_specializations` in `opcode` (stubbed).
28
+ from opcode import _cache_format, _inline_cache_entries, _specializations, hasarg
29
+
30
+ from cinderx import opcode as cinderx_opcode
31
+
32
+ cinderx_opcode.init(
33
+ STATIC_OPNAMES if sys.version_info >= (3, 14) else opname,
34
+ STATIC_OPMAP,
35
+ hasname,
36
+ hasjrel,
37
+ hasjabs,
38
+ STATIC_CONST_OPCODES if sys.version_info >= (3, 14) else hasconst,
39
+ hasarg,
40
+ # pyre-fixme[16]: Module `opcode` has no attribute `_cache_format`.
41
+ _cache_format,
42
+ # pyre-fixme[16]: Module `opcode` has no attribute `_specializations`.
43
+ _specializations,
44
+ # pyre-fixme[16]: Module `opcode` has no attribute `_inline_cache_entries`.
45
+ _inline_cache_entries,
46
+ )
47
+ if sys.version_info >= (3, 14):
48
+ opname[126] = "EXTENDED_OPCODE"
49
+ opmap["EXTENDED_OPCODE"] = 126
50
+ hasarg.append(126)
51
+
52
+ opmap.update(STATIC_OPMAP)
53
+
54
+ if "dis" in sys.modules:
55
+ # Fix up dis module to use the CinderX opcodes
56
+ import dis
57
+
58
+ dis._all_opname = list(opname)
59
+ dis._all_opmap = dict(opmap)
60
+ dis._empty_slot = [
61
+ slot
62
+ # pyre-fixme[16]: Module `dis` has no attribute `_all_opname`.
63
+ for slot, name in enumerate(dis._all_opname)
64
+ if name.startswith("<")
65
+ ]
66
+
67
+
68
+ opcode: Opcode = Opcode()
69
+ for opname, opnum in opmap.items():
70
+ if opnum in hasname:
71
+ opcode.name_op(opname, opnum)
72
+ elif opnum in hasjrel:
73
+ opcode.jrel_op(opname, opnum)
74
+ elif opnum in hasjabs:
75
+ opcode.jabs_op(opname, opnum)
76
+ else:
77
+ opcode.def_op(opname, opnum)
78
+ if opnum in hasconst:
79
+ opcode.hasconst.add(opname)
80
+ elif opnum in hasfree:
81
+ opcode.hasfree.add(opnum)
82
+ elif opnum in haslocal:
83
+ opcode.haslocal.add(opnum)
84
+ elif opnum in hascompare:
85
+ opcode.hascompare.add(opnum)
86
+
87
+
88
+ for opnum in STATIC_CONST_OPCODES:
89
+ opcode.hasconst.add(STATIC_OPNAMES[opnum])
90
+
91
+
92
+ FVC_MASK = 0x3
93
+ FVC_NONE = 0x0
94
+ FVC_STR = 0x1
95
+ FVC_REPR = 0x2
96
+ FVC_ASCII = 0x3
97
+ FVS_MASK = 0x4
98
+ FVS_HAVE_SPEC = 0x4
99
+
100
+
101
+ opcode.stack_effects.update(
102
+ NOP=0,
103
+ RESUME=0,
104
+ POP_TOP=-1,
105
+ ROT_TWO=0,
106
+ ROT_THREE=0,
107
+ DUP_TOP=1,
108
+ DUP_TOP_TWO=2,
109
+ ROT_FOUR=0,
110
+ UNARY_POSITIVE=0,
111
+ UNARY_NEGATIVE=0,
112
+ UNARY_NOT=0,
113
+ UNARY_INVERT=0,
114
+ BINARY_MATRIX_MULTIPLY=-1,
115
+ INPLACE_MATRIX_MULTIPLY=-1,
116
+ BINARY_POWER=-1,
117
+ BINARY_MULTIPLY=-1,
118
+ BINARY_MODULO=-1,
119
+ BINARY_ADD=-1,
120
+ BINARY_SUBTRACT=-1,
121
+ BINARY_SUBSCR=-1,
122
+ BINARY_FLOOR_DIVIDE=-1,
123
+ BINARY_TRUE_DIVIDE=-1,
124
+ INPLACE_FLOOR_DIVIDE=-1,
125
+ INPLACE_TRUE_DIVIDE=-1,
126
+ GET_LEN=1,
127
+ MATCH_MAPPING=1,
128
+ MATCH_SEQUENCE=1,
129
+ MATCH_KEYS=2,
130
+ COPY_DICT_WITHOUT_KEYS=0,
131
+ WITH_EXCEPT_START=1,
132
+ GET_AITER=0,
133
+ GET_ANEXT=1,
134
+ BEFORE_ASYNC_WITH=1,
135
+ END_ASYNC_FOR=-7,
136
+ INPLACE_ADD=-1,
137
+ INPLACE_SUBTRACT=-1,
138
+ INPLACE_MULTIPLY=-1,
139
+ INPLACE_MODULO=-1,
140
+ STORE_SUBSCR=-3,
141
+ DELETE_SUBSCR=-2,
142
+ BINARY_LSHIFT=-1,
143
+ BINARY_RSHIFT=-1,
144
+ BINARY_AND=-1,
145
+ BINARY_XOR=-1,
146
+ BINARY_OR=-1,
147
+ INPLACE_POWER=-1,
148
+ GET_ITER=0,
149
+ GET_YIELD_FROM_ITER=0,
150
+ PRINT_EXPR=-1,
151
+ LOAD_BUILD_CLASS=1,
152
+ YIELD_FROM=-1,
153
+ GET_AWAITABLE=0,
154
+ LOAD_ASSERTION_ERROR=1,
155
+ INPLACE_LSHIFT=-1,
156
+ INPLACE_RSHIFT=-1,
157
+ INPLACE_AND=-1,
158
+ INPLACE_XOR=-1,
159
+ INPLACE_OR=-1,
160
+ LIST_TO_TUPLE=0,
161
+ RETURN_VALUE=-1,
162
+ IMPORT_STAR=-1,
163
+ SETUP_ANNOTATIONS=0,
164
+ YIELD_VALUE=0,
165
+ POP_BLOCK=0,
166
+ POP_EXCEPT=-3,
167
+ STORE_NAME=-1,
168
+ DELETE_NAME=0,
169
+ UNPACK_SEQUENCE=lambda oparg, jmp=0: oparg - 1,
170
+ FOR_ITER=lambda oparg, jmp=0: -1 if jmp > 0 else 1,
171
+ UNPACK_EX=lambda oparg, jmp=0: (oparg & 0xFF) + (oparg >> 8),
172
+ STORE_ATTR=-2,
173
+ DELETE_ATTR=-1,
174
+ STORE_GLOBAL=-1,
175
+ DELETE_GLOBAL=0,
176
+ ROT_N=0,
177
+ LOAD_CONST=1,
178
+ LOAD_NAME=1,
179
+ BUILD_TUPLE=lambda oparg, jmp=0: 1 - oparg,
180
+ BUILD_LIST=lambda oparg, jmp=0: 1 - oparg,
181
+ BUILD_SET=lambda oparg, jmp=0: 1 - oparg,
182
+ BUILD_MAP=lambda oparg, jmp=0: 1 - 2 * oparg,
183
+ LOAD_ATTR=0,
184
+ COMPARE_OP=-1,
185
+ IMPORT_NAME=-1,
186
+ IMPORT_FROM=1,
187
+ JUMP_FORWARD=0,
188
+ JUMP_IF_FALSE_OR_POP=lambda oparg, jmp=0: 0 if jmp else -1,
189
+ JUMP_IF_TRUE_OR_POP=lambda oparg, jmp=0: 0 if jmp else -1,
190
+ JUMP_ABSOLUTE=0,
191
+ POP_JUMP_IF_FALSE=-1,
192
+ POP_JUMP_IF_TRUE=-1,
193
+ LOAD_GLOBAL=1,
194
+ IS_OP=-1,
195
+ CONTAINS_OP=-1,
196
+ RERAISE=-3,
197
+ JUMP_IF_NOT_EXC_MATCH=-2,
198
+ SETUP_FINALLY=lambda oparg, jmp: 6 if jmp else 0,
199
+ LOAD_FAST=1,
200
+ STORE_FAST=-1,
201
+ DELETE_FAST=0,
202
+ GEN_START=-1,
203
+ RAISE_VARARGS=lambda oparg, jmp=0: -oparg,
204
+ CALL_FUNCTION=lambda oparg, jmp=0: -oparg,
205
+ MAKE_FUNCTION=lambda oparg, jmp=0: -1
206
+ - ((oparg & 0x01) != 0)
207
+ - ((oparg & 0x02) != 0)
208
+ - ((oparg & 0x04) != 0)
209
+ - ((oparg & 0x08) != 0),
210
+ BUILD_SLICE=lambda oparg, jmp=0: -2 if oparg == 3 else -1,
211
+ LOAD_CLOSURE=1,
212
+ LOAD_DEREF=1,
213
+ STORE_DEREF=-1,
214
+ DELETE_DEREF=0,
215
+ CALL_FUNCTION_KW=lambda oparg, jmp=0: -oparg - 1,
216
+ CALL_FUNCTION_EX=lambda oparg, jmp=0: -1 - ((oparg & 0x01) != 0),
217
+ SETUP_WITH=lambda oparg, jmp=0: 6 if jmp else 1,
218
+ EXTENDED_ARG=0,
219
+ LIST_APPEND=-1,
220
+ SET_ADD=-1,
221
+ MAP_ADD=-2,
222
+ LOAD_CLASSDEREF=1,
223
+ MATCH_CLASS=-1,
224
+ SETUP_ASYNC_WITH=lambda oparg, jmp: (-1 + 6) if jmp else 0,
225
+ # If there's a fmt_spec on the stack, we go from 2->1,
226
+ # else 1->1.
227
+ FORMAT_VALUE=lambda oparg, jmp=0: -1 if (oparg & FVS_MASK) == FVS_HAVE_SPEC else 0,
228
+ BUILD_CONST_KEY_MAP=lambda oparg, jmp=0: -oparg,
229
+ BUILD_STRING=lambda oparg, jmp=0: 1 - oparg,
230
+ INVOKE_METHOD=lambda oparg, jmp=0: -(oparg[1] + 1),
231
+ LOAD_METHOD=1,
232
+ CALL_METHOD=lambda oparg, jmp=0: -oparg - 1,
233
+ LIST_EXTEND=-1,
234
+ SET_UPDATE=-1,
235
+ DICT_MERGE=-1,
236
+ DICT_UPDATE=-1,
237
+ )
238
+
239
+ if sys.version_info >= (3, 12):
240
+ # pyre-fixme[21]: Could not find name `_intrinsic_1_descs` in `opcode` (stubbed).
241
+ # pyre-fixme[21]: Could not find name `_intrinsic_2_descs` in `opcode` (stubbed).
242
+ # pyre-fixme[21]: Could not find name `_nb_ops` in `opcode` (stubbed).
243
+ from opcode import (
244
+ _intrinsic_1_descs as INTRINSIC_1,
245
+ _intrinsic_2_descs as INTRINSIC_2,
246
+ _nb_ops as NB_OPS,
247
+ )
248
+ else:
249
+ NB_OPS: list[tuple[str, str]] = []
250
+ INTRINSIC_1: list[str] = []
251
+ INTRINSIC_2: list[str] = []
252
+
253
+
254
+ if sys.version_info >= (3, 14):
255
+ opcode.popped.update(
256
+ ANNOTATIONS_PLACEHOLDER=0,
257
+ BINARY_OP=2,
258
+ BINARY_OP_ADD_FLOAT=2,
259
+ BINARY_OP_ADD_INT=2,
260
+ BINARY_OP_ADD_UNICODE=2,
261
+ BINARY_OP_EXTEND=2,
262
+ BINARY_OP_INPLACE_ADD_UNICODE=2,
263
+ BINARY_OP_MULTIPLY_FLOAT=2,
264
+ BINARY_OP_MULTIPLY_INT=2,
265
+ BINARY_OP_SUBSCR_DICT=2,
266
+ BINARY_OP_SUBSCR_GETITEM=2,
267
+ BINARY_OP_SUBSCR_LIST_INT=2,
268
+ BINARY_OP_SUBSCR_LIST_SLICE=2,
269
+ BINARY_OP_SUBSCR_STR_INT=2,
270
+ BINARY_OP_SUBSCR_TUPLE_INT=2,
271
+ BINARY_OP_SUBTRACT_FLOAT=2,
272
+ BINARY_OP_SUBTRACT_INT=2,
273
+ BINARY_SLICE=3,
274
+ BUILD_INTERPOLATION=lambda oparg: 2 + (oparg & 1),
275
+ BUILD_LIST=lambda oparg: oparg,
276
+ BUILD_MAP=lambda oparg: oparg * 2,
277
+ BUILD_SET=lambda oparg: oparg,
278
+ BUILD_SLICE=lambda oparg: oparg,
279
+ BUILD_STRING=lambda oparg: oparg,
280
+ BUILD_TEMPLATE=2,
281
+ BUILD_TUPLE=lambda oparg: oparg,
282
+ CACHE=0,
283
+ CALL=lambda oparg: 2 + oparg,
284
+ CALL_ALLOC_AND_ENTER_INIT=lambda oparg: 2 + oparg,
285
+ CALL_BOUND_METHOD_EXACT_ARGS=lambda oparg: 2 + oparg,
286
+ CALL_BOUND_METHOD_GENERAL=lambda oparg: 2 + oparg,
287
+ CALL_BUILTIN_CLASS=lambda oparg: 2 + oparg,
288
+ CALL_BUILTIN_FAST=lambda oparg: 2 + oparg,
289
+ CALL_BUILTIN_FAST_WITH_KEYWORDS=lambda oparg: 2 + oparg,
290
+ CALL_BUILTIN_O=lambda oparg: 2 + oparg,
291
+ CALL_FUNCTION_EX=4,
292
+ CALL_INTRINSIC_1=1,
293
+ CALL_INTRINSIC_2=2,
294
+ CALL_ISINSTANCE=lambda oparg: 2 + oparg,
295
+ CALL_KW=lambda oparg: 3 + oparg,
296
+ CALL_KW_BOUND_METHOD=lambda oparg: 3 + oparg,
297
+ CALL_KW_NON_PY=lambda oparg: 3 + oparg,
298
+ CALL_KW_PY=lambda oparg: 3 + oparg,
299
+ CALL_LEN=3,
300
+ CALL_LIST_APPEND=3,
301
+ CALL_METHOD_DESCRIPTOR_FAST=lambda oparg: 2 + oparg,
302
+ CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS=lambda oparg: 2 + oparg,
303
+ CALL_METHOD_DESCRIPTOR_NOARGS=lambda oparg: 2 + oparg,
304
+ CALL_METHOD_DESCRIPTOR_O=lambda oparg: 2 + oparg,
305
+ CALL_NON_PY_GENERAL=lambda oparg: 2 + oparg,
306
+ CALL_PY_EXACT_ARGS=lambda oparg: 2 + oparg,
307
+ CALL_PY_GENERAL=lambda oparg: 2 + oparg,
308
+ CALL_STR_1=3,
309
+ CALL_TUPLE_1=3,
310
+ CALL_TYPE_1=3,
311
+ CHECK_EG_MATCH=2,
312
+ CHECK_EXC_MATCH=2,
313
+ CLEANUP_THROW=3,
314
+ COMPARE_OP=2,
315
+ COMPARE_OP_FLOAT=2,
316
+ COMPARE_OP_INT=2,
317
+ COMPARE_OP_STR=2,
318
+ CONTAINS_OP=2,
319
+ CONTAINS_OP_DICT=2,
320
+ CONTAINS_OP_SET=2,
321
+ CONVERT_VALUE=1,
322
+ COPY=lambda oparg: 1 + (oparg - 1),
323
+ COPY_FREE_VARS=0,
324
+ DELETE_ATTR=1,
325
+ DELETE_DEREF=0,
326
+ DELETE_FAST=0,
327
+ DELETE_GLOBAL=0,
328
+ DELETE_NAME=0,
329
+ DELETE_SUBSCR=2,
330
+ DICT_MERGE=lambda oparg: 5 + (oparg - 1),
331
+ DICT_UPDATE=lambda oparg: 2 + (oparg - 1),
332
+ EAGER_IMPORT_NAME=2,
333
+ END_ASYNC_FOR=2,
334
+ END_FOR=1,
335
+ END_SEND=2,
336
+ ENTER_EXECUTOR=0,
337
+ EXIT_INIT_CHECK=1,
338
+ EXTENDED_ARG=0,
339
+ FORMAT_SIMPLE=1,
340
+ FORMAT_WITH_SPEC=2,
341
+ FOR_ITER=1,
342
+ FOR_ITER_GEN=1,
343
+ FOR_ITER_LIST=1,
344
+ FOR_ITER_RANGE=1,
345
+ FOR_ITER_TUPLE=1,
346
+ GET_AITER=1,
347
+ GET_ANEXT=1,
348
+ GET_AWAITABLE=1,
349
+ GET_ITER=1,
350
+ GET_LEN=1,
351
+ GET_YIELD_FROM_ITER=1,
352
+ IMPORT_FROM=1,
353
+ IMPORT_NAME=2,
354
+ INSTRUMENTED_CALL=lambda oparg: 2 + oparg,
355
+ INSTRUMENTED_CALL_FUNCTION_EX=4,
356
+ INSTRUMENTED_CALL_KW=lambda oparg: 3 + oparg,
357
+ INSTRUMENTED_END_ASYNC_FOR=2,
358
+ INSTRUMENTED_END_FOR=2,
359
+ INSTRUMENTED_END_SEND=2,
360
+ INSTRUMENTED_FOR_ITER=1,
361
+ INSTRUMENTED_INSTRUCTION=0,
362
+ INSTRUMENTED_JUMP_BACKWARD=0,
363
+ INSTRUMENTED_JUMP_FORWARD=0,
364
+ INSTRUMENTED_LINE=0,
365
+ INSTRUMENTED_LOAD_SUPER_ATTR=3,
366
+ INSTRUMENTED_NOT_TAKEN=0,
367
+ INSTRUMENTED_POP_ITER=1,
368
+ INSTRUMENTED_POP_JUMP_IF_FALSE=1,
369
+ INSTRUMENTED_POP_JUMP_IF_NONE=1,
370
+ INSTRUMENTED_POP_JUMP_IF_NOT_NONE=1,
371
+ INSTRUMENTED_POP_JUMP_IF_TRUE=1,
372
+ INSTRUMENTED_RESUME=0,
373
+ INSTRUMENTED_RETURN_VALUE=1,
374
+ INSTRUMENTED_YIELD_VALUE=1,
375
+ INTERPRETER_EXIT=1,
376
+ IS_OP=2,
377
+ JUMP=0,
378
+ JUMP_BACKWARD=0,
379
+ JUMP_BACKWARD_JIT=0,
380
+ JUMP_BACKWARD_NO_INTERRUPT=0,
381
+ JUMP_BACKWARD_NO_JIT=0,
382
+ JUMP_FORWARD=0,
383
+ JUMP_IF_FALSE=1,
384
+ JUMP_IF_TRUE=1,
385
+ JUMP_NO_INTERRUPT=0,
386
+ LIST_APPEND=lambda oparg: 2 + (oparg - 1),
387
+ LIST_EXTEND=lambda oparg: 2 + (oparg - 1),
388
+ LOAD_ATTR=1,
389
+ LOAD_ATTR_CLASS=1,
390
+ LOAD_ATTR_CLASS_WITH_METACLASS_CHECK=1,
391
+ LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN=1,
392
+ LOAD_ATTR_INSTANCE_VALUE=1,
393
+ LOAD_ATTR_METHOD_LAZY_DICT=1,
394
+ LOAD_ATTR_METHOD_NO_DICT=1,
395
+ LOAD_ATTR_METHOD_WITH_VALUES=1,
396
+ LOAD_ATTR_MODULE=1,
397
+ LOAD_ATTR_NONDESCRIPTOR_NO_DICT=1,
398
+ LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES=1,
399
+ LOAD_ATTR_PROPERTY=1,
400
+ LOAD_ATTR_SLOT=1,
401
+ LOAD_ATTR_WITH_HINT=1,
402
+ LOAD_BUILD_CLASS=0,
403
+ LOAD_CLOSURE=0,
404
+ LOAD_COMMON_CONSTANT=0,
405
+ LOAD_CONST=0,
406
+ LOAD_CONST_IMMORTAL=0,
407
+ LOAD_CONST_MORTAL=0,
408
+ LOAD_DEREF=0,
409
+ LOAD_FAST=0,
410
+ LOAD_FAST_AND_CLEAR=0,
411
+ LOAD_FAST_BORROW=0,
412
+ LOAD_FAST_BORROW_LOAD_FAST_BORROW=0,
413
+ LOAD_FAST_CHECK=0,
414
+ LOAD_FAST_LOAD_FAST=0,
415
+ LOAD_FROM_DICT_OR_DEREF=1,
416
+ LOAD_FROM_DICT_OR_GLOBALS=1,
417
+ LOAD_GLOBAL=0,
418
+ LOAD_GLOBAL_BUILTIN=0,
419
+ LOAD_GLOBAL_MODULE=0,
420
+ LOAD_LOCALS=0,
421
+ LOAD_NAME=0,
422
+ LOAD_SMALL_INT=0,
423
+ LOAD_SPECIAL=1,
424
+ LOAD_SUPER_ATTR=3,
425
+ LOAD_SUPER_ATTR_ATTR=3,
426
+ LOAD_SUPER_ATTR_METHOD=3,
427
+ MAKE_CELL=0,
428
+ MAKE_FUNCTION=1,
429
+ MAP_ADD=lambda oparg: 3 + (oparg - 1),
430
+ MATCH_CLASS=3,
431
+ MATCH_KEYS=2,
432
+ MATCH_MAPPING=1,
433
+ MATCH_SEQUENCE=1,
434
+ NOP=0,
435
+ NOT_TAKEN=0,
436
+ POP_BLOCK=0,
437
+ POP_EXCEPT=1,
438
+ POP_ITER=1,
439
+ POP_JUMP_IF_FALSE=1,
440
+ POP_JUMP_IF_NONE=1,
441
+ POP_JUMP_IF_NOT_NONE=1,
442
+ POP_JUMP_IF_TRUE=1,
443
+ POP_TOP=1,
444
+ PUSH_EXC_INFO=1,
445
+ PUSH_NULL=0,
446
+ RAISE_VARARGS=lambda oparg: oparg,
447
+ RERAISE=lambda oparg: 1 + oparg,
448
+ RESERVED=0,
449
+ RESUME=0,
450
+ RESUME_CHECK=0,
451
+ RETURN_GENERATOR=0,
452
+ RETURN_VALUE=1,
453
+ SEND=2,
454
+ SEND_GEN=2,
455
+ SETUP_ANNOTATIONS=0,
456
+ SETUP_CLEANUP=0,
457
+ SETUP_FINALLY=0,
458
+ SETUP_WITH=0,
459
+ SET_ADD=lambda oparg: 2 + (oparg - 1),
460
+ SET_FUNCTION_ATTRIBUTE=2,
461
+ SET_UPDATE=lambda oparg: 2 + (oparg - 1),
462
+ STORE_ATTR=2,
463
+ STORE_ATTR_INSTANCE_VALUE=2,
464
+ STORE_ATTR_SLOT=2,
465
+ STORE_ATTR_WITH_HINT=2,
466
+ STORE_DEREF=1,
467
+ STORE_FAST=1,
468
+ STORE_FAST_LOAD_FAST=1,
469
+ STORE_FAST_MAYBE_NULL=1,
470
+ STORE_FAST_STORE_FAST=2,
471
+ STORE_GLOBAL=1,
472
+ STORE_NAME=1,
473
+ STORE_SLICE=4,
474
+ STORE_SUBSCR=3,
475
+ STORE_SUBSCR_DICT=3,
476
+ STORE_SUBSCR_LIST_INT=3,
477
+ SWAP=lambda oparg: 2 + (oparg - 2),
478
+ TO_BOOL=1,
479
+ TO_BOOL_ALWAYS_TRUE=1,
480
+ TO_BOOL_BOOL=1,
481
+ TO_BOOL_INT=1,
482
+ TO_BOOL_LIST=1,
483
+ TO_BOOL_NONE=1,
484
+ TO_BOOL_STR=1,
485
+ UNARY_INVERT=1,
486
+ UNARY_NEGATIVE=1,
487
+ UNARY_NOT=1,
488
+ UNPACK_EX=1,
489
+ UNPACK_SEQUENCE=1,
490
+ UNPACK_SEQUENCE_LIST=1,
491
+ UNPACK_SEQUENCE_TUPLE=1,
492
+ UNPACK_SEQUENCE_TWO_TUPLE=1,
493
+ WITH_EXCEPT_START=5,
494
+ YIELD_VALUE=1,
495
+ # Static opcodes
496
+ EXTENDED_OPCODE=0,
497
+ LOAD_FIELD=1,
498
+ STORE_FIELD=2,
499
+ CAST=1,
500
+ LOAD_LOCAL=0,
501
+ STORE_LOCAL=1,
502
+ PRIMITIVE_BOX=1,
503
+ POP_JUMP_IF_ZERO=1,
504
+ POP_JUMP_IF_NONZERO=1,
505
+ PRIMITIVE_UNBOX=1,
506
+ PRIMITIVE_BINARY_OP=2,
507
+ PRIMITIVE_UNARY_OP=1,
508
+ PRIMITIVE_COMPARE_OP=2,
509
+ LOAD_ITERABLE_ARG=1,
510
+ LOAD_MAPPING_ARG=lambda oparg, jmp=0: 3 if oparg == 3 else 2,
511
+ INVOKE_METHOD=lambda oparg, jmp=0: (oparg[1] + 2),
512
+ INVOKE_FUNCTION=lambda oparg, jmp=0: (oparg[1]),
513
+ INVOKE_NATIVE=lambda oparg, jmp=0: (len(oparg[1]) - 1),
514
+ JUMP_IF_ZERO_OR_POP=lambda oparg, jmp=0: 0 if jmp else -1,
515
+ JUMP_IF_NONZERO_OR_POP=lambda oparg, jmp=0: 0 if jmp else -1,
516
+ FAST_LEN=1,
517
+ CONVERT_PRIMITIVE=1,
518
+ LOAD_CLASS=0,
519
+ BUILD_CHECKED_MAP=lambda oparg, jmp=0: 2 * oparg[1],
520
+ SEQUENCE_GET=2,
521
+ SEQUENCE_SET=3,
522
+ LIST_DEL=2,
523
+ REFINE_TYPE=1,
524
+ PRIMITIVE_LOAD_CONST=0,
525
+ RETURN_PRIMITIVE=1,
526
+ TP_ALLOC=0,
527
+ BUILD_CHECKED_LIST=lambda oparg, jmp=0: oparg[1],
528
+ LOAD_TYPE=1,
529
+ LOAD_METHOD_STATIC=1,
530
+ )
531
+
532
+ opcode.pushed.update(
533
+ ANNOTATIONS_PLACEHOLDER=0,
534
+ BINARY_OP=1,
535
+ BINARY_OP_ADD_FLOAT=1,
536
+ BINARY_OP_ADD_INT=1,
537
+ BINARY_OP_ADD_UNICODE=1,
538
+ BINARY_OP_EXTEND=1,
539
+ BINARY_OP_INPLACE_ADD_UNICODE=0,
540
+ BINARY_OP_MULTIPLY_FLOAT=1,
541
+ BINARY_OP_MULTIPLY_INT=1,
542
+ BINARY_OP_SUBSCR_DICT=1,
543
+ BINARY_OP_SUBSCR_GETITEM=0,
544
+ BINARY_OP_SUBSCR_LIST_INT=1,
545
+ BINARY_OP_SUBSCR_LIST_SLICE=1,
546
+ BINARY_OP_SUBSCR_STR_INT=1,
547
+ BINARY_OP_SUBSCR_TUPLE_INT=1,
548
+ BINARY_OP_SUBTRACT_FLOAT=1,
549
+ BINARY_OP_SUBTRACT_INT=1,
550
+ BINARY_SLICE=1,
551
+ BUILD_INTERPOLATION=1,
552
+ BUILD_LIST=1,
553
+ BUILD_MAP=1,
554
+ BUILD_SET=1,
555
+ BUILD_SLICE=1,
556
+ BUILD_STRING=1,
557
+ BUILD_TEMPLATE=1,
558
+ BUILD_TUPLE=1,
559
+ CACHE=0,
560
+ CALL=1,
561
+ CALL_ALLOC_AND_ENTER_INIT=0,
562
+ CALL_BOUND_METHOD_EXACT_ARGS=0,
563
+ CALL_BOUND_METHOD_GENERAL=0,
564
+ CALL_BUILTIN_CLASS=1,
565
+ CALL_BUILTIN_FAST=1,
566
+ CALL_BUILTIN_FAST_WITH_KEYWORDS=1,
567
+ CALL_BUILTIN_O=1,
568
+ CALL_FUNCTION_EX=1,
569
+ CALL_INTRINSIC_1=1,
570
+ CALL_INTRINSIC_2=1,
571
+ CALL_ISINSTANCE=1,
572
+ CALL_KW=1,
573
+ CALL_KW_BOUND_METHOD=0,
574
+ CALL_KW_NON_PY=1,
575
+ CALL_KW_PY=0,
576
+ CALL_LEN=1,
577
+ CALL_LIST_APPEND=0,
578
+ CALL_METHOD_DESCRIPTOR_FAST=1,
579
+ CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS=1,
580
+ CALL_METHOD_DESCRIPTOR_NOARGS=1,
581
+ CALL_METHOD_DESCRIPTOR_O=1,
582
+ CALL_NON_PY_GENERAL=1,
583
+ CALL_PY_EXACT_ARGS=0,
584
+ CALL_PY_GENERAL=0,
585
+ CALL_STR_1=1,
586
+ CALL_TUPLE_1=1,
587
+ CALL_TYPE_1=1,
588
+ CHECK_EG_MATCH=2,
589
+ CHECK_EXC_MATCH=2,
590
+ CLEANUP_THROW=2,
591
+ COMPARE_OP=1,
592
+ COMPARE_OP_FLOAT=1,
593
+ COMPARE_OP_INT=1,
594
+ COMPARE_OP_STR=1,
595
+ CONTAINS_OP=1,
596
+ CONTAINS_OP_DICT=1,
597
+ CONTAINS_OP_SET=1,
598
+ CONVERT_VALUE=1,
599
+ COPY=lambda oparg: 2 + (oparg - 1),
600
+ COPY_FREE_VARS=0,
601
+ DELETE_ATTR=0,
602
+ DELETE_DEREF=0,
603
+ DELETE_FAST=0,
604
+ DELETE_GLOBAL=0,
605
+ DELETE_NAME=0,
606
+ DELETE_SUBSCR=0,
607
+ DICT_MERGE=lambda oparg: 4 + (oparg - 1),
608
+ DICT_UPDATE=lambda oparg: 1 + (oparg - 1),
609
+ EAGER_IMPORT_NAME=1,
610
+ END_ASYNC_FOR=0,
611
+ END_FOR=0,
612
+ END_SEND=1,
613
+ ENTER_EXECUTOR=0,
614
+ EXIT_INIT_CHECK=0,
615
+ EXTENDED_ARG=0,
616
+ FORMAT_SIMPLE=1,
617
+ FORMAT_WITH_SPEC=1,
618
+ FOR_ITER=2,
619
+ FOR_ITER_GEN=1,
620
+ FOR_ITER_LIST=2,
621
+ FOR_ITER_RANGE=2,
622
+ FOR_ITER_TUPLE=2,
623
+ GET_AITER=1,
624
+ GET_ANEXT=2,
625
+ GET_AWAITABLE=1,
626
+ GET_ITER=1,
627
+ GET_LEN=2,
628
+ GET_YIELD_FROM_ITER=1,
629
+ IMPORT_FROM=2,
630
+ IMPORT_NAME=1,
631
+ INSTRUMENTED_CALL=1,
632
+ INSTRUMENTED_CALL_FUNCTION_EX=1,
633
+ INSTRUMENTED_CALL_KW=1,
634
+ INSTRUMENTED_END_ASYNC_FOR=0,
635
+ INSTRUMENTED_END_FOR=1,
636
+ INSTRUMENTED_END_SEND=1,
637
+ INSTRUMENTED_FOR_ITER=2,
638
+ INSTRUMENTED_INSTRUCTION=0,
639
+ INSTRUMENTED_JUMP_BACKWARD=0,
640
+ INSTRUMENTED_JUMP_FORWARD=0,
641
+ INSTRUMENTED_LINE=0,
642
+ INSTRUMENTED_LOAD_SUPER_ATTR=lambda oparg: 1 + (oparg & 1),
643
+ INSTRUMENTED_NOT_TAKEN=0,
644
+ INSTRUMENTED_POP_ITER=0,
645
+ INSTRUMENTED_POP_JUMP_IF_FALSE=0,
646
+ INSTRUMENTED_POP_JUMP_IF_NONE=0,
647
+ INSTRUMENTED_POP_JUMP_IF_NOT_NONE=0,
648
+ INSTRUMENTED_POP_JUMP_IF_TRUE=0,
649
+ INSTRUMENTED_RESUME=0,
650
+ INSTRUMENTED_RETURN_VALUE=1,
651
+ INSTRUMENTED_YIELD_VALUE=1,
652
+ INTERPRETER_EXIT=0,
653
+ IS_OP=1,
654
+ JUMP=0,
655
+ JUMP_BACKWARD=0,
656
+ JUMP_BACKWARD_JIT=0,
657
+ JUMP_BACKWARD_NO_INTERRUPT=0,
658
+ JUMP_BACKWARD_NO_JIT=0,
659
+ JUMP_FORWARD=0,
660
+ JUMP_IF_FALSE=1,
661
+ JUMP_IF_TRUE=1,
662
+ JUMP_NO_INTERRUPT=0,
663
+ LIST_APPEND=lambda oparg: 1 + (oparg - 1),
664
+ LIST_EXTEND=lambda oparg: 1 + (oparg - 1),
665
+ LOAD_ATTR=lambda oparg: (2 if (isinstance(oparg, tuple) and oparg[1]) else 1),
666
+ LOAD_ATTR_CLASS=lambda oparg: 1 + (oparg & 1),
667
+ LOAD_ATTR_CLASS_WITH_METACLASS_CHECK=lambda oparg: 1 + (oparg & 1),
668
+ LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN=1,
669
+ LOAD_ATTR_INSTANCE_VALUE=lambda oparg: 1 + (oparg & 1),
670
+ LOAD_ATTR_METHOD_LAZY_DICT=2,
671
+ LOAD_ATTR_METHOD_NO_DICT=2,
672
+ LOAD_ATTR_METHOD_WITH_VALUES=2,
673
+ LOAD_ATTR_MODULE=lambda oparg: 1 + (oparg & 1),
674
+ LOAD_ATTR_NONDESCRIPTOR_NO_DICT=1,
675
+ LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES=1,
676
+ LOAD_ATTR_PROPERTY=0,
677
+ LOAD_ATTR_SLOT=lambda oparg: 1 + (oparg & 1),
678
+ LOAD_ATTR_WITH_HINT=lambda oparg: 1 + (oparg & 1),
679
+ LOAD_BUILD_CLASS=1,
680
+ LOAD_CLOSURE=1,
681
+ LOAD_COMMON_CONSTANT=1,
682
+ LOAD_CONST=1,
683
+ LOAD_CONST_IMMORTAL=1,
684
+ LOAD_CONST_MORTAL=1,
685
+ LOAD_DEREF=1,
686
+ LOAD_FAST=1,
687
+ LOAD_FAST_AND_CLEAR=1,
688
+ LOAD_FAST_BORROW=1,
689
+ LOAD_FAST_BORROW_LOAD_FAST_BORROW=2,
690
+ LOAD_FAST_CHECK=1,
691
+ LOAD_FAST_LOAD_FAST=2,
692
+ LOAD_FROM_DICT_OR_DEREF=1,
693
+ LOAD_FROM_DICT_OR_GLOBALS=1,
694
+ LOAD_GLOBAL=lambda oparg: 2 if isinstance(oparg, tuple) else 1,
695
+ LOAD_GLOBAL_BUILTIN=lambda oparg: 1 + (oparg & 1),
696
+ LOAD_GLOBAL_MODULE=lambda oparg: 1 + (oparg & 1),
697
+ LOAD_LOCALS=1,
698
+ LOAD_NAME=1,
699
+ LOAD_SMALL_INT=1,
700
+ LOAD_SPECIAL=2,
701
+ LOAD_SUPER_ATTR=lambda oparg: (
702
+ 2 if oparg[0] in ("LOAD_SUPER_METHOD", "LOAD_ZERO_SUPER_METHOD") else 1
703
+ ),
704
+ LOAD_SUPER_ATTR_ATTR=1,
705
+ LOAD_SUPER_ATTR_METHOD=2,
706
+ MAKE_CELL=0,
707
+ MAKE_FUNCTION=1,
708
+ MAP_ADD=lambda oparg: 1 + (oparg - 1),
709
+ MATCH_CLASS=1,
710
+ MATCH_KEYS=3,
711
+ MATCH_MAPPING=2,
712
+ MATCH_SEQUENCE=2,
713
+ NOP=0,
714
+ NOT_TAKEN=0,
715
+ POP_BLOCK=0,
716
+ POP_EXCEPT=0,
717
+ POP_ITER=0,
718
+ POP_JUMP_IF_FALSE=0,
719
+ POP_JUMP_IF_NONE=0,
720
+ POP_JUMP_IF_NOT_NONE=0,
721
+ POP_JUMP_IF_TRUE=0,
722
+ POP_TOP=0,
723
+ PUSH_EXC_INFO=2,
724
+ PUSH_NULL=1,
725
+ RAISE_VARARGS=0,
726
+ RERAISE=lambda oparg: oparg,
727
+ RESERVED=0,
728
+ RESUME=0,
729
+ RESUME_CHECK=0,
730
+ RETURN_GENERATOR=1,
731
+ RETURN_VALUE=1,
732
+ SEND=2,
733
+ SEND_GEN=1,
734
+ SETUP_ANNOTATIONS=0,
735
+ SETUP_CLEANUP=2,
736
+ SETUP_FINALLY=1,
737
+ SETUP_WITH=1,
738
+ SET_ADD=lambda oparg: 1 + (oparg - 1),
739
+ SET_FUNCTION_ATTRIBUTE=1,
740
+ SET_UPDATE=lambda oparg: 1 + (oparg - 1),
741
+ STORE_ATTR=0,
742
+ STORE_ATTR_INSTANCE_VALUE=0,
743
+ STORE_ATTR_SLOT=0,
744
+ STORE_ATTR_WITH_HINT=0,
745
+ STORE_DEREF=0,
746
+ STORE_FAST=0,
747
+ STORE_FAST_LOAD_FAST=1,
748
+ STORE_FAST_MAYBE_NULL=0,
749
+ STORE_FAST_STORE_FAST=0,
750
+ STORE_GLOBAL=0,
751
+ STORE_NAME=0,
752
+ STORE_SLICE=0,
753
+ STORE_SUBSCR=0,
754
+ STORE_SUBSCR_DICT=0,
755
+ STORE_SUBSCR_LIST_INT=0,
756
+ SWAP=lambda oparg: 2 + (oparg - 2),
757
+ TO_BOOL=1,
758
+ TO_BOOL_ALWAYS_TRUE=1,
759
+ TO_BOOL_BOOL=1,
760
+ TO_BOOL_INT=1,
761
+ TO_BOOL_LIST=1,
762
+ TO_BOOL_NONE=1,
763
+ TO_BOOL_STR=1,
764
+ UNARY_INVERT=1,
765
+ UNARY_NEGATIVE=1,
766
+ UNARY_NOT=1,
767
+ UNPACK_EX=lambda oparg: 1 + (oparg & 0xFF) + (oparg >> 8),
768
+ UNPACK_SEQUENCE=lambda oparg: oparg,
769
+ UNPACK_SEQUENCE_LIST=lambda oparg: oparg,
770
+ UNPACK_SEQUENCE_TUPLE=lambda oparg: oparg,
771
+ UNPACK_SEQUENCE_TWO_TUPLE=2,
772
+ WITH_EXCEPT_START=6,
773
+ YIELD_VALUE=1,
774
+ # Static opcodes
775
+ EXTENDED_OPCODE=0,
776
+ LOAD_FIELD=1,
777
+ STORE_FIELD=0,
778
+ CAST=1,
779
+ LOAD_LOCAL=1,
780
+ STORE_LOCAL=0,
781
+ PRIMITIVE_BOX=1,
782
+ POP_JUMP_IF_ZERO=0,
783
+ POP_JUMP_IF_NONZERO=0,
784
+ PRIMITIVE_UNBOX=1,
785
+ PRIMITIVE_BINARY_OP=1,
786
+ PRIMITIVE_UNARY_OP=1,
787
+ PRIMITIVE_COMPARE_OP=1,
788
+ LOAD_ITERABLE_ARG=2,
789
+ LOAD_MAPPING_ARG=1,
790
+ INVOKE_METHOD=1,
791
+ INVOKE_FUNCTION=1,
792
+ INVOKE_NATIVE=1,
793
+ JUMP_IF_ZERO_OR_POP=0,
794
+ JUMP_IF_NONZERO_OR_POP=0,
795
+ FAST_LEN=1,
796
+ CONVERT_PRIMITIVE=1,
797
+ LOAD_CLASS=1,
798
+ BUILD_CHECKED_MAP=1,
799
+ SEQUENCE_GET=1,
800
+ SEQUENCE_SET=0,
801
+ LIST_DEL=0,
802
+ REFINE_TYPE=1,
803
+ PRIMITIVE_LOAD_CONST=1,
804
+ RETURN_PRIMITIVE=0,
805
+ TP_ALLOC=1,
806
+ BUILD_CHECKED_LIST=1,
807
+ LOAD_TYPE=1,
808
+ LOAD_METHOD_STATIC=2,
809
+ )
810
+
811
+ if sys.version_info >= (3, 15):
812
+ opcode.popped.update(
813
+ FOR_ITER=2,
814
+ POP_ITER=2,
815
+ )
816
+ opcode.pushed.update(
817
+ FOR_ITER=3,
818
+ GET_ITER=2,
819
+ )
820
+ for opname, popped in opcode.popped.items():
821
+ pushed = opcode.pushed[opname]
822
+ if isinstance(popped, int) and isinstance(pushed, int):
823
+ opcode.stack_effects[opname] = pushed - popped
824
+ elif isinstance(popped, int):
825
+
826
+ def make_effect(pushed, popped):
827
+ return lambda oparg, jmp=0: pushed(oparg) - popped
828
+
829
+ opcode.stack_effects[opname] = make_effect(pushed, popped)
830
+ elif isinstance(pushed, int):
831
+
832
+ def make_effect(pushed, popped):
833
+ return lambda oparg, jmp=0: pushed - popped(oparg)
834
+
835
+ opcode.stack_effects[opname] = make_effect(pushed, popped)
836
+ else:
837
+
838
+ def make_effect(pushed, popped):
839
+ return lambda oparg, jmp=0: pushed(oparg) - popped(oparg)
840
+
841
+ opcode.stack_effects[opname] = make_effect(pushed, popped)
842
+
843
+ elif sys.version_info >= (3, 12):
844
+
845
+ def _load_mapping_arg_effect(oparg: int, _jmp: int = 0) -> int:
846
+ """The effect of this opcode depends on the number of items on the stack
847
+ when it is invoked. The number of items on the stack for LOAD_MAPPING_ARG
848
+ is based on the oparg. LOAD_MAPPING_ARG will push the resulting value and
849
+ will consume either a default value, the mapping, and the argument name when
850
+ oparg == 3 or just the mapping and argument name when there is no default
851
+ value for the argument."""
852
+ if oparg == 2:
853
+ return -1
854
+ elif oparg == 3:
855
+ return -2
856
+ raise ValueError("bad oparg")
857
+
858
+ opcode.stack_effects.update(
859
+ CALL=lambda oparg, jmp=0: -(oparg + 1),
860
+ COPY_FREE_VARS=lambda oparg, jmp=0: 0,
861
+ MAKE_CELL=lambda oparg, jmp=0: 0,
862
+ JUMP=0,
863
+ JUMP_BACKWARD=0,
864
+ PUSH_NULL=1,
865
+ RETURN_CONST=0,
866
+ SWAP=0,
867
+ COPY=1,
868
+ CALL_INTRINSIC_1=0,
869
+ CALL_INTRINSIC_2=-1,
870
+ LOAD_FROM_DICT_OR_DEREF=0,
871
+ LOAD_LOCALS=1,
872
+ MAKE_FUNCTION=lambda oparg, jmp=0: -oparg.bit_count(),
873
+ LOAD_FROM_DICT_OR_GLOBALS=0,
874
+ LOAD_SUPER_ATTR=lambda oparg, jmp: (
875
+ 2 if oparg[0] in ("LOAD_SUPER_METHOD", "LOAD_ZERO_SUPER_METHOD") else 1
876
+ )
877
+ - 3,
878
+ LOAD_ATTR=lambda oparg, jmp: (
879
+ 1 if (isinstance(oparg, tuple) and oparg[1]) else 0
880
+ ),
881
+ BINARY_OP=-1,
882
+ RETURN_GENERATOR=0,
883
+ SEND=0,
884
+ JUMP_NO_INTERRUPT=0,
885
+ JUMP_BACKWARD_NO_INTERRUPT=0,
886
+ CLEANUP_THROW=-1,
887
+ END_SEND=-1,
888
+ END_FOR=-2,
889
+ FOR_ITER=lambda oparg, jmp=0: 1,
890
+ END_ASYNC_FOR=-2,
891
+ SETUP_FINALLY=lambda oparg, jmp=0: 1 if jmp else 0,
892
+ SETUP_CLEANUP=lambda oparg, jmp=0: 2 if jmp else 0,
893
+ SETUP_WITH=lambda oparg, jmp=0: 1 if jmp else 0,
894
+ PUSH_EXC_INFO=1,
895
+ POP_EXCEPT=-1,
896
+ LOAD_FAST_AND_CLEAR=1,
897
+ STORE_FAST_MAYBE_NULL=-1,
898
+ RERAISE=-1,
899
+ LOAD_FAST_CHECK=1,
900
+ LOAD_GLOBAL=lambda oparg, jmp=0: 2 if isinstance(oparg, tuple) else 1,
901
+ BEFORE_WITH=1,
902
+ CALL_FUNCTION_EX=lambda oparg, jmp=0: 1 - (4 if oparg & 0x01 else 3),
903
+ CHECK_EXC_MATCH=0,
904
+ CHECK_EG_MATCH=0,
905
+ POP_JUMP_IF_NONE=-1,
906
+ POP_JUMP_IF_NOT_NONE=-1,
907
+ BINARY_SLICE=-2,
908
+ STORE_SLICE=-4,
909
+ KW_NAMES=0,
910
+ MATCH_KEYS=1,
911
+ MATCH_CLASS=-2,
912
+ EAGER_IMPORT_NAME=-1,
913
+ LOAD_FIELD=0,
914
+ STORE_FIELD=-2,
915
+ CAST=0,
916
+ LOAD_LOCAL=1,
917
+ STORE_LOCAL=-1,
918
+ PRIMITIVE_BOX=0,
919
+ POP_JUMP_IF_ZERO=-1,
920
+ POP_JUMP_IF_NONZERO=-1,
921
+ PRIMITIVE_UNBOX=0,
922
+ PRIMITIVE_BINARY_OP=lambda oparg, jmp: -1,
923
+ PRIMITIVE_UNARY_OP=lambda oparg, jmp: 0,
924
+ PRIMITIVE_COMPARE_OP=lambda oparg, jmp: -1,
925
+ LOAD_ITERABLE_ARG=1,
926
+ LOAD_MAPPING_ARG=_load_mapping_arg_effect,
927
+ INVOKE_FUNCTION=lambda oparg, jmp=0: (-oparg[1]) + 1,
928
+ INVOKE_NATIVE=lambda oparg, jmp=0: (-len(oparg[1])) + 2,
929
+ JUMP_IF_ZERO_OR_POP=lambda oparg, jmp=0: 0 if jmp else -1,
930
+ JUMP_IF_NONZERO_OR_POP=lambda oparg, jmp=0: 0 if jmp else -1,
931
+ FAST_LEN=0,
932
+ CONVERT_PRIMITIVE=0,
933
+ LOAD_CLASS=1,
934
+ BUILD_CHECKED_MAP=lambda oparg, jmp: 1 - 2 * oparg[1],
935
+ SEQUENCE_GET=-1,
936
+ SEQUENCE_SET=-3,
937
+ LIST_DEL=-2,
938
+ REFINE_TYPE=0,
939
+ PRIMITIVE_LOAD_CONST=1,
940
+ RETURN_PRIMITIVE=-1,
941
+ TP_ALLOC=1,
942
+ BUILD_CHECKED_LIST=lambda oparg, jmp: 1 - oparg[1],
943
+ LOAD_TYPE=0,
944
+ LOAD_METHOD_STATIC=1,
945
+ )
946
+
947
+
948
+ def find_op_idx(opname: str) -> int:
949
+ # pyre-fixme[16]: Module `opcode` has no attribute `_nb_ops`.
950
+ for i, (name, _symbol) in enumerate(NB_OPS):
951
+ if name == opname:
952
+ return i
953
+
954
+ return -1
955
+
956
+
957
+ STATIC_OPCODES = {
958
+ "LOAD_FIELD",
959
+ "STORE_FIELD",
960
+ "CAST",
961
+ "LOAD_LOCAL",
962
+ "STORE_LOCAL",
963
+ "PRIMITIVE_BOX",
964
+ "POP_JUMP_IF_ZERO",
965
+ "POP_JUMP_IF_NONZERO",
966
+ "PRIMITIVE_UNBOX",
967
+ "PRIMITIVE_BINARY_OP",
968
+ "PRIMITIVE_UNARY_OP",
969
+ "PRIMITIVE_COMPARE_OP",
970
+ "LOAD_ITERABLE_ARG",
971
+ "LOAD_MAPPING_ARG",
972
+ "INVOKE_FUNCTION",
973
+ "INVOKE_METHOD",
974
+ "INVOKE_NATIVE",
975
+ "JUMP_IF_ZERO_OR_POP",
976
+ "JUMP_IF_NONZERO_OR_POP",
977
+ "FAST_LEN",
978
+ "CONVERT_PRIMITIVE",
979
+ "LOAD_CLASS",
980
+ "BUILD_CHECKED_MAP",
981
+ "SEQUENCE_GET",
982
+ "SEQUENCE_SET",
983
+ "LIST_DEL",
984
+ "REFINE_TYPE",
985
+ "PRIMITIVE_LOAD_CONST",
986
+ "RETURN_PRIMITIVE",
987
+ "TP_ALLOC",
988
+ "BUILD_CHECKED_LIST",
989
+ "LOAD_TYPE",
990
+ "LOAD_METHOD_STATIC",
991
+ }