@@ -2369,7 +2369,7 @@ _elementtree_TreeBuilder___init___impl(TreeBuilderObject *self,
2369
2369
}
2370
2370
2371
2371
if (pi_factory == Py_None ) {
2372
- elementtreestate * st = ET_STATE_GLOBAL ;
2372
+ elementtreestate * st = self -> state ;
2373
2373
pi_factory = st -> pi_factory ;
2374
2374
}
2375
2375
if (pi_factory ) {
@@ -3000,6 +3000,7 @@ typedef struct {
3000
3000
3001
3001
PyObject * handle_close ;
3002
3002
3003
+ elementtreestate * state ;
3003
3004
} XMLParserObject ;
3004
3005
3005
3006
/* helpers */
@@ -3143,7 +3144,7 @@ expat_default_handler(XMLParserObject* self, const XML_Char* data_in,
3143
3144
3144
3145
value = PyDict_GetItemWithError (self -> entity , key );
3145
3146
3146
- elementtreestate * st = ET_STATE_GLOBAL ;
3147
+ elementtreestate * st = self -> state ;
3147
3148
if (value ) {
3148
3149
if (TreeBuilder_CheckExact (st , self -> target ))
3149
3150
res = treebuilder_handle_data (
@@ -3218,7 +3219,7 @@ expat_start_handler(XMLParserObject* self, const XML_Char* tag_in,
3218
3219
attrib = NULL ;
3219
3220
}
3220
3221
3221
- elementtreestate * st = ET_STATE_GLOBAL ;
3222
+ elementtreestate * st = self -> state ;
3222
3223
if (TreeBuilder_CheckExact (st , self -> target )) {
3223
3224
/* shortcut */
3224
3225
res = treebuilder_handle_start ((TreeBuilderObject * ) self -> target ,
@@ -3257,7 +3258,7 @@ expat_data_handler(XMLParserObject* self, const XML_Char* data_in,
3257
3258
if (!data )
3258
3259
return ; /* parser will look for errors */
3259
3260
3260
- elementtreestate * st = ET_STATE_GLOBAL ;
3261
+ elementtreestate * st = self -> state ;
3261
3262
if (TreeBuilder_CheckExact (st , self -> target ))
3262
3263
/* shortcut */
3263
3264
res = treebuilder_handle_data ((TreeBuilderObject * ) self -> target , data );
@@ -3280,7 +3281,7 @@ expat_end_handler(XMLParserObject* self, const XML_Char* tag_in)
3280
3281
if (PyErr_Occurred ())
3281
3282
return ;
3282
3283
3283
- elementtreestate * st = ET_STATE_GLOBAL ;
3284
+ elementtreestate * st = self -> state ;
3284
3285
if (TreeBuilder_CheckExact (st , self -> target ))
3285
3286
/* shortcut */
3286
3287
/* the standard tree builder doesn't look at the end tag */
@@ -3315,7 +3316,7 @@ expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix_in,
3315
3316
if (!prefix_in )
3316
3317
prefix_in = "" ;
3317
3318
3318
- elementtreestate * st = ET_STATE_GLOBAL ;
3319
+ elementtreestate * st = self -> state ;
3319
3320
if (TreeBuilder_CheckExact (st , self -> target )) {
3320
3321
/* shortcut - TreeBuilder does not actually implement .start_ns() */
3321
3322
TreeBuilderObject * target = (TreeBuilderObject * ) self -> target ;
@@ -3366,7 +3367,7 @@ expat_end_ns_handler(XMLParserObject* self, const XML_Char* prefix_in)
3366
3367
if (!prefix_in )
3367
3368
prefix_in = "" ;
3368
3369
3369
- elementtreestate * st = ET_STATE_GLOBAL ;
3370
+ elementtreestate * st = self -> state ;
3370
3371
if (TreeBuilder_CheckExact (st , self -> target )) {
3371
3372
/* shortcut - TreeBuilder does not actually implement .end_ns() */
3372
3373
TreeBuilderObject * target = (TreeBuilderObject * ) self -> target ;
@@ -3395,7 +3396,7 @@ expat_comment_handler(XMLParserObject* self, const XML_Char* comment_in)
3395
3396
if (PyErr_Occurred ())
3396
3397
return ;
3397
3398
3398
- elementtreestate * st = ET_STATE_GLOBAL ;
3399
+ elementtreestate * st = self -> state ;
3399
3400
if (TreeBuilder_CheckExact (st , self -> target )) {
3400
3401
/* shortcut */
3401
3402
TreeBuilderObject * target = (TreeBuilderObject * ) self -> target ;
@@ -3456,7 +3457,7 @@ expat_start_doctype_handler(XMLParserObject *self,
3456
3457
pubid_obj = Py_NewRef (Py_None );
3457
3458
}
3458
3459
3459
- elementtreestate * st = ET_STATE_GLOBAL ;
3460
+ elementtreestate * st = self -> state ;
3460
3461
/* If the target has a handler for doctype, call it. */
3461
3462
if (self -> handle_doctype ) {
3462
3463
res = PyObject_CallFunctionObjArgs (self -> handle_doctype ,
@@ -3489,7 +3490,7 @@ expat_pi_handler(XMLParserObject* self, const XML_Char* target_in,
3489
3490
if (PyErr_Occurred ())
3490
3491
return ;
3491
3492
3492
- elementtreestate * st = ET_STATE_GLOBAL ;
3493
+ elementtreestate * st = self -> state ;
3493
3494
if (TreeBuilder_CheckExact (st , self -> target )) {
3494
3495
/* shortcut */
3495
3496
TreeBuilderObject * target = (TreeBuilderObject * ) self -> target ;
@@ -3542,6 +3543,7 @@ xmlparser_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3542
3543
self -> handle_start = self -> handle_data = self -> handle_end = NULL ;
3543
3544
self -> handle_comment = self -> handle_pi = self -> handle_close = NULL ;
3544
3545
self -> handle_doctype = NULL ;
3546
+ self -> state = ET_STATE_GLOBAL ;
3545
3547
}
3546
3548
return (PyObject * )self ;
3547
3549
}
@@ -3598,7 +3600,7 @@ _elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *target,
3598
3600
if (target != Py_None ) {
3599
3601
Py_INCREF (target );
3600
3602
} else {
3601
- elementtreestate * st = ET_STATE_GLOBAL ;
3603
+ elementtreestate * st = self -> state ;
3602
3604
target = treebuilder_new (st -> TreeBuilder_Type , NULL , NULL );
3603
3605
if (!target ) {
3604
3606
Py_CLEAR (self -> entity );
@@ -3768,7 +3770,7 @@ expat_parse(XMLParserObject* self, const char* data, int data_len, int final)
3768
3770
return NULL ;
3769
3771
3770
3772
if (!ok ) {
3771
- elementtreestate * st = ET_STATE_GLOBAL ;
3773
+ elementtreestate * st = self -> state ;
3772
3774
expat_set_error (
3773
3775
st ,
3774
3776
EXPAT (GetErrorCode )(self -> parser ),
@@ -3802,7 +3804,7 @@ _elementtree_XMLParser_close_impl(XMLParserObject *self)
3802
3804
if (!res )
3803
3805
return NULL ;
3804
3806
3805
- elementtreestate * st = ET_STATE_GLOBAL ;
3807
+ elementtreestate * st = self -> state ;
3806
3808
if (TreeBuilder_CheckExact (st , self -> target )) {
3807
3809
Py_DECREF (res );
3808
3810
return treebuilder_done ((TreeBuilderObject * ) self -> target );
@@ -3942,7 +3944,7 @@ _elementtree_XMLParser__parse_whole(XMLParserObject *self, PyObject *file)
3942
3944
3943
3945
res = expat_parse (self , "" , 0 , 1 );
3944
3946
3945
- elementtreestate * st = ET_STATE_GLOBAL ;
3947
+ elementtreestate * st = self -> state ;
3946
3948
if (res && TreeBuilder_CheckExact (st , self -> target )) {
3947
3949
Py_DECREF (res );
3948
3950
return treebuilder_done ((TreeBuilderObject * ) self -> target );
@@ -3974,7 +3976,7 @@ _elementtree_XMLParser__setevents_impl(XMLParserObject *self,
3974
3976
if (!_check_xmlparser (self )) {
3975
3977
return NULL ;
3976
3978
}
3977
- elementtreestate * st = ET_STATE_GLOBAL ;
3979
+ elementtreestate * st = self -> state ;
3978
3980
if (!TreeBuilder_CheckExact (st , self -> target )) {
3979
3981
PyErr_SetString (
3980
3982
PyExc_TypeError ,
0 commit comments