2020
2121/*[clinic input]
2222class BaseException "PyBaseExceptionObject *" "&PyExc_BaseException"
23+ class BaseExceptionGroup "PyBaseExceptionGroupObject *" "&PyExc_BaseExceptionGroup"
2324[clinic start generated code]*/
24- /*[clinic end generated code: output=da39a3ee5e6b4b0d input=90558eb0fbf8a3d0 ]*/
25+ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=b7c45e78cff8edc3 ]*/
2526
2627
2728/* Compatibility aliases */
@@ -1034,18 +1035,21 @@ BaseExceptionGroup_str(PyBaseExceptionGroupObject *self)
10341035 self -> msg , num_excs , num_excs > 1 ? "s" : "" );
10351036}
10361037
1038+ /*[clinic input]
1039+ @critical_section
1040+ BaseExceptionGroup.derive
1041+ excs: object
1042+ /
1043+ [clinic start generated code]*/
1044+
10371045static PyObject *
1038- BaseExceptionGroup_derive (PyObject * self_ , PyObject * excs )
1046+ BaseExceptionGroup_derive_impl (PyBaseExceptionGroupObject * self ,
1047+ PyObject * excs )
1048+ /*[clinic end generated code: output=4307564218dfbf06 input=f72009d38e98cec1]*/
10391049{
1040- PyBaseExceptionGroupObject * self = _PyBaseExceptionGroupObject_cast (self_ );
1041- PyObject * init_args = PyTuple_Pack (2 , self -> msg , excs );
1042- if (!init_args ) {
1043- return NULL ;
1044- }
1045- PyObject * eg = PyObject_CallObject (
1046- PyExc_BaseExceptionGroup , init_args );
1047- Py_DECREF (init_args );
1048- return eg ;
1050+ PyObject * stack [] = {self -> msg , excs };
1051+ size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET ;
1052+ return PyObject_Vectorcall (PyExc_BaseExceptionGroup , stack , nargsf , NULL );
10491053}
10501054
10511055static int
@@ -1330,8 +1334,17 @@ exceptiongroup_split_recursive(PyObject *exc,
13301334 return retval ;
13311335}
13321336
1337+ /*[clinic input]
1338+ @critical_section
1339+ BaseExceptionGroup.split
1340+ matcher_value: object
1341+ /
1342+ [clinic start generated code]*/
1343+
13331344static PyObject *
1334- BaseExceptionGroup_split (PyObject * self , PyObject * matcher_value )
1345+ BaseExceptionGroup_split_impl (PyBaseExceptionGroupObject * self ,
1346+ PyObject * matcher_value )
1347+ /*[clinic end generated code: output=d74db579da4df6e2 input=0c5cfbfed57e0052]*/
13351348{
13361349 _exceptiongroup_split_matcher_type matcher_type ;
13371350 if (get_matcher_type (matcher_value , & matcher_type ) < 0 ) {
@@ -1341,7 +1354,7 @@ BaseExceptionGroup_split(PyObject *self, PyObject *matcher_value)
13411354 _exceptiongroup_split_result split_result ;
13421355 bool construct_rest = true;
13431356 if (exceptiongroup_split_recursive (
1344- self , matcher_type , matcher_value ,
1357+ ( PyObject * ) self , matcher_type , matcher_value ,
13451358 construct_rest , & split_result ) < 0 ) {
13461359 return NULL ;
13471360 }
@@ -1356,8 +1369,17 @@ BaseExceptionGroup_split(PyObject *self, PyObject *matcher_value)
13561369 return result ;
13571370}
13581371
1372+ /*[clinic input]
1373+ @critical_section
1374+ BaseExceptionGroup.subgroup
1375+ matcher_value: object
1376+ /
1377+ [clinic start generated code]*/
1378+
13591379static PyObject *
1360- BaseExceptionGroup_subgroup (PyObject * self , PyObject * matcher_value )
1380+ BaseExceptionGroup_subgroup_impl (PyBaseExceptionGroupObject * self ,
1381+ PyObject * matcher_value )
1382+ /*[clinic end generated code: output=07dbec8f77d4dd8e input=988ffdd755a151ce]*/
13611383{
13621384 _exceptiongroup_split_matcher_type matcher_type ;
13631385 if (get_matcher_type (matcher_value , & matcher_type ) < 0 ) {
@@ -1367,7 +1389,7 @@ BaseExceptionGroup_subgroup(PyObject *self, PyObject *matcher_value)
13671389 _exceptiongroup_split_result split_result ;
13681390 bool construct_rest = false;
13691391 if (exceptiongroup_split_recursive (
1370- self , matcher_type , matcher_value ,
1392+ ( PyObject * ) self , matcher_type , matcher_value ,
13711393 construct_rest , & split_result ) < 0 ) {
13721394 return NULL ;
13731395 }
@@ -1633,9 +1655,9 @@ static PyMemberDef BaseExceptionGroup_members[] = {
16331655static PyMethodDef BaseExceptionGroup_methods [] = {
16341656 {"__class_getitem__" , (PyCFunction )Py_GenericAlias ,
16351657 METH_O |METH_CLASS , PyDoc_STR ("See PEP 585" )},
1636- { "derive" , ( PyCFunction ) BaseExceptionGroup_derive , METH_O },
1637- { "split" , ( PyCFunction ) BaseExceptionGroup_split , METH_O },
1638- { "subgroup" , ( PyCFunction ) BaseExceptionGroup_subgroup , METH_O },
1658+ BASEEXCEPTIONGROUP_DERIVE_METHODDEF
1659+ BASEEXCEPTIONGROUP_SPLIT_METHODDEF
1660+ BASEEXCEPTIONGROUP_SUBGROUP_METHODDEF
16391661 {NULL }
16401662};
16411663
0 commit comments