Commit 41d00076 authored by Guido van Rossum's avatar Guido van Rossum

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]
parent 0fca3b36
...@@ -23,13 +23,17 @@ except NameError: ...@@ -23,13 +23,17 @@ except NameError:
pass pass
StringType = str StringType = str
# StringTypes is already outdated. Instead of writing "type(x) in
# types.StringTypes", you should use "isinstance(x, basestring)". But
# we keep around for compatibility with Python 2.2.
try: try:
UnicodeType = unicode UnicodeType = unicode
StringTypes = (StringType, UnicodeType) StringTypes = (StringType, UnicodeType)
except NameError: except NameError:
StringTypes = (StringType,) StringTypes = (StringType,)
BufferType = type(buffer('')) BufferType = buffer
TupleType = tuple TupleType = tuple
ListType = list ListType = list
...@@ -77,7 +81,7 @@ except TypeError: ...@@ -77,7 +81,7 @@ except TypeError:
pass pass
tb = None; del tb tb = None; del tb
SliceType = type(slice(0)) SliceType = slice
EllipsisType = type(Ellipsis) EllipsisType = type(Ellipsis)
DictProxyType = type(TypeType.__dict__) DictProxyType = type(TypeType.__dict__)
......
...@@ -501,7 +501,6 @@ ...@@ -501,7 +501,6 @@
(':Modules:md5module.c', None) (':Modules:md5module.c', None)
(':Modules:mmapmodule.c', None) (':Modules:mmapmodule.c', None)
(':Modules:mpzmodule.c', None) (':Modules:mpzmodule.c', None)
(':Modules:newmodule.c', None)
(':Modules:nismodule.c', None) (':Modules:nismodule.c', None)
(':Modules:operator.c', None) (':Modules:operator.c', None)
(':Modules:parsermodule.c', None) (':Modules:parsermodule.c', None)
......
...@@ -77,7 +77,6 @@ ALL = ...@@ -77,7 +77,6 @@ ALL =
"{Objs}"moduleobject.c.o "{Objs}"moduleobject.c.o
"{Objs}"myreadline.c.o "{Objs}"myreadline.c.o
"{Objs}"mystrtoul.c.o "{Objs}"mystrtoul.c.o
"{Objs}"newmodule.c.o
"{Objs}"nfullpath.c.o "{Objs}"nfullpath.c.o
"{Objs}"node.c.o "{Objs}"node.c.o
"{Objs}"object.c.o "{Objs}"object.c.o
...@@ -473,9 +472,6 @@ xxmodule.slb ...@@ -473,9 +472,6 @@ xxmodule.slb
"{Objs}"mathmodule.c.o "{Top}"Modules:mathmodule.c "{Objs}"mathmodule.c.o "{Top}"Modules:mathmodule.c
{CC} "{Top}"Modules:mathmodule.c -o "{Objs}"mathmodule.c.o -s mathmodule.c {CFlags} {CC} "{Top}"Modules:mathmodule.c -o "{Objs}"mathmodule.c.o -s mathmodule.c {CFlags}
"{Objs}"newmodule.c.o "{Top}"Modules:newmodule.c
{CC} "{Top}"Modules:newmodule.c -o "{Objs}"newmodule.c.o -s newmodule.c {CFlags}
"{Objs}"parsermodule.c.o "{Top}"Modules:parsermodule.c "{Objs}"parsermodule.c.o "{Top}"Modules:parsermodule.c
{CC} "{Top}"Modules:parsermodule.c -o "{Objs}"parsermodule.c.o -s parsermodule.c {CFlags} {CC} "{Top}"Modules:parsermodule.c -o "{Objs}"parsermodule.c.o -s parsermodule.c {CFlags}
......
...@@ -232,10 +232,6 @@ class PyBuildExt(build_ext): ...@@ -232,10 +232,6 @@ class PyBuildExt(build_ext):
# (NIST's Secure Hash Algorithm.) # (NIST's Secure Hash Algorithm.)
exts.append( Extension('sha', ['shamodule.c']) ) exts.append( Extension('sha', ['shamodule.c']) )
# Tommy Burnette's 'new' module (creates new empty objects of certain
# kinds):
exts.append( Extension('new', ['newmodule.c']) )
# Helper module for various ascii-encoders # Helper module for various ascii-encoders
exts.append( Extension('binascii', ['binascii.c']) ) exts.append( Extension('binascii', ['binascii.c']) )
......
...@@ -110,7 +110,6 @@ PYTHONPATH=$(COREPYTHONPATH) ...@@ -110,7 +110,6 @@ PYTHONPATH=$(COREPYTHONPATH)
posix posixmodule.c # posix (UNIX) system calls posix posixmodule.c # posix (UNIX) system calls
_sre _sre.c # Fredrik Lundh's new regular expressions _sre _sre.c # Fredrik Lundh's new regular expressions
new newmodule.c # Tommy Burnette's 'new' module
# The rest of the modules listed in this file are all commented out by # The rest of the modules listed in this file are all commented out by
# default. Usually they can be detected and built as dynamically # default. Usually they can be detected and built as dynamically
......
...@@ -155,6 +155,27 @@ PyBuffer_New(int size) ...@@ -155,6 +155,27 @@ PyBuffer_New(int size)
/* Methods */ /* Methods */
static PyObject *
buffer_new(PyTypeObject *type, PyObject *args, PyObject *kw)
{
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]])\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 void static void
buffer_dealloc(PyBufferObject *self) buffer_dealloc(PyBufferObject *self)
{ {
...@@ -539,5 +560,22 @@ PyTypeObject PyBuffer_Type = { ...@@ -539,5 +560,22 @@ PyTypeObject PyBuffer_Type = {
0, /* tp_setattro */ 0, /* tp_setattro */
&buffer_as_buffer, /* tp_as_buffer */ &buffer_as_buffer, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT, /* tp_flags */ Py_TPFLAGS_DEFAULT, /* tp_flags */
0, /* tp_doc */ buffer_doc, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
0, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
buffer_new, /* tp_new */
}; };
...@@ -149,6 +149,27 @@ PyMethod_Class(PyObject *im) ...@@ -149,6 +149,27 @@ PyMethod_Class(PyObject *im)
return ((PyMethodObject *)im)->im_class; return ((PyMethodObject *)im)->im_class;
} }
PyDoc_STRVAR(class_doc,
"classobj(name, bases, dict)\n\
\n\
Create a class object. The name must be a string; the second argument\n\
a tuple of classes, and the third a dictionary.");
static PyObject *
new_class(PyObject* unused, PyObject* args)
{
PyObject *name;
PyObject *classes;
PyObject *dict;
if (!PyArg_ParseTuple(args, "SO!O!:class",
&name,
&PyTuple_Type, &classes,
&PyDict_Type, &dict))
return NULL;
return PyClass_New(classes, dict, name);
}
static PyObject * static PyObject *
class_new(PyTypeObject *type, PyObject *args, PyObject *kwds) class_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{ {
...@@ -435,7 +456,7 @@ class_traverse(PyClassObject *o, visitproc visit, void *arg) ...@@ -435,7 +456,7 @@ class_traverse(PyClassObject *o, visitproc visit, void *arg)
PyTypeObject PyClass_Type = { PyTypeObject PyClass_Type = {
PyObject_HEAD_INIT(&PyType_Type) PyObject_HEAD_INIT(&PyType_Type)
0, 0,
"class", "classobj",
sizeof(PyClassObject), sizeof(PyClassObject),
0, 0,
(destructor)class_dealloc, /* tp_dealloc */ (destructor)class_dealloc, /* tp_dealloc */
...@@ -454,7 +475,7 @@ PyTypeObject PyClass_Type = { ...@@ -454,7 +475,7 @@ PyTypeObject PyClass_Type = {
(setattrofunc)class_setattr, /* tp_setattro */ (setattrofunc)class_setattr, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
0, /* tp_doc */ class_doc, /* tp_doc */
(traverseproc)class_traverse, /* tp_traverse */ (traverseproc)class_traverse, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */
...@@ -575,6 +596,34 @@ PyInstance_New(PyObject *klass, PyObject *arg, PyObject *kw) ...@@ -575,6 +596,34 @@ PyInstance_New(PyObject *klass, PyObject *arg, PyObject *kw)
/* Instance methods */ /* Instance methods */
PyDoc_STRVAR(instance_doc,
"instance(class[, dict])\n\
\n\
Create an instance without calling its __init__() method.\n\
The class must be a classic class.\n\
If present, dict must be a dictionary or None.");
static PyObject *
instance_new(PyTypeObject* type, PyObject* args, PyObject *kw)
{
PyObject *klass;
PyObject *dict = Py_None;
if (!PyArg_ParseTuple(args, "O!|O:instance",
&PyClass_Type, &klass, &dict))
return NULL;
if (dict == Py_None)
dict = NULL;
else if (!PyDict_Check(dict)) {
PyErr_SetString(PyExc_TypeError,
"instance() second arg must be dictionary or None");
return NULL;
}
return PyInstance_NewRaw(klass, dict);
}
static void static void
instance_dealloc(register PyInstanceObject *inst) instance_dealloc(register PyInstanceObject *inst)
{ {
...@@ -2014,13 +2063,24 @@ PyTypeObject PyInstance_Type = { ...@@ -2014,13 +2063,24 @@ PyTypeObject PyInstance_Type = {
(setattrofunc)instance_setattr, /* tp_setattro */ (setattrofunc)instance_setattr, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_CHECKTYPES,/*tp_flags*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_CHECKTYPES,/*tp_flags*/
0, /* tp_doc */ instance_doc, /* tp_doc */
(traverseproc)instance_traverse, /* tp_traverse */ (traverseproc)instance_traverse, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
instance_richcompare, /* tp_richcompare */ instance_richcompare, /* tp_richcompare */
offsetof(PyInstanceObject, in_weakreflist), /* tp_weaklistoffset */ offsetof(PyInstanceObject, in_weakreflist), /* tp_weaklistoffset */
(getiterfunc)instance_getiter, /* tp_iter */ (getiterfunc)instance_getiter, /* tp_iter */
(iternextfunc)instance_iternext, /* tp_iternext */ (iternextfunc)instance_iternext, /* tp_iternext */
0, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
instance_new, /* tp_new */
}; };
...@@ -2125,6 +2185,31 @@ instancemethod_getattro(PyObject *obj, PyObject *name) ...@@ -2125,6 +2185,31 @@ instancemethod_getattro(PyObject *obj, PyObject *name)
return NULL; return NULL;
} }
PyDoc_STRVAR(instancemethod_doc,
"instancemethod(function, instance, class)\n\
\n\
Create an instance method object.");
static PyObject *
instancemethod_new(PyTypeObject* type, PyObject* args, PyObject *kw)
{
PyObject *func;
PyObject *self;
PyObject *classObj;
if (!PyArg_ParseTuple(args, "OOO:instancemethod",
&func, &self, &classObj))
return NULL;
if (!PyCallable_Check(func)) {
PyErr_SetString(PyExc_TypeError,
"first argument must be callable");
return NULL;
}
if (self == Py_None)
self = NULL;
return PyMethod_New(func, self, classObj);
}
static void static void
instancemethod_dealloc(register PyMethodObject *im) instancemethod_dealloc(register PyMethodObject *im)
{ {
...@@ -2362,7 +2447,7 @@ instancemethod_descr_get(PyObject *meth, PyObject *obj, PyObject *class) ...@@ -2362,7 +2447,7 @@ instancemethod_descr_get(PyObject *meth, PyObject *obj, PyObject *class)
PyTypeObject PyMethod_Type = { PyTypeObject PyMethod_Type = {
PyObject_HEAD_INIT(&PyType_Type) PyObject_HEAD_INIT(&PyType_Type)
0, 0,
"instance method", "instancemethod",
sizeof(PyMethodObject), sizeof(PyMethodObject),
0, 0,
(destructor)instancemethod_dealloc, /* tp_dealloc */ (destructor)instancemethod_dealloc, /* tp_dealloc */
...@@ -2381,7 +2466,7 @@ PyTypeObject PyMethod_Type = { ...@@ -2381,7 +2466,7 @@ PyTypeObject PyMethod_Type = {
PyObject_GenericSetAttr, /* tp_setattro */ PyObject_GenericSetAttr, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
0, /* tp_doc */ instancemethod_doc, /* tp_doc */
(traverseproc)instancemethod_traverse, /* tp_traverse */ (traverseproc)instancemethod_traverse, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */
...@@ -2396,6 +2481,9 @@ PyTypeObject PyMethod_Type = { ...@@ -2396,6 +2481,9 @@ PyTypeObject PyMethod_Type = {
instancemethod_descr_get, /* tp_descr_get */ instancemethod_descr_get, /* tp_descr_get */
0, /* tp_descr_set */ 0, /* tp_descr_set */
0, /* tp_dictoffset */ 0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
instancemethod_new, /* tp_new */
}; };
/* Clear out the free list */ /* Clear out the free list */
......
...@@ -725,7 +725,7 @@ proxy_traverse(PyObject *self, visitproc visit, void *arg) ...@@ -725,7 +725,7 @@ proxy_traverse(PyObject *self, visitproc visit, void *arg)
static PyTypeObject proxytype = { static PyTypeObject proxytype = {
PyObject_HEAD_INIT(&PyType_Type) PyObject_HEAD_INIT(&PyType_Type)
0, /* ob_size */ 0, /* ob_size */
"dict-proxy", /* tp_name */ "dictproxy", /* tp_name */
sizeof(proxyobject), /* tp_basicsize */ sizeof(proxyobject), /* tp_basicsize */
0, /* tp_itemsize */ 0, /* tp_itemsize */
/* methods */ /* methods */
......
...@@ -266,6 +266,52 @@ static PyGetSetDef func_getsetlist[] = { ...@@ -266,6 +266,52 @@ static PyGetSetDef func_getsetlist[] = {
{NULL} /* Sentinel */ {NULL} /* Sentinel */
}; };
PyDoc_STRVAR(func_doc,
"function(code, globals[, name[, argdefs]])\n\
\n\
Create a function object from a code object and a dictionary.\n\
The optional name string overrides the name from the code object.\n\
The optional argdefs tuple specifies the default argument values.");
static PyObject *
func_new(PyTypeObject* type, PyObject* args, PyObject* kw)
{
PyObject *code;
PyObject *globals;
PyObject *name = Py_None;
PyObject *defaults = Py_None;
PyFunctionObject *newfunc;
if (!PyArg_ParseTuple(args, "O!O!|OO!:function",
&PyCode_Type, &code,
&PyDict_Type, &globals,
&name,
&PyTuple_Type, &defaults))
return NULL;
if (name != Py_None && !PyString_Check(name)) {
PyErr_SetString(PyExc_TypeError,
"arg 3 (name) must be None or string");
return NULL;
}
newfunc = (PyFunctionObject *)PyFunction_New(code, globals);
if (newfunc == NULL)
return NULL;
if (name != Py_None) {
Py_XINCREF(name);
Py_XDECREF(newfunc->func_name);
newfunc->func_name = name;
}
if (defaults != Py_None) {
Py_XINCREF(defaults);
Py_XDECREF(newfunc->func_defaults);
newfunc->func_defaults = defaults;
}
return (PyObject *)newfunc;
}
static void static void
func_dealloc(PyFunctionObject *op) func_dealloc(PyFunctionObject *op)
{ {
...@@ -415,7 +461,7 @@ PyTypeObject PyFunction_Type = { ...@@ -415,7 +461,7 @@ PyTypeObject PyFunction_Type = {
PyObject_GenericSetAttr, /* tp_setattro */ PyObject_GenericSetAttr, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
0, /* tp_doc */ func_doc, /* tp_doc */
(traverseproc)func_traverse, /* tp_traverse */ (traverseproc)func_traverse, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */
...@@ -430,6 +476,9 @@ PyTypeObject PyFunction_Type = { ...@@ -430,6 +476,9 @@ PyTypeObject PyFunction_Type = {
func_descr_get, /* tp_descr_get */ func_descr_get, /* tp_descr_get */
0, /* tp_descr_set */ 0, /* tp_descr_set */
offsetof(PyFunctionObject, func_dict), /* tp_dictoffset */ offsetof(PyFunctionObject, func_dict), /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
func_new, /* tp_new */
}; };
......
...@@ -164,6 +164,30 @@ PySlice_GetIndicesEx(PySliceObject *r, int length, ...@@ -164,6 +164,30 @@ PySlice_GetIndicesEx(PySliceObject *r, int length,
return 0; return 0;
} }
static PyObject *
slice_new(PyTypeObject *type, PyObject *args, PyObject *kw)
{
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])\n\
\n\
Create a slice object. This is used for extended slicing (e.g. a[0:10:2]).");
static void static void
slice_dealloc(PySliceObject *r) slice_dealloc(PySliceObject *r)
{ {
...@@ -240,7 +264,7 @@ PyTypeObject PySlice_Type = { ...@@ -240,7 +264,7 @@ PyTypeObject PySlice_Type = {
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT, /* tp_flags */ Py_TPFLAGS_DEFAULT, /* tp_flags */
0, /* tp_doc */ slice_doc, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */
...@@ -252,4 +276,10 @@ PyTypeObject PySlice_Type = { ...@@ -252,4 +276,10 @@ PyTypeObject PySlice_Type = {
0, /* tp_getset */ 0, /* tp_getset */
0, /* tp_base */ 0, /* tp_base */
0, /* tp_dict */ 0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
slice_new, /* tp_new */
}; };
...@@ -182,7 +182,6 @@ MODULES = \ ...@@ -182,7 +182,6 @@ MODULES = \
$(PATHOBJ)\MathModule.obj \ $(PATHOBJ)\MathModule.obj \
$(PATHOBJ)\MD5c.obj \ $(PATHOBJ)\MD5c.obj \
$(PATHOBJ)\MD5Module.obj \ $(PATHOBJ)\MD5Module.obj \
$(PATHOBJ)\NewModule.obj \
$(PATHOBJ)\Operator.obj \ $(PATHOBJ)\Operator.obj \
$(PATHOBJ)\PCREModule.obj \ $(PATHOBJ)\PCREModule.obj \
$(PATHOBJ)\PyPCRE.obj \ $(PATHOBJ)\PyPCRE.obj \
...@@ -806,20 +805,6 @@ mpzmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \ ...@@ -806,20 +805,6 @@ mpzmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h \
$(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \ $(PY_INCLUDE)\sliceobject.h $(PY_INCLUDE)\stringobject.h \
$(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h $(PY_INCLUDE)\tupleobject.h
newmodule.obj: $(PY_INCLUDE)\abstract.h $(PY_INCLUDE)\ceval.h $(PY_INCLUDE)\classobject.h \
$(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\compile.h $(PY_INCLUDE)\complexobject.h \
pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
$(PY_INCLUDE)\floatobject.h $(PY_INCLUDE)\funcobject.h $(PY_INCLUDE)\import.h \
$(PY_INCLUDE)\intobject.h $(PY_INCLUDE)\intrcheck.h $(PY_INCLUDE)\listobject.h \
$(PY_INCLUDE)\longobject.h $(PY_INCLUDE)\methodobject.h \
$(PY_INCLUDE)\modsupport.h $(PY_INCLUDE)\moduleobject.h $(PY_INCLUDE)\mymalloc.h \
$(PY_INCLUDE)\myproto.h $(PY_INCLUDE)\object.h $(PY_INCLUDE)\objimpl.h \
$(PY_INCLUDE)\pydebug.h $(PY_INCLUDE)\pyerrors.h $(PY_INCLUDE)\pyfpe.h \
$(PY_INCLUDE)\pystate.h $(PY_INCLUDE)\python.h $(PY_INCLUDE)\pythonrun.h \
$(PY_INCLUDE)\rangeobject.h $(PY_INCLUDE)\sliceobject.h \
$(PY_INCLUDE)\stringobject.h $(PY_INCLUDE)\sysmodule.h $(PY_INCLUDE)\traceback.h \
$(PY_INCLUDE)\tupleobject.h
nismodule.obj: $(PY_INCLUDE)\abstract.h $(OS2TCPIP)\Include\sys\time.h $(PY_INCLUDE)\ceval.h \ nismodule.obj: $(PY_INCLUDE)\abstract.h $(OS2TCPIP)\Include\sys\time.h $(PY_INCLUDE)\ceval.h \
$(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \ $(PY_INCLUDE)\classobject.h $(PY_INCLUDE)\cobject.h $(PY_INCLUDE)\complexobject.h \
pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \ pyconfig.h $(PY_INCLUDE)\dictobject.h $(PY_INCLUDE)\fileobject.h \
......
...@@ -152,7 +152,6 @@ MODULES = \ ...@@ -152,7 +152,6 @@ MODULES = \
MathModule.obj \ MathModule.obj \
MD5c.obj \ MD5c.obj \
MD5Module.obj \ MD5Module.obj \
NewModule.obj \
Operator.obj \ Operator.obj \
PosixModule.obj \ PosixModule.obj \
RegexModule.obj \ RegexModule.obj \
...@@ -619,14 +618,6 @@ mpzmodule.obj: abstract.h ceval.h classobject.h cobject.h \ ...@@ -619,14 +618,6 @@ mpzmodule.obj: abstract.h ceval.h classobject.h cobject.h \
pyerrors.h pyfpe.h pystate.h python.h pythonrun.h rangeobject.h \ pyerrors.h pyfpe.h pystate.h python.h pythonrun.h rangeobject.h \
sliceobject.h stringobject.h sysmodule.h traceback.h tupleobject.h sliceobject.h stringobject.h sysmodule.h traceback.h tupleobject.h
newmodule.obj: abstract.h ceval.h classobject.h cobject.h compile.h \
complexobject.h pyconfig.h dictobject.h fileobject.h floatobject.h \
funcobject.h import.h intobject.h intrcheck.h listobject.h \
longobject.h methodobject.h modsupport.h moduleobject.h mymalloc.h \
myproto.h object.h objimpl.h pydebug.h pyerrors.h pyfpe.h \
pystate.h python.h pythonrun.h rangeobject.h sliceobject.h \
stringobject.h sysmodule.h traceback.h tupleobject.h
nismodule.obj: abstract.h c:\mptn\include\sys\time.h ceval.h classobject.h \ nismodule.obj: abstract.h c:\mptn\include\sys\time.h ceval.h classobject.h \
cobject.h complexobject.h pyconfig.h dictobject.h fileobject.h \ cobject.h complexobject.h pyconfig.h dictobject.h fileobject.h \
floatobject.h funcobject.h import.h intobject.h intrcheck.h \ floatobject.h funcobject.h import.h intobject.h intrcheck.h \
......
...@@ -1253,21 +1253,6 @@ SOURCE=..\Python\mystrtoul.c ...@@ -1253,21 +1253,6 @@ SOURCE=..\Python\mystrtoul.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\Modules\newmodule.c
!IF "$(CFG)" == "pythoncore - Win32 Release"
!ELSEIF "$(CFG)" == "pythoncore - Win32 Debug"
!ELSEIF "$(CFG)" == "pythoncore - Win32 Alpha Debug"
!ELSEIF "$(CFG)" == "pythoncore - Win32 Alpha Release"
!ENDIF
# End Source File
# Begin Source File
SOURCE=..\Parser\node.c SOURCE=..\Parser\node.c
!IF "$(CFG)" == "pythoncore - Win32 Release" !IF "$(CFG)" == "pythoncore - Win32 Release"
......
...@@ -106,27 +106,6 @@ and keyword arguments taken from the optional dictionary kwargs.\n\ ...@@ -106,27 +106,6 @@ and keyword arguments taken from the optional dictionary kwargs.\n\
Note that classes are callable, as are instances with a __call__() method."); 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 * static PyObject *
builtin_callable(PyObject *self, PyObject *v) builtin_callable(PyObject *self, PyObject *v)
{ {
...@@ -1078,31 +1057,6 @@ PyDoc_STRVAR(len_doc, ...@@ -1078,31 +1057,6 @@ PyDoc_STRVAR(len_doc,
Return the number of items of a sequence or mapping."); 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 * static PyObject *
builtin_locals(PyObject *self) builtin_locals(PyObject *self)
{ {
...@@ -1775,7 +1729,6 @@ static PyMethodDef builtin_methods[] = { ...@@ -1775,7 +1729,6 @@ static PyMethodDef builtin_methods[] = {
{"__import__", builtin___import__, METH_VARARGS, import_doc}, {"__import__", builtin___import__, METH_VARARGS, import_doc},
{"abs", builtin_abs, METH_O, abs_doc}, {"abs", builtin_abs, METH_O, abs_doc},
{"apply", builtin_apply, METH_VARARGS, apply_doc}, {"apply", builtin_apply, METH_VARARGS, apply_doc},
{"buffer", builtin_buffer, METH_VARARGS, buffer_doc},
{"callable", builtin_callable, METH_O, callable_doc}, {"callable", builtin_callable, METH_O, callable_doc},
{"chr", builtin_chr, METH_VARARGS, chr_doc}, {"chr", builtin_chr, METH_VARARGS, chr_doc},
{"cmp", builtin_cmp, METH_VARARGS, cmp_doc}, {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
...@@ -1813,7 +1766,6 @@ static PyMethodDef builtin_methods[] = { ...@@ -1813,7 +1766,6 @@ static PyMethodDef builtin_methods[] = {
{"repr", builtin_repr, METH_O, repr_doc}, {"repr", builtin_repr, METH_O, repr_doc},
{"round", builtin_round, METH_VARARGS, round_doc}, {"round", builtin_round, METH_VARARGS, round_doc},
{"setattr", builtin_setattr, METH_VARARGS, setattr_doc}, {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
{"slice", builtin_slice, METH_VARARGS, slice_doc},
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
{"unichr", builtin_unichr, METH_VARARGS, unichr_doc}, {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
#endif #endif
...@@ -1849,6 +1801,7 @@ _PyBuiltin_Init(void) ...@@ -1849,6 +1801,7 @@ _PyBuiltin_Init(void)
SETBUILTIN("True", Py_True); SETBUILTIN("True", Py_True);
SETBUILTIN("basestring", &PyBaseString_Type); SETBUILTIN("basestring", &PyBaseString_Type);
SETBUILTIN("bool", &PyBool_Type); SETBUILTIN("bool", &PyBool_Type);
SETBUILTIN("buffer", &PyBuffer_Type);
SETBUILTIN("classmethod", &PyClassMethod_Type); SETBUILTIN("classmethod", &PyClassMethod_Type);
#ifndef WITHOUT_COMPLEX #ifndef WITHOUT_COMPLEX
SETBUILTIN("complex", &PyComplex_Type); SETBUILTIN("complex", &PyComplex_Type);
...@@ -1861,6 +1814,7 @@ _PyBuiltin_Init(void) ...@@ -1861,6 +1814,7 @@ _PyBuiltin_Init(void)
SETBUILTIN("list", &PyList_Type); SETBUILTIN("list", &PyList_Type);
SETBUILTIN("long", &PyLong_Type); SETBUILTIN("long", &PyLong_Type);
SETBUILTIN("object", &PyBaseObject_Type); SETBUILTIN("object", &PyBaseObject_Type);
SETBUILTIN("slice", &PySlice_Type);
SETBUILTIN("staticmethod", &PyStaticMethod_Type); SETBUILTIN("staticmethod", &PyStaticMethod_Type);
SETBUILTIN("str", &PyString_Type); SETBUILTIN("str", &PyString_Type);
SETBUILTIN("super", &PySuper_Type); SETBUILTIN("super", &PySuper_Type);
......
...@@ -91,6 +91,69 @@ static PyMemberDef code_memberlist[] = { ...@@ -91,6 +91,69 @@ static PyMemberDef code_memberlist[] = {
{NULL} /* Sentinel */ {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 static void
code_dealloc(PyCodeObject *co) code_dealloc(PyCodeObject *co)
{ {
...@@ -200,7 +263,7 @@ PyTypeObject PyCode_Type = { ...@@ -200,7 +263,7 @@ PyTypeObject PyCode_Type = {
0, /* tp_setattro */ 0, /* tp_setattro */
0, /* tp_as_buffer */ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT, /* tp_flags */ Py_TPFLAGS_DEFAULT, /* tp_flags */
0, /* tp_doc */ code_doc, /* tp_doc */
0, /* tp_traverse */ 0, /* tp_traverse */
0, /* tp_clear */ 0, /* tp_clear */
0, /* tp_richcompare */ 0, /* tp_richcompare */
...@@ -217,7 +280,7 @@ PyTypeObject PyCode_Type = { ...@@ -217,7 +280,7 @@ PyTypeObject PyCode_Type = {
0, /* tp_dictoffset */ 0, /* tp_dictoffset */
0, /* tp_init */ 0, /* tp_init */
0, /* tp_alloc */ 0, /* tp_alloc */
0, /* tp_new */ code_new, /* tp_new */
}; };
#define NAME_CHARS \ #define NAME_CHARS \
......
...@@ -104,19 +104,6 @@ aix_getoldmodules(void **modlistptr) ...@@ -104,19 +104,6 @@ aix_getoldmodules(void **modlistptr)
return 0; 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 static void
aix_loaderror(const char *pathname) aix_loaderror(const char *pathname)
...@@ -192,10 +179,6 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname, ...@@ -192,10 +179,6 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
aix_loaderror(pathname); aix_loaderror(pathname);
return NULL; return NULL;
} }
if (aix_bindnewmodule((void *)p, staticmodlistptr) == -1) {
aix_loaderror(pathname);
return NULL;
}
return p; return p;
} }
...@@ -264,9 +264,6 @@ $(LIB_PYTHON): $(OBJECTS) ...@@ -264,9 +264,6 @@ $(LIB_PYTHON): $(OBJECTS)
$(LINK) -aof -o @.^.Modules.o.md5link @.^.Modules.o.md5c @.^.Modules.o.md5module $(LINK) -aof -o @.^.Modules.o.md5link @.^.Modules.o.md5c @.^.Modules.o.md5module
$(MAKEDLK) -d @.^.Lib.md5/pyd -s s.linktab -o @.^.Modules.o.md5link -e initmd5 $(MAKEDLK) -d @.^.Lib.md5/pyd -s s.linktab -o @.^.Modules.o.md5link -e initmd5
@.^.Lib.new/pyd: @.^.Modules.o.newmodule s.linktab
$(MAKEDLK) -d @.^.Lib.new/pyd -s s.linktab -o @.^.Modules.o.newmodule -e initnew
@.^.Lib.operator/pyd: @.^.Modules.o.operator s.linktab @.^.Lib.operator/pyd: @.^.Modules.o.operator s.linktab
$(MAKEDLK) -d @.^.Lib.operator/pyd -s s.linktab -o @.^.Modules.o.operator -e initoperator $(MAKEDLK) -d @.^.Lib.operator/pyd -s s.linktab -o @.^.Modules.o.operator -e initoperator
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment