@@ -5600,21 +5600,79 @@ test_code_api(PyObject *self, PyObject *Py_UNUSED(args))
56005600 if (co == NULL ) {
56015601 return NULL ;
56025602 }
5603- PyObject * co_code = PyCode_GetCode (co );
5604- if (co_code == NULL ) {
5605- Py_DECREF (co );
5606- return NULL ;
5607- }
5608- assert (PyBytes_CheckExact (co_code ));
5609- if (PyObject_Length (co_code ) == 0 ) {
5610- PyErr_SetString (PyExc_ValueError , "empty co_code" );
5611- Py_DECREF (co );
5603+ /* co_code */
5604+ {
5605+ PyObject * co_code = PyCode_GetCode (co );
5606+ if (co_code == NULL ) {
5607+ goto fail ;
5608+ }
5609+ assert (PyBytes_CheckExact (co_code ));
5610+ if (PyObject_Length (co_code ) == 0 ) {
5611+ PyErr_SetString (PyExc_ValueError , "empty co_code" );
5612+ Py_DECREF (co_code );
5613+ goto fail ;
5614+ }
56125615 Py_DECREF (co_code );
5613- return NULL ;
5616+ }
5617+ /* co_varnames */
5618+ {
5619+ PyObject * co_varnames = PyCode_GetVarnames (co );
5620+ if (co_varnames == NULL ) {
5621+ goto fail ;
5622+ }
5623+ if (!PyTuple_CheckExact (co_varnames )) {
5624+ PyErr_SetString (PyExc_TypeError , "co_varnames not tuple" );
5625+ Py_DECREF (co_varnames );
5626+ goto fail ;
5627+ }
5628+ if (PyTuple_GET_SIZE (co_varnames ) != 0 ) {
5629+ PyErr_SetString (PyExc_ValueError , "non-empty co_varnames" );
5630+ Py_DECREF (co_varnames );
5631+ goto fail ;
5632+ }
5633+ Py_DECREF (co_varnames );
5634+ }
5635+ /* co_cellvars */
5636+ {
5637+ PyObject * co_cellvars = PyCode_GetCellvars (co );
5638+ if (co_cellvars == NULL ) {
5639+ goto fail ;
5640+ }
5641+ if (!PyTuple_CheckExact (co_cellvars )) {
5642+ PyErr_SetString (PyExc_TypeError , "co_cellvars not tuple" );
5643+ Py_DECREF (co_cellvars );
5644+ goto fail ;
5645+ }
5646+ if (PyTuple_GET_SIZE (co_cellvars ) != 0 ) {
5647+ PyErr_SetString (PyExc_ValueError , "non-empty co_cellvars" );
5648+ Py_DECREF (co_cellvars );
5649+ goto fail ;
5650+ }
5651+ Py_DECREF (co_cellvars );
5652+ }
5653+ /* co_freevars */
5654+ {
5655+ PyObject * co_freevars = PyCode_GetFreevars (co );
5656+ if (co_freevars == NULL ) {
5657+ goto fail ;
5658+ }
5659+ if (!PyTuple_CheckExact (co_freevars )) {
5660+ PyErr_SetString (PyExc_TypeError , "co_freevars not tuple" );
5661+ Py_DECREF (co_freevars );
5662+ goto fail ;
5663+ }
5664+ if (PyTuple_GET_SIZE (co_freevars ) != 0 ) {
5665+ PyErr_SetString (PyExc_ValueError , "non-empty co_freevars" );
5666+ Py_DECREF (co_freevars );
5667+ goto fail ;
5668+ }
5669+ Py_DECREF (co_freevars );
56145670 }
56155671 Py_DECREF (co );
5616- Py_DECREF (co_code );
56175672 Py_RETURN_NONE ;
5673+ fail :
5674+ Py_DECREF (co );
5675+ return NULL ;
56185676}
56195677
56205678static int
0 commit comments