summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
Diffstat (limited to 'Python')
-rw-r--r--Python/ceval.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 500c588..762de57 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2210,24 +2210,17 @@ main_loop:
case TARGET(YIELD_FROM): {
PyObject *v = POP();
PyObject *receiver = TOP();
- int is_gen_or_coro = PyGen_CheckExact(receiver) || PyCoro_CheckExact(receiver);
- int gen_status;
- if (tstate->c_tracefunc == NULL && is_gen_or_coro) {
- gen_status = PyGen_Send((PyGenObject *)receiver, v, &retval);
+ PySendResult gen_status;
+ if (tstate->c_tracefunc == NULL) {
+ gen_status = PyIter_Send(receiver, v, &retval);
} else {
- if (is_gen_or_coro) {
- retval = _PyGen_Send((PyGenObject *)receiver, v);
+ _Py_IDENTIFIER(send);
+ if (v == Py_None && PyIter_Check(receiver)) {
+ retval = Py_TYPE(receiver)->tp_iternext(receiver);
}
else {
- _Py_IDENTIFIER(send);
- if (v == Py_None) {
- retval = Py_TYPE(receiver)->tp_iternext(receiver);
- }
- else {
- retval = _PyObject_CallMethodIdOneArg(receiver, &PyId_send, v);
- }
+ retval = _PyObject_CallMethodIdOneArg(receiver, &PyId_send, v);
}
-
if (retval == NULL) {
if (tstate->c_tracefunc != NULL
&& _PyErr_ExceptionMatches(tstate, PyExc_StopIteration))