Skip to content

Commit 030482d

Browse files
pythongh-111789: Simplify ceval.c by using PyDict_GetItemRef()
1 parent fa84e5f commit 030482d

1 file changed

Lines changed: 14 additions & 18 deletions

File tree

‎Python/ceval.c‎

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1596,14 +1596,14 @@ initialize_locals(PyThreadState *tstate, PyFunctionObject *func,
15961596
continue;
15971597
PyObject *varname = PyTuple_GET_ITEM(co->co_localsplusnames, i);
15981598
if (func->func_kwdefaults != NULL) {
1599-
PyObject *def = PyDict_GetItemWithError(func->func_kwdefaults, varname);
1599+
PyObject *def;
1600+
if (PyDict_GetItemRef(func->func_kwdefaults, varname, &def) < 0) {
1601+
goto fail_post_args;
1602+
}
16001603
if (def) {
1601-
localsplus[i] = Py_NewRef(def);
1604+
localsplus[i] = def;
16021605
continue;
16031606
}
1604-
else if (_PyErr_Occurred(tstate)) {
1605-
goto fail_post_args;
1606-
}
16071607
}
16081608
missing++;
16091609
}
@@ -2405,13 +2405,9 @@ PyEval_GetBuiltins(void)
24052405
PyObject *
24062406
_PyEval_GetBuiltin(PyObject *name)
24072407
{
2408-
PyThreadState *tstate = _PyThreadState_GET();
2409-
PyObject *attr = PyDict_GetItemWithError(PyEval_GetBuiltins(), name);
2410-
if (attr) {
2411-
Py_INCREF(attr);
2412-
}
2413-
else if (!_PyErr_Occurred(tstate)) {
2414-
_PyErr_SetObject(tstate, PyExc_AttributeError, name);
2408+
PyObject *attr;
2409+
if (PyDict_GetItemRef(PyEval_GetBuiltins(), name, &attr) == 0) {
2410+
PyErr_SetObject(PyExc_AttributeError, name);
24152411
}
24162412
return attr;
24172413
}
@@ -2562,12 +2558,12 @@ static PyObject *
25622558
import_name(PyThreadState *tstate, _PyInterpreterFrame *frame,
25632559
PyObject *name, PyObject *fromlist, PyObject *level)
25642560
{
2565-
PyObject *import_func = _PyDict_GetItemWithError(frame->f_builtins,
2566-
&_Py_ID(__import__));
2561+
PyObject *import_func;
2562+
if (PyDict_GetItemRef(frame->f_builtins, &_Py_ID(__import__), &import_func) < 0) {
2563+
return NULL;
2564+
}
25672565
if (import_func == NULL) {
2568-
if (!_PyErr_Occurred(tstate)) {
2569-
_PyErr_SetString(tstate, PyExc_ImportError, "__import__ not found");
2570-
}
2566+
_PyErr_SetString(tstate, PyExc_ImportError, "__import__ not found");
25712567
return NULL;
25722568
}
25732569

@@ -2578,6 +2574,7 @@ import_name(PyThreadState *tstate, _PyInterpreterFrame *frame,
25782574

25792575
/* Fast path for not overloaded __import__. */
25802576
if (_PyImport_IsDefaultImportFunc(tstate->interp, import_func)) {
2577+
Py_DECREF(import_func);
25812578
int ilevel = PyLong_AsInt(level);
25822579
if (ilevel == -1 && _PyErr_Occurred(tstate)) {
25832580
return NULL;
@@ -2591,7 +2588,6 @@ import_name(PyThreadState *tstate, _PyInterpreterFrame *frame,
25912588
}
25922589

25932590
PyObject* args[5] = {name, frame->f_globals, locals, fromlist, level};
2594-
Py_INCREF(import_func);
25952591
PyObject *res = PyObject_Vectorcall(import_func, args, 5, NULL);
25962592
Py_DECREF(import_func);
25972593
return res;

0 commit comments

Comments
 (0)