Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-99537: Use Py_SETREF() function in C code #99656

Merged
merged 1 commit into from
Nov 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions Doc/includes/custom2.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,22 +42,18 @@ static int
Custom_init(CustomObject *self, PyObject *args, PyObject *kwds)
{
static char *kwlist[] = {"first", "last", "number", NULL};
PyObject *first = NULL, *last = NULL, *tmp;
PyObject *first = NULL, *last = NULL;

if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist,
&first, &last,
&self->number))
return -1;

if (first) {
tmp = self->first;
self->first = Py_NewRef(first);
Py_XDECREF(tmp);
Py_XSETREF(self->first, Py_NewRef(first));
}
if (last) {
tmp = self->last;
self->last = Py_NewRef(last);
Py_XDECREF(tmp);
Py_XSETREF(self->last, Py_NewRef(last));
}
return 0;
}
Expand Down
20 changes: 5 additions & 15 deletions Doc/includes/custom3.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,22 +42,18 @@ static int
Custom_init(CustomObject *self, PyObject *args, PyObject *kwds)
{
static char *kwlist[] = {"first", "last", "number", NULL};
PyObject *first = NULL, *last = NULL, *tmp;
PyObject *first = NULL, *last = NULL;

if (!PyArg_ParseTupleAndKeywords(args, kwds, "|UUi", kwlist,
&first, &last,
&self->number))
return -1;

if (first) {
tmp = self->first;
self->first = Py_NewRef(first);
Py_DECREF(tmp);
Py_SETREF(self->first, Py_NewRef(first));
}
if (last) {
tmp = self->last;
self->last = Py_NewRef(last);
Py_DECREF(tmp);
Py_SETREF(self->last, Py_NewRef(last));
}
return 0;
}
Expand All @@ -77,7 +73,6 @@ Custom_getfirst(CustomObject *self, void *closure)
static int
Custom_setfirst(CustomObject *self, PyObject *value, void *closure)
{
PyObject *tmp;
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "Cannot delete the first attribute");
return -1;
Expand All @@ -87,9 +82,7 @@ Custom_setfirst(CustomObject *self, PyObject *value, void *closure)
"The first attribute value must be a string");
return -1;
}
tmp = self->first;
self->first = Py_NewRef(value);
Py_DECREF(tmp);
Py_SETREF(self->first, Py_NewRef(value));
return 0;
}

Expand All @@ -102,7 +95,6 @@ Custom_getlast(CustomObject *self, void *closure)
static int
Custom_setlast(CustomObject *self, PyObject *value, void *closure)
{
PyObject *tmp;
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "Cannot delete the last attribute");
return -1;
Expand All @@ -112,9 +104,7 @@ Custom_setlast(CustomObject *self, PyObject *value, void *closure)
"The last attribute value must be a string");
return -1;
}
tmp = self->last;
self->last = Py_NewRef(value);
Py_DECREF(tmp);
Py_SETREF(self->last, Py_NewRef(value));
return 0;
}

Expand Down
18 changes: 5 additions & 13 deletions Doc/includes/custom4.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,22 +58,18 @@ static int
Custom_init(CustomObject *self, PyObject *args, PyObject *kwds)
{
static char *kwlist[] = {"first", "last", "number", NULL};
PyObject *first = NULL, *last = NULL, *tmp;
PyObject *first = NULL, *last = NULL;

if (!PyArg_ParseTupleAndKeywords(args, kwds, "|UUi", kwlist,
&first, &last,
&self->number))
return -1;

if (first) {
tmp = self->first;
self->first = Py_NewRef(first);
Py_DECREF(tmp);
Py_SETREF(self->first, Py_NewRef(first));
}
if (last) {
tmp = self->last;
self->last = Py_NewRef(last);
Py_DECREF(tmp);
Py_SETREF(self->last, Py_NewRef(last));
}
return 0;
}
Expand Down Expand Up @@ -102,9 +98,7 @@ Custom_setfirst(CustomObject *self, PyObject *value, void *closure)
"The first attribute value must be a string");
return -1;
}
Py_INCREF(value);
Py_CLEAR(self->first);
self->first = value;
Py_XSETREF(self->first, Py_NewRef(value));
return 0;
}

Expand All @@ -126,9 +120,7 @@ Custom_setlast(CustomObject *self, PyObject *value, void *closure)
"The last attribute value must be a string");
return -1;
}
Py_INCREF(value);
Py_CLEAR(self->last);
self->last = value;
Py_XSETREF(self->last, Py_NewRef(value));
return 0;
}

Expand Down
5 changes: 1 addition & 4 deletions Modules/_collectionsmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -1256,7 +1256,6 @@ deque_remove(dequeobject *deque, PyObject *value)
static int
deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v)
{
PyObject *old_value;
block *b;
Py_ssize_t n, len=Py_SIZE(deque), halflen=(len+1)>>1, index=i;

Expand All @@ -1282,9 +1281,7 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v)
while (--n >= 0)
b = b->leftlink;
}
old_value = b->data[i];
b->data[i] = Py_NewRef(v);
Py_DECREF(old_value);
Py_SETREF(b->data[i], Py_NewRef(v));
return 0;
}

