Skip to content

Commit e891a7f

Browse files
Subbarao Garlapatimeta-codesync[bot]
authored andcommitted
Add Lazy Imports to 3.14
Summary: Add Lazy Imports to Python 3.14. This Diff is the result of squashing this stack - D82821767. __**File Regeneration**__ `./configure && make clean && make regen-all` `./third-party/python/3.14/build/gen-checked-in-artifacts.sh` `./third-party/python/3.14/build/gen-cinderx.sh` __**Patch Details**__ This diff adds a patch to the `3.14` Meta-internal fork. Lazy Imports 3.14 Reviewed By: itamaro Differential Revision: D83595369 fbshipit-source-id: 02361bc1b2503c8afdef6081956163bca3a65311
1 parent 3b7a93b commit e891a7f

7 files changed

Lines changed: 452 additions & 58 deletions

File tree

cinderx/Common/opcode_stubs.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,6 @@ enum {
265265
X(COPY_DICT_WITHOUT_KEYS) \
266266
X(DUP_TOP) \
267267
X(DUP_TOP_TWO) \
268-
X(EAGER_IMPORT_NAME) \
269268
X(FAST_LEN) \
270269
X(FORMAT_VALUE) \
271270
X(GEN_START) \

cinderx/Interpreter/3.14/Includes/generated_cases.c.h

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5470,6 +5470,55 @@
54705470
DISPATCH();
54715471
}
54725472

