@@ -2371,7 +2371,7 @@ _elementtree_TreeBuilder___init___impl(TreeBuilderObject *self,
2371
2371
}
2372
2372
2373
2373
if (pi_factory == Py_None ) {
2374
- elementtreestate * st = ET_STATE_GLOBAL ;
2374
+ elementtreestate * st = self -> state ;
2375
2375
pi_factory = st -> pi_factory ;
2376
2376
}
2377
2377
if (pi_factory ) {
@@ -3002,6 +3002,7 @@ typedef struct {
3002
3002
3003
3003
PyObject * handle_close ;
3004
3004
3005
+ elementtreestate * state ;
3005
3006
} XMLParserObject ;
3006
3007
3007
3008
/* helpers */
@@ -3145,7 +3146,7 @@ expat_default_handler(XMLParserObject* self, const XML_Char* data_in,
3145
3146
3146
3147
value = PyDict_GetItemWithError (self -> entity , key );
3147
3148
3148
- elementtreestate * st = ET_STATE_GLOBAL ;
3149
+ elementtreestate * st = self -> state ;
3149
3150
if (value ) {
3150
3151
if (TreeBuilder_CheckExact (st , self -> target ))
3151
3152
res = treebuilder_handle_data (
@@ -3220,7 +3221,7 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in,
3220
3221
attrib = NULL ;
3221
3222
}
3222
3223
3223
- elementtreestate * st = ET_STATE_GLOBAL ;
3224
+ elementtreestate * st = self -> state ;
3224
3225
if (TreeBuilder_CheckExact (st , self -> target )) {
3225
3226
/* shortcut */
3226
3227
res = treebuilder_handle_start ((TreeBuilderObject * ) self -> target ,
@@ -3259,7 +3260,7 @@ expat_data_handler(XMLParserObject* self, const XML_Char* data_in,
3259
3260
if (!data )
3260
3261
return ; /* parser will look for errors */
3261
3262
3262
- elementtreestate * st = ET_STATE_GLOBAL ;
3263
+ elementtreestate * st = self -> state ;
3263
3264
if (TreeBuilder_CheckExact (st , self -> target ))
3264
3265
/* shortcut */
3265
3266
res = treebuilder_handle_data ((TreeBuilderObject * ) self -> target , data );
@@ -3282,7 +3283,7 @@ expat_end_handler(XMLParserObject* self, const XML_Char* tag_in)
3282
3283
if (PyErr_Occurred ())
3283
3284
return ;
3284
3285
3285
- elementtreestate * st = ET_STATE_GLOBAL ;
3286
+ elementtreestate * st = self -> state ;
3286
3287
if (TreeBuilder_CheckExact (st , self -> target ))
3287
3288
/* shortcut */
3288
3289
/* the standard tree builder doesn't look at the end tag */
@@ -3317,7 +3318,7 @@ expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix_in,
3317
3318
if (!prefix_in )
3318
3319
prefix_in = "" ;
3319
3320
3320
- elementtreestate * st = ET_STATE_GLOBAL ;
3321
+ elementtreestate * st = self -> state ;
3321
3322
if (TreeBuilder_CheckExact (st , self -> target )) {
3322
3323
/* shortcut - TreeBuilder does not actually implement .start_ns() */
3323
3324
TreeBuilderObject * target = (TreeBuilderObject * ) self -> target ;
@@ -3368,7 +3369,7 @@ expat_end_ns_handler(XMLParserObject* self, const XML_Char* prefix_in)
3368
3369
if (!prefix_in )
3369
3370
prefix_in = "" ;
3370
3371
3371
- elementtreestate * st = ET_STATE_GLOBAL ;
3372
+ elementtreestate * st = self -> state ;
3372
3373
if (TreeBuilder_CheckExact (st , self -> target )) {
3373
3374
/* shortcut - TreeBuilder does not actually implement .end_ns() */
3374
3375
TreeBuilderObject * target = (TreeBuilderObject * ) self -> target ;
@@ -3397,7 +3398,7 @@ expat_comment_handler(XMLParserObject* self, const XML_Char* comment_in)
3397
3398
if (PyErr_Occurred ())
3398
3399
return ;
3399
3400
3400
- elementtreestate * st = ET_STATE_GLOBAL ;
3401
+ elementtreestate * st = self -> state ;
3401
3402
if (TreeBuilder_CheckExact (st , self -> target )) {
3402
3403
/* shortcut */
3403
3404
TreeBuilderObject * target = (TreeBuilderObject * ) self -> target ;
@@ -3458,7 +3459,7 @@ expat_start_doctype_handler(XMLParserObject *self,
3458
3459
pubid_obj = Py_NewRef (Py_None );
3459
3460
}
3460
3461
3461
- elementtreestate * st = ET_STATE_GLOBAL ;
3462
+ elementtreestate * st = self -> state ;
3462
3463
/* If the target has a handler for doctype, call it. */
3463
3464
if (self -> handle_doctype ) {
3464
3465
res = PyObject_CallFunctionObjArgs (self -> handle_doctype ,
@@ -3491,7 +3492,7 @@ expat_pi_handler(XMLParserObject* self, const XML_Char* target_in,
3491
3492
if (PyErr_Occurred ())
3492
3493
return ;
3493
3494
3494
- elementtreestate * st = ET_STATE_GLOBAL ;
3495
+ elementtreestate * st = self -> state ;
3495
3496
if (TreeBuilder_CheckExact (st , self -> target )) {
3496
3497
/* shortcut */
3497
3498
TreeBuilderObject * target = (TreeBuilderObject * ) self -> target ;
@@ -3544,6 +3545,7 @@ xmlparser_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3544
3545
self -> handle_start = self -> handle_data = self -> handle_end = NULL ;
3545
3546
self -> handle_comment = self -> handle_pi = self -> handle_close = NULL ;
3546
3547
self -> handle_doctype = NULL ;
3548
+ self -> state = ET_STATE_GLOBAL ;
3547
3549
}
3548
3550
return (PyObject * )self ;
3549
3551
}
@@ -3600,7 +3602,7 @@ _elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *target,
3600
3602
if (target != Py_None ) {
3601
3603
Py_INCREF (target );
3602
3604
} else {
3603
- elementtreestate * st = ET_STATE_GLOBAL ;
3605
+ elementtreestate * st = self -> state ;
3604
3606
target = treebuilder_new (st -> TreeBuilder_Type , NULL , NULL );
3605
3607
if (!target ) {
3606
3608
Py_CLEAR (self -> entity );
@@ -3770,7 +3772,7 @@ expat_parse(XMLParserObject* self, const char* data, int data_len, int final)
3770
3772
return NULL ;
3771
3773
3772
3774
if (!ok ) {
3773
- elementtreestate * st = ET_STATE_GLOBAL ;
3775
+ elementtreestate * st = self -> state ;
3774
3776
expat_set_error (
3775
3777
st ,
3776
3778
EXPAT (GetErrorCode )(self -> parser ),
@@ -3804,7 +3806,7 @@ _elementtree_XMLParser_close_impl(XMLParserObject *self)
3804
3806
if (!res )
3805
3807
return NULL ;
3806
3808
3807
- elementtreestate * st = ET_STATE_GLOBAL ;
3809
+ elementtreestate * st = self -> state ;
3808
3810
if (TreeBuilder_CheckExact (st , self -> target )) {
3809
3811
Py_DECREF (res );
3810
3812
return treebuilder_done ((TreeBuilderObject * ) self -> target );
@@ -3944,7 +3946,7 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
3944
3946
3945
3947
res = expat_parse (self , "" , 0 , 1 );
3946
3948
3947
- elementtreestate * st = ET_STATE_GLOBAL ;
3949
+ elementtreestate * st = self -> state ;
3948
3950
if (res && TreeBuilder_CheckExact (st , self -> target )) {
3949
3951
Py_DECREF (res );
3950
3952
return treebuilder_done ((TreeBuilderObject * ) self -> target );
@@ -3976,7 +3978,7 @@ _elementtree_XMLParser__setevents_impl(XMLParserObject *self,
3976
3978
if (!_check_xmlparser (self )) {
3977
3979
return NULL ;
3978
3980
}
3979
- elementtreestate * st = ET_STATE_GLOBAL ;
3981
+ elementtreestate * st = self -> state ;
3980
3982
if (!TreeBuilder_CheckExact (st , self -> target )) {
3981
3983
PyErr_SetString (
3982
3984
PyExc_TypeError ,
0 commit comments