Skip to content

Commit abd004e

Browse files
authored
gh-99300: Use Py_NewRef() in Modules/_elementtree.c (#99438)
Replace Py_INCREF() and Py_XINCREF() with Py_NewRef() and Py_XNewRef() in Modules/_elementtree.c.
1 parent 6788303 commit abd004e

File tree

1 file changed

+37
-82
lines changed

1 file changed

+37
-82
lines changed

Modules/_elementtree.c

+37-82
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,7 @@ create_extra(ElementObject* self, PyObject* attrib)
229229
return -1;
230230
}
231231

232-
Py_XINCREF(attrib);
233-
self->extra->attrib = attrib;
232+
self->extra->attrib = Py_XNewRef(attrib);
234233

235234
self->extra->length = 0;
236235
self->extra->allocated = STATIC_CHILDREN;
@@ -286,16 +285,9 @@ create_new_element(PyObject* tag, PyObject* attrib)
286285
if (self == NULL)
287286
return NULL;
288287
self->extra = NULL;
289-
290-
Py_INCREF(tag);
291-
self->tag = tag;
292-
293-
Py_INCREF(Py_None);
294-
self->text = Py_None;
295-
296-
Py_INCREF(Py_None);
297-
self->tail = Py_None;
298-
288+
self->tag = Py_NewRef(tag);
289+
self->text = Py_NewRef(Py_None);
290+
self->tail = Py_NewRef(Py_None);
299291
self->weakreflist = NULL;
300292

301293
PyObject_GC_Track(self);
@@ -315,15 +307,9 @@ element_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
315307
{
316308
ElementObject *e = (ElementObject *)type->tp_alloc(type, 0);
317309
if (e != NULL) {
318-
Py_INCREF(Py_None);
319-
e->tag = Py_None;
320-
321-
Py_INCREF(Py_None);
322-
e->text = Py_None;
323-
324-
Py_INCREF(Py_None);
325-
e->tail = Py_None;
326-
310+
e->tag = Py_NewRef(Py_None);
311+
e->text = Py_NewRef(Py_None);
312+
e->tail = Py_NewRef(Py_None);
327313
e->extra = NULL;
328314
e->weakreflist = NULL;
329315
}
@@ -514,8 +500,7 @@ element_add_subelement(ElementObject* self, PyObject* element)
514500
if (element_resize(self, 1) < 0)
515501
return -1;
516502

517-
Py_INCREF(element);
518-
self->extra->children[self->extra->length] = element;
503+
self->extra->children[self->extra->length] = Py_NewRef(element);
519504

520505
self->extra->length++;
521506

@@ -747,8 +732,7 @@ _elementtree_Element___copy___impl(ElementObject *self)
747732
}
748733

749734
for (i = 0; i < self->extra->length; i++) {
750-
Py_INCREF(self->extra->children[i]);
751-
element->extra->children[i] = self->extra->children[i];
735+
element->extra->children[i] = Py_NewRef(self->extra->children[i]);
752736
}
753737

754738
assert(!element->extra->length);
@@ -863,8 +847,7 @@ deepcopy(PyObject *object, PyObject *memo)
863847

864848
/* Fast paths */
865849
if (object == Py_None || PyUnicode_CheckExact(object)) {
866-
Py_INCREF(object);
867-
return object;
850+
return Py_NewRef(object);
868851
}
869852

870853
if (Py_REFCNT(object) == 1) {
@@ -956,8 +939,7 @@ _elementtree_Element___getstate___impl(ElementObject *self)
956939
}
957940

958941
if (self->extra && self->extra->attrib) {
959-
attrib = self->extra->attrib;
960-
Py_INCREF(attrib);
942+
attrib = Py_NewRef(self->extra->attrib);
961943
}
962944
else {
963945
attrib = PyDict_New();
@@ -1043,8 +1025,7 @@ element_setstate_from_attributes(ElementObject *self,
10431025
dealloc_extra(oldextra);
10441026
return NULL;
10451027
}
1046-
Py_INCREF(child);
1047-
self->extra->children[i] = child;
1028+
self->extra->children[i] = Py_NewRef(child);
10481029
}
10491030

10501031
assert(!self->extra->length);
@@ -1276,8 +1257,7 @@ _elementtree_Element_findtext_impl(ElementObject *self, PyObject *path,
12761257
);
12771258

12781259
if (!self->extra) {
1279-
Py_INCREF(default_value);
1280-
return default_value;
1260+
return Py_NewRef(default_value);
12811261
}
12821262

