int nlocals;
int stacksize;
int flags;
+ PyObject *co;
+ PyObject *empty;
PyObject *code;
PyObject *consts;
PyObject *names;
&PyTuple_Type, &cellvars))
return NULL;
- if (freevars == NULL || cellvars == NULL) {
- PyObject *empty = PyTuple_New(0);
- if (empty == NULL)
- return NULL;
- if (freevars == NULL) {
- freevars = empty;
- Py_INCREF(freevars);
- }
- if (cellvars == NULL) {
- cellvars = empty;
- Py_INCREF(cellvars);
- }
- Py_DECREF(empty);
- }
-
if (!PyObject_CheckReadBuffer(code)) {
PyErr_SetString(PyExc_TypeError,
"bytecode object must be a single-segment read-only buffer");
return NULL;
}
- return (PyObject *)PyCode_New(argcount, nlocals, stacksize, flags,
+ empty = PyTuple_New(0);
+ if (empty == NULL)
+ return NULL;
+ if (freevars == NULL)
+ freevars = empty;
+ if (cellvars == NULL)
+ cellvars = empty;
+
+ co = (PyObject *) PyCode_New(argcount, nlocals, stacksize, flags,
code, consts, names, varnames,
freevars, cellvars, filename, name,
- firstlineno, lnotab);
+ firstlineno, lnotab);
+ Py_DECREF(empty);
+ return co;
}
static void