Skip to content

Commit 3a1dde8

Browse files
authored
gh-99300: Use Py_NewRef() in Objects/ directory (#99354)
Replace Py_INCREF() and Py_XINCREF() with Py_NewRef() and Py_XNewRef() in C files of the Objects/ directory.
1 parent 1960eb0 commit 3a1dde8

13 files changed

+66
-128
lines changed

Objects/memoryobject.c

+10-19
Original file line numberDiff line numberDiff line change
@@ -682,8 +682,7 @@ mbuf_add_view(_PyManagedBufferObject *mbuf, const Py_buffer *src)
682682
init_suboffsets(dest, src);
683683
init_flags(mv);
684684

685-
mv->mbuf = mbuf;
686-
Py_INCREF(mbuf);
685+
mv->mbuf = (_PyManagedBufferObject*)Py_NewRef(mbuf);
687686
mbuf->exports++;
688687

689688
return (PyObject *)mv;
@@ -713,8 +712,7 @@ mbuf_add_incomplete_view(_PyManagedBufferObject *mbuf, const Py_buffer *src,
713712
dest = &mv->view;
714713
init_shared_values(dest, src);
715714

716-
mv->mbuf = mbuf;
717-
Py_INCREF(mbuf);
715+
mv->mbuf = (_PyManagedBufferObject*)Py_NewRef(mbuf);
718716
mbuf->exports++;
719717

720718
return (PyObject *)mv;
@@ -1102,8 +1100,7 @@ static PyObject *
11021100
memory_enter(PyObject *self, PyObject *args)
11031101
{
11041102
CHECK_RELEASED(self);
1105-
Py_INCREF(self);
1106-
return self;
1103+
return Py_NewRef(self);
11071104
}
11081105

11091106
static PyObject *
@@ -1515,8 +1512,7 @@ memory_getbuf(PyMemoryViewObject *self, Py_buffer *view, int flags)
15151512
}
15161513

15171514

1518-
view->obj = (PyObject *)self;
1519-
Py_INCREF(view->obj);
1515+
view->obj = Py_NewRef(self);
15201516
self->exports++;
15211517

15221518
return 0;
@@ -2047,10 +2043,9 @@ struct_unpack_single(const char *ptr, struct unpacker *x)
20472043
return NULL;
20482044

20492045
if (PyTuple_GET_SIZE(v) == 1) {
2050-
PyObject *tmp = PyTuple_GET_ITEM(v, 0);
2051-
Py_INCREF(tmp);
2046+
PyObject *res = Py_NewRef(PyTuple_GET_ITEM(v, 0));
20522047
Py_DECREF(v);
2053-
return tmp;
2048+
return res;
20542049
}
20552050

20562051
return v;
@@ -2496,8 +2491,7 @@ memory_subscript(PyMemoryViewObject *self, PyObject *key)
24962491
return unpack_single(self, view->buf, fmt);
24972492
}
24982493
else if (key == Py_Ellipsis) {
2499-
Py_INCREF(self);
2500-
return (PyObject *)self;
2494+
return Py_NewRef(self);
25012495
}
25022496
else {
25032497
PyErr_SetString(PyExc_TypeError,
@@ -2957,8 +2951,7 @@ memory_richcompare(PyObject *v, PyObject *w, int op)
29572951
unpacker_free(unpack_v);
29582952
unpacker_free(unpack_w);
29592953

2960-
Py_XINCREF(res);
2961-
return res;
2954+
return Py_XNewRef(res);
29622955
}
29632956

29642957
/**************************************************************************/
@@ -3052,8 +3045,7 @@ memory_obj_get(PyMemoryViewObject *self, void *Py_UNUSED(ignored))
30523045
if (view->obj == NULL) {
30533046
Py_RETURN_NONE;
30543047
}
3055-
Py_INCREF(view->obj);
3056-
return view->obj;
3048+
return Py_NewRef(view->obj);
30573049
}
30583050

30593051
static PyObject *
@@ -3281,8 +3273,7 @@ memory_iter(PyObject *seq)
32813273
it->it_fmt = fmt;
32823274
it->it_length = memory_length(obj);
32833275
it->it_index = 0;
3284-
Py_INCREF(seq);
3285-
it->it_seq = obj;
3276+
it->it_seq = (PyMemoryViewObject*)Py_NewRef(obj);
32863277
_PyObject_GC_TRACK(it);
32873278
return (PyObject *)it;
32883279
}

