13#include "nuitka/prelude.h"
21#if PYTHON_VERSION >= 0x300
22static PyObject *Nuitka_CallGeneratorThrowMethod(PyObject *throw_method,
26#if PYTHON_VERSION >= 0x300
27static PyBaseExceptionObject *Nuitka_BaseExceptionSingleArg_new(PyThreadState *tstate, PyTypeObject *type,
29 PyBaseExceptionObject *result = (PyBaseExceptionObject *)type->tp_alloc(type, 0);
32 result->traceback = NULL;
34 result->context = NULL;
35 result->suppress_context = 0;
38 result->args = MAKE_TUPLE1(tstate, arg);
40 result->args = const_tuple_empty;
41 Py_INCREF_IMMORTAL(result->args);
47static PyObject *Nuitka_CreateStopIteration(PyThreadState *tstate, PyObject *value) {
48 if (value == Py_None) {
52 PyStopIterationObject *result =
53 (PyStopIterationObject *)Nuitka_BaseExceptionSingleArg_new(tstate, (PyTypeObject *)PyExc_StopIteration, value);
55#if PYTHON_VERSION >= 0x3c0
58 result->value = Py_None;
60 result->value = value;
64 result->value = value;
68 return (PyObject *)result;
73static void Nuitka_SetStopIterationValue(PyThreadState *tstate, PyObject *value) {
76#if PYTHON_VERSION <= 0x352
77 PyObject *stop_value = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, PyExc_StopIteration, value);
79 if (unlikely(stop_value == NULL)) {
83 SET_CURRENT_EXCEPTION_TYPE0_VALUE1(tstate, PyExc_StopIteration, stop_value);
84#elif PYTHON_VERSION < 0x3c0
85 if (likely(!PyTuple_Check(value) && !PyExceptionInstance_Check(value))) {
86 SET_CURRENT_EXCEPTION_TYPE0_VALUE0(tstate, PyExc_StopIteration, value);
89 Nuitka_CreateStopIteration(tstate, value)};
91 RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
96 RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
101static void SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(PyThreadState *tstate) {
102#if PYTHON_VERSION < 0x3c0
103 SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
107 RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
111#if PYTHON_VERSION >= 0x360
113#if PYTHON_VERSION >= 0x3c0
114static PyObject *Nuitka_CreateStopAsyncIteration(PyThreadState *tstate) {
115 return (PyObject *)Nuitka_BaseExceptionSingleArg_new(tstate, (PyTypeObject *)PyExc_StopAsyncIteration, NULL);
119static void SET_CURRENT_EXCEPTION_STOP_ASYNC_ITERATION(PyThreadState *tstate) {
120#if PYTHON_VERSION < 0x3c0
121 SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopAsyncIteration);
125 RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
131#if PYTHON_VERSION >= 0x3c0
132static PyObject *Nuitka_CreateGeneratorExit(PyThreadState *tstate) {
133 return (PyObject *)Nuitka_BaseExceptionSingleArg_new(tstate, (PyTypeObject *)PyExc_GeneratorExit, NULL);
137#if PYTHON_VERSION >= 0x300
138static void SET_CURRENT_EXCEPTION_GENERATOR_EXIT(PyThreadState *tstate) {
139#if PYTHON_VERSION < 0x3c0
140 SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_GeneratorExit);
144 RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
149#if PYTHON_VERSION >= 0x300
150static bool Nuitka_PyGen_FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue) {
151#if PYTHON_VERSION < 0x3c0
152 if (!HAS_ERROR_OCCURRED(tstate)) {
154 Py_INCREF_IMMORTAL(Py_None);
157 }
else if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, tstate->curexc_type, PyExc_StopIteration)) {
158 PyObject *value = NULL;
160 PyObject *exception_type, *exception_value;
161 PyTracebackObject *exception_tb;
163 FETCH_ERROR_OCCURRED(tstate, &exception_type, &exception_value, &exception_tb);
165 if (exception_value) {
167 if (PyObject_TypeCheck(exception_value, (PyTypeObject *)exception_type)) {
168 value = ((PyStopIterationObject *)exception_value)->value;
170 Py_DECREF(exception_value);
171 }
else if (exception_type == PyExc_StopIteration && !PyTuple_Check(exception_value)) {
172 value = exception_value;
174 NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, &exception_tb);
176 if (!PyObject_TypeCheck(exception_value, (PyTypeObject *)PyExc_StopIteration)) {
177 RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
182 value = ((PyStopIterationObject *)exception_value)->value;
185 Py_DECREF(exception_value);
189 Py_XDECREF(exception_type);
190 Py_XDECREF(exception_tb);
204 if (!HAS_ERROR_OCCURRED(tstate)) {
206 Py_INCREF_IMMORTAL(Py_None);
209 }
else if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, tstate->current_exception, PyExc_StopIteration)) {
210 PyObject *value = NULL;
212 PyObject *exc = tstate->current_exception;
213 tstate->current_exception = NULL;
215 value = Py_NewRef(((PyStopIterationObject *)exc)->value);
233#if PYTHON_VERSION >= 0x370
234static inline void Nuitka_PyGen_exc_state_clear(_PyErr_StackItem *exc_state) {
235#if PYTHON_VERSION < 0x3b0
236 PyObject *t = exc_state->exc_type;
238 PyObject *v = exc_state->exc_value;
239#if PYTHON_VERSION < 0x3b0
240 PyObject *tb = exc_state->exc_traceback;
243#if PYTHON_VERSION < 0x3b0
244 exc_state->exc_type = NULL;
246 exc_state->exc_value = NULL;
247#if PYTHON_VERSION < 0x3b0
248 exc_state->exc_traceback = NULL;
251#if PYTHON_VERSION < 0x3b0
255#if PYTHON_VERSION < 0x3b0
261#if PYTHON_VERSION >= 0x300
263#if PYTHON_VERSION < 0x3b0
264static inline bool Nuitka_PyFrameHasCompleted(PyFrameObject *
const frame) {
265#if PYTHON_VERSION < 0x3a0
266 return frame->f_stacktop == NULL;
268 return frame->f_state > FRAME_EXECUTING;
273#if PYTHON_VERSION >= 0x3d0
275static void Nuitka_PyErr_ChainStackItem(PyThreadState *tstate) {
276 assert(HAS_ERROR_OCCURRED(tstate));
278 _PyErr_StackItem *exc_info = tstate->exc_info;
279 PyObject *handled_exception = exc_info->exc_value;
281 if (handled_exception == NULL || handled_exception == Py_None) {
285 PyObject *current_exception = tstate->current_exception;
286 ASSERT_NORMALIZED_EXCEPTION_VALUE(current_exception);
288 if (handled_exception == current_exception) {
292 PyObject *chain_exception = current_exception;
295 PyObject *context = Nuitka_Exception_GetContext(chain_exception);
296 if (context == NULL) {
300 CHECK_OBJECT(context);
302 if (context == handled_exception) {
303 Nuitka_Exception_DeleteContext(chain_exception);
307 chain_exception = context;
310 Nuitka_Exception_SetContext(current_exception, handled_exception);
318static PyObject *Nuitka_PyGen_Send(PyThreadState *tstate, PyGenObject *gen, PyObject *arg) {
319#if PYTHON_VERSION >= 0x3a0
323 PySendResult res = PyIter_Send((PyObject *)gen, arg, &result);
327 if (result == NULL) {
328 SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
330 if (result != Py_None) {
331 Nuitka_SetStopIterationValue(tstate, result);
343 NUITKA_CANNOT_GET_HERE(
"invalid PYGEN_ result");
347 PyFrameObject *f = gen->gi_frame;
349#if PYTHON_VERSION >= 0x3b0
350 if (gen->gi_frame_state == FRAME_EXECUTING) {
351#elif PYTHON_VERSION >= 0x3a0
352 if (f != NULL && _PyFrame_IsExecuting(f)) {
354 if (unlikely(gen->gi_running)) {
356 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ValueError,
"generator already executing");
360#if PYTHON_VERSION < 0x3b0
361 if (f == NULL || Nuitka_PyFrameHasCompleted(f)) {
363 if (gen->gi_frame_state >= FRAME_COMPLETED) {
367 SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
373#if PYTHON_VERSION < 0x3a0
374 if (f->f_lasti == -1) {
375 if (unlikely(arg && arg != Py_None)) {
376 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
377 "can't send non-None value to a just-started generator");
383 PyObject *tmp = arg ? arg : Py_None;
386 *(f->f_stacktop++) = tmp;
390 assert(_PyFrame_IsRunnable(f));
391 assert(f->f_lasti >= 0 || ((
unsigned char *)PyBytes_AS_STRING(f->f_code->co_code))[0] == 129);
393 PyObject *gen_result = arg ? arg : Py_None;
394 Py_INCREF(gen_result);
395 gen->gi_frame->f_valuestack[gen->gi_frame->f_stackdepth] = gen_result;
396 gen->gi_frame->f_stackdepth++;
401 tstate = PyThreadState_GET();
402 Py_XINCREF(tstate->frame);
404 f->f_back = tstate->frame;
406#if PYTHON_VERSION < 0x3a0
409#if PYTHON_VERSION >= 0x370
410 gen->gi_exc_state.previous_item = tstate->exc_info;
411 tstate->exc_info = &gen->gi_exc_state;
414#if PYTHON_VERSION < 0x390
415 PyObject *result = PyEval_EvalFrameEx(f, 0);
417 PyObject *result = _PyEval_EvalFrame(tstate, f, 0);
420#if PYTHON_VERSION >= 0x370
421 tstate->exc_info = gen->gi_exc_state.previous_item;
422 gen->gi_exc_state.previous_item = NULL;
424#if PYTHON_VERSION < 0x3a0
435#if PYTHON_VERSION < 0x3a0
436 if (result && f->f_stacktop == NULL) {
437 if (result == Py_None) {
438 SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
440 PyObject *e = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, (PyObject *)PyExc_StopIteration, result);
442 if (likely(e != NULL)) {
443 SET_CURRENT_EXCEPTION_TYPE0_VALUE1(tstate, PyExc_StopIteration, e);
450 if (result == NULL || f->f_stacktop == NULL) {
451#if PYTHON_VERSION < 0x370
454 PyObject *type = f->f_exc_type;
455 PyObject *value = f->f_exc_value;
456 PyObject *traceback = f->f_exc_traceback;
457 f->f_exc_type = NULL;
458 f->f_exc_value = NULL;
459 f->f_exc_traceback = NULL;
462 Py_XDECREF(traceback);
464 Nuitka_PyGen_exc_state_clear(&gen->gi_exc_state);
468#if PYTHON_VERSION >= 0x300
469 gen->gi_frame->f_gen = NULL;
471 gen->gi_frame = NULL;
476 if (!_PyFrameHasCompleted(f)) {
479 assert(result == Py_None || !PyAsyncGen_CheckExact(gen));
481 if (result == Py_None && !PyAsyncGen_CheckExact(gen)) {
482 Py_DECREF_IMMORTAL(result);
486 if (PyErr_ExceptionMatches(PyExc_StopIteration)) {
487 const char *msg =
"generator raised StopIteration";
488 if (PyCoro_CheckExact(gen)) {
489 msg =
"coroutine raised StopIteration";
490 }
else if (PyAsyncGen_CheckExact(gen)) {
491 msg =
"async generator raised StopIteration";
493 _PyErr_FormatFromCause(PyExc_RuntimeError,
"%s", msg);
494 }
else if (PyAsyncGen_CheckExact(gen) && PyErr_ExceptionMatches(PyExc_StopAsyncIteration)) {
495 const char *msg =
"async generator raised StopAsyncIteration";
496 _PyErr_FormatFromCause(PyExc_RuntimeError,
"%s", msg);
502 Nuitka_PyGen_exc_state_clear(&gen->gi_exc_state);
504 gen->gi_frame->f_gen = NULL;
505 gen->gi_frame = NULL;
520#if PYTHON_VERSION >= 0x300
521#define NUITKA_UNCOMPILED_THROW_INTEGRATION 1
524#if NUITKA_UNCOMPILED_THROW_INTEGRATION
526static bool _Nuitka_Generator_check_throw(PyThreadState *tstate,
529#if PYTHON_VERSION < 0x3b0
535static PyObject *Nuitka_PyGen_gen_close(PyThreadState *tstate, PyGenObject *gen, PyObject *args);
536static int Nuitka_PyGen_gen_close_iter(PyThreadState *tstate, PyObject *yf);
541#if PYTHON_VERSION >= 0x3b0
544const uint8_t Nuitka_PyOpcode_Deopt[256] = {
545#if PYTHON_VERSION >= 0x3e0
575 [BINARY_OP] = BINARY_OP,
576 [BINARY_OP_ADD_FLOAT] = BINARY_OP,
577 [BINARY_OP_ADD_INT] = BINARY_OP,
578 [BINARY_OP_ADD_UNICODE] = BINARY_OP,
579 [BINARY_OP_EXTEND] = BINARY_OP,
580 [BINARY_OP_INPLACE_ADD_UNICODE] = BINARY_OP,
581 [BINARY_OP_MULTIPLY_FLOAT] = BINARY_OP,
582 [BINARY_OP_MULTIPLY_INT] = BINARY_OP,
583 [BINARY_OP_SUBSCR_DICT] = BINARY_OP,
584 [BINARY_OP_SUBSCR_GETITEM] = BINARY_OP,
585 [BINARY_OP_SUBSCR_LIST_INT] = BINARY_OP,
586 [BINARY_OP_SUBSCR_LIST_SLICE] = BINARY_OP,
587 [BINARY_OP_SUBSCR_STR_INT] = BINARY_OP,
588 [BINARY_OP_SUBSCR_TUPLE_INT] = BINARY_OP,
589 [BINARY_OP_SUBTRACT_FLOAT] = BINARY_OP,
590 [BINARY_OP_SUBTRACT_INT] = BINARY_OP,
591 [BINARY_SLICE] = BINARY_SLICE,
592 [BUILD_INTERPOLATION] = BUILD_INTERPOLATION,
593 [BUILD_LIST] = BUILD_LIST,
594 [BUILD_MAP] = BUILD_MAP,
595 [BUILD_SET] = BUILD_SET,
596 [BUILD_SLICE] = BUILD_SLICE,
597 [BUILD_STRING] = BUILD_STRING,
598 [BUILD_TEMPLATE] = BUILD_TEMPLATE,
599 [BUILD_TUPLE] = BUILD_TUPLE,
602 [CALL_ALLOC_AND_ENTER_INIT] = CALL,
603 [CALL_BOUND_METHOD_EXACT_ARGS] = CALL,
604 [CALL_BOUND_METHOD_GENERAL] = CALL,
605 [CALL_BUILTIN_CLASS] = CALL,
606 [CALL_BUILTIN_FAST] = CALL,
607 [CALL_BUILTIN_FAST_WITH_KEYWORDS] = CALL,
608 [CALL_BUILTIN_O] = CALL,
609 [CALL_FUNCTION_EX] = CALL_FUNCTION_EX,
610 [CALL_INTRINSIC_1] = CALL_INTRINSIC_1,
611 [CALL_INTRINSIC_2] = CALL_INTRINSIC_2,
612 [CALL_ISINSTANCE] = CALL,
614 [CALL_KW_BOUND_METHOD] = CALL_KW,
615 [CALL_KW_NON_PY] = CALL_KW,
616 [CALL_KW_PY] = CALL_KW,
618 [CALL_LIST_APPEND] = CALL,
619 [CALL_METHOD_DESCRIPTOR_FAST] = CALL,
620 [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = CALL,
621 [CALL_METHOD_DESCRIPTOR_NOARGS] = CALL,
622 [CALL_METHOD_DESCRIPTOR_O] = CALL,
623 [CALL_NON_PY_GENERAL] = CALL,
624 [CALL_PY_EXACT_ARGS] = CALL,
625 [CALL_PY_GENERAL] = CALL,
627 [CALL_TUPLE_1] = CALL,
628 [CALL_TYPE_1] = CALL,
629 [CHECK_EG_MATCH] = CHECK_EG_MATCH,
630 [CHECK_EXC_MATCH] = CHECK_EXC_MATCH,
631 [CLEANUP_THROW] = CLEANUP_THROW,
632 [COMPARE_OP] = COMPARE_OP,
633 [COMPARE_OP_FLOAT] = COMPARE_OP,
634 [COMPARE_OP_INT] = COMPARE_OP,
635 [COMPARE_OP_STR] = COMPARE_OP,
636 [CONTAINS_OP] = CONTAINS_OP,
637 [CONTAINS_OP_DICT] = CONTAINS_OP,
638 [CONTAINS_OP_SET] = CONTAINS_OP,
639 [CONVERT_VALUE] = CONVERT_VALUE,
641 [COPY_FREE_VARS] = COPY_FREE_VARS,
642 [DELETE_ATTR] = DELETE_ATTR,
643 [DELETE_DEREF] = DELETE_DEREF,
644 [DELETE_FAST] = DELETE_FAST,
645 [DELETE_GLOBAL] = DELETE_GLOBAL,
646 [DELETE_NAME] = DELETE_NAME,
647 [DELETE_SUBSCR] = DELETE_SUBSCR,
648 [DICT_MERGE] = DICT_MERGE,
649 [DICT_UPDATE] = DICT_UPDATE,
650 [END_ASYNC_FOR] = END_ASYNC_FOR,
652 [END_SEND] = END_SEND,
653 [ENTER_EXECUTOR] = ENTER_EXECUTOR,
654 [EXIT_INIT_CHECK] = EXIT_INIT_CHECK,
655 [EXTENDED_ARG] = EXTENDED_ARG,
656 [FORMAT_SIMPLE] = FORMAT_SIMPLE,
657 [FORMAT_WITH_SPEC] = FORMAT_WITH_SPEC,
658 [FOR_ITER] = FOR_ITER,
659 [FOR_ITER_GEN] = FOR_ITER,
660 [FOR_ITER_LIST] = FOR_ITER,
661 [FOR_ITER_RANGE] = FOR_ITER,
662 [FOR_ITER_TUPLE] = FOR_ITER,
663 [GET_AITER] = GET_AITER,
664 [GET_ANEXT] = GET_ANEXT,
665 [GET_AWAITABLE] = GET_AWAITABLE,
666 [GET_ITER] = GET_ITER,
668 [GET_YIELD_FROM_ITER] = GET_YIELD_FROM_ITER,
669 [IMPORT_FROM] = IMPORT_FROM,
670 [IMPORT_NAME] = IMPORT_NAME,
671 [INSTRUMENTED_CALL] = INSTRUMENTED_CALL,
672 [INSTRUMENTED_CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX,
673 [INSTRUMENTED_CALL_KW] = INSTRUMENTED_CALL_KW,
674 [INSTRUMENTED_END_ASYNC_FOR] = INSTRUMENTED_END_ASYNC_FOR,
675 [INSTRUMENTED_END_FOR] = INSTRUMENTED_END_FOR,
676 [INSTRUMENTED_END_SEND] = INSTRUMENTED_END_SEND,
677 [INSTRUMENTED_FOR_ITER] = INSTRUMENTED_FOR_ITER,
678 [INSTRUMENTED_INSTRUCTION] = INSTRUMENTED_INSTRUCTION,
679 [INSTRUMENTED_JUMP_BACKWARD] = INSTRUMENTED_JUMP_BACKWARD,
680 [INSTRUMENTED_JUMP_FORWARD] = INSTRUMENTED_JUMP_FORWARD,
681 [INSTRUMENTED_LINE] = INSTRUMENTED_LINE,
682 [INSTRUMENTED_LOAD_SUPER_ATTR] = INSTRUMENTED_LOAD_SUPER_ATTR,
683 [INSTRUMENTED_NOT_TAKEN] = INSTRUMENTED_NOT_TAKEN,
684 [INSTRUMENTED_POP_ITER] = INSTRUMENTED_POP_ITER,
685 [INSTRUMENTED_POP_JUMP_IF_FALSE] = INSTRUMENTED_POP_JUMP_IF_FALSE,
686 [INSTRUMENTED_POP_JUMP_IF_NONE] = INSTRUMENTED_POP_JUMP_IF_NONE,
687 [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
688 [INSTRUMENTED_POP_JUMP_IF_TRUE] = INSTRUMENTED_POP_JUMP_IF_TRUE,
689 [INSTRUMENTED_RESUME] = INSTRUMENTED_RESUME,
690 [INSTRUMENTED_RETURN_VALUE] = INSTRUMENTED_RETURN_VALUE,
691 [INSTRUMENTED_YIELD_VALUE] = INSTRUMENTED_YIELD_VALUE,
692 [INTERPRETER_EXIT] = INTERPRETER_EXIT,
694 [JUMP_BACKWARD] = JUMP_BACKWARD,
695 [JUMP_BACKWARD_JIT] = JUMP_BACKWARD,
696 [JUMP_BACKWARD_NO_INTERRUPT] = JUMP_BACKWARD_NO_INTERRUPT,
697 [JUMP_BACKWARD_NO_JIT] = JUMP_BACKWARD,
698 [JUMP_FORWARD] = JUMP_FORWARD,
699 [LIST_APPEND] = LIST_APPEND,
700 [LIST_EXTEND] = LIST_EXTEND,
701 [LOAD_ATTR] = LOAD_ATTR,
702 [LOAD_ATTR_CLASS] = LOAD_ATTR,
703 [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = LOAD_ATTR,
704 [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = LOAD_ATTR,
705 [LOAD_ATTR_INSTANCE_VALUE] = LOAD_ATTR,
706 [LOAD_ATTR_METHOD_LAZY_DICT] = LOAD_ATTR,
707 [LOAD_ATTR_METHOD_NO_DICT] = LOAD_ATTR,
708 [LOAD_ATTR_METHOD_WITH_VALUES] = LOAD_ATTR,
709 [LOAD_ATTR_MODULE] = LOAD_ATTR,
710 [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = LOAD_ATTR,
711 [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = LOAD_ATTR,
712 [LOAD_ATTR_PROPERTY] = LOAD_ATTR,
713 [LOAD_ATTR_SLOT] = LOAD_ATTR,
714 [LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
715 [LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
716 [LOAD_COMMON_CONSTANT] = LOAD_COMMON_CONSTANT,
717 [LOAD_CONST] = LOAD_CONST,
718 [LOAD_CONST_IMMORTAL] = LOAD_CONST,
719 [LOAD_CONST_MORTAL] = LOAD_CONST,
720 [LOAD_DEREF] = LOAD_DEREF,
721 [LOAD_FAST] = LOAD_FAST,
722 [LOAD_FAST_AND_CLEAR] = LOAD_FAST_AND_CLEAR,
723 [LOAD_FAST_BORROW] = LOAD_FAST_BORROW,
724 [LOAD_FAST_BORROW_LOAD_FAST_BORROW] = LOAD_FAST_BORROW_LOAD_FAST_BORROW,
725 [LOAD_FAST_CHECK] = LOAD_FAST_CHECK,
726 [LOAD_FAST_LOAD_FAST] = LOAD_FAST_LOAD_FAST,
727 [LOAD_FROM_DICT_OR_DEREF] = LOAD_FROM_DICT_OR_DEREF,
728 [LOAD_FROM_DICT_OR_GLOBALS] = LOAD_FROM_DICT_OR_GLOBALS,
729 [LOAD_GLOBAL] = LOAD_GLOBAL,
730 [LOAD_GLOBAL_BUILTIN] = LOAD_GLOBAL,
731 [LOAD_GLOBAL_MODULE] = LOAD_GLOBAL,
732 [LOAD_LOCALS] = LOAD_LOCALS,
733 [LOAD_NAME] = LOAD_NAME,
734 [LOAD_SMALL_INT] = LOAD_SMALL_INT,
735 [LOAD_SPECIAL] = LOAD_SPECIAL,
736 [LOAD_SUPER_ATTR] = LOAD_SUPER_ATTR,
737 [LOAD_SUPER_ATTR_ATTR] = LOAD_SUPER_ATTR,
738 [LOAD_SUPER_ATTR_METHOD] = LOAD_SUPER_ATTR,
739 [MAKE_CELL] = MAKE_CELL,
740 [MAKE_FUNCTION] = MAKE_FUNCTION,
742 [MATCH_CLASS] = MATCH_CLASS,
743 [MATCH_KEYS] = MATCH_KEYS,
744 [MATCH_MAPPING] = MATCH_MAPPING,
745 [MATCH_SEQUENCE] = MATCH_SEQUENCE,
747 [NOT_TAKEN] = NOT_TAKEN,
748 [POP_EXCEPT] = POP_EXCEPT,
749 [POP_ITER] = POP_ITER,
750 [POP_JUMP_IF_FALSE] = POP_JUMP_IF_FALSE,
751 [POP_JUMP_IF_NONE] = POP_JUMP_IF_NONE,
752 [POP_JUMP_IF_NOT_NONE] = POP_JUMP_IF_NOT_NONE,
753 [POP_JUMP_IF_TRUE] = POP_JUMP_IF_TRUE,
755 [PUSH_EXC_INFO] = PUSH_EXC_INFO,
756 [PUSH_NULL] = PUSH_NULL,
757 [RAISE_VARARGS] = RAISE_VARARGS,
759 [RESERVED] = RESERVED,
761 [RESUME_CHECK] = RESUME,
762 [RETURN_GENERATOR] = RETURN_GENERATOR,
763 [RETURN_VALUE] = RETURN_VALUE,
766 [SETUP_ANNOTATIONS] = SETUP_ANNOTATIONS,
768 [SET_FUNCTION_ATTRIBUTE] = SET_FUNCTION_ATTRIBUTE,
769 [SET_UPDATE] = SET_UPDATE,
770 [STORE_ATTR] = STORE_ATTR,
771 [STORE_ATTR_INSTANCE_VALUE] = STORE_ATTR,
772 [STORE_ATTR_SLOT] = STORE_ATTR,
773 [STORE_ATTR_WITH_HINT] = STORE_ATTR,
774 [STORE_DEREF] = STORE_DEREF,
775 [STORE_FAST] = STORE_FAST,
776 [STORE_FAST_LOAD_FAST] = STORE_FAST_LOAD_FAST,
777 [STORE_FAST_STORE_FAST] = STORE_FAST_STORE_FAST,
778 [STORE_GLOBAL] = STORE_GLOBAL,
779 [STORE_NAME] = STORE_NAME,
780 [STORE_SLICE] = STORE_SLICE,
781 [STORE_SUBSCR] = STORE_SUBSCR,
782 [STORE_SUBSCR_DICT] = STORE_SUBSCR,
783 [STORE_SUBSCR_LIST_INT] = STORE_SUBSCR,
786 [TO_BOOL_ALWAYS_TRUE] = TO_BOOL,
787 [TO_BOOL_BOOL] = TO_BOOL,
788 [TO_BOOL_INT] = TO_BOOL,
789 [TO_BOOL_LIST] = TO_BOOL,
790 [TO_BOOL_NONE] = TO_BOOL,
791 [TO_BOOL_STR] = TO_BOOL,
792 [UNARY_INVERT] = UNARY_INVERT,
793 [UNARY_NEGATIVE] = UNARY_NEGATIVE,
794 [UNARY_NOT] = UNARY_NOT,
795 [UNPACK_EX] = UNPACK_EX,
796 [UNPACK_SEQUENCE] = UNPACK_SEQUENCE,
797 [UNPACK_SEQUENCE_LIST] = UNPACK_SEQUENCE,
798 [UNPACK_SEQUENCE_TUPLE] = UNPACK_SEQUENCE,
799 [UNPACK_SEQUENCE_TWO_TUPLE] = UNPACK_SEQUENCE,
800 [WITH_EXCEPT_START] = WITH_EXCEPT_START,
801 [YIELD_VALUE] = YIELD_VALUE,
802#elif PYTHON_VERSION >= 0x3d0
803 [BEFORE_ASYNC_WITH] = BEFORE_ASYNC_WITH,
804 [BEFORE_WITH] = BEFORE_WITH,
805 [BINARY_OP] = BINARY_OP,
806 [BINARY_OP_ADD_FLOAT] = BINARY_OP,
807 [BINARY_OP_ADD_INT] = BINARY_OP,
808 [BINARY_OP_ADD_UNICODE] = BINARY_OP,
809 [BINARY_OP_INPLACE_ADD_UNICODE] = BINARY_OP,
810 [BINARY_OP_MULTIPLY_FLOAT] = BINARY_OP,
811 [BINARY_OP_MULTIPLY_INT] = BINARY_OP,
812 [BINARY_OP_SUBTRACT_FLOAT] = BINARY_OP,
813 [BINARY_OP_SUBTRACT_INT] = BINARY_OP,
814 [BINARY_SLICE] = BINARY_SLICE,
815 [BINARY_SUBSCR] = BINARY_SUBSCR,
816 [BINARY_SUBSCR_DICT] = BINARY_SUBSCR,
817 [BINARY_SUBSCR_GETITEM] = BINARY_SUBSCR,
818 [BINARY_SUBSCR_LIST_INT] = BINARY_SUBSCR,
819 [BINARY_SUBSCR_STR_INT] = BINARY_SUBSCR,
820 [BINARY_SUBSCR_TUPLE_INT] = BINARY_SUBSCR,
821 [BUILD_CONST_KEY_MAP] = BUILD_CONST_KEY_MAP,
822 [BUILD_LIST] = BUILD_LIST,
823 [BUILD_MAP] = BUILD_MAP,
824 [BUILD_SET] = BUILD_SET,
825 [BUILD_SLICE] = BUILD_SLICE,
826 [BUILD_STRING] = BUILD_STRING,
827 [BUILD_TUPLE] = BUILD_TUPLE,
830 [CALL_ALLOC_AND_ENTER_INIT] = CALL,
831 [CALL_BOUND_METHOD_EXACT_ARGS] = CALL,
832 [CALL_BOUND_METHOD_GENERAL] = CALL,
833 [CALL_BUILTIN_CLASS] = CALL,
834 [CALL_BUILTIN_FAST] = CALL,
835 [CALL_BUILTIN_FAST_WITH_KEYWORDS] = CALL,
836 [CALL_BUILTIN_O] = CALL,
837 [CALL_FUNCTION_EX] = CALL_FUNCTION_EX,
838 [CALL_INTRINSIC_1] = CALL_INTRINSIC_1,
839 [CALL_INTRINSIC_2] = CALL_INTRINSIC_2,
840 [CALL_ISINSTANCE] = CALL,
843 [CALL_LIST_APPEND] = CALL,
844 [CALL_METHOD_DESCRIPTOR_FAST] = CALL,
845 [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = CALL,
846 [CALL_METHOD_DESCRIPTOR_NOARGS] = CALL,
847 [CALL_METHOD_DESCRIPTOR_O] = CALL,
848 [CALL_NON_PY_GENERAL] = CALL,
849 [CALL_PY_EXACT_ARGS] = CALL,
850 [CALL_PY_GENERAL] = CALL,
852 [CALL_TUPLE_1] = CALL,
853 [CALL_TYPE_1] = CALL,
854 [CHECK_EG_MATCH] = CHECK_EG_MATCH,
855 [CHECK_EXC_MATCH] = CHECK_EXC_MATCH,
856 [CLEANUP_THROW] = CLEANUP_THROW,
857 [COMPARE_OP] = COMPARE_OP,
858 [COMPARE_OP_FLOAT] = COMPARE_OP,
859 [COMPARE_OP_INT] = COMPARE_OP,
860 [COMPARE_OP_STR] = COMPARE_OP,
861 [CONTAINS_OP] = CONTAINS_OP,
862 [CONTAINS_OP_DICT] = CONTAINS_OP,
863 [CONTAINS_OP_SET] = CONTAINS_OP,
864 [CONVERT_VALUE] = CONVERT_VALUE,
866 [COPY_FREE_VARS] = COPY_FREE_VARS,
867 [DELETE_ATTR] = DELETE_ATTR,
868 [DELETE_DEREF] = DELETE_DEREF,
869 [DELETE_FAST] = DELETE_FAST,
870 [DELETE_GLOBAL] = DELETE_GLOBAL,
871 [DELETE_NAME] = DELETE_NAME,
872 [DELETE_SUBSCR] = DELETE_SUBSCR,
873 [DICT_MERGE] = DICT_MERGE,
874 [DICT_UPDATE] = DICT_UPDATE,
875 [END_ASYNC_FOR] = END_ASYNC_FOR,
877 [END_SEND] = END_SEND,
878 [ENTER_EXECUTOR] = ENTER_EXECUTOR,
879 [EXIT_INIT_CHECK] = EXIT_INIT_CHECK,
880 [EXTENDED_ARG] = EXTENDED_ARG,
881 [FORMAT_SIMPLE] = FORMAT_SIMPLE,
882 [FORMAT_WITH_SPEC] = FORMAT_WITH_SPEC,
883 [FOR_ITER] = FOR_ITER,
884 [FOR_ITER_GEN] = FOR_ITER,
885 [FOR_ITER_LIST] = FOR_ITER,
886 [FOR_ITER_RANGE] = FOR_ITER,
887 [FOR_ITER_TUPLE] = FOR_ITER,
888 [GET_AITER] = GET_AITER,
889 [GET_ANEXT] = GET_ANEXT,
890 [GET_AWAITABLE] = GET_AWAITABLE,
891 [GET_ITER] = GET_ITER,
893 [GET_YIELD_FROM_ITER] = GET_YIELD_FROM_ITER,
894 [IMPORT_FROM] = IMPORT_FROM,
895 [IMPORT_NAME] = IMPORT_NAME,
896 [INSTRUMENTED_CALL] = INSTRUMENTED_CALL,
897 [INSTRUMENTED_CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX,
898 [INSTRUMENTED_CALL_KW] = INSTRUMENTED_CALL_KW,
899 [INSTRUMENTED_END_FOR] = INSTRUMENTED_END_FOR,
900 [INSTRUMENTED_END_SEND] = INSTRUMENTED_END_SEND,
901 [INSTRUMENTED_FOR_ITER] = INSTRUMENTED_FOR_ITER,
902 [INSTRUMENTED_INSTRUCTION] = INSTRUMENTED_INSTRUCTION,
903 [INSTRUMENTED_JUMP_BACKWARD] = INSTRUMENTED_JUMP_BACKWARD,
904 [INSTRUMENTED_JUMP_FORWARD] = INSTRUMENTED_JUMP_FORWARD,
905 [INSTRUMENTED_LINE] = INSTRUMENTED_LINE,
906 [INSTRUMENTED_LOAD_SUPER_ATTR] = INSTRUMENTED_LOAD_SUPER_ATTR,
907 [INSTRUMENTED_POP_JUMP_IF_FALSE] = INSTRUMENTED_POP_JUMP_IF_FALSE,
908 [INSTRUMENTED_POP_JUMP_IF_NONE] = INSTRUMENTED_POP_JUMP_IF_NONE,
909 [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
910 [INSTRUMENTED_POP_JUMP_IF_TRUE] = INSTRUMENTED_POP_JUMP_IF_TRUE,
911 [INSTRUMENTED_RESUME] = INSTRUMENTED_RESUME,
912 [INSTRUMENTED_RETURN_CONST] = INSTRUMENTED_RETURN_CONST,
913 [INSTRUMENTED_RETURN_VALUE] = INSTRUMENTED_RETURN_VALUE,
914 [INSTRUMENTED_YIELD_VALUE] = INSTRUMENTED_YIELD_VALUE,
915 [INTERPRETER_EXIT] = INTERPRETER_EXIT,
917 [JUMP_BACKWARD] = JUMP_BACKWARD,
918 [JUMP_BACKWARD_NO_INTERRUPT] = JUMP_BACKWARD_NO_INTERRUPT,
919 [JUMP_FORWARD] = JUMP_FORWARD,
920 [LIST_APPEND] = LIST_APPEND,
921 [LIST_EXTEND] = LIST_EXTEND,
922 [LOAD_ASSERTION_ERROR] = LOAD_ASSERTION_ERROR,
923 [LOAD_ATTR] = LOAD_ATTR,
924 [LOAD_ATTR_CLASS] = LOAD_ATTR,
925 [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = LOAD_ATTR,
926 [LOAD_ATTR_INSTANCE_VALUE] = LOAD_ATTR,
927 [LOAD_ATTR_METHOD_LAZY_DICT] = LOAD_ATTR,
928 [LOAD_ATTR_METHOD_NO_DICT] = LOAD_ATTR,
929 [LOAD_ATTR_METHOD_WITH_VALUES] = LOAD_ATTR,
930 [LOAD_ATTR_MODULE] = LOAD_ATTR,
931 [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = LOAD_ATTR,
932 [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = LOAD_ATTR,
933 [LOAD_ATTR_PROPERTY] = LOAD_ATTR,
934 [LOAD_ATTR_SLOT] = LOAD_ATTR,
935 [LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
936 [LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
937 [LOAD_CONST] = LOAD_CONST,
938 [LOAD_DEREF] = LOAD_DEREF,
939 [LOAD_FAST] = LOAD_FAST,
940 [LOAD_FAST_AND_CLEAR] = LOAD_FAST_AND_CLEAR,
941 [LOAD_FAST_CHECK] = LOAD_FAST_CHECK,
942 [LOAD_FAST_LOAD_FAST] = LOAD_FAST_LOAD_FAST,
943 [LOAD_FROM_DICT_OR_DEREF] = LOAD_FROM_DICT_OR_DEREF,
944 [LOAD_FROM_DICT_OR_GLOBALS] = LOAD_FROM_DICT_OR_GLOBALS,
945 [LOAD_GLOBAL] = LOAD_GLOBAL,
946 [LOAD_GLOBAL_BUILTIN] = LOAD_GLOBAL,
947 [LOAD_GLOBAL_MODULE] = LOAD_GLOBAL,
948 [LOAD_LOCALS] = LOAD_LOCALS,
949 [LOAD_NAME] = LOAD_NAME,
950 [LOAD_SUPER_ATTR] = LOAD_SUPER_ATTR,
951 [LOAD_SUPER_ATTR_ATTR] = LOAD_SUPER_ATTR,
952 [LOAD_SUPER_ATTR_METHOD] = LOAD_SUPER_ATTR,
953 [MAKE_CELL] = MAKE_CELL,
954 [MAKE_FUNCTION] = MAKE_FUNCTION,
956 [MATCH_CLASS] = MATCH_CLASS,
957 [MATCH_KEYS] = MATCH_KEYS,
958 [MATCH_MAPPING] = MATCH_MAPPING,
959 [MATCH_SEQUENCE] = MATCH_SEQUENCE,
961 [POP_EXCEPT] = POP_EXCEPT,
962 [POP_JUMP_IF_FALSE] = POP_JUMP_IF_FALSE,
963 [POP_JUMP_IF_NONE] = POP_JUMP_IF_NONE,
964 [POP_JUMP_IF_NOT_NONE] = POP_JUMP_IF_NOT_NONE,
965 [POP_JUMP_IF_TRUE] = POP_JUMP_IF_TRUE,
967 [PUSH_EXC_INFO] = PUSH_EXC_INFO,
968 [PUSH_NULL] = PUSH_NULL,
969 [RAISE_VARARGS] = RAISE_VARARGS,
971 [RESERVED] = RESERVED,
973 [RESUME_CHECK] = RESUME,
974 [RETURN_CONST] = RETURN_CONST,
975 [RETURN_GENERATOR] = RETURN_GENERATOR,
976 [RETURN_VALUE] = RETURN_VALUE,
979 [SETUP_ANNOTATIONS] = SETUP_ANNOTATIONS,
981 [SET_FUNCTION_ATTRIBUTE] = SET_FUNCTION_ATTRIBUTE,
982 [SET_UPDATE] = SET_UPDATE,
983 [STORE_ATTR] = STORE_ATTR,
984 [STORE_ATTR_INSTANCE_VALUE] = STORE_ATTR,
985 [STORE_ATTR_SLOT] = STORE_ATTR,
986 [STORE_ATTR_WITH_HINT] = STORE_ATTR,
987 [STORE_DEREF] = STORE_DEREF,
988 [STORE_FAST] = STORE_FAST,
989 [STORE_FAST_LOAD_FAST] = STORE_FAST_LOAD_FAST,
990 [STORE_FAST_STORE_FAST] = STORE_FAST_STORE_FAST,
991 [STORE_GLOBAL] = STORE_GLOBAL,
992 [STORE_NAME] = STORE_NAME,
993 [STORE_SLICE] = STORE_SLICE,
994 [STORE_SUBSCR] = STORE_SUBSCR,
995 [STORE_SUBSCR_DICT] = STORE_SUBSCR,
996 [STORE_SUBSCR_LIST_INT] = STORE_SUBSCR,
999 [TO_BOOL_ALWAYS_TRUE] = TO_BOOL,
1000 [TO_BOOL_BOOL] = TO_BOOL,
1001 [TO_BOOL_INT] = TO_BOOL,
1002 [TO_BOOL_LIST] = TO_BOOL,
1003 [TO_BOOL_NONE] = TO_BOOL,
1004 [TO_BOOL_STR] = TO_BOOL,
1005 [UNARY_INVERT] = UNARY_INVERT,
1006 [UNARY_NEGATIVE] = UNARY_NEGATIVE,
1007 [UNARY_NOT] = UNARY_NOT,
1008 [UNPACK_EX] = UNPACK_EX,
1009 [UNPACK_SEQUENCE] = UNPACK_SEQUENCE,
1010 [UNPACK_SEQUENCE_LIST] = UNPACK_SEQUENCE,
1011 [UNPACK_SEQUENCE_TUPLE] = UNPACK_SEQUENCE,
1012 [UNPACK_SEQUENCE_TWO_TUPLE] = UNPACK_SEQUENCE,
1013 [WITH_EXCEPT_START] = WITH_EXCEPT_START,
1014 [YIELD_VALUE] = YIELD_VALUE,
1015#elif PYTHON_VERSION >= 0x3c0
1016 [BEFORE_ASYNC_WITH] = BEFORE_ASYNC_WITH,
1017 [BEFORE_WITH] = BEFORE_WITH,
1018 [BINARY_OP] = BINARY_OP,
1019 [BINARY_OP_ADD_FLOAT] = BINARY_OP,
1020 [BINARY_OP_ADD_INT] = BINARY_OP,
1021 [BINARY_OP_ADD_UNICODE] = BINARY_OP,
1022 [BINARY_OP_INPLACE_ADD_UNICODE] = BINARY_OP,
1023 [BINARY_OP_MULTIPLY_FLOAT] = BINARY_OP,
1024 [BINARY_OP_MULTIPLY_INT] = BINARY_OP,
1025 [BINARY_OP_SUBTRACT_FLOAT] = BINARY_OP,
1026 [BINARY_OP_SUBTRACT_INT] = BINARY_OP,
1027 [BINARY_SLICE] = BINARY_SLICE,
1028 [BINARY_SUBSCR] = BINARY_SUBSCR,
1029 [BINARY_SUBSCR_DICT] = BINARY_SUBSCR,
1030 [BINARY_SUBSCR_GETITEM] = BINARY_SUBSCR,
1031 [BINARY_SUBSCR_LIST_INT] = BINARY_SUBSCR,
1032 [BINARY_SUBSCR_TUPLE_INT] = BINARY_SUBSCR,
1033 [BUILD_CONST_KEY_MAP] = BUILD_CONST_KEY_MAP,
1034 [BUILD_LIST] = BUILD_LIST,
1035 [BUILD_MAP] = BUILD_MAP,
1036 [BUILD_SET] = BUILD_SET,
1037 [BUILD_SLICE] = BUILD_SLICE,
1038 [BUILD_STRING] = BUILD_STRING,
1039 [BUILD_TUPLE] = BUILD_TUPLE,
1042 [CALL_BOUND_METHOD_EXACT_ARGS] = CALL,
1043 [CALL_BUILTIN_CLASS] = CALL,
1044 [CALL_BUILTIN_FAST_WITH_KEYWORDS] = CALL,
1045 [CALL_FUNCTION_EX] = CALL_FUNCTION_EX,
1046 [CALL_INTRINSIC_1] = CALL_INTRINSIC_1,
1047 [CALL_INTRINSIC_2] = CALL_INTRINSIC_2,
1048 [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = CALL,
1049 [CALL_NO_KW_BUILTIN_FAST] = CALL,
1050 [CALL_NO_KW_BUILTIN_O] = CALL,
1051 [CALL_NO_KW_ISINSTANCE] = CALL,
1052 [CALL_NO_KW_LEN] = CALL,
1053 [CALL_NO_KW_LIST_APPEND] = CALL,
1054 [CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = CALL,
1055 [CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = CALL,
1056 [CALL_NO_KW_METHOD_DESCRIPTOR_O] = CALL,
1057 [CALL_NO_KW_STR_1] = CALL,
1058 [CALL_NO_KW_TUPLE_1] = CALL,
1059 [CALL_NO_KW_TYPE_1] = CALL,
1060 [CALL_PY_EXACT_ARGS] = CALL,
1061 [CALL_PY_WITH_DEFAULTS] = CALL,
1062 [CHECK_EG_MATCH] = CHECK_EG_MATCH,
1063 [CHECK_EXC_MATCH] = CHECK_EXC_MATCH,
1064 [CLEANUP_THROW] = CLEANUP_THROW,
1065 [COMPARE_OP] = COMPARE_OP,
1066 [COMPARE_OP_FLOAT] = COMPARE_OP,
1067 [COMPARE_OP_INT] = COMPARE_OP,
1068 [COMPARE_OP_STR] = COMPARE_OP,
1069 [CONTAINS_OP] = CONTAINS_OP,
1071 [COPY_FREE_VARS] = COPY_FREE_VARS,
1072 [DELETE_ATTR] = DELETE_ATTR,
1073 [DELETE_DEREF] = DELETE_DEREF,
1074 [DELETE_FAST] = DELETE_FAST,
1075 [DELETE_GLOBAL] = DELETE_GLOBAL,
1076 [DELETE_NAME] = DELETE_NAME,
1077 [DELETE_SUBSCR] = DELETE_SUBSCR,
1078 [DICT_MERGE] = DICT_MERGE,
1079 [DICT_UPDATE] = DICT_UPDATE,
1080 [END_ASYNC_FOR] = END_ASYNC_FOR,
1081 [END_FOR] = END_FOR,
1082 [END_SEND] = END_SEND,
1083 [EXTENDED_ARG] = EXTENDED_ARG,
1084 [FORMAT_VALUE] = FORMAT_VALUE,
1085 [FOR_ITER] = FOR_ITER,
1086 [FOR_ITER_GEN] = FOR_ITER,
1087 [FOR_ITER_LIST] = FOR_ITER,
1088 [FOR_ITER_RANGE] = FOR_ITER,
1089 [FOR_ITER_TUPLE] = FOR_ITER,
1090 [GET_AITER] = GET_AITER,
1091 [GET_ANEXT] = GET_ANEXT,
1092 [GET_AWAITABLE] = GET_AWAITABLE,
1093 [GET_ITER] = GET_ITER,
1094 [GET_LEN] = GET_LEN,
1095 [GET_YIELD_FROM_ITER] = GET_YIELD_FROM_ITER,
1096 [IMPORT_FROM] = IMPORT_FROM,
1097 [IMPORT_NAME] = IMPORT_NAME,
1098 [INSTRUMENTED_CALL] = INSTRUMENTED_CALL,
1099 [INSTRUMENTED_CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX,
1100 [INSTRUMENTED_END_FOR] = INSTRUMENTED_END_FOR,
1101 [INSTRUMENTED_END_SEND] = INSTRUMENTED_END_SEND,
1102 [INSTRUMENTED_FOR_ITER] = INSTRUMENTED_FOR_ITER,
1103 [INSTRUMENTED_INSTRUCTION] = INSTRUMENTED_INSTRUCTION,
1104 [INSTRUMENTED_JUMP_BACKWARD] = INSTRUMENTED_JUMP_BACKWARD,
1105 [INSTRUMENTED_JUMP_FORWARD] = INSTRUMENTED_JUMP_FORWARD,
1106 [INSTRUMENTED_LINE] = INSTRUMENTED_LINE,
1107 [INSTRUMENTED_LOAD_SUPER_ATTR] = INSTRUMENTED_LOAD_SUPER_ATTR,
1108 [INSTRUMENTED_POP_JUMP_IF_FALSE] = INSTRUMENTED_POP_JUMP_IF_FALSE,
1109 [INSTRUMENTED_POP_JUMP_IF_NONE] = INSTRUMENTED_POP_JUMP_IF_NONE,
1110 [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
1111 [INSTRUMENTED_POP_JUMP_IF_TRUE] = INSTRUMENTED_POP_JUMP_IF_TRUE,
1112 [INSTRUMENTED_RESUME] = INSTRUMENTED_RESUME,
1113 [INSTRUMENTED_RETURN_CONST] = INSTRUMENTED_RETURN_CONST,
1114 [INSTRUMENTED_RETURN_VALUE] = INSTRUMENTED_RETURN_VALUE,
1115 [INSTRUMENTED_YIELD_VALUE] = INSTRUMENTED_YIELD_VALUE,
1116 [INTERPRETER_EXIT] = INTERPRETER_EXIT,
1118 [JUMP_BACKWARD] = JUMP_BACKWARD,
1119 [JUMP_BACKWARD_NO_INTERRUPT] = JUMP_BACKWARD_NO_INTERRUPT,
1120 [JUMP_FORWARD] = JUMP_FORWARD,
1121 [KW_NAMES] = KW_NAMES,
1122 [LIST_APPEND] = LIST_APPEND,
1123 [LIST_EXTEND] = LIST_EXTEND,
1124 [LOAD_ASSERTION_ERROR] = LOAD_ASSERTION_ERROR,
1125 [LOAD_ATTR] = LOAD_ATTR,
1126 [LOAD_ATTR_CLASS] = LOAD_ATTR,
1127 [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = LOAD_ATTR,
1128 [LOAD_ATTR_INSTANCE_VALUE] = LOAD_ATTR,
1129 [LOAD_ATTR_METHOD_LAZY_DICT] = LOAD_ATTR,
1130 [LOAD_ATTR_METHOD_NO_DICT] = LOAD_ATTR,
1131 [LOAD_ATTR_METHOD_WITH_VALUES] = LOAD_ATTR,
1132 [LOAD_ATTR_MODULE] = LOAD_ATTR,
1133 [LOAD_ATTR_PROPERTY] = LOAD_ATTR,
1134 [LOAD_ATTR_SLOT] = LOAD_ATTR,
1135 [LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
1136 [LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
1137 [LOAD_CLOSURE] = LOAD_CLOSURE,
1138 [LOAD_CONST] = LOAD_CONST,
1139 [LOAD_CONST__LOAD_FAST] = LOAD_CONST,
1140 [LOAD_DEREF] = LOAD_DEREF,
1141 [LOAD_FAST] = LOAD_FAST,
1142 [LOAD_FAST_AND_CLEAR] = LOAD_FAST_AND_CLEAR,
1143 [LOAD_FAST_CHECK] = LOAD_FAST_CHECK,
1144 [LOAD_FAST__LOAD_CONST] = LOAD_FAST,
1145 [LOAD_FAST__LOAD_FAST] = LOAD_FAST,
1146 [LOAD_FROM_DICT_OR_DEREF] = LOAD_FROM_DICT_OR_DEREF,
1147 [LOAD_FROM_DICT_OR_GLOBALS] = LOAD_FROM_DICT_OR_GLOBALS,
1148 [LOAD_GLOBAL] = LOAD_GLOBAL,
1149 [LOAD_GLOBAL_BUILTIN] = LOAD_GLOBAL,
1150 [LOAD_GLOBAL_MODULE] = LOAD_GLOBAL,
1151 [LOAD_LOCALS] = LOAD_LOCALS,
1152 [LOAD_NAME] = LOAD_NAME,
1153 [LOAD_SUPER_ATTR] = LOAD_SUPER_ATTR,
1154 [LOAD_SUPER_ATTR_ATTR] = LOAD_SUPER_ATTR,
1155 [LOAD_SUPER_ATTR_METHOD] = LOAD_SUPER_ATTR,
1156 [MAKE_CELL] = MAKE_CELL,
1157 [MAKE_FUNCTION] = MAKE_FUNCTION,
1158 [MAP_ADD] = MAP_ADD,
1159 [MATCH_CLASS] = MATCH_CLASS,
1160 [MATCH_KEYS] = MATCH_KEYS,
1161 [MATCH_MAPPING] = MATCH_MAPPING,
1162 [MATCH_SEQUENCE] = MATCH_SEQUENCE,
1164 [POP_EXCEPT] = POP_EXCEPT,
1165 [POP_JUMP_IF_FALSE] = POP_JUMP_IF_FALSE,
1166 [POP_JUMP_IF_NONE] = POP_JUMP_IF_NONE,
1167 [POP_JUMP_IF_NOT_NONE] = POP_JUMP_IF_NOT_NONE,
1168 [POP_JUMP_IF_TRUE] = POP_JUMP_IF_TRUE,
1169 [POP_TOP] = POP_TOP,
1170 [PUSH_EXC_INFO] = PUSH_EXC_INFO,
1171 [PUSH_NULL] = PUSH_NULL,
1172 [RAISE_VARARGS] = RAISE_VARARGS,
1173 [RERAISE] = RERAISE,
1174 [RESERVED] = RESERVED,
1176 [RETURN_CONST] = RETURN_CONST,
1177 [RETURN_GENERATOR] = RETURN_GENERATOR,
1178 [RETURN_VALUE] = RETURN_VALUE,
1181 [SETUP_ANNOTATIONS] = SETUP_ANNOTATIONS,
1182 [SET_ADD] = SET_ADD,
1183 [SET_UPDATE] = SET_UPDATE,
1184 [STORE_ATTR] = STORE_ATTR,
1185 [STORE_ATTR_INSTANCE_VALUE] = STORE_ATTR,
1186 [STORE_ATTR_SLOT] = STORE_ATTR,
1187 [STORE_ATTR_WITH_HINT] = STORE_ATTR,
1188 [STORE_DEREF] = STORE_DEREF,
1189 [STORE_FAST] = STORE_FAST,
1190 [STORE_FAST__LOAD_FAST] = STORE_FAST,
1191 [STORE_FAST__STORE_FAST] = STORE_FAST,
1192 [STORE_GLOBAL] = STORE_GLOBAL,
1193 [STORE_NAME] = STORE_NAME,
1194 [STORE_SLICE] = STORE_SLICE,
1195 [STORE_SUBSCR] = STORE_SUBSCR,
1196 [STORE_SUBSCR_DICT] = STORE_SUBSCR,
1197 [STORE_SUBSCR_LIST_INT] = STORE_SUBSCR,
1199 [UNARY_INVERT] = UNARY_INVERT,
1200 [UNARY_NEGATIVE] = UNARY_NEGATIVE,
1201 [UNARY_NOT] = UNARY_NOT,
1202 [UNPACK_EX] = UNPACK_EX,
1203 [UNPACK_SEQUENCE] = UNPACK_SEQUENCE,
1204 [UNPACK_SEQUENCE_LIST] = UNPACK_SEQUENCE,
1205 [UNPACK_SEQUENCE_TUPLE] = UNPACK_SEQUENCE,
1206 [UNPACK_SEQUENCE_TWO_TUPLE] = UNPACK_SEQUENCE,
1207 [WITH_EXCEPT_START] = WITH_EXCEPT_START,
1208 [YIELD_VALUE] = YIELD_VALUE,
1210 [ASYNC_GEN_WRAP] = ASYNC_GEN_WRAP,
1211 [BEFORE_ASYNC_WITH] = BEFORE_ASYNC_WITH,
1212 [BEFORE_WITH] = BEFORE_WITH,
1213 [BINARY_OP] = BINARY_OP,
1214 [BINARY_OP_ADAPTIVE] = BINARY_OP,
1215 [BINARY_OP_ADD_FLOAT] = BINARY_OP,
1216 [BINARY_OP_ADD_INT] = BINARY_OP,
1217 [BINARY_OP_ADD_UNICODE] = BINARY_OP,
1218 [BINARY_OP_INPLACE_ADD_UNICODE] = BINARY_OP,
1219 [BINARY_OP_MULTIPLY_FLOAT] = BINARY_OP,
1220 [BINARY_OP_MULTIPLY_INT] = BINARY_OP,
1221 [BINARY_OP_SUBTRACT_FLOAT] = BINARY_OP,
1222 [BINARY_OP_SUBTRACT_INT] = BINARY_OP,
1223 [BINARY_SUBSCR] = BINARY_SUBSCR,
1224 [BINARY_SUBSCR_ADAPTIVE] = BINARY_SUBSCR,
1225 [BINARY_SUBSCR_DICT] = BINARY_SUBSCR,
1226 [BINARY_SUBSCR_GETITEM] = BINARY_SUBSCR,
1227 [BINARY_SUBSCR_LIST_INT] = BINARY_SUBSCR,
1228 [BINARY_SUBSCR_TUPLE_INT] = BINARY_SUBSCR,
1229 [BUILD_CONST_KEY_MAP] = BUILD_CONST_KEY_MAP,
1230 [BUILD_LIST] = BUILD_LIST,
1231 [BUILD_MAP] = BUILD_MAP,
1232 [BUILD_SET] = BUILD_SET,
1233 [BUILD_SLICE] = BUILD_SLICE,
1234 [BUILD_STRING] = BUILD_STRING,
1235 [BUILD_TUPLE] = BUILD_TUPLE,
1238 [CALL_ADAPTIVE] = CALL,
1239 [CALL_FUNCTION_EX] = CALL_FUNCTION_EX,
1240 [CALL_PY_EXACT_ARGS] = CALL,
1241 [CALL_PY_WITH_DEFAULTS] = CALL,
1242 [CHECK_EG_MATCH] = CHECK_EG_MATCH,
1243 [CHECK_EXC_MATCH] = CHECK_EXC_MATCH,
1244 [COMPARE_OP] = COMPARE_OP,
1245 [COMPARE_OP_ADAPTIVE] = COMPARE_OP,
1246 [COMPARE_OP_FLOAT_JUMP] = COMPARE_OP,
1247 [COMPARE_OP_INT_JUMP] = COMPARE_OP,
1248 [COMPARE_OP_STR_JUMP] = COMPARE_OP,
1249 [CONTAINS_OP] = CONTAINS_OP,
1251 [COPY_FREE_VARS] = COPY_FREE_VARS,
1252 [DELETE_ATTR] = DELETE_ATTR,
1253 [DELETE_DEREF] = DELETE_DEREF,
1254 [DELETE_FAST] = DELETE_FAST,
1255 [DELETE_GLOBAL] = DELETE_GLOBAL,
1256 [DELETE_NAME] = DELETE_NAME,
1257 [DELETE_SUBSCR] = DELETE_SUBSCR,
1258 [DICT_MERGE] = DICT_MERGE,
1259 [DICT_UPDATE] = DICT_UPDATE,
1260 [END_ASYNC_FOR] = END_ASYNC_FOR,
1261 [EXTENDED_ARG] = EXTENDED_ARG,
1262 [EXTENDED_ARG_QUICK] = EXTENDED_ARG,
1263 [FORMAT_VALUE] = FORMAT_VALUE,
1264 [FOR_ITER] = FOR_ITER,
1265 [GET_AITER] = GET_AITER,
1266 [GET_ANEXT] = GET_ANEXT,
1267 [GET_AWAITABLE] = GET_AWAITABLE,
1268 [GET_ITER] = GET_ITER,
1269 [GET_LEN] = GET_LEN,
1270 [GET_YIELD_FROM_ITER] = GET_YIELD_FROM_ITER,
1271 [IMPORT_FROM] = IMPORT_FROM,
1272 [IMPORT_NAME] = IMPORT_NAME,
1273 [IMPORT_STAR] = IMPORT_STAR,
1275 [JUMP_BACKWARD] = JUMP_BACKWARD,
1276 [JUMP_BACKWARD_NO_INTERRUPT] = JUMP_BACKWARD_NO_INTERRUPT,
1277 [JUMP_BACKWARD_QUICK] = JUMP_BACKWARD,
1278 [JUMP_FORWARD] = JUMP_FORWARD,
1279 [JUMP_IF_FALSE_OR_POP] = JUMP_IF_FALSE_OR_POP,
1280 [JUMP_IF_TRUE_OR_POP] = JUMP_IF_TRUE_OR_POP,
1281 [KW_NAMES] = KW_NAMES,
1282 [LIST_APPEND] = LIST_APPEND,
1283 [LIST_EXTEND] = LIST_EXTEND,
1284 [LIST_TO_TUPLE] = LIST_TO_TUPLE,
1285 [LOAD_ASSERTION_ERROR] = LOAD_ASSERTION_ERROR,
1286 [LOAD_ATTR] = LOAD_ATTR,
1287 [LOAD_ATTR_ADAPTIVE] = LOAD_ATTR,
1288 [LOAD_ATTR_INSTANCE_VALUE] = LOAD_ATTR,
1289 [LOAD_ATTR_MODULE] = LOAD_ATTR,
1290 [LOAD_ATTR_SLOT] = LOAD_ATTR,
1291 [LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
1292 [LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
1293 [LOAD_CLASSDEREF] = LOAD_CLASSDEREF,
1294 [LOAD_CLOSURE] = LOAD_CLOSURE,
1295 [LOAD_CONST] = LOAD_CONST,
1296 [LOAD_CONST__LOAD_FAST] = LOAD_CONST,
1297 [LOAD_DEREF] = LOAD_DEREF,
1298 [LOAD_FAST] = LOAD_FAST,
1299 [LOAD_FAST__LOAD_CONST] = LOAD_FAST,
1300 [LOAD_FAST__LOAD_FAST] = LOAD_FAST,
1301 [LOAD_GLOBAL] = LOAD_GLOBAL,
1302 [LOAD_GLOBAL_ADAPTIVE] = LOAD_GLOBAL,
1303 [LOAD_GLOBAL_BUILTIN] = LOAD_GLOBAL,
1304 [LOAD_GLOBAL_MODULE] = LOAD_GLOBAL,
1305 [LOAD_METHOD] = LOAD_METHOD,
1306 [LOAD_METHOD_ADAPTIVE] = LOAD_METHOD,
1307 [LOAD_METHOD_CLASS] = LOAD_METHOD,
1308 [LOAD_METHOD_MODULE] = LOAD_METHOD,
1309 [LOAD_METHOD_NO_DICT] = LOAD_METHOD,
1310 [LOAD_METHOD_WITH_DICT] = LOAD_METHOD,
1311 [LOAD_METHOD_WITH_VALUES] = LOAD_METHOD,
1312 [LOAD_NAME] = LOAD_NAME,
1313 [MAKE_CELL] = MAKE_CELL,
1314 [MAKE_FUNCTION] = MAKE_FUNCTION,
1315 [MAP_ADD] = MAP_ADD,
1316 [MATCH_CLASS] = MATCH_CLASS,
1317 [MATCH_KEYS] = MATCH_KEYS,
1318 [MATCH_MAPPING] = MATCH_MAPPING,
1319 [MATCH_SEQUENCE] = MATCH_SEQUENCE,
1321 [POP_EXCEPT] = POP_EXCEPT,
1322 [POP_JUMP_BACKWARD_IF_FALSE] = POP_JUMP_BACKWARD_IF_FALSE,
1323 [POP_JUMP_BACKWARD_IF_NONE] = POP_JUMP_BACKWARD_IF_NONE,
1324 [POP_JUMP_BACKWARD_IF_NOT_NONE] = POP_JUMP_BACKWARD_IF_NOT_NONE,
1325 [POP_JUMP_BACKWARD_IF_TRUE] = POP_JUMP_BACKWARD_IF_TRUE,
1326 [POP_JUMP_FORWARD_IF_FALSE] = POP_JUMP_FORWARD_IF_FALSE,
1327 [POP_JUMP_FORWARD_IF_NONE] = POP_JUMP_FORWARD_IF_NONE,
1328 [POP_JUMP_FORWARD_IF_NOT_NONE] = POP_JUMP_FORWARD_IF_NOT_NONE,
1329 [POP_JUMP_FORWARD_IF_TRUE] = POP_JUMP_FORWARD_IF_TRUE,
1330 [POP_TOP] = POP_TOP,
1331 [PRECALL] = PRECALL,
1332 [PRECALL_ADAPTIVE] = PRECALL,
1333 [PRECALL_BOUND_METHOD] = PRECALL,
1334 [PRECALL_BUILTIN_CLASS] = PRECALL,
1335 [PRECALL_BUILTIN_FAST_WITH_KEYWORDS] = PRECALL,
1336 [PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = PRECALL,
1337 [PRECALL_NO_KW_BUILTIN_FAST] = PRECALL,
1338 [PRECALL_NO_KW_BUILTIN_O] = PRECALL,
1339 [PRECALL_NO_KW_ISINSTANCE] = PRECALL,
1340 [PRECALL_NO_KW_LEN] = PRECALL,
1341 [PRECALL_NO_KW_LIST_APPEND] = PRECALL,
1342 [PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST] = PRECALL,
1343 [PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = PRECALL,
1344 [PRECALL_NO_KW_METHOD_DESCRIPTOR_O] = PRECALL,
1345 [PRECALL_NO_KW_STR_1] = PRECALL,
1346 [PRECALL_NO_KW_TUPLE_1] = PRECALL,
1347 [PRECALL_NO_KW_TYPE_1] = PRECALL,
1348 [PRECALL_PYFUNC] = PRECALL,
1349 [PREP_RERAISE_STAR] = PREP_RERAISE_STAR,
1350 [PRINT_EXPR] = PRINT_EXPR,
1351 [PUSH_EXC_INFO] = PUSH_EXC_INFO,
1352 [PUSH_NULL] = PUSH_NULL,
1353 [RAISE_VARARGS] = RAISE_VARARGS,
1354 [RERAISE] = RERAISE,
1356 [RESUME_QUICK] = RESUME,
1357 [RETURN_GENERATOR] = RETURN_GENERATOR,
1358 [RETURN_VALUE] = RETURN_VALUE,
1360 [SETUP_ANNOTATIONS] = SETUP_ANNOTATIONS,
1361 [SET_ADD] = SET_ADD,
1362 [SET_UPDATE] = SET_UPDATE,
1363 [STORE_ATTR] = STORE_ATTR,
1364 [STORE_ATTR_ADAPTIVE] = STORE_ATTR,
1365 [STORE_ATTR_INSTANCE_VALUE] = STORE_ATTR,
1366 [STORE_ATTR_SLOT] = STORE_ATTR,
1367 [STORE_ATTR_WITH_HINT] = STORE_ATTR,
1368 [STORE_DEREF] = STORE_DEREF,
1369 [STORE_FAST] = STORE_FAST,
1370 [STORE_FAST__LOAD_FAST] = STORE_FAST,
1371 [STORE_FAST__STORE_FAST] = STORE_FAST,
1372 [STORE_GLOBAL] = STORE_GLOBAL,
1373 [STORE_NAME] = STORE_NAME,
1374 [STORE_SUBSCR] = STORE_SUBSCR,
1375 [STORE_SUBSCR_ADAPTIVE] = STORE_SUBSCR,
1376 [STORE_SUBSCR_DICT] = STORE_SUBSCR,
1377 [STORE_SUBSCR_LIST_INT] = STORE_SUBSCR,
1379 [UNARY_INVERT] = UNARY_INVERT,
1380 [UNARY_NEGATIVE] = UNARY_NEGATIVE,
1381 [UNARY_NOT] = UNARY_NOT,
1382 [UNARY_POSITIVE] = UNARY_POSITIVE,
1383 [UNPACK_EX] = UNPACK_EX,
1384 [UNPACK_SEQUENCE] = UNPACK_SEQUENCE,
1385 [UNPACK_SEQUENCE_ADAPTIVE] = UNPACK_SEQUENCE,
1386 [UNPACK_SEQUENCE_LIST] = UNPACK_SEQUENCE,
1387 [UNPACK_SEQUENCE_TUPLE] = UNPACK_SEQUENCE,
1388 [UNPACK_SEQUENCE_TWO_TUPLE] = UNPACK_SEQUENCE,
1389 [WITH_EXCEPT_START] = WITH_EXCEPT_START,
1390 [YIELD_VALUE] = YIELD_VALUE,
1394#if PYTHON_VERSION >= 0x3d0
1395static inline bool _Nuitka_is_resume(_Py_CODEUNIT *instr) {
1396 uint8_t code = FT_ATOMIC_LOAD_UINT8_RELAXED(instr->op.code);
1397 return (code == RESUME || code == RESUME_CHECK || code == INSTRUMENTED_RESUME);
1401PyObject *Nuitka_PyGen_yf(PyGenObject *gen) {
1402#if PYTHON_VERSION >= 0x3e0
1403 if (gen->gi_frame_state == FRAME_SUSPENDED_YIELD_FROM) {
1404 _PyInterpreterFrame *frame = &gen->gi_iframe;
1405 return PyStackRef_AsPyObjectNew(_PyFrame_StackPeek(frame));
1408#elif PYTHON_VERSION >= 0x3d0
1409 if (gen->gi_frame_state == FRAME_SUSPENDED_YIELD_FROM) {
1410 _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
1411 assert(_Nuitka_is_resume(frame->instr_ptr));
1412 assert((frame->instr_ptr->op.arg & RESUME_OPARG_LOCATION_MASK) >= RESUME_AFTER_YIELD_FROM);
1413 return Py_NewRef(_PyFrame_StackPeek(frame));
1417 PyObject *yf = NULL;
1419 if (gen->gi_frame_state < FRAME_CLEARED) {
1420 _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
1422 if (gen->gi_frame_state == FRAME_CREATED) {
1426 _Py_CODEUNIT next = frame->prev_instr[1];
1428 if (Nuitka_PyOpcode_Deopt[_Py_OPCODE(next)] != RESUME || _Py_OPARG(next) < 2) {
1432 yf = _PyFrame_StackPeek(frame);
1441#if PYTHON_VERSION < 0x3c0
1443static PyFrameObject *_Nuitka_PyFrame_New_NoTrack(PyCodeObject *code) {
1444 int slots = code->co_nlocalsplus + code->co_stacksize;
1446 PyFrameObject *f = PyObject_GC_NewVar(PyFrameObject, &PyFrame_Type, slots);
1454 f->f_trace_lines = 1;
1455 f->f_trace_opcodes = 0;
1456 f->f_fast_as_locals = 0;
1463static PyFrameObject *_Nuitka_PyFrame_MakeAndSetFrameObject(PyThreadState *tstate, _PyInterpreterFrame *frame) {
1464 assert(frame->frame_obj == NULL);
1467 FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1469 PyFrameObject *f = _Nuitka_PyFrame_New_NoTrack(frame->f_code);
1474 RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1478 if (frame->frame_obj) {
1479 f->f_frame = (_PyInterpreterFrame *)f->_f_frame_data;
1480 f->f_frame->owner = FRAME_CLEARED;
1481 f->f_frame->frame_obj = f;
1484 return frame->frame_obj;
1487 assert(frame->owner != FRAME_OWNED_BY_FRAME_OBJECT);
1488 assert(frame->owner != FRAME_CLEARED);
1491 frame->frame_obj = f;
1497static inline PyFrameObject *_Nuitka_PyFrame_GetFrameObject(PyThreadState *tstate, _PyInterpreterFrame *frame) {
1498 assert(!_PyFrame_IsIncomplete(frame));
1500 PyFrameObject *res = frame->frame_obj;
1506 return _Nuitka_PyFrame_MakeAndSetFrameObject(tstate, frame);
1510static void _Nuitka_take_ownership(PyThreadState *tstate, PyFrameObject *f, _PyInterpreterFrame *frame) {
1511 assert(frame->owner != FRAME_OWNED_BY_FRAME_OBJECT);
1512 assert(frame->owner != FRAME_CLEARED);
1514 Py_ssize_t size = ((
char *)&frame->localsplus[frame->stacktop]) - (
char *)frame;
1515 memcpy((_PyInterpreterFrame *)f->_f_frame_data, frame, size);
1517 frame = (_PyInterpreterFrame *)f->_f_frame_data;
1519 frame->owner = FRAME_OWNED_BY_FRAME_OBJECT;
1521 assert(f->f_back == NULL);
1523 _PyInterpreterFrame *prev = frame->previous;
1524 while (prev && _PyFrame_IsIncomplete(prev)) {
1525 prev = prev->previous;
1532 PyFrameObject *back = _Nuitka_PyFrame_GetFrameObject(tstate, prev);
1534 if (unlikely(back == NULL)) {
1535 DROP_ERROR_OCCURRED(tstate);
1537 f->f_back = (PyFrameObject *)Py_NewRef(back);
1540 frame->previous = NULL;
1543 if (!_PyObject_GC_IS_TRACKED((PyObject *)f)) {
1544 Nuitka_GC_Track((PyObject *)f);
1549static void _Nuitka_PyFrame_Clear(PyThreadState *tstate, _PyInterpreterFrame *frame) {
1550 assert(frame->owner != FRAME_OWNED_BY_GENERATOR || _PyFrame_GetGenerator(frame)->gi_frame_state == FRAME_CLEARED);
1552 if (frame->frame_obj) {
1553 PyFrameObject *f = frame->frame_obj;
1554 frame->frame_obj = NULL;
1556 if (Py_REFCNT(f) > 1) {
1557 _Nuitka_take_ownership(tstate, f, frame);
1566 assert(frame->stacktop >= 0);
1567 for (
int i = 0; i < frame->stacktop; i++) {
1568 Py_XDECREF(frame->localsplus[i]);
1571 Py_XDECREF(frame->frame_obj);
1572 Py_XDECREF(frame->f_locals);
1573#if PYTHON_VERSION < 0x3c0
1574 Py_DECREF(frame->f_func);
1575#elif PYTHON_VERSION < 0x3e0
1576 Py_DECREF(frame->f_funcobj);
1578 PyStackRef_CLEAR(frame->f_funcobj);
1581#if PYTHON_VERSION < 0x3d0
1582 Py_XDECREF(frame->f_code);
1583#elif PYTHON_VERSION < 0x3e0
1584 Py_XDECREF(frame->f_executable);
1586 PyStackRef_CLEAR(frame->f_executable);
1593static PySendResult Nuitka_PyGen_gen_send_ex2(PyThreadState *tstate, PyGenObject *gen, PyObject *arg,
1594 PyObject **result_ptr,
int exc,
int closing) {
1595#if PYTHON_VERSION >= 0x3e0
1596 _PyInterpreterFrame *frame = &gen->gi_iframe;
1598 _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
1604 if (gen->gi_frame_state == FRAME_CREATED && arg != NULL && arg != Py_None) {
1605 const char *msg =
"can't send non-None value to a just-started generator";
1606 if (PyCoro_CheckExact(gen)) {
1607 msg =
"can't send non-None value to a just-started coroutine";
1608 }
else if (PyAsyncGen_CheckExact(gen)) {
1609 msg =
"can't send non-None value to a just-started async generator";
1612 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError, msg);
1616 if (gen->gi_frame_state == FRAME_EXECUTING) {
1617 const char *msg =
"generator already executing";
1619 if (PyCoro_CheckExact(gen)) {
1620 msg =
"coroutine already executing";
1621 }
else if (PyAsyncGen_CheckExact(gen)) {
1622 msg =
"async generator already executing";
1625 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ValueError, msg);
1629 if (gen->gi_frame_state >= FRAME_COMPLETED) {
1630 if (PyCoro_CheckExact(gen) && !closing) {
1631 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError,
"cannot reuse already awaited coroutine");
1632 }
else if (arg && !exc) {
1633 *result_ptr = Py_None;
1634 Py_INCREF_IMMORTAL(*result_ptr);
1635 return PYGEN_RETURN;
1640#if PYTHON_VERSION >= 0x3d0
1641 assert(gen->gi_frame_state == FRAME_CREATED || FRAME_STATE_SUSPENDED(gen->gi_frame_state));
1643 assert(gen->gi_frame_state < FRAME_EXECUTING);
1647 result = arg ? arg : Py_None;
1648#if PYTHON_VERSION >= 0x3e0
1649 _PyFrame_StackPush(frame, PyStackRef_FromPyObjectNew(result));
1652 _PyFrame_StackPush(frame, result);
1655#if PYTHON_VERSION < 0x3c0
1656 frame->previous = CURRENT_TSTATE_INTERPRETER_FRAME(tstate);
1659 _PyErr_StackItem *prev_exc_info = tstate->exc_info;
1660 gen->gi_exc_state.previous_item = prev_exc_info;
1662 tstate->exc_info = &gen->gi_exc_state;
1665 assert(HAS_ERROR_OCCURRED(tstate));
1666#if PYTHON_VERSION >= 0x3d0
1667 Nuitka_PyErr_ChainStackItem(tstate);
1669 _PyErr_ChainStackItem(NULL);
1673 gen->gi_frame_state = FRAME_EXECUTING;
1674 result = _PyEval_EvalFrame(tstate, frame, exc);
1675#if PYTHON_VERSION < 0x3c0
1676 if (gen->gi_frame_state == FRAME_EXECUTING) {
1677 gen->gi_frame_state = FRAME_COMPLETED;
1679 tstate->exc_info = gen->gi_exc_state.previous_item;
1680 gen->gi_exc_state.previous_item = NULL;
1682 assert(CURRENT_TSTATE_INTERPRETER_FRAME(tstate) == frame->previous);
1683 frame->previous = NULL;
1685 assert(tstate->exc_info == prev_exc_info);
1686 assert(gen->gi_exc_state.previous_item == NULL);
1687 assert(gen->gi_frame_state != FRAME_EXECUTING);
1688 assert(frame->previous == NULL);
1690 if (result != NULL) {
1691#if PYTHON_VERSION >= 0x3d0
1693 if (gen->gi_frame_state == FRAME_SUSPENDED || gen->gi_frame_state == FRAME_SUSPENDED_YIELD_FROM) {
1695 if (gen->gi_frame_state == FRAME_SUSPENDED) {
1697 *result_ptr = result;
1701 assert(result == Py_None || !PyAsyncGen_CheckExact(gen));
1703 if (result == Py_None && !PyAsyncGen_CheckExact(gen) && !arg) {
1709#if PYTHON_VERSION < 0x3c0
1710 if (PyErr_ExceptionMatches(PyExc_StopIteration)) {
1711 const char *msg =
"generator raised StopIteration";
1712 if (PyCoro_CheckExact(gen)) {
1713 msg =
"coroutine raised StopIteration";
1714 }
else if (PyAsyncGen_CheckExact(gen)) {
1715 msg =
"async generator raised StopIteration";
1717 _PyErr_FormatFromCause(PyExc_RuntimeError,
"%s", msg);
1718 }
else if (PyAsyncGen_CheckExact(gen) && PyErr_ExceptionMatches(PyExc_StopAsyncIteration)) {
1719 const char *msg =
"async generator raised StopAsyncIteration";
1720 _PyErr_FormatFromCause(PyExc_RuntimeError,
"%s", msg);
1723 assert(!PyErr_ExceptionMatches(PyExc_StopIteration));
1724 assert(!PyAsyncGen_CheckExact(gen) || !PyErr_ExceptionMatches(PyExc_StopAsyncIteration));
1729 _PyErr_ClearExcState(&gen->gi_exc_state);
1731 gen->gi_frame_state = FRAME_CLEARED;
1733#if PYTHON_VERSION < 0x3c0
1734 _Nuitka_PyFrame_Clear(tstate, frame);
1737 *result_ptr = result;
1738 return result ? PYGEN_RETURN : PYGEN_ERROR;
1741static PyObject *Nuitka_PyGen_gen_send_ex(PyThreadState *tstate, PyGenObject *gen, PyObject *arg,
int exc,
1745 if (Nuitka_PyGen_gen_send_ex2(tstate, gen, arg, &result, exc, closing) == PYGEN_RETURN) {
1746 if (PyAsyncGen_CheckExact(gen)) {
1747 assert(result == Py_None);
1748 SET_CURRENT_EXCEPTION_STOP_ASYNC_ITERATION(tstate);
1749 }
else if (result == Py_None) {
1750 SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
1752 Nuitka_SetStopIterationValue(tstate, result);
1768static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenObject *gen,
int close_on_genexit,
1771 PRINT_STRING(
"Nuitka_UncompiledGenerator_throw: Enter ");
1772 PRINT_ITEM((PyObject *)gen);
1773 PRINT_EXCEPTION_STATE(exception_state);
1777 PyObject *yf = Nuitka_PyGen_yf(gen);
1780#if PYTHON_VERSION >= 0x3e0
1781 _PyInterpreterFrame *frame = &gen->gi_iframe;
1783 _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
1786 if (close_on_genexit && EXCEPTION_STATE_MATCH_BOOL_SINGLE(tstate, exception_state, PyExc_GeneratorExit)) {
1787 PyFrameState state = (PyFrameState)gen->gi_frame_state;
1788 gen->gi_frame_state = FRAME_EXECUTING;
1790 int err = Nuitka_PyGen_gen_close_iter(tstate, yf);
1792 gen->gi_frame_state = state;
1799 RELEASE_ERROR_OCCURRED_STATE(exception_state);
1801 return Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 0);
1810 if (PyGen_CheckExact(yf) || PyCoro_CheckExact(yf)) {
1811 _PyInterpreterFrame *prev = CURRENT_TSTATE_INTERPRETER_FRAME(tstate);
1812 frame->previous = prev;
1813 CURRENT_TSTATE_INTERPRETER_FRAME(tstate) = frame;
1814 PyFrameState state = (PyFrameState)gen->gi_frame_state;
1815 gen->gi_frame_state = FRAME_EXECUTING;
1818 ret = Nuitka_UncompiledGenerator_throw(tstate, (PyGenObject *)yf, close_on_genexit, exception_state);
1819 gen->gi_frame_state = state;
1820 CURRENT_TSTATE_INTERPRETER_FRAME(tstate) = prev;
1821 frame->previous = NULL;
1829 PyObject *meth = LOOKUP_ATTRIBUTE(tstate, yf, const_str_plain_throw);
1831 if (unlikely(meth == NULL)) {
1842 PyFrameState state = (PyFrameState)gen->gi_frame_state;
1843 gen->gi_frame_state = FRAME_EXECUTING;
1845 ret = Nuitka_CallGeneratorThrowMethod(meth, exception_state);
1847 gen->gi_frame_state = state;
1850 RELEASE_ERROR_OCCURRED_STATE(exception_state);
1857#if PYTHON_VERSION < 0x3c0
1859 assert(gen->gi_frame_state < FRAME_CLEARED);
1860 ret = _PyFrame_StackPop((_PyInterpreterFrame *)gen->gi_iframe);
1863 assert(_PyInterpreterFrame_LASTI(frame) >= 0);
1864 assert(_Py_OPCODE(frame->prev_instr[-1]) == SEND);
1865 int jump = _Py_OPARG(frame->prev_instr[-1]);
1866 frame->prev_instr += jump - 1;
1867 if (Nuitka_PyGen_FetchStopIterationValue(tstate, &val)) {
1868 ret = Nuitka_PyGen_gen_send_ex(tstate, gen, val, 0, 0);
1873 ret = Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 0);
1881 tstate = _PyThreadState_GET();
1883 if (unlikely(_Nuitka_Generator_check_throw(tstate, exception_state) ==
false)) {
1888 RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
1890 return Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 1);
1893 RELEASE_ERROR_OCCURRED_STATE(exception_state);
1902static PyObject *Nuitka_PyGen_yf(PyGenObject *gen) {
1903 PyFrameObject *f = gen->gi_frame;
1905#if PYTHON_VERSION < 0x3a0
1906 if (f && f->f_stacktop) {
1910 PyObject *bytecode = f->f_code->co_code;
1911 unsigned char *code = (
unsigned char *)PyBytes_AS_STRING(bytecode);
1913 if (f->f_lasti < 0) {
1917#if PYTHON_VERSION < 0x360
1918 if (code[f->f_lasti + 1] != YIELD_FROM)
1919#elif PYTHON_VERSION < 0x3a0
1920 if (code[f->f_lasti +
sizeof(_Py_CODEUNIT)] != YIELD_FROM)
1922 if (code[(f->f_lasti + 1) *
sizeof(_Py_CODEUNIT)] != YIELD_FROM)
1928#if PYTHON_VERSION < 0x3a0
1929 PyObject *yf = f->f_stacktop[-1];
1931 assert(f->f_stackdepth > 0);
1932 PyObject *yf = f->f_valuestack[f->f_stackdepth - 1];
1941static PyObject *Nuitka_PyGen_gen_send_ex(PyThreadState *tstate, PyGenObject *gen, PyObject *arg,
int exc,
1943 PyFrameObject *f = gen->gi_frame;
1946#if PYTHON_VERSION >= 0x3a0
1947 if (f != NULL && unlikely(_PyFrame_IsExecuting(f))) {
1949 if (unlikely(gen->gi_running)) {
1951 char const *msg =
"generator already executing";
1953#if PYTHON_VERSION >= 0x350
1954 if (PyCoro_CheckExact(gen)) {
1955 msg =
"coroutine already executing";
1957#if PYTHON_VERSION >= 0x360
1958 else if (PyAsyncGen_CheckExact(gen)) {
1959 msg =
"async generator already executing";
1963 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ValueError, msg);
1968 if (f == NULL || Nuitka_PyFrameHasCompleted(f)) {
1969#if PYTHON_VERSION >= 0x350
1970 if (PyCoro_CheckExact(gen) && !closing) {
1971 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError,
"cannot reuse already awaited coroutine");
1975#if PYTHON_VERSION >= 0x360
1976 if (PyAsyncGen_CheckExact(gen)) {
1977 SET_CURRENT_EXCEPTION_STOP_ASYNC_ITERATION(tstate);
1981 SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
1987#if PYTHON_VERSION < 0x3a0
1988 if (f->f_lasti == -1) {
1989 if (unlikely(arg != NULL && arg != Py_None)) {
1990 char const *msg =
"can't send non-None value to a just-started generator";
1992#if PYTHON_VERSION >= 0x350
1993 if (PyCoro_CheckExact(gen)) {
1994 msg =
"can't send non-None value to a just-started coroutine";
1996#if PYTHON_VERSION >= 0x360
1997 else if (PyAsyncGen_CheckExact(gen)) {
1998 msg =
"can't send non-None value to a just-started async generator";
2003 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError, msg);
2008 result = arg ? arg : Py_None;
2010 *(f->f_stacktop++) = result;
2014 assert(_PyFrame_IsRunnable(f));
2015 assert(f->f_lasti >= 0 || ((
unsigned char *)PyBytes_AS_STRING(f->f_code->co_code))[0] == GEN_START);
2017 result = arg ? arg : Py_None;
2019 gen->gi_frame->f_valuestack[gen->gi_frame->f_stackdepth] = result;
2020 gen->gi_frame->f_stackdepth++;
2023 Py_XINCREF(tstate->frame);
2024 f->f_back = tstate->frame;
2026#if PYTHON_VERSION < 0x3a0
2027 gen->gi_running = 1;
2029#if PYTHON_VERSION >= 0x370
2030 gen->gi_exc_state.previous_item = tstate->exc_info;
2031 tstate->exc_info = &gen->gi_exc_state;
2033#if PYTHON_VERSION < 0x390
2034 result = PyEval_EvalFrameEx(f, exc);
2036 result = _PyEval_EvalFrame(tstate, f, exc);
2038#if PYTHON_VERSION >= 0x370
2039 tstate->exc_info = gen->gi_exc_state.previous_item;
2040 gen->gi_exc_state.previous_item = NULL;
2042#if PYTHON_VERSION < 0x3a0
2043 gen->gi_running = 0;
2046 Py_CLEAR(f->f_back);
2048#if PYTHON_VERSION < 0x3a0
2049 if (result && f->f_stacktop == NULL) {
2050 if (result == Py_None) {
2051#if PYTHON_VERSION >= 0x360
2052 if (PyAsyncGen_CheckExact(gen)) {
2053 SET_CURRENT_EXCEPTION_STOP_ASYNC_ITERATION(tstate);
2057 SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
2060 Nuitka_SetStopIterationValue(tstate, result);
2066#if PYTHON_VERSION >= 0x350
2067 else if (result == NULL && PyErr_ExceptionMatches(PyExc_StopIteration)) {
2068#if PYTHON_VERSION < 0x370
2069 const int check_stop_iter_error_flags = CO_FUTURE_GENERATOR_STOP | CO_COROUTINE |
2070#if PYTHON_VERSION >= 0x360
2071 CO_ASYNC_GENERATOR |
2073 CO_ITERABLE_COROUTINE;
2075 if (unlikely(gen->gi_code != NULL && ((PyCodeObject *)gen->gi_code)->co_flags & check_stop_iter_error_flags))
2078 char const *msg =
"generator raised StopIteration";
2080 if (PyCoro_CheckExact(gen)) {
2081 msg =
"coroutine raised StopIteration";
2083#if PYTHON_VERSION >= 0x360
2084 else if (PyAsyncGen_CheckExact(gen)) {
2085 msg =
"async generator raised StopIteration";
2089#if PYTHON_VERSION >= 0x360
2090 _PyErr_FormatFromCause(
2094 PyExc_RuntimeError,
"%s", msg);
2098#if PYTHON_VERSION >= 0x360
2099 else if (result == NULL && PyAsyncGen_CheckExact(gen) && PyErr_ExceptionMatches(PyExc_StopAsyncIteration)) {
2100 char const *msg =
"async generator raised StopAsyncIteration";
2101 _PyErr_FormatFromCause(PyExc_RuntimeError,
"%s", msg);
2105 if (!result || f->f_stacktop == NULL) {
2106#if PYTHON_VERSION < 0x370
2107 PyObject *t, *v, *tb;
2110 tb = f->f_exc_traceback;
2111 f->f_exc_type = NULL;
2112 f->f_exc_value = NULL;
2113 f->f_exc_traceback = NULL;
2118 Nuitka_PyGen_exc_state_clear(&gen->gi_exc_state);
2120 gen->gi_frame->f_gen = NULL;
2121 gen->gi_frame = NULL;
2126 if (!_PyFrameHasCompleted(f)) {
2130 assert(result == Py_None || !PyAsyncGen_CheckExact(gen));
2131 if (PyAsyncGen_CheckExact(gen)) {
2132 assert(result == Py_None);
2133 SET_CURRENT_EXCEPTION_STOP_ASYNC_ITERATION(tstate);
2134 }
else if (result == Py_None) {
2135 SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
2137 Nuitka_SetStopIterationValue(tstate, result);
2143 if (PyErr_ExceptionMatches(PyExc_StopIteration)) {
2144 const char *msg =
"generator raised StopIteration";
2145 if (PyCoro_CheckExact(gen)) {
2146 msg =
"coroutine raised StopIteration";
2147 }
else if (PyAsyncGen_CheckExact(gen)) {
2148 msg =
"async generator raised StopIteration";
2150 _PyErr_FormatFromCause(PyExc_RuntimeError,
"%s", msg);
2151 }
else if (PyAsyncGen_CheckExact(gen) && PyErr_ExceptionMatches(PyExc_StopAsyncIteration)) {
2152 const char *msg =
"async generator raised StopAsyncIteration";
2155 _PyErr_FormatFromCause(PyExc_RuntimeError,
"%s", msg);
2159 Nuitka_PyGen_exc_state_clear(&gen->gi_exc_state);
2161 gen->gi_frame->f_gen = NULL;
2162 gen->gi_frame = NULL;
2175static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenObject *gen,
int close_on_genexit,
2178 PRINT_STRING(
"Nuitka_UncompiledGenerator_throw: Enter ");
2179 PRINT_ITEM((PyObject *)gen);
2180 PRINT_EXCEPTION_STATE(exception_state);
2184 PyObject *yf = Nuitka_PyGen_yf(gen);
2186 assert(HAS_EXCEPTION_STATE(exception_state));
2189 if (close_on_genexit &&
2190 EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_state->exception_type, PyExc_GeneratorExit)) {
2191#if PYTHON_VERSION < 0x3a0
2192 gen->gi_running = 1;
2194 PyFrameState state = gen->gi_frame->f_state;
2195 gen->gi_frame->f_state = FRAME_EXECUTING;
2198 int err = Nuitka_PyGen_gen_close_iter(tstate, yf);
2199#if PYTHON_VERSION < 0x3a0
2200 gen->gi_running = 0;
2202 gen->gi_frame->f_state = state;
2209 RELEASE_ERROR_OCCURRED_STATE(exception_state);
2211 return Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 0);
2220 if (PyGen_CheckExact(yf)
2221#
if PYTHON_VERSION >= 0x350
2222 || PyCoro_CheckExact(yf)
2225#if PYTHON_VERSION < 0x3a0
2226 gen->gi_running = 1;
2228 PyFrameState state = gen->gi_frame->f_state;
2229 gen->gi_frame->f_state = FRAME_EXECUTING;
2233 ret = Nuitka_UncompiledGenerator_throw(tstate, (PyGenObject *)yf, close_on_genexit, exception_state);
2235#if PYTHON_VERSION < 0x3a0
2236 gen->gi_running = 0;
2238 gen->gi_frame->f_state = state;
2248 PyObject *meth = PyObject_GetAttr(yf, const_str_plain_throw);
2251 if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
2255 RELEASE_ERROR_OCCURRED_STATE(exception_state);
2260 CLEAR_ERROR_OCCURRED(tstate);
2267#if PYTHON_VERSION < 0x3a0
2268 gen->gi_running = 1;
2270 PyFrameState state = gen->gi_frame->f_state;
2271 gen->gi_frame->f_state = FRAME_EXECUTING;
2274 ret = Nuitka_CallGeneratorThrowMethod(meth, exception_state);
2276#if PYTHON_VERSION < 0x3a0
2277 gen->gi_running = 0;
2279 gen->gi_frame->f_state = state;
2283 RELEASE_ERROR_OCCURRED_STATE(exception_state);
2291#if PYTHON_VERSION < 0x3a0
2292 ret = *(--gen->gi_frame->f_stacktop);
2294 assert(gen->gi_frame->f_stackdepth > 0);
2295 gen->gi_frame->f_stackdepth--;
2296 ret = gen->gi_frame->f_valuestack[gen->gi_frame->f_stackdepth];
2300#if PYTHON_VERSION < 0x360
2301 gen->gi_frame->f_lasti += 1;
2302#elif PYTHON_VERSION < 0x3a0
2303 gen->gi_frame->f_lasti +=
sizeof(_Py_CODEUNIT);
2305 gen->gi_frame->f_lasti += 1;
2308 if (Nuitka_PyGen_FetchStopIterationValue(tstate, &exception_state->exception_value)) {
2309 ret = Nuitka_PyGen_gen_send_ex(tstate, gen, exception_state->exception_value, 0, 0);
2311 Py_DECREF(exception_state->exception_value);
2313 ret = Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 0);
2321 if (unlikely(_Nuitka_Generator_check_throw(tstate, exception_state) ==
false)) {
2327 RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
2329 return Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 1);
2334static int Nuitka_PyGen_gen_close_iter(PyThreadState *tstate, PyObject *yf) {
2335 PyObject *retval = NULL;
2337 if (PyGen_CheckExact(yf)
2338#
if PYTHON_VERSION >= 0x350
2339 || PyCoro_CheckExact(yf)
2343 retval = Nuitka_PyGen_gen_close(tstate, (PyGenObject *)yf, NULL);
2345 if (retval == NULL) {
2349 PyObject *meth = PyObject_GetAttr(yf, const_str_plain_close);
2352 if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
2353 PyErr_WriteUnraisable(yf);
2356 CLEAR_ERROR_OCCURRED(tstate);
2358 retval = CALL_FUNCTION_NO_ARGS(tstate, meth);
2362 if (retval == NULL) {
2372static PyObject *Nuitka_PyGen_gen_close(PyThreadState *tstate, PyGenObject *gen, PyObject *args) {
2373 PyObject *yf = Nuitka_PyGen_yf(gen);
2377#if PYTHON_VERSION >= 0x3b0
2378 PyFrameState state = (PyFrameState)gen->gi_frame_state;
2379 gen->gi_frame_state = FRAME_EXECUTING;
2380#elif PYTHON_VERSION >= 0x3a0
2381 PyFrameState state = gen->gi_frame->f_state;
2382 gen->gi_frame->f_state = FRAME_EXECUTING;
2384 gen->gi_running = 1;
2386 err = Nuitka_PyGen_gen_close_iter(tstate, yf);
2388#if PYTHON_VERSION >= 0x3b0
2389 gen->gi_frame_state = state;
2390#elif PYTHON_VERSION >= 0x3a0
2391 gen->gi_frame->f_state = state;
2393 gen->gi_running = 0;
2399 SET_CURRENT_EXCEPTION_GENERATOR_EXIT(tstate);
2402 PyObject *retval = Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 1);
2404 if (retval != NULL) {
2405 char const *msg =
"generator ignored GeneratorExit";
2407#if PYTHON_VERSION >= 0x350
2408 if (PyCoro_CheckExact(gen)) {
2409 msg =
"coroutine ignored GeneratorExit";
2411#if PYTHON_VERSION >= 0x360
2412 else if (PyAsyncGen_CheckExact(gen)) {
2413 msg =
"async generator ignored GeneratorExit";
2419 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError, msg);
2423 if (PyErr_ExceptionMatches(PyExc_StopIteration) || PyErr_ExceptionMatches(PyExc_GeneratorExit)) {
2424 CLEAR_ERROR_OCCURRED(tstate);
2426 Py_INCREF_IMMORTAL(Py_None);
Definition exceptions.h:712