@@ -230,6 +230,7 @@ typedef struct {
230
230
231
231
PyObject * weakreflist ; /* For tp_weaklistoffset */
232
232
233
+ elementtreestate * state ;
233
234
} ElementObject ;
234
235
235
236
@@ -309,6 +310,7 @@ create_new_element(elementtreestate *st, PyObject *tag, PyObject *attrib)
309
310
self -> text = Py_NewRef (Py_None );
310
311
self -> tail = Py_NewRef (Py_None );
311
312
self -> weakreflist = NULL ;
313
+ self -> state = ET_STATE_GLOBAL ;
312
314
313
315
PyObject_GC_Track (self );
314
316
@@ -332,6 +334,7 @@ element_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
332
334
e -> tail = Py_NewRef (Py_None );
333
335
e -> extra = NULL ;
334
336
e -> weakreflist = NULL ;
337
+ e -> state = ET_STATE_GLOBAL ;
335
338
}
336
339
return (PyObject * )e ;
337
340
}
@@ -418,6 +421,7 @@ element_init(PyObject *self, PyObject *args, PyObject *kwds)
418
421
}
419
422
420
423
self_elem = (ElementObject * )self ;
424
+ self_elem -> state = ET_STATE_GLOBAL ;
421
425
422
426
if (attrib != NULL && !is_empty_dict (attrib )) {
423
427
if (create_extra (self_elem , attrib ) < 0 ) {
@@ -506,7 +510,7 @@ LOCAL(int)
506
510
element_add_subelement (ElementObject * self , PyObject * element )
507
511
{
508
512
/* add a child element to a parent */
509
- elementtreestate * st = ET_STATE_GLOBAL ;
513
+ elementtreestate * st = self -> state ;
510
514
if (!Element_Check (st , element )) {
511
515
raise_type_error (element );
512
516
return -1 ;
@@ -727,7 +731,7 @@ _elementtree_Element___copy___impl(ElementObject *self)
727
731
{
728
732
Py_ssize_t i ;
729
733
ElementObject * element ;
730
- elementtreestate * st = ET_STATE_GLOBAL ;
734
+ elementtreestate * st = self -> state ;
731
735
732
736
element = (ElementObject * ) create_new_element (
733
737
st , self -> tag , self -> extra ? self -> extra -> attrib : NULL );
@@ -781,7 +785,7 @@ _elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo)
781
785
PyObject * tail ;
782
786
PyObject * id ;
783
787
784
- elementtreestate * st = ET_STATE_GLOBAL ;
788
+ elementtreestate * st = self -> state ;
785
789
tag = deepcopy (st , self -> tag , memo );
786
790
if (!tag )
787
791
return NULL ;
@@ -1031,7 +1035,7 @@ element_setstate_from_attributes(ElementObject *self,
1031
1035
}
1032
1036
1033
1037
/* Copy children */
1034
- elementtreestate * st = ET_STATE_GLOBAL ;
1038
+ elementtreestate * st = self -> state ;
1035
1039
for (i = 0 ; i < nchildren ; i ++ ) {
1036
1040
PyObject * child = PyList_GET_ITEM (children , i );
1037
1041
if (!Element_Check (st , child )) {
@@ -1218,7 +1222,7 @@ _elementtree_Element_find_impl(ElementObject *self, PyObject *path,
1218
1222
/*[clinic end generated code: output=41b43f0f0becafae input=359b6985f6489d2e]*/
1219
1223
{
1220
1224
Py_ssize_t i ;
1221
- elementtreestate * st = ET_STATE_GLOBAL ;
1225
+ elementtreestate * st = self -> state ;
1222
1226
1223
1227
if (checkpath (path ) || namespaces != Py_None ) {
1224
1228
return PyObject_CallMethodObjArgs (
@@ -1261,7 +1265,7 @@ _elementtree_Element_findtext_impl(ElementObject *self, PyObject *path,
1261
1265
/*[clinic end generated code: output=83b3ba4535d308d2 input=b53a85aa5aa2a916]*/
1262
1266
{
1263
1267
Py_ssize_t i ;
1264
- elementtreestate * st = ET_STATE_GLOBAL ;
1268
+ elementtreestate * st = self -> state ;
1265
1269
1266
1270
if (checkpath (path ) || namespaces != Py_None )
1267
1271
return PyObject_CallMethodObjArgs (
@@ -1312,7 +1316,7 @@ _elementtree_Element_findall_impl(ElementObject *self, PyObject *path,
1312
1316
{
1313
1317
Py_ssize_t i ;
1314
1318
PyObject * out ;
1315
- elementtreestate * st = ET_STATE_GLOBAL ;
1319
+ elementtreestate * st = self -> state ;
1316
1320
1317
1321
if (checkpath (path ) || namespaces != Py_None ) {
1318
1322
return PyObject_CallMethodObjArgs (
@@ -1358,7 +1362,7 @@ _elementtree_Element_iterfind_impl(ElementObject *self, PyObject *path,
1358
1362
/*[clinic end generated code: output=ecdd56d63b19d40f input=abb974e350fb65c7]*/
1359
1363
{
1360
1364
PyObject * tag = path ;
1361
- elementtreestate * st = ET_STATE_GLOBAL ;
1365
+ elementtreestate * st = self -> state ;
1362
1366
1363
1367
return PyObject_CallMethodObjArgs (
1364
1368
st -> elementpath_obj , st -> str_iterfind , self , tag , namespaces , NULL );
@@ -1549,7 +1553,7 @@ _elementtree_Element_makeelement_impl(ElementObject *self, PyObject *tag,
1549
1553
if (!attrib )
1550
1554
return NULL ;
1551
1555
1552
- elementtreestate * st = ET_STATE_GLOBAL ;
1556
+ elementtreestate * st = self -> state ;
1553
1557
elem = create_new_element (st , tag , attrib );
1554
1558
1555
1559
Py_DECREF (attrib );
@@ -1681,7 +1685,7 @@ element_setitem(PyObject* self_, Py_ssize_t index, PyObject* item)
1681
1685
old = self -> extra -> children [index ];
1682
1686
1683
1687
if (item ) {
1684
- elementtreestate * st = ET_STATE_GLOBAL ;
1688
+ elementtreestate * st = self -> state ;
1685
1689
if (!Element_Check (st , item )) {
1686
1690
raise_type_error (item );
1687
1691
return -1 ;
@@ -1879,7 +1883,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value)
1879
1883
}
1880
1884
}
1881
1885
1882
- elementtreestate * st = ET_STATE_GLOBAL ;
1886
+ elementtreestate * st = self -> state ;
1883
1887
for (i = 0 ; i < newlen ; i ++ ) {
1884
1888
PyObject * element = PySequence_Fast_GET_ITEM (seq , i );
1885
1889
if (!Element_Check (st , element )) {
@@ -2156,7 +2160,7 @@ elementiter_next(ElementIterObject *it)
2156
2160
}
2157
2161
2158
2162
#ifndef NDEBUG
2159
- elementtreestate * st = ET_STATE_GLOBAL ;
2163
+ elementtreestate * st = elem -> state ;
2160
2164
assert (Element_Check (st , extra -> children [child_index ]));
2161
2165
#endif
2162
2166
elem = (ElementObject * )Py_NewRef (extra -> children [child_index ]);
@@ -2233,7 +2237,7 @@ create_elementiter(ElementObject *self, PyObject *tag, int gettext)
2233
2237
{
2234
2238
ElementIterObject * it ;
2235
2239
2236
- elementtreestate * st = ET_STATE_GLOBAL ;
2240
+ elementtreestate * st = self -> state ;
2237
2241
it = PyObject_GC_New (ElementIterObject , st -> ElementIter_Type );
2238
2242
if (!it )
2239
2243
return NULL ;
0 commit comments