Objects/methodobject.c

+5-10
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,7 @@ PyCMethod_New(PyMethodDef *ml, PyObject *self, PyObject *module, PyTypeObject *c
8888
if (om == NULL) {
8989
return NULL;
9090
}
91-
Py_INCREF(cls);
92-
om->mm_class = cls;
91+
om->mm_class = (PyTypeObject*)Py_NewRef(cls);
9392
op = (PyCFunctionObject *)om;
9493
} else {
9594
if (cls) {
@@ -106,10 +105,8 @@ PyCMethod_New(PyMethodDef *ml, PyObject *self, PyObject *module, PyTypeObject *c
106105

107106
op->m_weakreflist = NULL;
108107
op->m_ml = ml;
109-
Py_XINCREF(self);
110-
op->m_self = self;
111-
Py_XINCREF(module);
112-
op->m_module = module;
108+
op->m_self = Py_XNewRef(self);
109+
op->m_module = Py_XNewRef(module);
113110
op->vectorcall = vectorcall;
114111
_PyObject_GC_TRACK(op);
115112
return (PyObject *)op;
@@ -260,8 +257,7 @@ meth_get__self__(PyCFunctionObject *m, void *closure)
260257
self = PyCFunction_GET_SELF(m);
261258
if (self == NULL)
262259
self = Py_None;
263-
Py_INCREF(self);
264-
return self;
260+
return Py_NewRef(self);
265261
}
266262

267263
static PyGetSetDef meth_getsets [] = {
@@ -314,8 +310,7 @@ meth_richcompare(PyObject *self, PyObject *other, int op)
314310
res = eq ? Py_True : Py_False;
315311
else
316312
res = eq ? Py_False : Py_True;
317-
Py_INCREF(res);
318-
return res;
313+
return Py_NewRef(res);
319314
}
320315

321316
static Py_hash_t

Objects/moduleobject.c

+3-6
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ module_init_dict(PyModuleObject *mod, PyObject *md_dict,
7070
if (PyDict_SetItem(md_dict, &_Py_ID(__spec__), Py_None) != 0)
7171
return -1;
7272
if (PyUnicode_CheckExact(name)) {
73-
Py_INCREF(name);
74-
Py_XSETREF(mod->md_name, name);
73+
Py_XSETREF(mod->md_name, Py_NewRef(name));
7574
}
7675

7776
return 0;
@@ -506,8 +505,7 @@ PyModule_GetNameObject(PyObject *m)
506505
}
507506
return NULL;
508507
}
509-
Py_INCREF(name);
510-
return name;
508+
return Py_NewRef(name);
511509
}
512510

513511
const char *
@@ -541,8 +539,7 @@ PyModule_GetFilenameObject(PyObject *m)
541539
}
542540
return NULL;
543541
}
544-
Py_INCREF(fileobj);
545-
return fileobj;
542+
return Py_NewRef(fileobj);
546543
}
547544

548545
const char *

Objects/object.c

+5-10
Original file line numberDiff line numberDiff line change
@@ -455,8 +455,7 @@ PyObject_Str(PyObject *v)
455455
if (PyUnicode_READY(v) < 0)
456456
return NULL;
457457
#endif
458-
Py_INCREF(v);
459-
return v;
458+
return Py_NewRef(v);
460459
}
461460
if (Py_TYPE(v)->tp_str == NULL)
462461
return PyObject_Repr(v);
@@ -532,8 +531,7 @@ PyObject_Bytes(PyObject *v)
532531
return PyBytes_FromString("<NULL>");
533532

534533
if (PyBytes_CheckExact(v)) {
535-
Py_INCREF(v);
536-
return v;
534+
return Py_NewRef(v);
537535
}
538536

539537
func = _PyObject_LookupSpecial(v, &_Py_ID(__bytes__));
@@ -689,8 +687,7 @@ do_richcompare(PyThreadState *tstate, PyObject *v, PyObject *w, int op)
689687
Py_TYPE(w)->tp_name);
690688
return NULL;
691689
}
692-
Py_INCREF(res);
693-
return res;
690+
return Py_NewRef(res);
694691
}
695692

