@@ -395,6 +395,11 @@ static struct PyModuleDef sremodule;
395395static PyObject * pattern_new_match (_sremodulestate * , PatternObject * , SRE_STATE * , Py_ssize_t );
396396static PyObject * pattern_scanner (_sremodulestate * , PatternObject * , PyObject * , Py_ssize_t , Py_ssize_t );
397397
398+ #define _PatternObject_CAST (op ) ((PatternObject *)(op))
399+ #define _MatchObject_CAST (op ) ((MatchObject *)(op))
400+ #define _TemplateObject_CAST (op ) ((TemplateObject *)(op))
401+ #define _ScannerObject_CAST (op ) ((ScannerObject *)(op))
402+
398403/*[clinic input]
399404module _sre
400405class _sre.SRE_Pattern "PatternObject *" "get_sre_module_state_by_class(tp)->Pattern_Type"
@@ -699,8 +704,9 @@ pattern_error(Py_ssize_t status)
699704}
700705
701706static int
702- pattern_traverse (PatternObject * self , visitproc visit , void * arg )
707+ pattern_traverse (PyObject * op , visitproc visit , void * arg )
703708{
709+ PatternObject * self = _PatternObject_CAST (op );
704710 Py_VISIT (Py_TYPE (self ));
705711 Py_VISIT (self -> groupindex );
706712 Py_VISIT (self -> indexgroup );
@@ -712,8 +718,9 @@ pattern_traverse(PatternObject *self, visitproc visit, void *arg)
712718}
713719
714720static int
715- pattern_clear (PatternObject * self )
721+ pattern_clear (PyObject * op )
716722{
723+ PatternObject * self = _PatternObject_CAST (op );
717724 Py_CLEAR (self -> groupindex );
718725 Py_CLEAR (self -> indexgroup );
719726 Py_CLEAR (self -> pattern );
@@ -724,13 +731,13 @@ pattern_clear(PatternObject *self)
724731}
725732
726733static void
727- pattern_dealloc (PatternObject * self )
734+ pattern_dealloc (PyObject * self )
728735{
729736 PyTypeObject * tp = Py_TYPE (self );
730-
731737 PyObject_GC_UnTrack (self );
732- if (self -> weakreflist != NULL ) {
733- PyObject_ClearWeakRefs ((PyObject * ) self );
738+ PatternObject * obj = _PatternObject_CAST (self );
739+ if (obj -> weakreflist != NULL ) {
740+ PyObject_ClearWeakRefs (self );
734741 }
735742 (void )pattern_clear (self );
736743 tp -> tp_free (self );
@@ -1497,7 +1504,7 @@ _sre_SRE_Pattern__fail_after_impl(PatternObject *self, int count,
14971504#endif /* Py_DEBUG */
14981505
14991506static PyObject *
1500- pattern_repr (PatternObject * obj )
1507+ pattern_repr (PyObject * self )
15011508{
15021509 static const struct {
15031510 const char * name ;
@@ -1512,6 +1519,8 @@ pattern_repr(PatternObject *obj)
15121519 {"re.DEBUG" , SRE_FLAG_DEBUG },
15131520 {"re.ASCII" , SRE_FLAG_ASCII },
15141521 };
1522+
1523+ PatternObject * obj = _PatternObject_CAST (self );
15151524 PyObject * result = NULL ;
15161525 PyObject * flag_items ;
15171526 size_t i ;
@@ -1579,8 +1588,9 @@ PyDoc_STRVAR(pattern_doc, "Compiled regular expression object.");
15791588
15801589/* PatternObject's 'groupindex' method. */
15811590static PyObject *
1582- pattern_groupindex (PatternObject * self , void * Py_UNUSED (ignored ))
1591+ pattern_groupindex (PyObject * op , void * Py_UNUSED (ignored ))
15831592{
1593+ PatternObject * self = _PatternObject_CAST (op );
15841594 if (self -> groupindex == NULL )
15851595 return PyDict_New ();
15861596 return PyDictProxy_New (self -> groupindex );
@@ -2245,8 +2255,9 @@ _validate(PatternObject *self)
22452255/* match methods */
22462256
22472257static int
2248- match_traverse (MatchObject * self , visitproc visit , void * arg )
2258+ match_traverse (PyObject * op , visitproc visit , void * arg )
22492259{
2260+ MatchObject * self = _MatchObject_CAST (op );
22502261 Py_VISIT (Py_TYPE (self ));
22512262 Py_VISIT (self -> string );
22522263 Py_VISIT (self -> regs );
@@ -2255,19 +2266,19 @@ match_traverse(MatchObject *self, visitproc visit, void *arg)
22552266}
22562267
22572268static int
2258- match_clear (MatchObject * self )
2269+ match_clear (PyObject * op )
22592270{
2271+ MatchObject * self = _MatchObject_CAST (op );
22602272 Py_CLEAR (self -> string );
22612273 Py_CLEAR (self -> regs );
22622274 Py_CLEAR (self -> pattern );
22632275 return 0 ;
22642276}
22652277
22662278static void
2267- match_dealloc (MatchObject * self )
2279+ match_dealloc (PyObject * self )
22682280{
22692281 PyTypeObject * tp = Py_TYPE (self );
2270-
22712282 PyObject_GC_UnTrack (self );
22722283 (void )match_clear (self );
22732284 tp -> tp_free (self );
@@ -2376,8 +2387,9 @@ _sre_SRE_Match_expand_impl(MatchObject *self, PyObject *template)
23762387}
23772388
23782389static PyObject *
2379- match_group (MatchObject * self , PyObject * args )
2390+ match_group (PyObject * op , PyObject * args )
23802391{
2392+ MatchObject * self = _MatchObject_CAST (op );
23812393 PyObject * result ;
23822394 Py_ssize_t i , size ;
23832395
@@ -2411,8 +2423,9 @@ match_group(MatchObject* self, PyObject* args)
24112423}
24122424
24132425static PyObject *
2414- match_getitem (MatchObject * self , PyObject * name )
2426+ match_getitem (PyObject * op , PyObject * name )
24152427{
2428+ MatchObject * self = _MatchObject_CAST (op );
24162429 return match_getslice (self , name , Py_None );
24172430}
24182431
@@ -2654,16 +2667,18 @@ PyDoc_STRVAR(match_group_doc,
26542667 For 0 returns the entire match." );
26552668
26562669static PyObject *
2657- match_lastindex_get (MatchObject * self , void * Py_UNUSED (ignored ))
2670+ match_lastindex_get (PyObject * op , void * Py_UNUSED (ignored ))
26582671{
2672+ MatchObject * self = _MatchObject_CAST (op );
26592673 if (self -> lastindex >= 0 )
26602674 return PyLong_FromSsize_t (self -> lastindex );
26612675 Py_RETURN_NONE ;
26622676}
26632677
26642678static PyObject *
2665- match_lastgroup_get (MatchObject * self , void * Py_UNUSED (ignored ))
2679+ match_lastgroup_get (PyObject * op , void * Py_UNUSED (ignored ))
26662680{
2681+ MatchObject * self = _MatchObject_CAST (op );
26672682 if (self -> pattern -> indexgroup &&
26682683 self -> lastindex >= 0 &&
26692684 self -> lastindex < PyTuple_GET_SIZE (self -> pattern -> indexgroup ))
@@ -2676,8 +2691,9 @@ match_lastgroup_get(MatchObject *self, void *Py_UNUSED(ignored))
26762691}
26772692
26782693static PyObject *
2679- match_regs_get (MatchObject * self , void * Py_UNUSED (ignored ))
2694+ match_regs_get (PyObject * op , void * Py_UNUSED (ignored ))
26802695{
2696+ MatchObject * self = _MatchObject_CAST (op );
26812697 if (self -> regs ) {
26822698 return Py_NewRef (self -> regs );
26832699 } else
@@ -2780,27 +2796,29 @@ pattern_new_match(_sremodulestate* module_state,
27802796/* scanner methods (experimental) */
27812797
27822798static int
2783- scanner_traverse (ScannerObject * self , visitproc visit , void * arg )
2799+ scanner_traverse (PyObject * op , visitproc visit , void * arg )
27842800{
2801+ ScannerObject * self = _ScannerObject_CAST (op );
27852802 Py_VISIT (Py_TYPE (self ));
27862803 Py_VISIT (self -> pattern );
27872804 return 0 ;
27882805}
27892806
27902807static int
2791- scanner_clear (ScannerObject * self )
2808+ scanner_clear (PyObject * op )
27922809{
2810+ ScannerObject * self = _ScannerObject_CAST (op );
27932811 Py_CLEAR (self -> pattern );
27942812 return 0 ;
27952813}
27962814
27972815static void
2798- scanner_dealloc (ScannerObject * self )
2816+ scanner_dealloc (PyObject * self )
27992817{
28002818 PyTypeObject * tp = Py_TYPE (self );
2801-
28022819 PyObject_GC_UnTrack (self );
2803- state_fini (& self -> state );
2820+ ScannerObject * scanner = _ScannerObject_CAST (self );
2821+ state_fini (& scanner -> state );
28042822 (void )scanner_clear (self );
28052823 tp -> tp_free (self );
28062824 Py_DECREF (tp );
@@ -2957,8 +2975,9 @@ pattern_scanner(_sremodulestate *module_state,
29572975/* template methods */
29582976
29592977static int
2960- template_traverse (TemplateObject * self , visitproc visit , void * arg )
2978+ template_traverse (PyObject * op , visitproc visit , void * arg )
29612979{
2980+ TemplateObject * self = _TemplateObject_CAST (op );
29622981 Py_VISIT (Py_TYPE (self ));
29632982 Py_VISIT (self -> literal );
29642983 for (Py_ssize_t i = 0 , n = Py_SIZE (self ); i < n ; i ++ ) {
@@ -2968,8 +2987,9 @@ template_traverse(TemplateObject *self, visitproc visit, void *arg)
29682987}
29692988
29702989static int
2971- template_clear (TemplateObject * self )
2990+ template_clear (PyObject * op )
29722991{
2992+ TemplateObject * self = _TemplateObject_CAST (op );
29732993 Py_CLEAR (self -> literal );
29742994 for (Py_ssize_t i = 0 , n = Py_SIZE (self ); i < n ; i ++ ) {
29752995 Py_CLEAR (self -> items [i ].literal );
@@ -2978,10 +2998,9 @@ template_clear(TemplateObject *self)
29782998}
29792999
29803000static void
2981- template_dealloc (TemplateObject * self )
3001+ template_dealloc (PyObject * self )
29823002{
29833003 PyTypeObject * tp = Py_TYPE (self );
2984-
29853004 PyObject_GC_UnTrack (self );
29863005 (void )template_clear (self );
29873006 tp -> tp_free (self );
@@ -3056,8 +3075,10 @@ expand_template(TemplateObject *self, MatchObject *match)
30563075
30573076
30583077static Py_hash_t
3059- pattern_hash (PatternObject * self )
3078+ pattern_hash (PyObject * op )
30603079{
3080+ PatternObject * self = _PatternObject_CAST (op );
3081+
30613082 Py_hash_t hash , hash2 ;
30623083
30633084 hash = PyObject_Hash (self -> pattern );
@@ -3148,7 +3169,7 @@ static PyMethodDef pattern_methods[] = {
31483169};
31493170
31503171static PyGetSetDef pattern_getset [] = {
3151- {"groupindex" , ( getter ) pattern_groupindex , ( setter ) NULL ,
3172+ {"groupindex" , pattern_groupindex , NULL ,
31523173 "A dictionary mapping group names to group numbers." },
31533174 {NULL } /* Sentinel */
31543175};
@@ -3166,9 +3187,9 @@ static PyMemberDef pattern_members[] = {
31663187};
31673188
31683189static PyType_Slot pattern_slots [] = {
3169- {Py_tp_dealloc , ( destructor ) pattern_dealloc },
3170- {Py_tp_repr , ( reprfunc ) pattern_repr },
3171- {Py_tp_hash , ( hashfunc ) pattern_hash },
3190+ {Py_tp_dealloc , pattern_dealloc },
3191+ {Py_tp_repr , pattern_repr },
3192+ {Py_tp_hash , pattern_hash },
31723193 {Py_tp_doc , (void * )pattern_doc },
31733194 {Py_tp_richcompare , pattern_richcompare },
31743195 {Py_tp_methods , pattern_methods },
@@ -3189,7 +3210,7 @@ static PyType_Spec pattern_spec = {
31893210};
31903211
31913212static PyMethodDef match_methods [] = {
3192- {"group" , ( PyCFunction ) match_group , METH_VARARGS , match_group_doc },
3213+ {"group" , match_group , METH_VARARGS , match_group_doc },
31933214 _SRE_SRE_MATCH_START_METHODDEF
31943215 _SRE_SRE_MATCH_END_METHODDEF
31953216 _SRE_SRE_MATCH_SPAN_METHODDEF
@@ -3204,11 +3225,11 @@ static PyMethodDef match_methods[] = {
32043225};
32053226
32063227static PyGetSetDef match_getset [] = {
3207- {"lastindex" , ( getter ) match_lastindex_get , ( setter ) NULL ,
3228+ {"lastindex" , match_lastindex_get , NULL ,
32083229 "The integer index of the last matched capturing group." },
3209- {"lastgroup" , ( getter ) match_lastgroup_get , ( setter ) NULL ,
3230+ {"lastgroup" , match_lastgroup_get , NULL ,
32103231 "The name of the last matched capturing group." },
3211- {"regs" , ( getter ) match_regs_get , ( setter ) NULL },
3232+ {"regs" , match_regs_get , NULL , NULL },
32123233 {NULL }
32133234};
32143235
0 commit comments