@@ -104,6 +104,8 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kw)
104104 int nlocals ;
105105 int stacksize ;
106106 int flags ;
107+ PyObject * co ;
108+ PyObject * empty = NULL ;
107109 PyObject * code ;
108110 PyObject * consts ;
109111 PyObject * names ;
@@ -127,31 +129,28 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kw)
127129 & PyTuple_Type , & cellvars ))
128130 return NULL ;
129131
130- if (freevars == NULL || cellvars == NULL ) {
131- PyObject * empty = PyTuple_New (0 );
132- if (empty == NULL )
133- return NULL ;
134- if (freevars == NULL ) {
135- freevars = empty ;
136- Py_INCREF (freevars );
137- }
138- if (cellvars == NULL ) {
139- cellvars = empty ;
140- Py_INCREF (cellvars );
141- }
142- Py_DECREF (empty );
143- }
144-
145132 if (!PyObject_CheckReadBuffer (code )) {
146133 PyErr_SetString (PyExc_TypeError ,
147134 "bytecode object must be a single-segment read-only buffer" );
148135 return NULL ;
149136 }
150137
151- return (PyObject * )PyCode_New (argcount , nlocals , stacksize , flags ,
138+ if (freevars == NULL || cellvars == NULL ) {
139+ empty = PyTuple_New (0 );
140+ if (empty == NULL )
141+ return NULL ;
142+ if (freevars == NULL )
143+ freevars = empty ;
144+ if (cellvars == NULL )
145+ cellvars = empty ;
146+ }
147+
148+ co = (PyObject * ) PyCode_New (argcount , nlocals , stacksize , flags ,
152149 code , consts , names , varnames ,
153150 freevars , cellvars , filename , name ,
154- firstlineno , lnotab );
151+ firstlineno , lnotab );
152+ Py_XDECREF (empty );
153+ return co ;
155154}
156155
157156static void
0 commit comments