-/* XXX getter, setter, getsetlist and wrapperbase need 'Py'-prefixed names */
+/* Descriptors */
typedef PyObject *(*getter)(PyObject *, void *);
typedef int (*setter)(PyObject *, PyObject *, void *);
-struct getsetlist {
+typedef struct PyGetSetDef {
char *name;
getter get;
setter set;
+ char *doc;
void *closure;
-};
+} PyGetSetDef;
typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
void *wrapped);
extern DL_IMPORT(PyObject *) PyDescr_NewMember(PyTypeObject *,
struct PyMemberDef *);
extern DL_IMPORT(PyObject *) PyDescr_NewGetSet(PyTypeObject *,
- struct getsetlist *);
+ struct PyGetSetDef *);
extern DL_IMPORT(PyObject *) PyDescr_NewWrapper(PyTypeObject *,
struct wrapperbase *, void *);
extern DL_IMPORT(int) PyDescr_IsData(PyObject *);
/* Attribute descriptor and subclassing stuff */
struct PyMethodDef *tp_methods;
struct PyMemberDef *tp_members;
- struct getsetlist *tp_getset;
+ struct PyGetSetDef *tp_getset;
struct _typeobject *tp_base;
PyObject *tp_dict;
descrgetfunc tp_descr_get;
return PyInt_FromLong(self->state);
}
-static struct getsetlist spamlist_getsets[] = {
- {"state", (getter)spamlist_state_get, NULL, NULL},
+static PyGetSetDef spamlist_getsets[] = {
+ {"state", (getter)spamlist_state_get, NULL,
+ "an int variable for demonstration purposes"},
{0}
};
return PyObject_GetAttrString(im->im_func, "__name__");
}
-static struct getsetlist instancemethod_getsetlist[] = {
- {"__dict__", (getter)im_get_dict},
- {"__doc__", (getter)im_get_doc},
- {"__name__", (getter)im_get_name},
+static PyGetSetDef instancemethod_getsetlist[] = {
+ {"__dict__", (getter)im_get_dict, NULL, "same as im_func.__dict__"},
+ {"__doc__", (getter)im_get_doc, NULL, "same as im_func.__doc__"},
+ {"__name__", (getter)im_get_name, NULL, "same as im_func.__name__"},
{NULL} /* Sentinel */
};
typedef struct {
COMMON;
- struct getsetlist *d_getset;
+ PyGetSetDef *d_getset;
} PyGetSetDescrObject;
typedef struct {
{0}
};
-static struct getsetlist method_getset[] = {
+static PyGetSetDef method_getset[] = {
{"__doc__", (getter)method_get_doc},
{0}
};
return PyString_FromString(descr->d_member->doc);
}
-static struct getsetlist member_getset[] = {
+static PyGetSetDef member_getset[] = {
{"__doc__", (getter)member_get_doc},
{0}
};
+static PyObject *
+getset_get_doc(PyGetSetDescrObject *descr, void *closure)
+{
+ if (descr->d_getset->doc == NULL) {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+ return PyString_FromString(descr->d_getset->doc);
+}
+
+static PyGetSetDef getset_getset[] = {
+ {"__doc__", (getter)getset_get_doc},
+ {0}
+};
+
static PyObject *
wrapper_get_doc(PyWrapperDescrObject *descr, void *closure)
{
return PyString_FromString(descr->d_base->doc);
}
-static struct getsetlist wrapper_getset[] = {
+static PyGetSetDef wrapper_getset[] = {
{"__doc__", (getter)wrapper_get_doc},
{0}
};
0, /* tp_iternext */
0, /* tp_methods */
descr_members, /* tp_members */
- 0, /* tp_getset */
+ getset_getset, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
(descrgetfunc)getset_get, /* tp_descr_get */
}
PyObject *
-PyDescr_NewGetSet(PyTypeObject *type, struct getsetlist *getset)
+PyDescr_NewGetSet(PyTypeObject *type, PyGetSetDef *getset)
{
PyGetSetDescrObject *descr;
}
}
-static struct getsetlist wrapper_getsets[] = {
+static PyGetSetDef wrapper_getsets[] = {
{"__name__", (getter)wrapper_name},
{"__doc__", (getter)wrapper_doc},
{0}
return PyInt_FromLong((long)(f->f_fp == 0));
}
-static struct getsetlist file_getsetlist[] = {
- {"closed", (getter)get_closed, NULL, NULL},
+static PyGetSetDef file_getsetlist[] = {
+ {"closed", (getter)get_closed, NULL, "flag set if the file is closed"},
{0},
};
return f->f_locals;
}
-static struct getsetlist frame_getsetlist[] = {
+static PyGetSetDef frame_getsetlist[] = {
{"f_locals", (getter)frame_getlocals, NULL, NULL},
{0}
};
return 0;
}
-static struct getsetlist func_getsetlist[] = {
+static PyGetSetDef func_getsetlist[] = {
{"func_code", (getter)func_get_code, (setter)func_set_code},
{"func_defaults", (getter)func_get_defaults,
(setter)func_set_defaults},
return self;
}
-static struct getsetlist meth_getsets [] = {
+static PyGetSetDef meth_getsets [] = {
{"__doc__", (getter)meth_get__doc__, NULL, NULL},
{"__name__", (getter)meth_get__name__, NULL, NULL},
{"__self__", (getter)meth_get__self__, NULL, NULL},
return res;
}
-struct getsetlist type_getsets[] = {
+PyGetSetDef type_getsets[] = {
{"__name__", (getter)type_name, NULL, NULL},
{"__module__", (getter)type_module, NULL, NULL},
{"__dict__", (getter)type_dict, NULL, NULL},
}
}
-struct getsetlist subtype_getsets[] = {
+PyGetSetDef subtype_getsets[] = {
{"__dict__", subtype_dict, NULL, NULL},
{0},
};
}
static int
-add_getset(PyTypeObject *type, struct getsetlist *gsp)
+add_getset(PyTypeObject *type, PyGetSetDef *gsp)
{
PyObject *dict = type->tp_defined;