From: Jeremy Hylton Date: Thu, 1 Feb 2001 19:50:29 +0000 (+0000) Subject: move extra arguments to the back of the new.code() arglist X-Git-Tag: v2.1a2~45 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6fe0a82ecbd3bdbb028ae2041595bce3fd8b25fb;p=python move extra arguments to the back of the new.code() arglist --- diff --git a/Lib/test/test_new.py b/Lib/test/test_new.py index 30433aefb1..6ea7707d2c 100644 --- a/Lib/test/test_new.py +++ b/Lib/test/test_new.py @@ -66,7 +66,10 @@ verify(g['c'] == 3, # bogus test of new.code() print 'new.code()' -d = new.code(3, 3, 3, 3, codestr, (), (), (), (), (), +d = new.code(3, 3, 3, 3, codestr, (), (), (), + "", "", 1, "", (), ()) +# test backwards-compatibility version with no freevars or cellvars +d = new.code(3, 3, 3, 3, codestr, (), (), (), "", "", 1, "") if verbose: print d diff --git a/Modules/newmodule.c b/Modules/newmodule.c index 7c7bee713b..7b91fb8bc3 100644 --- a/Modules/newmodule.c +++ b/Modules/newmodule.c @@ -103,7 +103,9 @@ new_function(PyObject* unused, PyObject* args) } static char new_code_doc[] = -"Create a code object from (ARGCOUNT, NLOCALS, STACKSIZE, FLAGS, CODESTRING, CONSTANTS, NAMES, VARNAMES, FREEVARS, CELLVARS, FILENAME, NAME, FIRSTLINENO, LNOTAB)."; +"Create a code object from (ARGCOUNT, NLOCALS, STACKSIZE, FLAGS, CODESTRING,\n" +"CONSTANTS, NAMES, VARNAMES, FILENAME, NAME, FIRSTLINENO, LNOTAB, FREEVARS,\n" +"CELLVARS)."; static PyObject * new_code(PyObject* unused, PyObject* args) @@ -116,26 +118,41 @@ new_code(PyObject* unused, PyObject* args) PyObject* consts; PyObject* names; PyObject* varnames; - PyObject* freevars; - PyObject* cellvars; + PyObject* freevars = NULL; + PyObject* cellvars = NULL; PyObject* filename; PyObject* name; int firstlineno; PyObject* lnotab; PyBufferProcs *pb; - if (!PyArg_ParseTuple(args, "iiiiOO!O!O!O!O!SSiS:code", + if (!PyArg_ParseTuple(args, "iiiiSO!O!O!SSiS|O!O!:code", &argcount, &nlocals, &stacksize, &flags, &code, &PyTuple_Type, &consts, &PyTuple_Type, &names, &PyTuple_Type, &varnames, - &PyTuple_Type, &freevars, - &PyTuple_Type, &cellvars, &filename, &name, - &firstlineno, &lnotab)) + &firstlineno, &lnotab, + &PyTuple_Type, &freevars, + &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); + } + pb = code->ob_type->tp_as_buffer; if (pb == NULL || pb->bf_getreadbuffer == NULL ||