blob: e925664693e3c89b6b0fcfa9badce0f3849d6be9 [file] [log] [blame]
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001/* This extension module exposes some types that are only available at the
2 * C level. It should not be used directly, but instead through the Python
3 * level types modules, which imports this.
4 */
5
6#include "Python.h"
7#include "structmember.h"
8
9typedef struct
10{
11 PyObject_HEAD
12 int member;
13} Helper;
14
15static PyMemberDef helper_members[] = {
16 { "member", T_INT, offsetof(Helper, member), READONLY,
17 PyDoc_STR("A member descriptor")
18 },
19 { NULL }
20};
21
22static PyObject *
23helper_getter(Helper *self, void *unused)
24{
25 Py_RETURN_NONE;
26}
27
28static PyGetSetDef helper_getset[] = {
29 { "getter", (getter)helper_getter, NULL,
30 PyDoc_STR("A getset descriptor"),
31 },
32 { NULL }
33};
34
35static PyTypeObject HelperType = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +000036 PyVarObject_HEAD_INIT(NULL, 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000037 "_types.Helper", /* tp_name */
38 sizeof(Helper), /* tp_basicsize */
39 0, /* tp_itemsize */
40 0, /* tp_dealloc */
41 0, /* tp_print */
42 0, /* tp_getattr */
43 0, /* tp_setattr */
44 0, /* tp_compare */
45 0, /* tp_repr */
46 0, /* tp_as_number */
47 0, /* tp_as_sequence */
48 0, /* tp_as_mapping */
49 0, /* tp_hash */
50 0, /* tp_call */
51 0, /* tp_str */
52 0, /* tp_getattro */
53 0, /* tp_setattro */
54 0, /* tp_as_buffer */
55 Py_TPFLAGS_DEFAULT, /* tp_flags */
56 0, /* tp_doc */
57 0, /* tp_traverse */
58 0, /* tp_clear */
59 0, /* tp_richcompare */
60 0, /* tp_weaklistoffset */
61 0, /* tp_iter */
62 0, /* tp_iternext */
63 0, /* tp_methods */
64 helper_members, /* tp_members */
65 helper_getset, /* tp_getset */
66 0, /* tp_base */
67 0, /* tp_dict */
68 0, /* tp_descr_get */
69 0, /* tp_descr_set */
70 0, /* tp_dictoffset */
71 0, /* tp_init */
72 0, /* tp_alloc */
73 0, /* tp_new */
74 0, /* tp_free */
75};
76
77PyMODINIT_FUNC
78init_types(void)
79{
80 PyObject *m;
81
82 m = Py_InitModule3("_types", NULL, "A types module helper");
83 if (!m)
84 return;
85
86 if (PyType_Ready(&HelperType) < 0)
87 return;
88
89 Py_INCREF(&HelperType);
90 PyModule_AddObject(m, "Helper", (PyObject *)&HelperType);
91}
92
93