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.
This commit is contained in:
Victor Stinner 2022-11-13 16:04:11 +01:00 committed by GitHub
parent 6788303f5c
commit abd004e355
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -229,8 +229,7 @@ create_extra(ElementObject* self, PyObject* attrib)
return -1; return -1;
} }
Py_XINCREF(attrib); self->extra->attrib = Py_XNewRef(attrib);
self->extra->attrib = attrib;
self->extra->length = 0; self->extra->length = 0;
self->extra->allocated = STATIC_CHILDREN; self->extra->allocated = STATIC_CHILDREN;
@ -286,16 +285,9 @@ create_new_element(PyObject* tag, PyObject* attrib)
if (self == NULL) if (self == NULL)
return NULL; return NULL;
self->extra = NULL; self->extra = NULL;
self->tag = Py_NewRef(tag);
Py_INCREF(tag); self->text = Py_NewRef(Py_None);
self->tag = tag; self->tail = Py_NewRef(Py_None);
Py_INCREF(Py_None);
self->text = Py_None;
Py_INCREF(Py_None);
self->tail = Py_None;
self->weakreflist = NULL; self->weakreflist = NULL;
PyObject_GC_Track(self); PyObject_GC_Track(self);
@ -315,15 +307,9 @@ element_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{ {
ElementObject *e = (ElementObject *)type->tp_alloc(type, 0); ElementObject *e = (ElementObject *)type->tp_alloc(type, 0);
if (e != NULL) { if (e != NULL) {
Py_INCREF(Py_None); e->tag = Py_NewRef(Py_None);
e->tag = Py_None; e->text = Py_NewRef(Py_None);
e->tail = Py_NewRef(Py_None);
Py_INCREF(Py_None);
e->text = Py_None;
Py_INCREF(Py_None);
e->tail = Py_None;
e->extra = NULL; e->extra = NULL;
e->weakreflist = NULL; e->weakreflist = NULL;
} }
@ -514,8 +500,7 @@ element_add_subelement(ElementObject* self, PyObject* element)
if (element_resize(self, 1) < 0) if (element_resize(self, 1) < 0)
return -1; return -1;
Py_INCREF(element); self->extra->children[self->extra->length] = Py_NewRef(element);
self->extra->children[self->extra->length] = element;
self->extra->length++; self->extra->length++;
@ -747,8 +732,7 @@ _elementtree_Element___copy___impl(ElementObject *self)
} }
for (i = 0; i < self->extra->length; i++) { for (i = 0; i < self->extra->length; i++) {
Py_INCREF(self->extra->children[i]); element->extra->children[i] = Py_NewRef(self->extra->children[i]);
element->extra->children[i] = self->extra->children[i];
} }
assert(!element->extra->length); assert(!element->extra->length);
@ -863,8 +847,7 @@ deepcopy(PyObject *object, PyObject *memo)
/* Fast paths */ /* Fast paths */
if (object == Py_None || PyUnicode_CheckExact(object)) { if (object == Py_None || PyUnicode_CheckExact(object)) {
Py_INCREF(object); return Py_NewRef(object);
return object;
} }
if (Py_REFCNT(object) == 1) { if (Py_REFCNT(object) == 1) {
@ -956,8 +939,7 @@ _elementtree_Element___getstate___impl(ElementObject *self)
} }
if (self->extra && self->extra->attrib) { if (self->extra && self->extra->attrib) {
attrib = self->extra->attrib; attrib = Py_NewRef(self->extra->attrib);
Py_INCREF(attrib);
} }
else { else {
attrib = PyDict_New(); attrib = PyDict_New();
@ -1043,8 +1025,7 @@ element_setstate_from_attributes(ElementObject *self,
dealloc_extra(oldextra); dealloc_extra(oldextra);
return NULL; return NULL;
} }
Py_INCREF(child); self->extra->children[i] = Py_NewRef(child);
self->extra->children[i] = child;
} }
assert(!self->extra->length); assert(!self->extra->length);
@ -1276,8 +1257,7 @@ _elementtree_Element_findtext_impl(ElementObject *self, PyObject *path,
); );
if (!self->extra) { if (!self->extra) {
Py_INCREF(default_value); return Py_NewRef(default_value);
return default_value;
} }
for (i = 0; i < self->extra->length; i++) { for (i = 0; i < self->extra->length; i++) {
@ -1301,8 +1281,7 @@ _elementtree_Element_findtext_impl(ElementObject *self, PyObject *path,
return NULL; return NULL;
} }
Py_INCREF(default_value); return Py_NewRef(default_value);
return default_value;
} }
/*[clinic input] /*[clinic input]
@ -1396,8 +1375,7 @@ _elementtree_Element_get_impl(ElementObject *self, PyObject *key,
} }
} }
Py_INCREF(default_value); return Py_NewRef(default_value);
return default_value;
} }
static PyObject * static PyObject *
@ -1456,8 +1434,7 @@ element_getitem(PyObject* self_, Py_ssize_t index)
return NULL; return NULL;
} }
Py_INCREF(self->extra->children[index]); return Py_NewRef(self->extra->children[index]);
return self->extra->children[index];
} }
/*[clinic input] /*[clinic input]
@ -1495,8 +1472,7 @@ _elementtree_Element_insert_impl(ElementObject *self, Py_ssize_t index,
for (i = self->extra->length; i > index; i--) for (i = self->extra->length; i > index; i--)
self->extra->children[i] = self->extra->children[i-1]; self->extra->children[i] = self->extra->children[i-1];
Py_INCREF(subelement); self->extra->children[index] = Py_NewRef(subelement);
self->extra->children[index] = subelement;
self->extra->length++; self->extra->length++;
@ -1697,8 +1673,7 @@ element_setitem(PyObject* self_, Py_ssize_t index, PyObject* item)
raise_type_error(item); raise_type_error(item);
return -1; return -1;
} }
Py_INCREF(item); self->extra->children[index] = Py_NewRef(item);
self->extra->children[index] = item;
} else { } else {
self->extra->length--; self->extra->length--;
for (i = index; i < self->extra->length; i++) for (i = index; i < self->extra->length; i++)
@ -1929,8 +1904,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value)
for (cur = start, i = 0; i < newlen; for (cur = start, i = 0; i < newlen;
cur += step, i++) { cur += step, i++) {
PyObject* element = PySequence_Fast_GET_ITEM(seq, i); PyObject* element = PySequence_Fast_GET_ITEM(seq, i);
Py_INCREF(element); self->extra->children[cur] = Py_NewRef(element);
self->extra->children[cur] = element;
} }
self->extra->length += newlen - slicelen; self->extra->length += newlen - slicelen;
@ -1953,24 +1927,21 @@ static PyObject*
element_tag_getter(ElementObject *self, void *closure) element_tag_getter(ElementObject *self, void *closure)
{ {
PyObject *res = self->tag; PyObject *res = self->tag;
Py_INCREF(res); return Py_NewRef(res);
return res;
} }
static PyObject* static PyObject*
element_text_getter(ElementObject *self, void *closure) element_text_getter(ElementObject *self, void *closure)
{ {
PyObject *res = element_get_text(self); PyObject *res = element_get_text(self);
Py_XINCREF(res); return Py_XNewRef(res);
return res;
} }
static PyObject* static PyObject*
element_tail_getter(ElementObject *self, void *closure) element_tail_getter(ElementObject *self, void *closure)
{ {
PyObject *res = element_get_tail(self); PyObject *res = element_get_tail(self);
Py_XINCREF(res); return Py_XNewRef(res);
return res;
} }
static PyObject* static PyObject*
@ -1982,8 +1953,7 @@ element_attrib_getter(ElementObject *self, void *closure)
return NULL; return NULL;
} }
res = element_get_attrib(self); res = element_get_attrib(self);
Py_XINCREF(res); return Py_XNewRef(res);
return res;
} }
/* macro for setter validation */ /* macro for setter validation */
@ -2123,8 +2093,7 @@ parent_stack_push_new(ElementIterObject *it, ElementObject *parent)
it->parent_stack_size = new_size; it->parent_stack_size = new_size;
} }
item = it->parent_stack + it->parent_stack_used++; item = it->parent_stack + it->parent_stack_used++;
Py_INCREF(parent); item->parent = (ElementObject*)Py_NewRef(parent);
item->parent = parent;
item->child_index = 0; item->child_index = 0;
return 0; return 0;
} }
@ -2291,11 +2260,9 @@ create_elementiter(ElementObject *self, PyObject *tag, int gettext)
if (!it) if (!it)
return NULL; return NULL;
Py_INCREF(tag); it->sought_tag = Py_NewRef(tag);
it->sought_tag = tag;
it->gettext = gettext; it->gettext = gettext;
Py_INCREF(self); it->root_element = (ElementObject*)Py_NewRef(self);
it->root_element = self;
it->parent_stack = PyMem_New(ParentLocator, INIT_PARENT_STACK_SIZE); it->parent_stack = PyMem_New(ParentLocator, INIT_PARENT_STACK_SIZE);
if (it->parent_stack == NULL) { if (it->parent_stack == NULL) {
@ -2357,12 +2324,8 @@ treebuilder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
TreeBuilderObject *t = (TreeBuilderObject *)type->tp_alloc(type, 0); TreeBuilderObject *t = (TreeBuilderObject *)type->tp_alloc(type, 0);
if (t != NULL) { if (t != NULL) {
t->root = NULL; t->root = NULL;
t->this = Py_NewRef(Py_None);
Py_INCREF(Py_None); t->last = Py_NewRef(Py_None);
t->this = Py_None;
Py_INCREF(Py_None);
t->last = Py_None;
t->data = NULL; t->data = NULL;
t->element_factory = NULL; t->element_factory = NULL;
t->comment_factory = NULL; t->comment_factory = NULL;
@ -2705,8 +2668,7 @@ treebuilder_handle_start(TreeBuilderObject* self, PyObject* tag,
); );
goto error; goto error;
} }
Py_INCREF(node); self->root = Py_NewRef(node);
self->root = node;
} }
if (self->index < PyList_GET_SIZE(self->stack)) { if (self->index < PyList_GET_SIZE(self->stack)) {
@ -2743,7 +2705,7 @@ treebuilder_handle_data(TreeBuilderObject* self, PyObject* data)
Py_RETURN_NONE; Py_RETURN_NONE;
} }
/* store the first item as is */ /* store the first item as is */
Py_INCREF(data); self->data = data; self->data = Py_NewRef(data);
} else { } else {
/* more than one item; use a list to collect items */ /* more than one item; use a list to collect items */
if (PyBytes_CheckExact(self->data) && Py_REFCNT(self->data) == 1 && if (PyBytes_CheckExact(self->data) && Py_REFCNT(self->data) == 1 &&
@ -2789,8 +2751,7 @@ treebuilder_handle_end(TreeBuilderObject* self, PyObject* tag)
} }
item = self->last; item = self->last;
self->last = self->this; self->last = Py_NewRef(self->this);
Py_INCREF(self->last);
Py_XSETREF(self->last_for_tail, self->last); Py_XSETREF(self->last_for_tail, self->last);
self->index--; self->index--;
self->this = PyList_GET_ITEM(self->stack, self->index); self->this = PyList_GET_ITEM(self->stack, self->index);
@ -2827,8 +2788,7 @@ treebuilder_handle_comment(TreeBuilderObject* self, PyObject* text)
Py_XSETREF(self->last_for_tail, comment); Py_XSETREF(self->last_for_tail, comment);
} }
} else { } else {
Py_INCREF(text); comment = Py_NewRef(text);
comment = text;
} }
if (self->events_append && self->comment_event_obj) { if (self->events_append && self->comment_event_obj) {
@ -2996,8 +2956,7 @@ treebuilder_done(TreeBuilderObject* self)
else else
res = Py_None; res = Py_None;
Py_INCREF(res); return Py_NewRef(res);
return res;
} }
/*[clinic input] /*[clinic input]
@ -3115,8 +3074,7 @@ makeuniversal(XMLParserObject* self, const char* string)
size++; size++;
} else { } else {
/* plain name; use key as tag */ /* plain name; use key as tag */
Py_INCREF(key); tag = Py_NewRef(key);
tag = key;
} }
/* decode universal name */ /* decode universal name */
@ -3505,8 +3463,7 @@ expat_start_doctype_handler(XMLParserObject *self,
return; return;
} }
} else { } else {
Py_INCREF(Py_None); sysid_obj = Py_NewRef(Py_None);
sysid_obj = Py_None;
} }
if (pubid) { if (pubid) {
@ -3517,8 +3474,7 @@ expat_start_doctype_handler(XMLParserObject *self,
return; return;
} }
} else { } else {
Py_INCREF(Py_None); pubid_obj = Py_NewRef(Py_None);
pubid_obj = Py_None;
} }
elementtreestate *st = ET_STATE_GLOBAL; elementtreestate *st = ET_STATE_GLOBAL;
@ -4377,8 +4333,7 @@ PyInit__elementtree(void)
m = PyState_FindModule(&elementtreemodule); m = PyState_FindModule(&elementtreemodule);
if (m) { if (m) {
Py_INCREF(m); return Py_NewRef(m);
return m;
} }
/* Initialize object types */ /* Initialize object types */