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]
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 @@
 
 
 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 @@
 
 
 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 @@
  	{"__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 @@
  	{"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 @@
 	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 @@
 	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 @@
 	{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 @@
 	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 @@
 	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 @@
 	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 @@
 		aix_loaderror(pathname);
 		return NULL;
 	}
-	if (aix_bindnewmodule((void *)p, staticmodlistptr) == -1) {
-		aix_loaderror(pathname);
-		return NULL;
-	}
 
 	return p;
 }