Lines Matching defs:gen
33 gen_traverse(PyGenObject *gen, visitproc visit, void *arg)
35 Py_VISIT(gen->gi_code);
36 Py_VISIT(gen->gi_name);
37 Py_VISIT(gen->gi_qualname);
38 if (gen->gi_frame_state < FRAME_CLEARED) {
39 _PyInterpreterFrame *frame = (_PyInterpreterFrame *)(gen->gi_iframe);
49 return exc_state_traverse(&gen->gi_exc_state, visit, arg);
55 PyGenObject *gen = (PyGenObject *)self;
59 if (gen->gi_frame_state >= FRAME_COMPLETED) {
87 /* If `gen` is a coroutine, and if it was never awaited on,
89 if (gen->gi_code != NULL &&
90 ((PyCodeObject *)gen->gi_code)->co_flags & CO_COROUTINE &&
91 gen->gi_frame_state == FRAME_CREATED)
93 _PyErr_WarnUnawaitedCoroutine((PyObject *)gen);
96 res = gen_close(gen, NULL);
113 gen_dealloc(PyGenObject *gen)
115 PyObject *self = (PyObject *) gen;
117 _PyObject_GC_UNTRACK(gen);
119 if (gen->gi_weakreflist != NULL)
128 if (PyAsyncGen_CheckExact(gen)) {
132 Py_CLEAR(((PyAsyncGenObject*)gen)->ag_origin_or_finalizer);
134 if (gen->gi_frame_state < FRAME_CLEARED) {
135 _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
136 gen->gi_frame_state = FRAME_CLEARED;
140 if (((PyCodeObject *)gen->gi_code)->co_flags & CO_COROUTINE) {
141 Py_CLEAR(((PyCoroObject *)gen)->cr_origin_or_finalizer);
143 Py_CLEAR(gen->gi_code);
144 Py_CLEAR(gen->gi_name);
145 Py_CLEAR(gen->gi_qualname);
146 _PyErr_ClearExcState(&gen->gi_exc_state);
147 PyObject_GC_Del(gen);
151 gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult,
155 _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
159 if (gen->gi_frame_state == FRAME_CREATED && arg && arg != Py_None) {
162 if (PyCoro_CheckExact(gen)) {
165 else if (PyAsyncGen_CheckExact(gen)) {
172 if (gen->gi_frame_state == FRAME_EXECUTING) {
174 if (PyCoro_CheckExact(gen)) {
177 else if (PyAsyncGen_CheckExact(gen)) {
183 if (gen->gi_frame_state >= FRAME_COMPLETED) {
184 if (PyCoro_CheckExact(gen) && !closing) {
185 /* `gen` is an exhausted coroutine: raise an error,
193 /* `gen` is an exhausted generator:
202 assert(gen->gi_frame_state < FRAME_EXECUTING);
210 gen->gi_exc_state.previous_item = tstate->exc_info;
211 tstate->exc_info = &gen->gi_exc_state;
218 gen->gi_frame_state = FRAME_EXECUTING;
220 if (gen->gi_frame_state == FRAME_EXECUTING) {
221 gen->gi_frame_state = FRAME_COMPLETED;
223 tstate->exc_info = gen->gi_exc_state.previous_item;
224 gen->gi_exc_state.previous_item = NULL;
235 if (gen->gi_frame_state == FRAME_SUSPENDED) {
239 assert(result == Py_None || !PyAsyncGen_CheckExact(gen));
240 if (result == Py_None && !PyAsyncGen_CheckExact(gen) && !arg) {
248 if (PyCoro_CheckExact(gen)) {
251 else if (PyAsyncGen_CheckExact(gen)) {
256 else if (PyAsyncGen_CheckExact(gen) &&
259 /* code in `gen` raised a StopAsyncIteration error:
269 _PyErr_ClearExcState(&gen->gi_exc_state);
271 gen->gi_frame_state = FRAME_CLEARED;
278 PyGen_am_send(PyGenObject *gen, PyObject *arg, PyObject **result)
280 return gen_send_ex2(gen, arg, result, 0, 0);
284 gen_send_ex(PyGenObject *gen, PyObject *arg, int exc, int closing)
287 if (gen_send_ex2(gen, arg, &result, exc, closing) == PYGEN_RETURN) {
288 if (PyAsyncGen_CheckExact(gen)) {
308 gen_send(PyGenObject *gen, PyObject *arg)
310 return gen_send_ex(gen, arg, 0, 0);
348 _PyGen_yf(PyGenObject *gen)
352 if (gen->gi_frame_state < FRAME_CLEARED) {
353 _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
355 if (gen->gi_frame_state == FRAME_CREATED) {
359 assert(_Py_OPCODE(_PyCode_CODE(gen->gi_code)[0]) != SEND);
376 gen_close(PyGenObject *gen, PyObject *args)
379 PyObject *yf = _PyGen_yf(gen);
383 PyFrameState state = gen->gi_frame_state;
384 gen->gi_frame_state = FRAME_EXECUTING;
386 gen->gi_frame_state = state;
391 retval = gen_send_ex(gen, Py_None, 1, 1);
394 if (PyCoro_CheckExact(gen)) {
396 } else if (PyAsyncGen_CheckExact(gen)) {
420 _gen_throw(PyGenObject *gen, int close_on_genexit,
423 PyObject *yf = _PyGen_yf(gen);
426 _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
436 PyFrameState state = gen->gi_frame_state;
437 gen->gi_frame_state = FRAME_EXECUTING;
439 gen->gi_frame_state = state;
442 return gen_send_ex(gen, Py_None, 1, 0);
458 PyFrameState state = gen->gi_frame_state;
459 gen->gi_frame_state = FRAME_EXECUTING;
462 gen->gi_frame_state = state;
476 PyFrameState state = gen->gi_frame_state;
477 gen->gi_frame_state = FRAME_EXECUTING;
479 gen->gi_frame_state = state;
486 assert(gen->gi_frame_state < FRAME_CLEARED);
487 ret = _PyFrame_StackPop((_PyInterpreterFrame *)gen->gi_iframe);
499 ret = gen_send(gen, val);
502 ret = gen_send_ex(gen, Py_None, 1, 0);
556 return gen_send_ex(gen, Py_None, 1, 0);
568 gen_throw(PyGenObject *gen, PyObject *const *args, Py_ssize_t nargs)
585 return _gen_throw(gen, 1, typ, val, tb);
590 gen_iternext(PyGenObject *gen)
593 assert(PyGen_CheckExact(gen) || PyCoro_CheckExact(gen));
594 if (gen_send_ex2(gen, NULL, &result, 0, 0) == PYGEN_RETURN) {
698 gen_repr(PyGenObject *gen)
701 gen->gi_qualname, gen);
714 /* Not legal to del gen.gi_name or to set it to anything
736 /* Not legal to del gen.__qualname__ or to set it to anything
749 gen_getyieldfrom(PyGenObject *gen, void *Py_UNUSED(ignored))
751 PyObject *yf = _PyGen_yf(gen);
759 gen_getrunning(PyGenObject *gen, void *Py_UNUSED(ignored))
761 if (gen->gi_frame_state == FRAME_EXECUTING) {
768 gen_getsuspended(PyGenObject *gen, void *Py_UNUSED(ignored))
770 return PyBool_FromLong(gen->gi_frame_state == FRAME_SUSPENDED);
774 _gen_getframe(PyGenObject *gen, const char *const name)
776 if (PySys_Audit("object.__getattr__", "Os", gen, name) < 0) {
779 if (gen->gi_frame_state == FRAME_CLEARED) {
782 return _Py_XNewRef((PyObject *)_PyFrame_GetFrameObject((_PyInterpreterFrame *)gen->gi_iframe));
786 gen_getframe(PyGenObject *gen, void *Py_UNUSED(ignored))
788 return _gen_getframe(gen, "gi_frame");
810 gen_sizeof(PyGenObject *gen, PyObject *Py_UNUSED(ignored))
814 PyCodeObject *code = gen->gi_code;
820 "gen.__sizeof__() -> size of gen in memory, in bytes");
897 PyGenObject *gen = PyObject_GC_NewVar(PyGenObject, type, slots);
898 if (gen == NULL) {
901 gen->gi_frame_state = FRAME_CLEARED;
902 gen->gi_code = (PyCodeObject *)func->func_code;
903 Py_INCREF(gen->gi_code);
904 gen->gi_weakreflist = NULL;
905 gen->gi_exc_state.exc_value = NULL;
906 gen->gi_exc_state.previous_item = NULL;
908 gen->gi_name = Py_NewRef(func->func_name);
910 gen->gi_qualname = Py_NewRef(func->func_qualname);
911 _PyObject_GC_TRACK(gen);
912 return (PyObject *)gen;
967 PyGenObject *gen = PyObject_GC_NewVar(PyGenObject, type, size);
968 if (gen == NULL) {
975 _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
977 gen->gi_frame_state = FRAME_CREATED;
982 gen->gi_code = PyFrame_GetCode(f);
983 Py_INCREF(gen->gi_code);
985 gen->gi_weakreflist = NULL;
986 gen->gi_exc_state.exc_value = NULL;
987 gen->gi_exc_state.previous_item = NULL;
989 gen->gi_name = name;
991 gen->gi_name = gen->gi_code->co_name;
992 Py_INCREF(gen->gi_name);
994 gen->gi_qualname = qualname;
996 gen->gi_qualname = gen->gi_code->co_qualname;
997 Py_INCREF(gen->gi_qualname);
998 _PyObject_GC_TRACK(gen);
999 return (PyObject *)gen;
1433 async_gen_traverse(PyAsyncGenObject *gen, visitproc visit, void *arg)
1435 Py_VISIT(gen->ag_origin_or_finalizer);
1436 return gen_traverse((PyGenObject*)gen, visit, arg);
1692 async_gen_unwrap_value(PyAsyncGenObject *gen, PyObject *result)
1702 gen->ag_closed = 1;
1705 gen->ag_running_async = 0;
1713 gen->ag_running_async = 0;
1892 async_gen_asend_new(PyAsyncGenObject *gen, PyObject *sendval)
1915 Py_INCREF(gen);
1916 o->ags_gen = gen;
2067 PyGenObject *gen = (PyGenObject*)o->agt_gen;
2077 if (gen->gi_frame_state >= FRAME_COMPLETED) {
2117 retval = _gen_throw((PyGenObject *)gen,
2136 retval = _gen_throw((PyGenObject *)gen,
2150 retval = gen_send((PyGenObject *)gen, arg);
2312 async_gen_athrow_new(PyAsyncGenObject *gen, PyObject *args)
2319 o->agt_gen = gen;
2322 Py_INCREF(gen);