mirror of
https://github.com/python/cpython.git
synced 2025-08-23 10:16:01 +00:00
gh-112066: Use PyDict_SetDefaultRef
in place of PyDict_SetDefault
. (#112211)
This changes a number of internal usages of `PyDict_SetDefault` to use `PyDict_SetDefaultRef`. Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
parent
fedbf77191
commit
ef3ceab09d
6 changed files with 32 additions and 25 deletions
|
@ -958,14 +958,15 @@ merge_consts_recursive(PyObject *const_cache, PyObject *o)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
// t is borrowed reference
|
||||
PyObject *t = PyDict_SetDefault(const_cache, key, key);
|
||||
if (t != key) {
|
||||
// o is registered in const_cache. Just use it.
|
||||
Py_XINCREF(t);
|
||||
PyObject *t;
|
||||
int res = PyDict_SetDefaultRef(const_cache, key, key, &t);
|
||||
if (res != 0) {
|
||||
// o was not inserted into const_cache. t is either the existing value
|
||||
// or NULL (on error).
|
||||
Py_DECREF(key);
|
||||
return t;
|
||||
}
|
||||
Py_DECREF(t);
|
||||
|
||||
// We registered o in const_cache.
|
||||
// When o is a tuple or frozenset, we want to merge its
|
||||
|
@ -7527,22 +7528,26 @@ _PyCompile_ConstCacheMergeOne(PyObject *const_cache, PyObject **obj)
|
|||
return ERROR;
|
||||
}
|
||||
|
||||
// t is borrowed reference
|
||||
PyObject *t = PyDict_SetDefault(const_cache, key, key);
|
||||
PyObject *t;
|
||||
int res = PyDict_SetDefaultRef(const_cache, key, key, &t);
|
||||
Py_DECREF(key);
|
||||
if (t == NULL) {
|
||||
if (res < 0) {
|
||||
return ERROR;
|
||||
}
|
||||
if (t == key) { // obj is new constant.
|
||||
if (res == 0) { // inserted: obj is new constant.
|
||||
Py_DECREF(t);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (PyTuple_CheckExact(t)) {
|
||||
// t is still borrowed reference
|
||||
t = PyTuple_GET_ITEM(t, 1);
|
||||
PyObject *item = PyTuple_GET_ITEM(t, 1);
|
||||
Py_SETREF(*obj, Py_NewRef(item));
|
||||
Py_DECREF(t);
|
||||
}
|
||||
else {
|
||||
Py_SETREF(*obj, t);
|
||||
}
|
||||
|
||||
Py_SETREF(*obj, Py_NewRef(t));
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue