mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00
gh-111789: Simplify import.c by using PyDict_GetItemRef() (GH-111979)
This commit is contained in:
parent
c98600bed4
commit
95365625f4
1 changed files with 18 additions and 19 deletions
|
@ -2372,11 +2372,11 @@ get_path_importer(PyThreadState *tstate, PyObject *path_importer_cache,
|
||||||
if (nhooks < 0)
|
if (nhooks < 0)
|
||||||
return NULL; /* Shouldn't happen */
|
return NULL; /* Shouldn't happen */
|
||||||
|
|
||||||
importer = PyDict_GetItemWithError(path_importer_cache, p);
|
if (PyDict_GetItemRef(path_importer_cache, p, &importer) != 0) {
|
||||||
if (importer != NULL || _PyErr_Occurred(tstate)) {
|
// found or error
|
||||||
return Py_XNewRef(importer);
|
return importer;
|
||||||
}
|
}
|
||||||
|
// not found
|
||||||
/* set path_importer_cache[p] to None to avoid recursion */
|
/* set path_importer_cache[p] to None to avoid recursion */
|
||||||
if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
|
if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -2565,7 +2565,7 @@ resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level
|
||||||
{
|
{
|
||||||
PyObject *abs_name;
|
PyObject *abs_name;
|
||||||
PyObject *package = NULL;
|
PyObject *package = NULL;
|
||||||
PyObject *spec;
|
PyObject *spec = NULL;
|
||||||
Py_ssize_t last_dot;
|
Py_ssize_t last_dot;
|
||||||
PyObject *base;
|
PyObject *base;
|
||||||
int level_up;
|
int level_up;
|
||||||
|
@ -2578,20 +2578,18 @@ resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level
|
||||||
_PyErr_SetString(tstate, PyExc_TypeError, "globals must be a dict");
|
_PyErr_SetString(tstate, PyExc_TypeError, "globals must be a dict");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
package = PyDict_GetItemWithError(globals, &_Py_ID(__package__));
|
if (PyDict_GetItemRef(globals, &_Py_ID(__package__), &package) < 0) {
|
||||||
if (package == Py_None) {
|
|
||||||
package = NULL;
|
|
||||||
}
|
|
||||||
else if (package == NULL && _PyErr_Occurred(tstate)) {
|
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
spec = PyDict_GetItemWithError(globals, &_Py_ID(__spec__));
|
if (package == Py_None) {
|
||||||
if (spec == NULL && _PyErr_Occurred(tstate)) {
|
Py_DECREF(package);
|
||||||
|
package = NULL;
|
||||||
|
}
|
||||||
|
if (PyDict_GetItemRef(globals, &_Py_ID(__spec__), &spec) < 0) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (package != NULL) {
|
if (package != NULL) {
|
||||||
Py_INCREF(package);
|
|
||||||
if (!PyUnicode_Check(package)) {
|
if (!PyUnicode_Check(package)) {
|
||||||
_PyErr_SetString(tstate, PyExc_TypeError,
|
_PyErr_SetString(tstate, PyExc_TypeError,
|
||||||
"package must be a string");
|
"package must be a string");
|
||||||
|
@ -2635,16 +2633,15 @@ resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
package = PyDict_GetItemWithError(globals, &_Py_ID(__name__));
|
if (PyDict_GetItemRef(globals, &_Py_ID(__name__), &package) < 0) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
if (package == NULL) {
|
if (package == NULL) {
|
||||||
if (!_PyErr_Occurred(tstate)) {
|
_PyErr_SetString(tstate, PyExc_KeyError,
|
||||||
_PyErr_SetString(tstate, PyExc_KeyError,
|
"'__name__' not in globals");
|
||||||
"'__name__' not in globals");
|
|
||||||
}
|
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_INCREF(package);
|
|
||||||
if (!PyUnicode_Check(package)) {
|
if (!PyUnicode_Check(package)) {
|
||||||
_PyErr_SetString(tstate, PyExc_TypeError,
|
_PyErr_SetString(tstate, PyExc_TypeError,
|
||||||
"__name__ must be a string");
|
"__name__ must be a string");
|
||||||
|
@ -2692,6 +2689,7 @@ resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Py_XDECREF(spec);
|
||||||
base = PyUnicode_Substring(package, 0, last_dot);
|
base = PyUnicode_Substring(package, 0, last_dot);
|
||||||
Py_DECREF(package);
|
Py_DECREF(package);
|
||||||
if (base == NULL || PyUnicode_GET_LENGTH(name) == 0) {
|
if (base == NULL || PyUnicode_GET_LENGTH(name) == 0) {
|
||||||
|
@ -2708,6 +2706,7 @@ resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level
|
||||||
"with no known parent package");
|
"with no known parent package");
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
Py_XDECREF(spec);
|
||||||
Py_XDECREF(package);
|
Py_XDECREF(package);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue