aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/bytecodes.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/bytecodes.c')
-rw-r--r--Python/bytecodes.c125
1 files changed, 8 insertions, 117 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index 414725549d1..48b74f93b92 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -1010,77 +1010,16 @@ dummy_func(
}
inst(GET_ANEXT, (aiter -- aiter, awaitable)) {
- unaryfunc getter = NULL;
- PyObject *next_iter = NULL;
- PyObject *awaitable_o;
- PyObject *aiter_o = PyStackRef_AsPyObjectBorrow(aiter);
- PyTypeObject *type = Py_TYPE(aiter_o);
-
- if (PyAsyncGen_CheckExact(aiter_o)) {
- awaitable_o = type->tp_as_async->am_anext(aiter_o);
- if (awaitable_o == NULL) {
- ERROR_NO_POP();
- }
- } else {
- if (type->tp_as_async != NULL){
- getter = type->tp_as_async->am_anext;
- }
-
- if (getter != NULL) {
- next_iter = (*getter)(aiter_o);
- if (next_iter == NULL) {
- ERROR_NO_POP();
- }
- }
- else {
- _PyErr_Format(tstate, PyExc_TypeError,
- "'async for' requires an iterator with "
- "__anext__ method, got %.100s",
- type->tp_name);
- ERROR_NO_POP();
- }
-
- awaitable_o = _PyCoro_GetAwaitableIter(next_iter);
- if (awaitable_o == NULL) {
- _PyErr_FormatFromCause(
- PyExc_TypeError,
- "'async for' received an invalid object "
- "from __anext__: %.100s",
- Py_TYPE(next_iter)->tp_name);
-
- Py_DECREF(next_iter);
- ERROR_NO_POP();
- } else {
- Py_DECREF(next_iter);
- }
+ PyObject *awaitable_o = _PyEval_GetANext(PyStackRef_AsPyObjectBorrow(aiter));
+ if (awaitable_o == NULL) {
+ ERROR_NO_POP();
}
awaitable = PyStackRef_FromPyObjectSteal(awaitable_o);
}
inst(GET_AWAITABLE, (iterable -- iter)) {
- PyObject *iter_o = _PyCoro_GetAwaitableIter(PyStackRef_AsPyObjectBorrow(iterable));
-
- if (iter_o == NULL) {
- _PyEval_FormatAwaitableError(tstate,
- Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable)), oparg);
- }
-
+ PyObject *iter_o = _PyEval_GetAwaitable(PyStackRef_AsPyObjectBorrow(iterable), oparg);
DECREF_INPUTS();
-
- if (iter_o != NULL && PyCoro_CheckExact(iter_o)) {
- PyObject *yf = _PyGen_yf((PyGenObject*)iter_o);
- if (yf != NULL) {
- /* `iter` is a coroutine object that is being
- awaited, `yf` is a pointer to the current awaitable
- being awaited on. */
- Py_DECREF(yf);
- Py_CLEAR(iter_o);
- _PyErr_SetString(tstate, PyExc_RuntimeError,
- "coroutine is being awaited already");
- /* The code below jumps to `error` if `iter` is NULL. */
- }
- }
-
ERROR_IF(iter_o == NULL, error);
iter = PyStackRef_FromPyObjectSteal(iter_o);
}
@@ -1527,27 +1466,9 @@ dummy_func(
}
inst(LOAD_NAME, (-- v)) {
- PyObject *v_o;
- PyObject *mod_or_class_dict = LOCALS();
- if (mod_or_class_dict == NULL) {
- _PyErr_SetString(tstate, PyExc_SystemError,
- "no locals found");
- ERROR_IF(true, error);
- }
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
- ERROR_IF(PyMapping_GetOptionalItem(mod_or_class_dict, name, &v_o) < 0, error);
- if (v_o == NULL) {
- ERROR_IF(PyDict_GetItemRef(GLOBALS(), name, &v_o) < 0, error);
- if (v_o == NULL) {
- ERROR_IF(PyMapping_GetOptionalItem(BUILTINS(), name, &v_o) < 0, error);
- if (v_o == NULL) {
- _PyEval_FormatExcCheckArg(
- tstate, PyExc_NameError,
- NAME_ERROR_MSG, name);
- ERROR_IF(true, error);
- }
- }
- }
+ PyObject *v_o = _PyEval_LoadName(tstate, frame, name);
+ ERROR_IF(v_o == NULL, error);
v = PyStackRef_FromPyObjectSteal(v_o);
}
@@ -1571,38 +1492,8 @@ dummy_func(
op(_LOAD_GLOBAL, ( -- res, null if (oparg & 1))) {
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1);
- PyObject *res_o;
- if (PyDict_CheckExact(GLOBALS())
- && PyDict_CheckExact(BUILTINS()))
- {
- res_o = _PyDict_LoadGlobal((PyDictObject *)GLOBALS(),
- (PyDictObject *)BUILTINS(),
- name);
- if (res_o == NULL) {
- if (!_PyErr_Occurred(tstate)) {
- /* _PyDict_LoadGlobal() returns NULL without raising
- * an exception if the key doesn't exist */
- _PyEval_FormatExcCheckArg(tstate, PyExc_NameError,
- NAME_ERROR_MSG, name);
- }
- ERROR_IF(true, error);
- }
- }
- else {
- /* Slow-path if globals or builtins is not a dict */
- /* namespace 1: globals */
- ERROR_IF(PyMapping_GetOptionalItem(GLOBALS(), name, &res_o) < 0, error);
- if (res_o == NULL) {
- /* namespace 2: builtins */
- ERROR_IF(PyMapping_GetOptionalItem(BUILTINS(), name, &res_o) < 0, error);
- if (res_o == NULL) {
- _PyEval_FormatExcCheckArg(
- tstate, PyExc_NameError,
- NAME_ERROR_MSG, name);
- ERROR_IF(true, error);
- }
- }
- }
+ PyObject *res_o = _PyEval_LoadGlobal(GLOBALS(), BUILTINS(), name);
+ ERROR_IF(res_o == NULL, error);
null = PyStackRef_NULL;
res = PyStackRef_FromPyObjectSteal(res_o);
}