summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2023-11-14 09:29:20 (GMT)
committerGitHub <noreply@github.com>2023-11-14 09:29:20 (GMT)
commit95365625f4aa8615c94fbfa10f6a0264ca3054db (patch)
treeaba27d990ba46b18f5c90ff80eba73ec48257726 /Python
parentc98600bed47b0be4d9d601c78252154118e7366f (diff)
downloadcpython-95365625f4aa8615c94fbfa10f6a0264ca3054db.zip
cpython-95365625f4aa8615c94fbfa10f6a0264ca3054db.tar.gz
cpython-95365625f4aa8615c94fbfa10f6a0264ca3054db.tar.bz2
gh-111789: Simplify import.c by using PyDict_GetItemRef() (GH-111979)
Diffstat (limited to 'Python')
-rw-r--r--Python/import.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/Python/import.c b/Python/import.c
index b6ffba5..12f586a 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2372,11 +2372,11 @@ get_path_importer(PyThreadState *tstate, PyObject *path_importer_cache,
if (nhooks < 0)
return NULL; /* Shouldn't happen */
- importer = PyDict_GetItemWithError(path_importer_cache, p);
- if (importer != NULL || _PyErr_Occurred(tstate)) {
- return Py_XNewRef(importer);
+ if (PyDict_GetItemRef(path_importer_cache, p, &importer) != 0) {
+ // found or error
+ return importer;
}
-
+ // not found
/* set path_importer_cache[p] to None to avoid recursion */
if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
return NULL;
@@ -2565,7 +2565,7 @@ resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level
{
PyObject *abs_name;
PyObject *package = NULL;
- PyObject *spec;
+ PyObject *spec = NULL;
Py_ssize_t last_dot;
PyObject *base;
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");
goto error;
}
- package = PyDict_GetItemWithError(globals, &_Py_ID(__package__));
+ if (PyDict_GetItemRef(globals, &_Py_ID(__package__), &package) < 0) {
+ goto error;
+ }
if (package == Py_None) {
+ Py_DECREF(package);
package = NULL;
}
- else if (package == NULL && _PyErr_Occurred(tstate)) {
- goto error;
- }
- spec = PyDict_GetItemWithError(globals, &_Py_ID(__spec__));
- if (spec == NULL && _PyErr_Occurred(tstate)) {
+ if (PyDict_GetItemRef(globals, &_Py_ID(__spec__), &spec) < 0) {
goto error;
}
if (package != NULL) {
- Py_INCREF(package);
if (!PyUnicode_Check(package)) {
_PyErr_SetString(tstate, PyExc_TypeError,
"package must be a string");
@@ -2635,16 +2633,15 @@ resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level
goto error;
}
- package = PyDict_GetItemWithError(globals, &_Py_ID(__name__));
+ if (PyDict_GetItemRef(globals, &_Py_ID(__name__), &package) < 0) {
+ goto error;
+ }
if (package == NULL) {
- if (!_PyErr_Occurred(tstate)) {
- _PyErr_SetString(tstate, PyExc_KeyError,
- "'__name__' not in globals");
- }
+ _PyErr_SetString(tstate, PyExc_KeyError,
+ "'__name__' not in globals");
goto error;
}
- Py_INCREF(package);
if (!PyUnicode_Check(package)) {
_PyErr_SetString(tstate, PyExc_TypeError,
"__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);
Py_DECREF(package);
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");
error:
+ Py_XDECREF(spec);
Py_XDECREF(package);
return NULL;
}