[Python-checkins] CVS: python/dist/src/Objects classobject.c,2.148,2.149 complexobject.c,2.46,2.47 descrobject.c,2.11,2.12 fileobject.c,2.128,2.129 frameobject.c,2.56,2.57 funcobject.c,2.43,2.44 moduleobject.c,2.37,2.38 sliceobject.c,2.8,2.9 typeobject.c,2.65,2.66
Guido van Rossum
gvanrossum@users.sourceforge.net
Thu, 20 Sep 2001 13:46:21 -0700
- Previous message: [Python-checkins] CVS: python/dist/src/Modules xxsubtype.c,2.5,2.6
- Next message: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.275,2.276 compile.c,2.223,2.224 structmember.c,2.20,2.21 symtable.c,2.5,2.6
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv25248/Objects
Modified Files:
classobject.c complexobject.c descrobject.c fileobject.c
frameobject.c funcobject.c moduleobject.c sliceobject.c
typeobject.c
Log Message:
Add optional docstrings to member descriptors. For backwards
compatibility, this required all places where an array of "struct
memberlist" structures was declared that is referenced from a type's
tp_members slot to change the type of the structure to PyMemberDef;
"struct memberlist" is now only used by old code that still calls
PyMember_Get/Set. The code in PyObject_GenericGetAttr/SetAttr now
calls the new APIs PyMember_GetOne/SetOne, which take a PyMemberDef
argument.
As examples, I added actual docstrings to the attributes of a few
types: file, complex, instance method, super, and xxsubtype.spamlist.
Also converted the symtable to new style getattr.
Index: classobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v
retrieving revision 2.148
retrieving revision 2.149
diff -C2 -d -r2.148 -r2.149
*** classobject.c 2001/09/18 20:23:28 2.148
--- classobject.c 2001/09/20 20:46:18 2.149
***************
*** 2007,2014 ****
#define OFF(x) offsetof(PyMethodObject, x)
! static struct memberlist instancemethod_memberlist[] = {
! {"im_class", T_OBJECT, OFF(im_class), READONLY|RESTRICTED},
! {"im_func", T_OBJECT, OFF(im_func), READONLY|RESTRICTED},
! {"im_self", T_OBJECT, OFF(im_self), READONLY|RESTRICTED},
{NULL} /* Sentinel */
};
--- 2007,2017 ----
#define OFF(x) offsetof(PyMethodObject, x)
! static PyMemberDef instancemethod_memberlist[] = {
! {"im_class", T_OBJECT, OFF(im_class), READONLY|RESTRICTED,
! "the class associated with a method"},
! {"im_func", T_OBJECT, OFF(im_func), READONLY|RESTRICTED,
! "the function (or other callable) implementing a method"},
! {"im_self", T_OBJECT, OFF(im_self), READONLY|RESTRICTED,
! "the instance to which a method is bound; None for unbound methods"},
{NULL} /* Sentinel */
};
Index: complexobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/complexobject.c,v
retrieving revision 2.46
retrieving revision 2.47
diff -C2 -d -r2.46 -r2.47
*** complexobject.c 2001/09/19 01:13:10 2.46
--- complexobject.c 2001/09/20 20:46:18 2.47
***************
*** 626,632 ****
};
! static struct memberlist complex_members[] = {
! {"real", T_DOUBLE, offsetof(PyComplexObject, cval.real), 0},
! {"imag", T_DOUBLE, offsetof(PyComplexObject, cval.imag), 0},
{0},
};
--- 626,634 ----
};
! static PyMemberDef complex_members[] = {
! {"real", T_DOUBLE, offsetof(PyComplexObject, cval.real), 0,
! "the real part of a complex number"},
! {"imag", T_DOUBLE, offsetof(PyComplexObject, cval.imag), 0,
! "the imaginary part of a complex number"},
{0},
};
Index: descrobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/descrobject.c,v
retrieving revision 2.11
retrieving revision 2.12
diff -C2 -d -r2.11 -r2.12
*** descrobject.c 2001/09/06 21:55:04 2.11
--- descrobject.c 2001/09/20 20:46:18 2.12
***************
*** 22,26 ****
typedef struct {
COMMON;
! struct memberlist *d_member;
} PyMemberDescrObject;
--- 22,26 ----
typedef struct {
COMMON;
! PyMemberDef *d_member;
} PyMemberDescrObject;
***************
*** 127,132 ****
if (descr_check((PyDescrObject *)descr, obj, type, &res))
return res;
! return PyMember_Get((char *)obj, descr->d_member,
! descr->d_member->name);
}
--- 127,131 ----
if (descr_check((PyDescrObject *)descr, obj, type, &res))
return res;
! return PyMember_GetOne((char *)obj, descr->d_member);
}
***************
*** 182,187 ****
if (descr_setcheck((PyDescrObject *)descr, obj, value, &res))
return res;
! return PyMember_Set((char *)obj, descr->d_member,
! descr->d_member->name, value);
}
--- 181,185 ----
if (descr_setcheck((PyDescrObject *)descr, obj, value, &res))
return res;
! return PyMember_SetOne((char *)obj, descr->d_member, value);
}
***************
*** 290,294 ****
static PyObject *
! member_get_doc(PyMethodDescrObject *descr, void *closure)
{
if (descr->d_method->ml_doc == NULL) {
--- 288,292 ----
static PyObject *
! method_get_doc(PyMethodDescrObject *descr, void *closure)
{
if (descr->d_method->ml_doc == NULL) {
***************
*** 299,303 ****
}
! static struct memberlist descr_members[] = {
{"__objclass__", T_OBJECT, offsetof(PyDescrObject, d_type), READONLY},
{"__name__", T_OBJECT, offsetof(PyDescrObject, d_name), READONLY},
--- 297,301 ----
}
! static PyMemberDef descr_members[] = {
{"__objclass__", T_OBJECT, offsetof(PyDescrObject, d_type), READONLY},
{"__name__", T_OBJECT, offsetof(PyDescrObject, d_name), READONLY},
***************
*** 305,308 ****
--- 303,321 ----
};
+ static struct getsetlist method_getset[] = {
+ {"__doc__", (getter)method_get_doc},
+ {0}
+ };
+
+ static PyObject *
+ member_get_doc(PyMemberDescrObject *descr, void *closure)
+ {
+ if (descr->d_member->doc == NULL) {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+ return PyString_FromString(descr->d_member->doc);
+ }
+
static struct getsetlist member_getset[] = {
{"__doc__", (getter)member_get_doc},
***************
*** 356,360 ****
0, /* tp_methods */
descr_members, /* tp_members */
! member_getset, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
--- 369,373 ----
0, /* tp_methods */
descr_members, /* tp_members */
! method_getset, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
***************
*** 394,398 ****
0, /* tp_methods */
descr_members, /* tp_members */
! 0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
--- 407,411 ----
0, /* tp_methods */
descr_members, /* tp_members */
! member_getset, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
***************
*** 508,512 ****
PyObject *
! PyDescr_NewMember(PyTypeObject *type, struct memberlist *member)
{
PyMemberDescrObject *descr;
--- 521,525 ----
PyObject *
! PyDescr_NewMember(PyTypeObject *type, PyMemberDef *member)
{
PyMemberDescrObject *descr;
Index: fileobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v
retrieving revision 2.128
retrieving revision 2.129
diff -C2 -d -r2.128 -r2.129
*** fileobject.c 2001/09/20 07:55:22 2.128
--- fileobject.c 2001/09/20 20:46:19 2.129
***************
*** 1384,1391 ****
#define OFF(x) offsetof(PyFileObject, x)
! static struct memberlist file_memberlist[] = {
! {"softspace", T_INT, OFF(f_softspace)},
! {"mode", T_OBJECT, OFF(f_mode), RO},
! {"name", T_OBJECT, OFF(f_name), RO},
/* getattr(f, "closed") is implemented without this table */
{NULL} /* Sentinel */
--- 1384,1394 ----
#define OFF(x) offsetof(PyFileObject, x)
! static PyMemberDef file_memberlist[] = {
! {"softspace", T_INT, OFF(f_softspace), 0,
! "flag indicating that a space needs to be printed; used by print"},
! {"mode", T_OBJECT, OFF(f_mode), RO,
! "file mode ('r', 'w', 'a', possibly with 'b' or '+' added)"},
! {"name", T_OBJECT, OFF(f_name), RO,
! "file name"},
/* getattr(f, "closed") is implemented without this table */
{NULL} /* Sentinel */
Index: frameobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/frameobject.c,v
retrieving revision 2.56
retrieving revision 2.57
diff -C2 -d -r2.56 -r2.57
*** frameobject.c 2001/08/30 00:32:51 2.56
--- frameobject.c 2001/09/20 20:46:19 2.57
***************
*** 11,15 ****
#define OFF(x) offsetof(PyFrameObject, x)
! static struct memberlist frame_memberlist[] = {
{"f_back", T_OBJECT, OFF(f_back), RO},
{"f_code", T_OBJECT, OFF(f_code), RO},
--- 11,15 ----
#define OFF(x) offsetof(PyFrameObject, x)
! static PyMemberDef frame_memberlist[] = {
{"f_back", T_OBJECT, OFF(f_back), RO},
{"f_code", T_OBJECT, OFF(f_code), RO},
Index: funcobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/funcobject.c,v
retrieving revision 2.43
retrieving revision 2.44
diff -C2 -d -r2.43 -r2.44
*** funcobject.c 2001/09/17 23:46:56 2.43
--- funcobject.c 2001/09/20 20:46:19 2.44
***************
*** 130,134 ****
#define RR ()
! static struct memberlist func_memberlist[] = {
{"func_closure", T_OBJECT, OFF(func_closure),
RESTRICTED|READONLY},
--- 130,134 ----
#define RR ()
! static PyMemberDef func_memberlist[] = {
{"func_closure", T_OBJECT, OFF(func_closure),
RESTRICTED|READONLY},
Index: moduleobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/moduleobject.c,v
retrieving revision 2.37
retrieving revision 2.38
diff -C2 -d -r2.37 -r2.38
*** moduleobject.c 2001/08/29 23:53:09 2.37
--- moduleobject.c 2001/09/20 20:46:19 2.38
***************
*** 10,14 ****
} PyModuleObject;
! struct memberlist module_members[] = {
{"__dict__", T_OBJECT, offsetof(PyModuleObject, md_dict), READONLY},
{0}
--- 10,14 ----
} PyModuleObject;
! PyMemberDef module_members[] = {
{"__dict__", T_OBJECT, offsetof(PyModuleObject, md_dict), READONLY},
{0}
Index: sliceobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/sliceobject.c,v
retrieving revision 2.8
retrieving revision 2.9
diff -C2 -d -r2.8 -r2.9
*** sliceobject.c 2001/08/02 04:15:00 2.8
--- sliceobject.c 2001/09/20 20:46:19 2.9
***************
*** 130,134 ****
}
! static struct memberlist slice_members[] = {
{"start", T_OBJECT, offsetof(PySliceObject, start), READONLY},
{"stop", T_OBJECT, offsetof(PySliceObject, stop), READONLY},
--- 130,134 ----
}
! static PyMemberDef slice_members[] = {
{"start", T_OBJECT, offsetof(PySliceObject, start), READONLY},
{"stop", T_OBJECT, offsetof(PySliceObject, stop), READONLY},
Index: typeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/typeobject.c,v
retrieving revision 2.65
retrieving revision 2.66
diff -C2 -d -r2.65 -r2.66
*** typeobject.c 2001/09/18 20:38:53 2.65
--- typeobject.c 2001/09/20 20:46:19 2.66
***************
*** 5,9 ****
#include "structmember.h"
! static struct memberlist type_members[] = {
{"__basicsize__", T_INT, offsetof(PyTypeObject,tp_basicsize),READONLY},
{"__itemsize__", T_INT, offsetof(PyTypeObject, tp_itemsize), READONLY},
--- 5,9 ----
#include "structmember.h"
! static PyMemberDef type_members[] = {
{"__basicsize__", T_INT, offsetof(PyTypeObject,tp_basicsize),READONLY},
{"__itemsize__", T_INT, offsetof(PyTypeObject, tp_itemsize), READONLY},
***************
*** 264,268 ****
PyBufferProcs as_buffer;
PyObject *name, *slots;
! struct memberlist members[1];
} etype;
--- 264,268 ----
PyBufferProcs as_buffer;
PyObject *name, *slots;
! PyMemberDef members[1];
} etype;
***************
*** 673,677 ****
PyTypeObject *type, *base, *tmptype, *winner;
etype *et;
! struct memberlist *mp;
int i, nbases, nslots, slotoffset, dynamic, add_dict, add_weak;
--- 673,677 ----
PyTypeObject *type, *base, *tmptype, *winner;
etype *et;
! PyMemberDef *mp;
int i, nbases, nslots, slotoffset, dynamic, add_dict, add_weak;
***************
*** 1088,1092 ****
"type", /* tp_name */
sizeof(etype), /* tp_basicsize */
! sizeof(struct memberlist), /* tp_itemsize */
(destructor)type_dealloc, /* tp_dealloc */
0, /* tp_print */
--- 1088,1092 ----
"type", /* tp_name */
sizeof(etype), /* tp_basicsize */
! sizeof(PyMemberDef), /* tp_itemsize */
(destructor)type_dealloc, /* tp_dealloc */
0, /* tp_print */
***************
*** 1193,1197 ****
}
! static struct memberlist object_members[] = {
{"__class__", T_OBJECT, offsetof(PyObject, ob_type), READONLY},
{0}
--- 1193,1197 ----
}
! static PyMemberDef object_members[] = {
{"__class__", T_OBJECT, offsetof(PyObject, ob_type), READONLY},
{0}
***************
*** 1264,1268 ****
static int
! add_members(PyTypeObject *type, struct memberlist *memb)
{
PyObject *dict = type->tp_defined;
--- 1264,1268 ----
static int
! add_members(PyTypeObject *type, PyMemberDef *memb)
{
PyObject *dict = type->tp_defined;
***************
*** 3222,3228 ****
} superobject;
! static struct memberlist super_members[] = {
! {"__type__", T_OBJECT, offsetof(superobject, type), READONLY},
! {"__obj__", T_OBJECT, offsetof(superobject, obj), READONLY},
{0}
};
--- 3222,3230 ----
} superobject;
! static PyMemberDef super_members[] = {
! {"__thisclass__", T_OBJECT, offsetof(superobject, type), READONLY,
! "the class invoking super()"},
! {"__self__", T_OBJECT, offsetof(superobject, obj), READONLY,
! "the instance invoking super(); may be None"},
{0}
};
- Previous message: [Python-checkins] CVS: python/dist/src/Modules xxsubtype.c,2.5,2.6
- Next message: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.275,2.276 compile.c,2.223,2.224 structmember.c,2.20,2.21 symtable.c,2.5,2.6
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]