696693
/* Perform a rich comparison with object result. This wraps do_richcompare()
@@ -1096,8 +1093,7 @@ _PyObject_GetDictPtr(PyObject *obj)
10961093
PyObject *
10971094
PyObject_SelfIter(PyObject *obj)
10981095
{
1099-
Py_INCREF(obj);
1100-
return obj;
1096+
return Py_NewRef(obj);
11011097
}
11021098

11031099
/* Helper used when the __next__ method is removed from a type:
@@ -1481,8 +1477,7 @@ PyObject_GenericSetDict(PyObject *obj, PyObject *value, void *context)
14811477
"not a '%.200s'", Py_TYPE(value)->tp_name);
14821478
return -1;
14831479
}
1484-
Py_INCREF(value);
1485-
Py_XSETREF(*dictptr, value);
1480+
Py_XSETREF(*dictptr, Py_NewRef(value));
14861481
return 0;
14871482
}
14881483

Objects/odictobject.c

+8-16
Original file line numberDiff line numberDiff line change
@@ -889,8 +889,7 @@ odict_inplace_or(PyObject *self, PyObject *other)
889889
if (mutablemapping_update_arg(self, other) < 0) {
890890
return NULL;
891891
}
892-
Py_INCREF(self);
893-
return self;
892+
return Py_NewRef(self);
894893
}
895894

896895
/* tp_as_number */
@@ -1007,8 +1006,7 @@ OrderedDict_setdefault_impl(PyODictObject *self, PyObject *key,
10071006
return NULL;
10081007
assert(_odict_find_node(self, key) == NULL);
10091008
if (PyODict_SetItem((PyObject *)self, key, default_value) >= 0) {
1010-
result = default_value;
1011-
Py_INCREF(result);
1009+
result = Py_NewRef(default_value);
10121010
}
10131011
}
10141012
else {
@@ -1024,8 +1022,7 @@ OrderedDict_setdefault_impl(PyODictObject *self, PyObject *key,
10241022
result = PyObject_GetItem((PyObject *)self, key);
10251023
}
10261024
else if (PyObject_SetItem((PyObject *)self, key, default_value) >= 0) {
1027-
result = default_value;
1028-
Py_INCREF(result);
1025+
result = Py_NewRef(default_value);
10291026
}
10301027
}
10311028

@@ -1055,8 +1052,7 @@ _odict_popkey_hash(PyObject *od, PyObject *key, PyObject *failobj,
10551052
else if (value == NULL && !PyErr_Occurred()) {
10561053
/* Apply the fallback value, if necessary. */
10571054
if (failobj) {
1058-
value = failobj;
1059-
Py_INCREF(failobj);
1055+
value = Py_NewRef(failobj);
10601056
}
10611057
else {
10621058
PyErr_SetObject(PyExc_KeyError, key);
@@ -1497,8 +1493,7 @@ odict_richcompare(PyObject *v, PyObject *w, int op)
14971493
return NULL;
14981494

14991495
res = (eq == (op == Py_EQ)) ? Py_True : Py_False;
1500-
Py_INCREF(res);
1501-
return res;
1496+
return Py_NewRef(res);
15021497
} else {
15031498
Py_RETURN_NOTIMPLEMENTED;
15041499
}
@@ -1714,8 +1709,7 @@ odictiter_nextkey(odictiterobject *di)
17141709
di->di_current = NULL;
17151710
}
17161711
else {
1717-
di->di_current = _odictnode_KEY(node);
1718-
Py_INCREF(di->di_current);
1712+
di->di_current = Py_NewRef(_odictnode_KEY(node));
17191713
}
17201714

17211715
return key;
@@ -1872,12 +1866,10 @@ odictiter_new(PyODictObject *od, int kind)
18721866

18731867
di->kind = kind;
18741868
node = reversed ? _odict_LAST(od) : _odict_FIRST(od);
1875-
di->di_current = node ? _odictnode_KEY(node) : NULL;
1876-
Py_XINCREF(di->di_current);
1869+
di->di_current = node ? Py_NewRef(_odictnode_KEY(node)) : NULL;
18771870
di->di_size = PyODict_SIZE(od);
18781871
di->di_state = od->od_state;
1879-
di->di_odict = od;
1880-
Py_INCREF(od);
1872+
di->di_odict = (PyODictObject*)Py_NewRef(od);
18811873

18821874
_PyObject_GC_TRACK(di);
18831875
return (PyObject *)di;

Objects/setobject.c

+10-18
Original file line numberDiff line numberDiff line change
@@ -588,8 +588,7 @@ set_merge(PySetObject *so, PyObject *otherset)
588588
key = other_entry->key;
589589
if (key != NULL) {
590590
assert(so_entry->key == NULL);
591-
Py_INCREF(key);
592-
so_entry->key = key;
591+
so_entry->key = Py_NewRef(key);
593592
so_entry->hash = other_entry->hash;
594593
}
595594
}
@@ -607,8 +606,8 @@ set_merge(PySetObject *so, PyObject *otherset)
607606
for (i = other->mask + 1; i > 0 ; i--, other_entry++) {
608607
key = other_entry->key;
609608
if (key != NULL && key != dummy) {
610-
Py_INCREF(key);
611-
set_insert_clean(newtable, newmask, key, other_entry->hash);
609+
set_insert_clean(newtable, newmask, Py_NewRef(key),
610+
other_entry->hash);
612611
}
613612
}
614613
return 0;
@@ -820,8 +819,7 @@ static PyObject *setiter_iternext(setiterobject *si)
820819
goto fail;
821820
si->len--;
822821
key = entry[i].key;
823-
Py_INCREF(key);
824-
return key;
822+
return Py_NewRef(key);
825823