12831263
for (i = 0; i < self->extra->length; i++) {
@@ -1301,8 +1281,7 @@ _elementtree_Element_findtext_impl(ElementObject *self, PyObject *path,
13011281
return NULL;
13021282
}
13031283

1304-
Py_INCREF(default_value);
1305-
return default_value;
1284+
return Py_NewRef(default_value);
13061285
}
13071286

13081287
/*[clinic input]
@@ -1396,8 +1375,7 @@ _elementtree_Element_get_impl(ElementObject *self, PyObject *key,
13961375
}
13971376
}
13981377

1399-
Py_INCREF(default_value);
1400-
return default_value;
1378+
return Py_NewRef(default_value);
14011379
}
14021380

14031381
static PyObject *
@@ -1456,8 +1434,7 @@ element_getitem(PyObject* self_, Py_ssize_t index)
14561434
return NULL;
14571435
}
14581436

1459-
Py_INCREF(self->extra->children[index]);
1460-
return self->extra->children[index];
1437+
return Py_NewRef(self->extra->children[index]);
14611438
}
14621439

14631440
/*[clinic input]
@@ -1495,8 +1472,7 @@ _elementtree_Element_insert_impl(ElementObject *self, Py_ssize_t index,
14951472
for (i = self->extra->length; i > index; i--)
14961473
self->extra->children[i] = self->extra->children[i-1];
14971474

1498-
Py_INCREF(subelement);
1499-
self->extra->children[index] = subelement;
1475+
self->extra->children[index] = Py_NewRef(subelement);
15001476

15011477
self->extra->length++;
15021478

@@ -1697,8 +1673,7 @@ element_setitem(PyObject* self_, Py_ssize_t index, PyObject* item)
16971673
raise_type_error(item);
16981674
return -1;
16991675
}
1700-
Py_INCREF(item);
1701-
self->extra->children[index] = item;
1676+
self->extra->children[index] = Py_NewRef(item);
17021677
} else {
17031678
self->extra->length--;
17041679
for (i = index; i < self->extra->length; i++)
@@ -1929,8 +1904,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value)
19291904
for (cur = start, i = 0; i < newlen;
19301905
cur += step, i++) {
19311906
PyObject* element = PySequence_Fast_GET_ITEM(seq, i);
1932-
Py_INCREF(element);
1933-
self->extra->children[cur] = element;
1907+
self->extra->children[cur] = Py_NewRef(element);
19341908
}
19351909

19361910
self->extra->length += newlen - slicelen;
@@ -1953,24 +1927,21 @@ static PyObject*
19531927
element_tag_getter(ElementObject *self, void *closure)
19541928
{
19551929
PyObject *res = self->tag;
1956-
Py_INCREF(res);
1957-
return res;
1930+
return Py_NewRef(res);
19581931
}
19591932

19601933
static PyObject*
19611934
element_text_getter(ElementObject *self, void *closure)
19621935
{
19631936
PyObject *res = element_get_text(self);
1964-
Py_XINCREF(res);
1965-
return res;
1937+
return Py_XNewRef(res);
19661938
}
19671939

19681940
static PyObject*
19691941
element_tail_getter(ElementObject *self, void *closure)
19701942
{
19711943
PyObject *res = element_get_tail(self);
1972-
Py_XINCREF(res);
1973-
return res;
1944+
return Py_XNewRef(res);
19741945
}
19751946

19761947
static PyObject*
@@ -1982,8 +1953,7 @@ element_attrib_getter(ElementObject *self, void *closure)
19821953
return NULL;
19831954
}
19841955
res = element_get_attrib(self);
1985-
Py_XINCREF(res);
1986-
return res;
1956+
return Py_XNewRef(res);
19871957
}
19881958

19891959
/* macro for setter validation */
@@ -2123,8 +2093,7 @@ parent_stack_push_new(ElementIterObject *it, ElementObject *parent)
21232093
it->parent_stack_size = new_size;
21242094
}
21252095
item = it->parent_stack + it->parent_stack_used++;
2126-
Py_INCREF(parent);
2127-
item->parent = parent;
2096+
item->parent = (ElementObject*)Py_NewRef(parent);
21282097
item->child_index = 0;
21292098
return 0;
21302099
}
@@ -2291,11 +2260,9 @@ create_elementiter(ElementObject *self, PyObject *tag, int gettext)
22912260
if (!it)
22922261
return NULL;
22932262

2294-
Py_INCREF(tag);
2295-
it->sought_tag = tag;
2263+
it->sought_tag = Py_NewRef(tag);
22962264
it->gettext = gettext;
2297-
Py_INCREF(self);
2298-
it->root_element = self;
2265+
it->root_element = (ElementObject*)Py_NewRef(self);
22992266

