Mercurial > cpython-lru_cache-weakref
annotate Modules/_typesmodule.c @ 39496:352ffe77b71d legacy-trunk
Patch #1535500: fix segfault in BZ2File.writelines and make sure it
raises the correct exceptions.
| author | Georg Brandl <georg@python.org> |
|---|---|
| date | Mon, 14 Aug 2006 21:42:55 +0000 |
| parents | 28cdd43e0569 |
| children | e70cdce0e8b2 |
| rev | line source |
|---|---|
|
39226
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
1 /* This extension module exposes some types that are only available at the |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
2 * C level. It should not be used directly, but instead through the Python |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
3 * level types modules, which imports this. |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
4 */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
5 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
6 #include "Python.h" |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
7 #include "structmember.h" |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
8 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
9 typedef struct |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
10 { |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
11 PyObject_HEAD |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
12 int member; |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
13 } Helper; |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
14 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
15 static PyMemberDef helper_members[] = { |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
16 { "member", T_INT, offsetof(Helper, member), READONLY, |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
17 PyDoc_STR("A member descriptor") |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
18 }, |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
19 { NULL } |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
20 }; |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
21 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
22 static PyObject * |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
23 helper_getter(Helper *self, void *unused) |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
24 { |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
25 Py_RETURN_NONE; |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
26 } |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
27 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
28 static PyGetSetDef helper_getset[] = { |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
29 { "getter", (getter)helper_getter, NULL, |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
30 PyDoc_STR("A getset descriptor"), |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
31 }, |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
32 { NULL } |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
33 }; |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
34 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
35 static PyTypeObject HelperType = { |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
36 PyObject_HEAD_INIT(NULL) |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
37 0, /* ob_size */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
38 "_types.Helper", /* tp_name */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
39 sizeof(Helper), /* tp_basicsize */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
40 0, /* tp_itemsize */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
41 0, /* tp_dealloc */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
42 0, /* tp_print */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
43 0, /* tp_getattr */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
44 0, /* tp_setattr */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
45 0, /* tp_compare */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
46 0, /* tp_repr */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
47 0, /* tp_as_number */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
48 0, /* tp_as_sequence */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
49 0, /* tp_as_mapping */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
50 0, /* tp_hash */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
51 0, /* tp_call */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
52 0, /* tp_str */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
53 0, /* tp_getattro */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
54 0, /* tp_setattro */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
55 0, /* tp_as_buffer */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
56 Py_TPFLAGS_DEFAULT, /* tp_flags */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
57 0, /* tp_doc */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
58 0, /* tp_traverse */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
59 0, /* tp_clear */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
60 0, /* tp_richcompare */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
61 0, /* tp_weaklistoffset */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
62 0, /* tp_iter */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
63 0, /* tp_iternext */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
64 0, /* tp_methods */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
65 helper_members, /* tp_members */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
66 helper_getset, /* tp_getset */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
67 0, /* tp_base */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
68 0, /* tp_dict */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
69 0, /* tp_descr_get */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
70 0, /* tp_descr_set */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
71 0, /* tp_dictoffset */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
72 0, /* tp_init */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
73 0, /* tp_alloc */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
74 0, /* tp_new */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
75 0, /* tp_free */ |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
76 }; |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
77 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
78 PyMODINIT_FUNC |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
79 init_types(void) |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
80 { |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
81 PyObject *m; |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
82 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
83 m = Py_InitModule3("_types", NULL, "A types module helper"); |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
84 if (!m) |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
85 return; |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
86 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
87 if (PyType_Ready(&HelperType) < 0) |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
88 return; |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
89 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
90 Py_INCREF(&HelperType); |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
91 PyModule_AddObject(m, "Helper", (PyObject *)&HelperType); |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
92 } |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
93 |
|
28cdd43e0569
Patch #1520294: Support for getset and member descriptors in types.py,
Barry Warsaw <barry@python.org>
parents:
diff
changeset
|
94 |
