diff options
author | Guido van Rossum <guido@python.org> | 2002-06-14 20:41:17 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2002-06-14 20:41:17 (GMT) |
commit | bea18ccde6bc12e061c21bb6b944379d8b123845 (patch) | |
tree | d5366d2bba31bde0cf6d05e1b55cde64cf3d3864 /Python | |
parent | 57454e57f83b407dd2653cbfcead7c9801beeff0 (diff) | |
download | cpython-bea18ccde6bc12e061c21bb6b944379d8b123845.zip cpython-bea18ccde6bc12e061c21bb6b944379d8b123845.tar.gz cpython-bea18ccde6bc12e061c21bb6b944379d8b123845.tar.bz2 |
SF patch 568629 by Oren Tirosh: types made callable.
These built-in functions are replaced by their (now callable) type:
slice()
buffer()
and these types can also be called (but have no built-in named
function named after them)
classobj (type name used to be "class")
code
function
instance
instancemethod (type name used to be "instance method")
The module "new" has been replaced with a small backward compatibility
placeholder in Python.
A large portion of the patch simply removes the new module from
various platform-specific build recipes. The following binary Mac
project files still have references to it:
Mac/Build/PythonCore.mcp
Mac/Build/PythonStandSmall.mcp
Mac/Build/PythonStandalone.mcp
[I've tweaked the code layout and the doc strings here and there, and
added a comment to types.py about StringTypes vs. basestring. --Guido]
Diffstat (limited to 'Python')
-rw-r--r-- | Python/bltinmodule.c | 50 | ||||
-rw-r--r-- | Python/compile.c | 67 | ||||
-rw-r--r-- | Python/dynload_aix.c | 17 |
3 files changed, 67 insertions, 67 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 8f28ea6..7126391 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -107,27 +107,6 @@ Note that classes are callable, as are instances with a __call__() method."); static PyObject * -builtin_buffer(PyObject *self, PyObject *args) -{ - PyObject *ob; - int offset = 0; - int size = Py_END_OF_BUFFER; - - if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) ) - return NULL; - return PyBuffer_FromObject(ob, offset, size); -} - -PyDoc_STRVAR(buffer_doc, -"buffer(object [, offset[, size]]) -> object\n\ -\n\ -Create a new buffer object which references the given object.\n\ -The buffer will reference a slice of the target object from the\n\ -start of the object (or at the specified offset). The slice will\n\ -extend to the end of the target object (or with the specified size)."); - - -static PyObject * builtin_callable(PyObject *self, PyObject *v) { return PyBool_FromLong((long)PyCallable_Check(v)); @@ -1079,31 +1058,6 @@ Return the number of items of a sequence or mapping."); static PyObject * -builtin_slice(PyObject *self, PyObject *args) -{ - PyObject *start, *stop, *step; - - start = stop = step = NULL; - - if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step)) - return NULL; - - /* This swapping of stop and start is to maintain similarity with - range(). */ - if (stop == NULL) { - stop = start; - start = NULL; - } - return PySlice_New(start, stop, step); -} - -PyDoc_STRVAR(slice_doc, -"slice([start,] stop[, step]) -> slice object\n\ -\n\ -Create a slice object. This is used for slicing by the Numeric extensions."); - - -static PyObject * builtin_locals(PyObject *self) { PyObject *d; @@ -1775,7 +1729,6 @@ static PyMethodDef builtin_methods[] = { {"__import__", builtin___import__, METH_VARARGS, import_doc}, {"abs", builtin_abs, METH_O, abs_doc}, {"apply", builtin_apply, METH_VARARGS, apply_doc}, - {"buffer", builtin_buffer, METH_VARARGS, buffer_doc}, {"callable", builtin_callable, METH_O, callable_doc}, {"chr", builtin_chr, METH_VARARGS, chr_doc}, {"cmp", builtin_cmp, METH_VARARGS, cmp_doc}, @@ -1813,7 +1766,6 @@ static PyMethodDef builtin_methods[] = { {"repr", builtin_repr, METH_O, repr_doc}, {"round", builtin_round, METH_VARARGS, round_doc}, {"setattr", builtin_setattr, METH_VARARGS, setattr_doc}, - {"slice", builtin_slice, METH_VARARGS, slice_doc}, #ifdef Py_USING_UNICODE {"unichr", builtin_unichr, METH_VARARGS, unichr_doc}, #endif @@ -1849,6 +1801,7 @@ _PyBuiltin_Init(void) SETBUILTIN("True", Py_True); SETBUILTIN("basestring", &PyBaseString_Type); SETBUILTIN("bool", &PyBool_Type); + SETBUILTIN("buffer", &PyBuffer_Type); SETBUILTIN("classmethod", &PyClassMethod_Type); #ifndef WITHOUT_COMPLEX SETBUILTIN("complex", &PyComplex_Type); @@ -1861,6 +1814,7 @@ _PyBuiltin_Init(void) SETBUILTIN("list", &PyList_Type); SETBUILTIN("long", &PyLong_Type); SETBUILTIN("object", &PyBaseObject_Type); + SETBUILTIN("slice", &PySlice_Type); SETBUILTIN("staticmethod", &PyStaticMethod_Type); SETBUILTIN("str", &PyString_Type); SETBUILTIN("super", &PySuper_Type); diff --git a/Python/compile.c b/Python/compile.c index 4bbe44f..b0e125d 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -91,6 +91,69 @@ static PyMemberDef code_memberlist[] = { {NULL} /* Sentinel */ }; +PyDoc_STRVAR(code_doc, +"code(argcount, nlocals, stacksize, flags, codestring, constants, names,\n\ + varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])\n\ +\n\ +Create a code object. Not for the faint of heart."); + +static PyObject * +code_new(PyTypeObject *type, PyObject *args, PyObject *kw) +{ + int argcount; + int nlocals; + int stacksize; + int flags; + PyObject *code; + PyObject *consts; + PyObject *names; + PyObject *varnames; + PyObject *freevars = NULL; + PyObject *cellvars = NULL; + PyObject *filename; + PyObject *name; + int firstlineno; + PyObject *lnotab; + + 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, + &filename, &name, + &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); + } + + 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, + code, consts, names, varnames, + freevars, cellvars, filename, name, + firstlineno, lnotab); +} + static void code_dealloc(PyCodeObject *co) { @@ -200,7 +263,7 @@ PyTypeObject PyCode_Type = { 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ - 0, /* tp_doc */ + code_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ @@ -217,7 +280,7 @@ PyTypeObject PyCode_Type = { 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ - 0, /* tp_new */ + code_new, /* tp_new */ }; #define NAME_CHARS \ diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c index 4e39c31..bb26c07 100644 --- a/Python/dynload_aix.c +++ b/Python/dynload_aix.c @@ -104,19 +104,6 @@ aix_getoldmodules(void **modlistptr) return 0; } -static int -aix_bindnewmodule(void *newmoduleptr, void *modlistptr) -{ - register ModulePtr modptr; - - /* - -- Bind the new module with the list of loaded modules. - */ - for (modptr = (ModulePtr)modlistptr; modptr; modptr = modptr->next) - if (loadbind(0, modptr->entry, newmoduleptr) != 0) - return -1; - return 0; -} static void aix_loaderror(const char *pathname) @@ -192,10 +179,6 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname, aix_loaderror(pathname); return NULL; } - if (aix_bindnewmodule((void *)p, staticmodlistptr) == -1) { - aix_loaderror(pathname); - return NULL; - } return p; } |