5473+
TARGET(EAGER_IMPORT_NAME) {
5474+
#if Py_TAIL_CALL_INTERP
5475+
int opcode = EAGER_IMPORT_NAME;
5476+
(void)(opcode);
5477+
#endif
5478+
frame->instr_ptr = next_instr;
5479+
next_instr += 1;
5480+
INSTRUCTION_STATS(EAGER_IMPORT_NAME);
5481+
_PyStackRef level;
5482+
_PyStackRef fromlist;
5483+
_PyStackRef res;
5484+
fromlist = stack_pointer[-1];
5485+
level = stack_pointer[-2];
5486+
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
5487+
#ifdef ENABLE_LAZY_IMPORTS
5488+
_PyFrame_SetStackPointer(frame, stack_pointer);
5489+
PyObject *res_o = _PyImport_ImportName(
5490+
tstate, BUILTINS(), GLOBALS(), LOCALS(), name,
5491+
PyStackRef_AsPyObjectBorrow(fromlist), PyStackRef_AsPyObjectBorrow(level));
5492+
stack_pointer = _PyFrame_GetStackPointer(frame);
5493+
#else
5494+
_PyFrame_SetStackPointer(frame, stack_pointer);
5495+
PyObject *res_o = _PyEval_ImportName(tstate, frame, name,
5496+
PyStackRef_AsPyObjectBorrow(fromlist),
5497+
PyStackRef_AsPyObjectBorrow(level));
5498+
stack_pointer = _PyFrame_GetStackPointer(frame);
5499+
#endif
5500+
_PyFrame_SetStackPointer(frame, stack_pointer);
5501+
_PyStackRef tmp = fromlist;
5502+
fromlist = PyStackRef_NULL;
5503+
stack_pointer[-1] = fromlist;
5504+
PyStackRef_CLOSE(tmp);
5505+
tmp = level;
5506+
level = PyStackRef_NULL;
5507+
stack_pointer[-2] = level;
5508+
PyStackRef_CLOSE(tmp);
5509+
stack_pointer = _PyFrame_GetStackPointer(frame);
5510+
stack_pointer += -2;
5511+
assert(WITHIN_STACK_BOUNDS());
5512+
if (res_o == NULL) {
5513+
JUMP_TO_LABEL(error);
5514+
}
5515+
res = PyStackRef_FromPyObjectSteal(res_o);
5516+
stack_pointer[0] = res;
5517+
stack_pointer += 1;
5518+
assert(WITHIN_STACK_BOUNDS());
5519+
DISPATCH();
5520+
}
5521+
54735522
TARGET(END_ASYNC_FOR) {
54745523
#if Py_TAIL_CALL_INTERP
54755524
int opcode = END_ASYNC_FOR;
@@ -6315,9 +6364,23 @@
63156364
_PyStackRef res;
63166365
from = stack_pointer[-1];
63176366
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
6367+
#ifdef ENABLE_LAZY_IMPORTS
6368+
PyObject *from_o = PyStackRef_AsPyObjectBorrow(from);
6369+
PyObject *res_o;
6370+
if (PyLazyImport_CheckExact(from_o)) {
6371+
_PyFrame_SetStackPointer(frame, stack_pointer);
6372+
res_o = _PyImport_LazyImportFrom(tstate, from_o, name);
6373+
stack_pointer = _PyFrame_GetStackPointer(frame);
6374+
} else {
6375+
_PyFrame_SetStackPointer(frame, stack_pointer);
6376+
res_o = _PyImport_ImportFrom(tstate, from_o, name);
6377+
stack_pointer = _PyFrame_GetStackPointer(frame);
6378+
}
6379+
#else
63186380
_PyFrame_SetStackPointer(frame, stack_pointer);
63196381
PyObject *res_o = _PyEval_ImportFrom(tstate, PyStackRef_AsPyObjectBorrow(from), name);
63206382
stack_pointer = _PyFrame_GetStackPointer(frame);
6383+
#endif
63216384
if (res_o == NULL) {
63226385
JUMP_TO_LABEL(error);
63236386
}
@@ -6342,10 +6405,32 @@
63426405
fromlist = stack_pointer[-1];
63436406
level = stack_pointer[-2];
63446407
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
6408+
#if defined(ENABLE_LAZY_IMPORTS) && !defined(Py_GIL_DISABLED)
6409+
PyObject *res_o;
6410+
_PyFrame_SetStackPointer(frame, stack_pointer);
6411+
bool active = _PyImport_IsLazyImportsActive(tstate);
6412+
stack_pointer = _PyFrame_GetStackPointer(frame);
6413+
if (active) {
6414+
_PyFrame_SetStackPointer(frame, stack_pointer);
6415+
res_o = _PyImport_LazyImportName(
6416+
tstate, BUILTINS(), GLOBALS(), LOCALS(), name,
6417+
PyStackRef_AsPyObjectBorrow(fromlist), PyStackRef_AsPyObjectBorrow(level));
6418+
stack_pointer = _PyFrame_GetStackPointer(frame);
6419+
} else {
6420+
_PyFrame_SetStackPointer(frame, stack_pointer);
6421+
res_o = _PyImport_ImportName(
6422+
tstate, BUILTINS(), GLOBALS(), LOCALS(), name,
6423+
PyStackRef_AsPyObjectBorrow(fromlist), PyStackRef_AsPyObjectBorrow(level));
6424+
stack_pointer = _PyFrame_GetStackPointer(frame);
6425+
}
6426+
#else
63456427
_PyFrame_SetStackPointer(frame, stack_pointer);
63466428
PyObject *res_o = _PyEval_ImportName(tstate, frame, name,
63476429
PyStackRef_AsPyObjectBorrow(fromlist),
63486430
PyStackRef_AsPyObjectBorrow(level));
6431+
stack_pointer = _PyFrame_GetStackPointer(frame);
6432+
#endif
6433+
_PyFrame_SetStackPointer(frame, stack_pointer);
63496434
_PyStackRef tmp = fromlist;
63506435
fromlist = PyStackRef_NULL;
63516436
stack_pointer[-1] = fromlist;
@@ -8528,6 +8613,13 @@
85288613
assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
85298614
JUMP_TO_PREDICTED(LOAD_ATTR);
85308615
}
8616+
#ifdef ENABLE_LAZY_IMPORTS
8617+
if (PyLazyImport_CheckExact(attr_o)) {
8618+
UPDATE_MISS_STATS(LOAD_ATTR);
8619+
assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
8620+
JUMP_TO_PREDICTED(LOAD_ATTR);
8621+
}
8622+
#endif
85318623
#ifdef Py_GIL_DISABLED
85328624
int increfed = _Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr);
85338625
if (!increfed) {
@@ -8915,6 +9007,13 @@
89159007
JUMP_TO_PREDICTED(LOAD_ATTR);
89169008
}
89179009
}
9010+
#ifdef ENABLE_LAZY_IMPORTS
9011+
if (PyLazyImport_CheckExact(attr_o)) {
9012+
UPDATE_MISS_STATS(LOAD_ATTR);
9013+
assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
9014+
JUMP_TO_PREDICTED(LOAD_ATTR);
9015+
}
9016+
#endif
89189017
STAT_INC(LOAD_ATTR, hit);
89199018
#ifdef Py_GIL_DISABLED
89209019
int increfed = _Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr);
@@ -9442,6 +9541,13 @@
94429541
assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
94439542
JUMP_TO_PREDICTED(LOAD_GLOBAL);
94449543
}
9544+
#ifdef ENABLE_LAZY_IMPORTS
9545+
if (PyLazyImport_CheckExact(res_o)) {
9546+
UPDATE_MISS_STATS(LOAD_GLOBAL);
9547+
assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
9548+
JUMP_TO_PREDICTED(LOAD_GLOBAL);
9549+
}
9550+
#endif
94459551
#if Py_GIL_DISABLED
94469552
int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res);
94479553
if (!increfed) {
@@ -9509,6 +9615,13 @@
95099615
assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
95109616
JUMP_TO_PREDICTED(LOAD_GLOBAL);
95119617
}
9618+
#ifdef ENABLE_LAZY_IMPORTS
9619+
if (PyLazyImport_CheckExact(res_o)) {
9620+
UPDATE_MISS_STATS(LOAD_GLOBAL);
9621+
assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
9622+
JUMP_TO_PREDICTED(LOAD_GLOBAL);
9623+
}
9624+
#endif
95129625
#if Py_GIL_DISABLED
95139626
int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res);
95149627
if (!increfed) {

cinderx/Interpreter/3.14/cinder_opcode_metadata.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ int _PyOpcode_num_popped(int opcode, int oparg) {
188188
return 5 + (oparg - 1);
189189
case DICT_UPDATE:
190190
return 2 + (oparg - 1);
191+
case EAGER_IMPORT_NAME:
192+
return 2;
191193
case END_ASYNC_FOR:
192194
return 2;
193195
case END_FOR:
@@ -675,6 +677,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg) {
675677
return 4 + (oparg - 1);
676678
case DICT_UPDATE:
677679
return 1 + (oparg - 1);
680+
case EAGER_IMPORT_NAME:
681+
return 1;
678682
case END_ASYNC_FOR:
679683
return 0;
680684
case END_FOR:
@@ -1153,6 +1157,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = {
11531157
[DELETE_SUBSCR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
11541158
[DICT_MERGE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
11551159
[DICT_UPDATE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1160+
[EAGER_IMPORT_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
11561161
[END_ASYNC_FOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
11571162
[END_FOR] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_NO_SAVE_IP_FLAG },
11581163
[END_SEND] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG | HAS_PURE_FLAG },
@@ -1399,6 +1404,7 @@ _PyOpcode_macro_expansion[256] = {
13991404
[DELETE_SUBSCR] = { .nuops = 1, .uops = { { _DELETE_SUBSCR, OPARG_SIMPLE, 0 } } },
14001405
[DICT_MERGE] = { .nuops = 1, .uops = { { _DICT_MERGE, OPARG_SIMPLE, 0 } } },
14011406
[DICT_UPDATE] = { .nuops = 1, .uops = { { _DICT_UPDATE, OPARG_SIMPLE, 0 } } },
1407+
[EAGER_IMPORT_NAME] = { .nuops = 1, .uops = { { _EAGER_IMPORT_NAME, OPARG_SIMPLE, 0 } } },
14021408
[END_FOR] = { .nuops = 1, .uops = { { _END_FOR, OPARG_SIMPLE, 0 } } },
14031409
[END_SEND] = { .nuops = 1, .uops = { { _END_SEND, OPARG_SIMPLE, 0 } } },
14041410
[EXIT_INIT_CHECK] = { .nuops = 1, .uops = { { _EXIT_INIT_CHECK, OPARG_SIMPLE, 0 } } },
@@ -1594,6 +1600,7 @@ const char *_PyOpcode_OpName[267] = {
15941600
[DELETE_SUBSCR] = "DELETE_SUBSCR",
15951601
[DICT_MERGE] = "DICT_MERGE",
15961602
[DICT_UPDATE] = "DICT_UPDATE",
1603+
[EAGER_IMPORT_NAME] = "EAGER_IMPORT_NAME",
15971604
[END_ASYNC_FOR] = "END_ASYNC_FOR",
15981605
[END_FOR] = "END_FOR",
15991606
[END_SEND] = "END_SEND",
@@ -1787,7 +1794,6 @@ const uint8_t _PyOpcode_Caches[256] = {
17871794
extern const uint8_t _PyOpcode_Deopt[256];
17881795
#ifdef NEED_OPCODE_METADATA
17891796
const uint8_t _PyOpcode_Deopt[256] = {
1790-
[121] = 121,
17911797
[122] = 122,
17921798
[123] = 123,
17931799
[124] = 124,
@@ -1891,6 +1897,7 @@ const uint8_t _PyOpcode_Deopt[256] = {
18911897
[DELETE_SUBSCR] = DELETE_SUBSCR,
18921898
[DICT_MERGE] = DICT_MERGE,
18931899
[DICT_UPDATE] = DICT_UPDATE,
1900+
[EAGER_IMPORT_NAME] = EAGER_IMPORT_NAME,
18941901
[END_ASYNC_FOR] = END_ASYNC_FOR,
18951902
[END_FOR] = END_FOR,
18961903
[END_SEND] = END_SEND,
@@ -2048,7 +2055,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
20482055
#endif // NEED_OPCODE_METADATA
20492056

20502057
#define EXTRA_CASES \
2051-
case 121: \
20522058
case 122: \
20532059
case 123: \
20542060
case 124: \

cinderx/Interpreter/3.14/cinderx_opcode_targets.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ static void *opcode_targets[256] = {
6868
&&TARGET_DELETE_NAME,
6969
&&TARGET_DICT_MERGE,
7070
&&TARGET_DICT_UPDATE,
71+
&&TARGET_EAGER_IMPORT_NAME,
7172
&&TARGET_END_ASYNC_FOR,
7273
&&TARGET_EXTENDED_ARG,
7374
&&TARGET_FOR_ITER,
@@ -127,7 +128,6 @@ static void *opcode_targets[256] = {
127128
&&_unknown_opcode,
128129
&&_unknown_opcode,
129130
&&_unknown_opcode,
130-
&&_unknown_opcode,
131131
&&TARGET_RESUME,
132132
&&TARGET_BINARY_OP_ADD_FLOAT,
133133
&&TARGET_BINARY_OP_ADD_INT,
@@ -342,6 +342,7 @@ Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_DELETE_NAME(TAIL_CALL_PARAMS);
342342
Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_DELETE_SUBSCR(TAIL_CALL_PARAMS);
343343
Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_DICT_MERGE(TAIL_CALL_PARAMS);
344344
Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_DICT_UPDATE(TAIL_CALL_PARAMS);
345+
Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_EAGER_IMPORT_NAME(TAIL_CALL_PARAMS);
345346
Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_END_ASYNC_FOR(TAIL_CALL_PARAMS);
346347
Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_END_FOR(TAIL_CALL_PARAMS);
347348
Py_PRESERVE_NONE_CC static PyObject *_TAIL_CALL_END_SEND(TAIL_CALL_PARAMS);
@@ -581,6 +582,7 @@ static py_tail_call_funcptr INSTRUCTION_TABLE[256] = {
581582
[DELETE_SUBSCR] = _TAIL_CALL_DELETE_SUBSCR,
582583
[DICT_MERGE] = _TAIL_CALL_DICT_MERGE,
583584
[DICT_UPDATE] = _TAIL_CALL_DICT_UPDATE,
585+
[EAGER_IMPORT_NAME] = _TAIL_CALL_EAGER_IMPORT_NAME,
584586
[END_ASYNC_FOR] = _TAIL_CALL_END_ASYNC_FOR,
585587
[END_FOR] = _TAIL_CALL_END_FOR,
586588
[END_SEND] = _TAIL_CALL_END_SEND,
@@ -733,7 +735,6 @@ static py_tail_call_funcptr INSTRUCTION_TABLE[256] = {
733735
[UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_UNPACK_SEQUENCE_TWO_TUPLE,
734736
[WITH_EXCEPT_START] = _TAIL_CALL_WITH_EXCEPT_START,
735737
[YIELD_VALUE] = _TAIL_CALL_YIELD_VALUE,
736-
[121] = _TAIL_CALL_UNKNOWN_OPCODE,
737738
[122] = _TAIL_CALL_UNKNOWN_OPCODE,
738739
[123] = _TAIL_CALL_UNKNOWN_OPCODE,
739740
[124] = _TAIL_CALL_UNKNOWN_OPCODE,

cinderx/Interpreter/3.14/opcode.h

Lines changed: 54 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -78,59 +78,60 @@ extern "C" {
7878
#define DELETE_NAME 65
7979
#define DICT_MERGE 66
8080
#define DICT_UPDATE 67
81-
#define END_ASYNC_FOR 68
82-
#define EXTENDED_ARG 69
83-
#define FOR_ITER 70
84-
#define GET_AWAITABLE 71
85-
#define IMPORT_FROM 72
86-
#define IMPORT_NAME 73
87-
#define IS_OP 74
88-
#define JUMP_BACKWARD 75
89-
#define JUMP_BACKWARD_NO_INTERRUPT 76
90-
#define JUMP_FORWARD 77
91-
#define LIST_APPEND 78
92-
#define LIST_EXTEND 79
93-
#define LOAD_ATTR 80
94-
#define LOAD_COMMON_CONSTANT 81
95-
#define LOAD_CONST 82
96-
#define LOAD_DEREF 83
97-
#define LOAD_FAST 84
98-
#define LOAD_FAST_AND_CLEAR 85
99-
#define LOAD_FAST_BORROW 86
100-
#define LOAD_FAST_BORROW_LOAD_FAST_BORROW 87
101-
#define LOAD_FAST_CHECK 88
102-
#define LOAD_FAST_LOAD_FAST 89
103-
#define LOAD_FROM_DICT_OR_DEREF 90
104-
#define LOAD_FROM_DICT_OR_GLOBALS 91
105-
#define LOAD_GLOBAL 92
106-
#define LOAD_NAME 93
107-
#define LOAD_SMALL_INT 94
108-
#define LOAD_SPECIAL 95
109-
#define LOAD_SUPER_ATTR 96
110-
#define MAKE_CELL 97
111-
#define MAP_ADD 98
112-
#define MATCH_CLASS 99
113-
#define POP_JUMP_IF_FALSE 100
114-
#define POP_JUMP_IF_NONE 101
115-
#define POP_JUMP_IF_NOT_NONE 102
116-
#define POP_JUMP_IF_TRUE 103
117-
#define RAISE_VARARGS 104
118-
#define RERAISE 105
119-
#define SEND 106
120-
#define SET_ADD 107
121-
#define SET_FUNCTION_ATTRIBUTE 108
122-
#define SET_UPDATE 109
123-
#define STORE_ATTR 110
124-
#define STORE_DEREF 111
125-
#define STORE_FAST 112
126-
#define STORE_FAST_LOAD_FAST 113
127-
#define STORE_FAST_STORE_FAST 114
128-
#define STORE_GLOBAL 115
129-
#define STORE_NAME 116
130-
#define SWAP 117
131-
#define UNPACK_EX 118
132-
#define UNPACK_SEQUENCE 119
133-
#define YIELD_VALUE 120
81+
#define EAGER_IMPORT_NAME 68
82+
#define END_ASYNC_FOR 69
83+
#define EXTENDED_ARG 70
84+
#define FOR_ITER 71
85+
#define GET_AWAITABLE 72
86+
#define IMPORT_FROM 73
87+
#define IMPORT_NAME 74
88+
#define IS_OP 75
89+
#define JUMP_BACKWARD 76
90+
#define JUMP_BACKWARD_NO_INTERRUPT 77
91+
#define JUMP_FORWARD 78
92+
#define LIST_APPEND 79
93+
#define LIST_EXTEND 80
94+
#define LOAD_ATTR 81
95+
#define LOAD_COMMON_CONSTANT 82
96+
#define LOAD_CONST 83
97+
#define LOAD_DEREF 84
98+
#define LOAD_FAST 85
99+
#define LOAD_FAST_AND_CLEAR 86
100+
#define LOAD_FAST_BORROW 87
101+
#define LOAD_FAST_BORROW_LOAD_FAST_BORROW 88
102+
#define LOAD_FAST_CHECK 89
103+
#define LOAD_FAST_LOAD_FAST 90
104+
#define LOAD_FROM_DICT_OR_DEREF 91
105+
#define LOAD_FROM_DICT_OR_GLOBALS 92
106+
#define LOAD_GLOBAL 93
107+
#define LOAD_NAME 94
108+
#define LOAD_SMALL_INT 95
109+
#define LOAD_SPECIAL 96
110+
#define LOAD_SUPER_ATTR 97
111+
#define MAKE_CELL 98
112+
#define MAP_ADD 99
113+
#define MATCH_CLASS 100
114+
#define POP_JUMP_IF_FALSE 101
115+
#define POP_JUMP_IF_NONE 102
116+
#define POP_JUMP_IF_NOT_NONE 103
117+
#define POP_JUMP_IF_TRUE 104
118+
#define RAISE_VARARGS 105
119+
#define RERAISE 106
120+
#define SEND 107
121+
#define SET_ADD 108
122+
#define SET_FUNCTION_ATTRIBUTE 109
123+
#define SET_UPDATE 110
124+
#define STORE_ATTR 111
125+
#define STORE_DEREF 112
126+
#define STORE_FAST 113
127+
#define STORE_FAST_LOAD_FAST 114
128+
#define STORE_FAST_STORE_FAST 115
129+
#define STORE_GLOBAL 116
130+
#define STORE_NAME 117
131+
#define SWAP 118
132+
#define UNPACK_EX 119
133+
#define UNPACK_SEQUENCE 120
134+
#define YIELD_VALUE 121
134135
#define RESUME 128
135136
#define BINARY_OP_ADD_FLOAT 129
136137
#define BINARY_OP_ADD_INT 130

0 commit comments

Comments
 (0)