Expand Down
8 changes: 2 additions & 6 deletions Modules/_datetimemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -6247,13 +6247,10 @@ datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw)
}
else {
/* Result is already aware - just replace tzinfo. */
temp = result->tzinfo;
result->tzinfo = Py_NewRef(PyDateTime_TimeZone_UTC);
Py_DECREF(temp);
Py_SETREF(result->tzinfo, Py_NewRef(PyDateTime_TimeZone_UTC));
}

/* Attach new tzinfo and let fromutc() do the rest. */
temp = result->tzinfo;
if (tzinfo == Py_None) {
tzinfo = local_timezone(result);
if (tzinfo == NULL) {
Expand All @@ -6263,8 +6260,7 @@ datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw)
}
else
Py_INCREF(tzinfo);
result->tzinfo = tzinfo;
Py_DECREF(temp);
Py_SETREF(result->tzinfo, tzinfo);

temp = (PyObject *)result;
result = (PyDateTime_DateTime *)
Expand Down
6 changes: 2 additions & 4 deletions Modules/_elementtree.c
Original file line number Diff line number Diff line change
Expand Up @@ -537,8 +537,7 @@ element_get_text(ElementObject* self)
if (!tmp)
return NULL;
self->text = tmp;
Py_DECREF(res);
res = tmp;
Py_SETREF(res, tmp);
}
}

Expand All @@ -559,8 +558,7 @@ element_get_tail(ElementObject* self)
if (!tmp)
return NULL;
self->tail = tmp;
Py_DECREF(res);
res = tmp;
Py_SETREF(res, tmp);
}
}

Expand Down
3 changes: 1 addition & 2 deletions Modules/_functoolsmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -1243,8 +1243,7 @@ lru_cache_clear_list(lru_list_elem *link)
{
while (link != NULL) {
lru_list_elem *next = link->next;
Py_DECREF(link);
link = next;
Py_SETREF(link, next);
}
}

Expand Down
3 changes: 1 addition & 2 deletions Modules/_io/stringio.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,7 @@ write_str(stringio *self, PyObject *obj)
if (self->writenl) {
PyObject *translated = PyUnicode_Replace(
decoded, &_Py_STR(newline), self->writenl, -1);
Py_DECREF(decoded);
decoded = translated;
Py_SETREF(decoded, translated);
}
if (decoded == NULL)
return -1;
Expand Down
9 changes: 3 additions & 6 deletions Modules/_io/textio.c
Original file line number Diff line number Diff line change
Expand Up @@ -320,8 +320,7 @@ _PyIncrementalNewlineDecoder_decode(PyObject *myself,
out = PyUnicode_DATA(modified);
PyUnicode_WRITE(kind, out, 0, '\r');
memcpy(out + kind, PyUnicode_DATA(output), kind * output_len);
Py_DECREF(output);
output = modified; /* output remains ready */
Py_SETREF(output, modified); /* output remains ready */
self->pendingcr = 0;
output_len++;
}
Expand All @@ -336,8 +335,7 @@ _PyIncrementalNewlineDecoder_decode(PyObject *myself,
PyObject *modified = PyUnicode_Substring(output, 0, output_len -1);
if (modified == NULL)
goto error;
Py_DECREF(output);
output = modified;
Py_SETREF(output, modified);
self->pendingcr = 1;
}
}
Expand Down Expand Up @@ -865,8 +863,7 @@ _textiowrapper_set_decoder(textio *self, PyObject *codec_info,
self->decoder, self->readtranslate ? Py_True : Py_False, NULL);
if (incrementalDecoder == NULL)
return -1;
Py_CLEAR(self->decoder);
self->decoder = incrementalDecoder;
Py_XSETREF(self->decoder, incrementalDecoder);
}

return 0;
Expand Down
4 changes: 1 addition & 3 deletions Modules/_json.c
Original file line number Diff line number Diff line change
Expand Up @@ -709,9 +709,7 @@ _parse_object_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ss
if (memokey == NULL) {
goto bail;
}
Py_INCREF(memokey);
Py_DECREF(key);
key = memokey;
Py_SETREF(key, Py_NewRef(memokey));
idx = next_idx;