23002267
it->parent_stack = PyMem_New(ParentLocator, INIT_PARENT_STACK_SIZE);
23012268
if (it->parent_stack == NULL) {
@@ -2357,12 +2324,8 @@ treebuilder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
23572324
TreeBuilderObject *t = (TreeBuilderObject *)type->tp_alloc(type, 0);
23582325
if (t != NULL) {
23592326
t->root = NULL;
2360-
2361-
Py_INCREF(Py_None);
2362-
t->this = Py_None;
2363-
Py_INCREF(Py_None);
2364-
t->last = Py_None;
2365-
2327+
t->this = Py_NewRef(Py_None);
2328+
t->last = Py_NewRef(Py_None);
23662329
t->data = NULL;
23672330
t->element_factory = NULL;
23682331
t->comment_factory = NULL;
@@ -2705,8 +2668,7 @@ treebuilder_handle_start(TreeBuilderObject* self, PyObject* tag,
27052668
);
27062669
goto error;
27072670
}
2708-
Py_INCREF(node);
2709-
self->root = node;
2671+
self->root = Py_NewRef(node);
27102672
}
27112673

27122674
if (self->index < PyList_GET_SIZE(self->stack)) {
@@ -2743,7 +2705,7 @@ treebuilder_handle_data(TreeBuilderObject* self, PyObject* data)
27432705
Py_RETURN_NONE;
27442706
}
27452707
/* store the first item as is */
2746-
Py_INCREF(data); self->data = data;
2708+
self->data = Py_NewRef(data);
27472709
} else {
27482710
/* more than one item; use a list to collect items */
27492711
if (PyBytes_CheckExact(self->data) && Py_REFCNT(self->data) == 1 &&
@@ -2789,8 +2751,7 @@ treebuilder_handle_end(TreeBuilderObject* self, PyObject* tag)
27892751
}
27902752

27912753
item = self->last;
2792-
self->last = self->this;
2793-
Py_INCREF(self->last);
2754+
self->last = Py_NewRef(self->this);
27942755
Py_XSETREF(self->last_for_tail, self->last);
27952756
self->index--;
27962757
self->this = PyList_GET_ITEM(self->stack, self->index);
@@ -2827,8 +2788,7 @@ treebuilder_handle_comment(TreeBuilderObject* self, PyObject* text)
28272788
Py_XSETREF(self->last_for_tail, comment);
28282789
}
28292790
} else {
2830-
Py_INCREF(text);
2831-
comment = text;
2791+
comment = Py_NewRef(text);
28322792
}
28332793

28342794
if (self->events_append && self->comment_event_obj) {
@@ -2996,8 +2956,7 @@ treebuilder_done(TreeBuilderObject* self)
29962956
else
29972957
res = Py_None;
29982958

2999-
Py_INCREF(res);
3000-
return res;
2959+
return Py_NewRef(res);
30012960
}
30022961

30032962
/*[clinic input]
@@ -3115,8 +3074,7 @@ makeuniversal(XMLParserObject* self, const char* string)
31153074
size++;
31163075
} else {
31173076
/* plain name; use key as tag */
3118-
Py_INCREF(key);
3119-
tag = key;
3077+
tag = Py_NewRef(key);
31203078
}
31213079

31223080
/* decode universal name */
@@ -3505,8 +3463,7 @@ expat_start_doctype_handler(XMLParserObject *self,
35053463
return;
35063464
}
35073465
} else {
3508-
Py_INCREF(Py_None);
3509-
sysid_obj = Py_None;
3466+
sysid_obj = Py_NewRef(Py_None);
35103467
}
35113468

35123469
if (pubid) {
@@ -3517,8 +3474,7 @@ expat_start_doctype_handler(XMLParserObject *self,
35173474
return;
35183475
}
35193476
} else {
3520-
Py_INCREF(Py_None);
3521-
pubid_obj = Py_None;
3477+
pubid_obj = Py_NewRef(Py_None);
35223478
}
35233479

35243480
elementtreestate *st = ET_STATE_GLOBAL;
@@ -4377,8 +4333,7 @@ PyInit__elementtree(void)
43774333

43784334
m = PyState_FindModule(&elementtreemodule);
43794335
if (m) {
4380-
Py_INCREF(m);
4381-
return m;
4336+
return Py_NewRef(m);
43824337
}
43834338

43844339
/* Initialize object types */

0 commit comments

Comments
 (0)