826824
fail:
827825
si->si_set = NULL;
@@ -868,8 +866,7 @@ set_iter(PySetObject *so)
868866
setiterobject *si = PyObject_GC_New(setiterobject, &PySetIter_Type);
869867
if (si == NULL)
870868
return NULL;
871-
Py_INCREF(so);
872-
si->si_set = so;
869+
si->si_set = (PySetObject*)Py_NewRef(so);
873870
si->si_used = so->used;
874871
si->si_pos = 0;
875872
si->len = so->used;
@@ -997,8 +994,7 @@ make_new_frozenset(PyTypeObject *type, PyObject *iterable)
997994

998995
if (iterable != NULL && PyFrozenSet_CheckExact(iterable)) {
999996
/* frozenset(f) is idempotent */
1000-
Py_INCREF(iterable);
1001-
return iterable;
997+
return Py_NewRef(iterable);
1002998
}
1003999
return make_new_set(type, iterable);
10041000
}
@@ -1100,8 +1096,7 @@ static PyObject *
11001096
frozenset_copy(PySetObject *so, PyObject *Py_UNUSED(ignored))
11011097
{
11021098
if (PyFrozenSet_CheckExact(so)) {
1103-
Py_INCREF(so);
1104-
return (PyObject *)so;
1099+
return Py_NewRef(so);
11051100
}
11061101
return set_copy(so, NULL);
11071102
}
@@ -1173,8 +1168,7 @@ set_ior(PySetObject *so, PyObject *other)
11731168

11741169
if (set_update_internal(so, other))
11751170
return NULL;
1176-
Py_INCREF(so);
1177-
return (PyObject *)so;
1171+
return Py_NewRef(so);
11781172
}
11791173

11801174
static PyObject *
@@ -1264,12 +1258,11 @@ static PyObject *
12641258
set_intersection_multi(PySetObject *so, PyObject *args)
12651259
{
12661260
Py_ssize_t i;
1267-
PyObject *result = (PyObject *)so;
12681261

12691262
if (PyTuple_GET_SIZE(args) == 0)
12701263
return set_copy(so, NULL);
12711264

1272-
Py_INCREF(so);
1265+
PyObject *result = Py_NewRef(so);
12731266
for (i=0 ; i<PyTuple_GET_SIZE(args) ; i++) {
12741267
PyObject *other = PyTuple_GET_ITEM(args, i);
12751268
PyObject *newresult = set_intersection((PySetObject *)result, other);
@@ -1336,8 +1329,7 @@ set_iand(PySetObject *so, PyObject *other)
13361329
if (result == NULL)
13371330
return NULL;
13381331
Py_DECREF(result);
1339-
Py_INCREF(so);
1340-
return (PyObject *)so;
1332+
return Py_NewRef(so);
13411333
}
13421334

13431335
static PyObject *

0 commit comments

Comments
 (0)