/* skip whitespace between key and : delimiter, read :, skip whitespace */
Expand Down
7 changes: 2 additions & 5 deletions Modules/_pickle.c
Original file line number Diff line number Diff line change
Expand Up @@ -1829,8 +1829,7 @@ get_deep_attribute(PyObject *obj, PyObject *names, PyObject **pparent)
n = PyList_GET_SIZE(names);
for (i = 0; i < n; i++) {
PyObject *name = PyList_GET_ITEM(names, i);
Py_XDECREF(parent);
parent = obj;
Py_XSETREF(parent, obj);
(void)_PyObject_LookupAttr(parent, name, &obj);
if (obj == NULL) {
Py_DECREF(parent);
Expand Down Expand Up @@ -3717,9 +3716,7 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name)
else {
gen_global:
if (parent == module) {
Py_INCREF(lastname);
Py_DECREF(global_name);
global_name = lastname;
Py_SETREF(global_name, Py_NewRef(lastname));
}
if (self->proto >= 4) {
const char stack_global_op = STACK_GLOBAL;
Expand Down
3 changes: 1 addition & 2 deletions Modules/_sqlite/cursor.c
Original file line number Diff line number Diff line change
Expand Up @@ -1123,8 +1123,7 @@ pysqlite_cursor_iternext(pysqlite_Cursor *self)
PyObject *factory = self->row_factory;
PyObject *args[] = { (PyObject *)self, row, };
PyObject *new_row = PyObject_Vectorcall(factory, args, 2, NULL);
Py_DECREF(row);
row = new_row;
Py_SETREF(row, new_row);
}
return row;
}
Expand Down
3 changes: 1 addition & 2 deletions Modules/_testinternalcapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -523,8 +523,7 @@ set_eval_frame_record(PyObject *self, PyObject *list)
PyErr_SetString(PyExc_TypeError, "argument must be a list");
return NULL;
}
Py_CLEAR(record_list);
record_list = Py_NewRef(list);
Py_XSETREF(record_list, Py_NewRef(list));
_PyInterpreterState_SetEvalFrameFunc(PyInterpreterState_Get(), record_eval);
Py_RETURN_NONE;
}
Expand Down
3 changes: 1 addition & 2 deletions Modules/_tkinter.c
Original file line number Diff line number Diff line change
Expand Up @@ -1105,8 +1105,7 @@ fromBignumObj(TkappObject *tkapp, Tcl_Obj *value)
PyMem_Free(bytes);
if (res != NULL && bigValue.sign == MP_NEG) {
PyObject *res2 = PyNumber_Negative(res);
Py_DECREF(res);
res = res2;
Py_SETREF(res, res2);
}
mp_clear(&bigValue);
return res;
Expand Down
3 changes: 1 addition & 2 deletions Modules/_zoneinfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -1074,8 +1074,7 @@ load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj)
// that the dstoff is set correctly in that case.
if (PyObject_IsTrue(tti->dstoff)) {
_ttinfo *tti_after = &(self->tzrule_after.std);
Py_DECREF(tti_after->dstoff);
tti_after->dstoff = Py_NewRef(tti->dstoff);
Py_SETREF(tti_after->dstoff, Py_NewRef(tti->dstoff));
}
}

Expand Down
3 changes: 1 addition & 2 deletions Modules/audioop.c
Original file line number Diff line number Diff line change
Expand Up @@ -1471,8 +1471,7 @@ audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width,
len = (Py_ssize_t)(ncp - PyBytes_AsString(str));
rv = PyBytes_FromStringAndSize
(PyBytes_AsString(str), len);
Py_DECREF(str);
str = rv;
Py_SETREF(str, rv);
if (str == NULL)
goto exit;
rv = Py_BuildValue("(O(iO))", str, d, samps);
Expand Down
6 changes: 2 additions & 4 deletions Modules/cjkcodecs/multibytecodec.c
Original file line number Diff line number Diff line change
Expand Up @@ -980,8 +980,7 @@ _multibytecodec_MultibyteIncrementalEncoder_setstate_impl(MultibyteIncrementalEn
goto errorexit;
}

Py_CLEAR(self->pending);
self->pending = pending;
Py_XSETREF(self->pending, pending);
memcpy(self->state.c, statebytes+1+statebytes[0],
sizeof(self->state.c));

Expand Down Expand Up @@ -1438,8 +1437,7 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self,
memcpy(ctrdata + self->pendingsize,
PyBytes_AS_STRING(cres),
PyBytes_GET_SIZE(cres));
Py_DECREF(cres);
cres = ctr;
Py_SETREF(cres, ctr);
self->pendingsize = 0;
}

Expand Down
3 changes: 1 addition & 2 deletions Modules/itertoolsmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -834,8 +834,7 @@ teedataobject_safe_decref(PyObject *obj)
Py_REFCNT(obj) == 1) {
PyObject *nextlink = ((teedataobject *)obj)->nextlink;
((teedataobject *)obj)->nextlink = NULL;
Py_DECREF(obj);
obj = nextlink;
Py_SETREF(obj, nextlink);
}
Py_XDECREF(obj);
}
Expand Down
6 changes: 2 additions & 4 deletions Modules/mathmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -2069,17 +2069,15 @@ factorial_odd_part(unsigned long n)
Py_DECREF(partial);
if (tmp == NULL)
goto error;
Py_DECREF(inner);
inner = tmp;
Py_SETREF(inner, tmp);
/* Now inner is the product of all odd integers j in the range (0,
n/2**i], giving the inner product in the formula above. */

/* outer *= inner; */
tmp = PyNumber_Multiply(outer, inner);
if (tmp == NULL)
goto error;
Py_DECREF(outer);
outer = tmp;
Py_SETREF(outer, tmp);
}
Py_DECREF(inner);
return outer;
Expand Down
3 changes: 1 addition & 2 deletions Modules/posixmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -1202,8 +1202,7 @@ path_converter(PyObject *o, void *p)
}

/* still owns a reference to the original object */
Py_DECREF(o);
o = res;
Py_SETREF(o, res);
}

if (is_unicode) {
Expand Down