[Python-checkins] CVS: python/dist/src/Objects descrobject.c,1.1.2.11,1.1.2.12 funcobject.c,2.37.4.5,2.37.4.6 object.c,2.124.4.19,2.124.4.20 typeobject.c,2.16.8.54,2.16.8.55
Guido van Rossum
gvanrossum@users.sourceforge.net
Mon, 02 Jul 2001 10:08:35 -0700
Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv3345/Objects
Modified Files:
Tag: descr-branch
descrobject.c funcobject.c object.c typeobject.c
Log Message:
Change the tp_descr_get slot to take three arguments: (self, obj,
type). The type is useful to create unbound methods, and I think I
have a way to make class methods work that needs this.
Index: descrobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/Attic/descrobject.c,v
retrieving revision 1.1.2.11
retrieving revision 1.1.2.12
diff -C2 -r1.1.2.11 -r1.1.2.12
*** descrobject.c 2001/06/29 14:31:11 1.1.2.11
--- descrobject.c 2001/07/02 17:08:33 1.1.2.12
***************
*** 98,102 ****
static PyObject *
! descr_get(PyDescrObject *descr, PyObject *obj)
{
if (obj == NULL) {
--- 98,102 ----
static PyObject *
! descr_get(PyDescrObject *descr, PyObject *obj, PyTypeObject *type)
{
if (obj == NULL) {
***************
*** 252,256 ****
if (argc == 1)
! return descr_get(descr, self);
if (argc == 2) {
PyObject *value = PyTuple_GET_ITEM(args, 1);
--- 252,256 ----
if (argc == 1)
! return descr_get(descr, self, self->ob_type);
if (argc == 2) {
PyObject *value = PyTuple_GET_ITEM(args, 1);
***************
*** 270,277 ****
{
PyObject *obj;
! if (!PyArg_ParseTuple(args, "O:get", &obj))
return NULL;
! return descr_get(descr, obj);
}
--- 270,280 ----
{
PyObject *obj;
+ PyTypeObject *type = NULL;
! if (!PyArg_ParseTuple(args, "O|O!:get", &obj, &PyType_Type, &type))
return NULL;
! if (type == NULL)
! type = obj->ob_type;
! return descr_get(descr, obj, type);
}
Index: funcobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/funcobject.c,v
retrieving revision 2.37.4.5
retrieving revision 2.37.4.6
diff -C2 -r2.37.4.5 -r2.37.4.6
*** funcobject.c 2001/06/06 14:27:54 2.37.4.5
--- funcobject.c 2001/07/02 17:08:33 2.37.4.6
***************
*** 331,342 ****
/* Bind a function to an object */
static PyObject *
! func_descr_get(PyObject *func, PyObject *obj)
{
! if (obj == NULL) {
! Py_INCREF(func);
! return func;
! }
! else
! return PyMethod_New(func, obj, (PyObject *)obj->ob_type);
}
--- 331,337 ----
/* Bind a function to an object */
static PyObject *
! func_descr_get(PyObject *func, PyObject *obj, PyTypeObject *type)
{
! return PyMethod_New(func, obj, (PyObject *)type);
}
Index: object.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
retrieving revision 2.124.4.19
retrieving revision 2.124.4.20
diff -C2 -r2.124.4.19 -r2.124.4.20
*** object.c 2001/06/29 20:46:51 2.124.4.19
--- object.c 2001/07/02 17:08:33 2.124.4.20
***************
*** 1128,1132 ****
f = descr->ob_type->tp_descr_get;
if (f != NULL && PyDescr_IsData(descr))
! return f(descr, obj);
}
--- 1128,1132 ----
f = descr->ob_type->tp_descr_get;
if (f != NULL && PyDescr_IsData(descr))
! return f(descr, obj, obj->ob_type);
}
***************
*** 1144,1148 ****
if (f != NULL)
! return f(descr, obj);
if (descr != NULL) {
--- 1144,1148 ----
if (f != NULL)
! return f(descr, obj, obj->ob_type);
if (descr != NULL) {
Index: typeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/typeobject.c,v
retrieving revision 2.16.8.54
retrieving revision 2.16.8.55
diff -C2 -r2.16.8.54 -r2.16.8.55
*** typeobject.c 2001/06/29 20:46:51 2.16.8.54
--- typeobject.c 2001/07/02 17:08:33 2.16.8.55
***************
*** 633,637 ****
f = descr->ob_type->tp_descr_get;
if (f != NULL && PyDescr_IsData(descr))
! return f(descr, (PyObject *)type);
}
--- 633,637 ----
f = descr->ob_type->tp_descr_get;
if (f != NULL && PyDescr_IsData(descr))
! return f(descr, (PyObject *)type, metatype);
}
***************
*** 645,649 ****
/* Use the descriptor from the metatype */
if (f != NULL) {
! res = f(descr, NULL);
return res;
}
--- 645,649 ----
/* Use the descriptor from the metatype */
if (f != NULL) {
! res = f(descr, NULL, metatype);
return res;
}
***************
*** 1636,1641 ****
static struct wrapperbase tab_descr_get[] = {
! {"__get__", (wrapperfunc)wrap_binaryfunc,
! "descr.__get__(obj) -> value"},
{0}
};
--- 1636,1641 ----
static struct wrapperbase tab_descr_get[] = {
! {"__get__", (wrapperfunc)wrap_ternaryfunc,
! "descr.__get__(obj, type) -> value"},
{0}
};
***************
*** 2026,2030 ****
}
! SLOT1(tp_descr_get, get, PyObject *, O);
static int
--- 2026,2030 ----
}
! SLOT2(tp_descr_get, get, PyObject *, PyTypeObject *, OO);
static int