annotate Include/object.h @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents 5a2ef447b80d
children e814fbd470bf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
1 #ifndef Py_OBJECT_H
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
2 #define Py_OBJECT_H
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
3 #ifdef __cplusplus
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
4 extern "C" {
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
5 #endif
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
6
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
7
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 /* Object and type object interface */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 /*
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 Objects are structures allocated on the heap. Special rules apply to
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 the use of objects to ensure they are properly garbage-collected.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 Objects are never allocated statically or on the stack; they must be
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 accessed through special macros and functions only. (Type objects are
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 exceptions to the first rule; the standard types are represented by
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
16 statically initialized type objects, although work on type/class unification
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
17 for Python 2.2 made it possible to have heap-allocated type objects too).
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 An object has a 'reference count' that is increased or decreased when a
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 pointer to the object is copied or deleted; when the reference count
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 reaches zero there are no references to the object left and it can be
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 removed from the heap.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 An object has a 'type' that determines what it represents and what kind
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 of data it contains. An object's type is fixed when it is created.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 Types themselves are represented as objects; an object contains a
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 pointer to the corresponding type object. The type itself has a type
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 pointer pointing to the object representing the type 'type', which
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 contains a pointer to itself!).
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 Objects do not float around in memory; once allocated an object keeps
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 the same size and address. Objects that must hold variable-size data
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 can contain pointers to variable-size parts of the object. Not all
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 objects of the same type have the same size; but the size cannot change
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 after allocation. (These restrictions are made so a reference to an
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 object can be simply a pointer -- moving an object would require
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 updating all the pointers, and changing an object's size would require
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 moving it if there was another object right next to it.)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
40 Objects are always accessed through pointers of the type 'PyObject *'.
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
41 The type 'PyObject' is a structure that only contains the reference count
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 and the type pointer. The actual memory allocated for an object
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 contains other data that can only be accessed after casting the pointer
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 to a pointer to a longer structure type. This longer type must start
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
45 with the reference count and type fields; the macro PyObject_HEAD should be
13620
5b727ab37092 Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents: 13464
diff changeset
46 used for this (to accommodate for future changes). The implementation
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 of a particular object type can cast the object pointer to the proper
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 type and back.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 A standard interface exists for objects that contain an array of items
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 whose size is determined when the object is allocated.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
54 /* Py_DEBUG implies Py_TRACE_REFS. */
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
55 #if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
56 #define Py_TRACE_REFS
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
57 #endif
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
59 /* Py_TRACE_REFS implies Py_REF_DEBUG. */
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
60 #if defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG)
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
61 #define Py_REF_DEBUG
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
62 #endif
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
63
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
64 #ifdef Py_TRACE_REFS
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
65 /* Define pointers to support a doubly-linked list of all live heap objects. */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
66 #define _PyObject_HEAD_EXTRA \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
67 struct _object *_ob_next; \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
68 struct _object *_ob_prev;
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
69
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
70 #define _PyObject_EXTRA_INIT 0, 0,
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
71
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
72 #else
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
73 #define _PyObject_HEAD_EXTRA
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
74 #define _PyObject_EXTRA_INIT
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
75 #endif
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
76
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
77 /* PyObject_HEAD defines the initial segment of every PyObject. */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
78 #define PyObject_HEAD \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
79 _PyObject_HEAD_EXTRA \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
80 Py_ssize_t ob_refcnt; \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
81 struct _typeobject *ob_type;
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
82
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
83 #define PyObject_HEAD_INIT(type) \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
84 _PyObject_EXTRA_INIT \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
85 1, type,
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
87 #define PyVarObject_HEAD_INIT(type, size) \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
88 PyObject_HEAD_INIT(type) size,
42333
6620a510e9a9 PEP 3123: Provide forward compatibility with Python 3.0, while keeping
Martin v. Löwis <martin@v.loewis.de>
parents: 40908
diff changeset
89
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
90 /* PyObject_VAR_HEAD defines the initial segment of all variable-size
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
91 * container objects. These end with a declaration of an array with 1
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
92 * element, but enough space is malloc'ed so that the array actually
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
93 * has room for ob_size elements. Note that ob_size is an element count,
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
94 * not necessarily a byte count.
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
95 */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
96 #define PyObject_VAR_HEAD \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
97 PyObject_HEAD \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
98 Py_ssize_t ob_size; /* Number of items in variable part */
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
99 #define Py_INVALID_SIZE (Py_ssize_t)-1
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
100
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
101 /* Nothing is actually declared to be a PyObject, but every pointer to
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
102 * a Python object can be cast to a PyObject*. This is inheritance built
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
103 * by hand. Similarly every pointer to a variable-size Python object can,
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
104 * in addition, be cast to PyVarObject*.
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
105 */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 typedef struct _object {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
107 PyObject_HEAD
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
108 } PyObject;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 typedef struct {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
111 PyObject_VAR_HEAD
5535
20c2b715188e Oops, another forgotten renaming: varobject -> PyVarObject.
Guido van Rossum <guido@python.org>
parents: 5410
diff changeset
112 } PyVarObject;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
113
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
114 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
115 #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
116 #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size)
44350
26384b8180c7 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. Macros for b/w compatibility are available.
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
117
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 /*
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 Type objects contain a string containing the type name (to help somewhat
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
120 in debugging), the allocation parameters (see PyObject_New() and
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
121 PyObject_NewVar()),
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
122 and methods for accessing objects of the type. Methods are optional, a
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 nil pointer meaning that particular kind of access is not available for
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
124 this type. The Py_DECREF() macro uses the tp_dealloc method without
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 checking for a nil pointer; it should always be implemented except if
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 the implementation can guarantee that the reference count will never
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
127 reach zero (e.g., for statically allocated type objects).
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 NB: the methods for certain type groups are now contained in separate
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 method blocks.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
132
13418
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
133 typedef PyObject * (*unaryfunc)(PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
134 typedef PyObject * (*binaryfunc)(PyObject *, PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
135 typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
136 typedef int (*inquiry)(PyObject *);
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
137 typedef Py_ssize_t (*lenfunc)(PyObject *);
13418
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
138 typedef int (*coercion)(PyObject **, PyObject **);
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
139 typedef PyObject *(*intargfunc)(PyObject *, int) Py_DEPRECATED(2.5);
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
140 typedef PyObject *(*intintargfunc)(PyObject *, int, int) Py_DEPRECATED(2.5);
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
141 typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t);
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
142 typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t);
13418
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
143 typedef int(*intobjargproc)(PyObject *, int, PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
144 typedef int(*intintobjargproc)(PyObject *, int, int, PyObject *);
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
145 typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *);
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
146 typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
13418
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
147 typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *);
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
148
45793
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
149
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
150
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
151 /* int-based buffer interface */
13418
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
152 typedef int (*getreadbufferproc)(PyObject *, int, void **);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
153 typedef int (*getwritebufferproc)(PyObject *, int, void **);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
154 typedef int (*getsegcountproc)(PyObject *, int *);
36675
dba6494735d0 Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36631
diff changeset
155 typedef int (*getcharbufferproc)(PyObject *, int, char **);
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
156 /* ssize_t-based buffer interface */
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
157 typedef Py_ssize_t (*readbufferproc)(PyObject *, Py_ssize_t, void **);
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
158 typedef Py_ssize_t (*writebufferproc)(PyObject *, Py_ssize_t, void **);
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
159 typedef Py_ssize_t (*segcountproc)(PyObject *, Py_ssize_t *);
36675
dba6494735d0 Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36631
diff changeset
160 typedef Py_ssize_t (*charbufferproc)(PyObject *, Py_ssize_t, char **);
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
161
52749
75efd757434b Issue #2396: backport the memoryview object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 50754
diff changeset
162
45793
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
163 /* Py3k buffer interface */
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
164 typedef struct bufferinfo {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
165 void *buf;
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 53904
diff changeset
166 PyObject *obj; /* owned reference */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
167 Py_ssize_t len;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
168 Py_ssize_t itemsize; /* This is Py_ssize_t so it can be
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
169 pointed to by strides in simple case.*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
170 int readonly;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
171 int ndim;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
172 char *format;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
173 Py_ssize_t *shape;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
174 Py_ssize_t *strides;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
175 Py_ssize_t *suboffsets;
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 53904
diff changeset
176 Py_ssize_t smalltable[2]; /* static store for shape and strides of
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 53904
diff changeset
177 mono-dimensional buffers. */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
178 void *internal;
45793
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
179 } Py_buffer;
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
180
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
181 typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
182 typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
183
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
184 /* Flags for getting buffers */
45793
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
185 #define PyBUF_SIMPLE 0
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
186 #define PyBUF_WRITABLE 0x0001
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
187 /* we used to include an E, backwards compatible alias */
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
188 #define PyBUF_WRITEABLE PyBUF_WRITABLE
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
189 #define PyBUF_FORMAT 0x0004
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
190 #define PyBUF_ND 0x0008
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
191 #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
192 #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
193 #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
194 #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
195 #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
196
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
197 #define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
198 #define PyBUF_CONTIG_RO (PyBUF_ND)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
199
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
200 #define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
201 #define PyBUF_STRIDED_RO (PyBUF_STRIDES)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
202
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
203 #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
204 #define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
205
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
206 #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
207 #define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
208
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
209
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
210 #define PyBUF_READ 0x100
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
211 #define PyBUF_WRITE 0x200
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
212 #define PyBUF_SHADOW 0x400
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
213 /* end Py3k buffer interface */
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
214
13418
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
215 typedef int (*objobjproc)(PyObject *, PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
216 typedef int (*visitproc)(PyObject *, void *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
217 typedef int (*traverseproc)(PyObject *, visitproc, void *);
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
218
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 typedef struct {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
220 /* For numbers without flag bit Py_TPFLAGS_CHECKTYPES set, all
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
221 arguments are guaranteed to be of the object's type (modulo
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
222 coercion hacks -- i.e. if the type's coercion function
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
223 returns other types, then these are allowed as well). Numbers that
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
224 have the Py_TPFLAGS_CHECKTYPES flag bit set should check *both*
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
225 arguments for proper type and implement the necessary conversions
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
226 in the slot functions themselves. */
15716
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
227
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
228 binaryfunc nb_add;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
229 binaryfunc nb_subtract;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
230 binaryfunc nb_multiply;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
231 binaryfunc nb_divide;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
232 binaryfunc nb_remainder;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
233 binaryfunc nb_divmod;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
234 ternaryfunc nb_power;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
235 unaryfunc nb_negative;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
236 unaryfunc nb_positive;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
237 unaryfunc nb_absolute;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
238 inquiry nb_nonzero;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
239 unaryfunc nb_invert;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
240 binaryfunc nb_lshift;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
241 binaryfunc nb_rshift;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
242 binaryfunc nb_and;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
243 binaryfunc nb_xor;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
244 binaryfunc nb_or;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
245 coercion nb_coerce;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
246 unaryfunc nb_int;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
247 unaryfunc nb_long;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
248 unaryfunc nb_float;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
249 unaryfunc nb_oct;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
250 unaryfunc nb_hex;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
251 /* Added in release 2.0 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
252 binaryfunc nb_inplace_add;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
253 binaryfunc nb_inplace_subtract;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
254 binaryfunc nb_inplace_multiply;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
255 binaryfunc nb_inplace_divide;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
256 binaryfunc nb_inplace_remainder;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
257 ternaryfunc nb_inplace_power;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
258 binaryfunc nb_inplace_lshift;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
259 binaryfunc nb_inplace_rshift;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
260 binaryfunc nb_inplace_and;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
261 binaryfunc nb_inplace_xor;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
262 binaryfunc nb_inplace_or;
19051
f20727cc3d0f Implement PEP 238 in its (almost) full glory.
Guido van Rossum <guido@python.org>
parents: 19040
diff changeset
263
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
264 /* Added in release 2.2 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
265 /* The following require the Py_TPFLAGS_HAVE_CLASS flag */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
266 binaryfunc nb_floor_divide;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
267 binaryfunc nb_true_divide;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
268 binaryfunc nb_inplace_floor_divide;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
269 binaryfunc nb_inplace_true_divide;
36882
6a9c7165b17b Checking in the code for PEP 357.
Guido van Rossum <guido@python.org>
parents: 36837
diff changeset
270
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
271 /* Added in release 2.5 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
272 unaryfunc nb_index;
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
273 } PyNumberMethods;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
274
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 typedef struct {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
276 lenfunc sq_length;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
277 binaryfunc sq_concat;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
278 ssizeargfunc sq_repeat;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
279 ssizeargfunc sq_item;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
280 ssizessizeargfunc sq_slice;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
281 ssizeobjargproc sq_ass_item;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
282 ssizessizeobjargproc sq_ass_slice;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
283 objobjproc sq_contains;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
284 /* Added in release 2.0 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
285 binaryfunc sq_inplace_concat;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
286 ssizeargfunc sq_inplace_repeat;
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
287 } PySequenceMethods;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
288
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
289 typedef struct {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
290 lenfunc mp_length;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
291 binaryfunc mp_subscript;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
292 objobjargproc mp_ass_subscript;
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
293 } PyMappingMethods;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
294
5410
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
295 typedef struct {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
296 readbufferproc bf_getreadbuffer;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
297 writebufferproc bf_getwritebuffer;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
298 segcountproc bf_getsegcount;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
299 charbufferproc bf_getcharbuffer;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
300 getbufferproc bf_getbuffer;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
301 releasebufferproc bf_releasebuffer;
5410
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
302 } PyBufferProcs;
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
303
5410
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
304
22969
3100ba26913c Change the type of the tp_free from 'destructor' to 'freefunc'.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22785
diff changeset
305 typedef void (*freefunc)(void *);
13418
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
306 typedef void (*destructor)(PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
307 typedef int (*printfunc)(PyObject *, FILE *, int);
36675
dba6494735d0 Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36631
diff changeset
308 typedef PyObject *(*getattrfunc)(PyObject *, char *);
13418
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
309 typedef PyObject *(*getattrofunc)(PyObject *, PyObject *);
36675
dba6494735d0 Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 36631
diff changeset
310 typedef int (*setattrfunc)(PyObject *, char *, PyObject *);
13418
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
311 typedef int (*setattrofunc)(PyObject *, PyObject *, PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
312 typedef int (*cmpfunc)(PyObject *, PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
313 typedef PyObject *(*reprfunc)(PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
314 typedef long (*hashfunc)(PyObject *);
15938
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
315 typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int);
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
316 typedef PyObject *(*getiterfunc) (PyObject *);
17617
aac65f50df6f Mondo changes to the iterator stuff, without changing how Python code
Guido van Rossum <guido@python.org>
parents: 17597
diff changeset
317 typedef PyObject *(*iternextfunc) (PyObject *);
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
318 typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *);
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
319 typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *);
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
320 typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
321 typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *);
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
322 typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t);
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
323
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
324 typedef struct _typeobject {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
325 PyObject_VAR_HEAD
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
326 const char *tp_name; /* For printing, in format "<module>.<name>" */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
327 Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
328
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
329 /* Methods to implement standard operations */
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
330
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
331 destructor tp_dealloc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
332 printfunc tp_print;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
333 getattrfunc tp_getattr;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
334 setattrfunc tp_setattr;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
335 cmpfunc tp_compare;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
336 reprfunc tp_repr;
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
337
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
338 /* Method suites for standard classes */
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
339
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
340 PyNumberMethods *tp_as_number;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
341 PySequenceMethods *tp_as_sequence;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
342 PyMappingMethods *tp_as_mapping;
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1049
diff changeset
343
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
344 /* More standard operations (here for binary compatibility) */
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1049
diff changeset
345
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
346 hashfunc tp_hash;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
347 ternaryfunc tp_call;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
348 reprfunc tp_str;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
349 getattrofunc tp_getattro;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
350 setattrofunc tp_setattro;
2071
048e91a59c75 new tp_str and tp_doc members in type object
Guido van Rossum <guido@python.org>
parents: 2058
diff changeset
351
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
352 /* Functions to access object as input/output buffer */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
353 PyBufferProcs *tp_as_buffer;
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
354
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
355 /* Flags to define presence of optional/expanded features */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
356 long tp_flags;
2071
048e91a59c75 new tp_str and tp_doc members in type object
Guido van Rossum <guido@python.org>
parents: 2058
diff changeset
357
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
358 const char *tp_doc; /* Documentation string */
2071
048e91a59c75 new tp_str and tp_doc members in type object
Guido van Rossum <guido@python.org>
parents: 2058
diff changeset
359
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
360 /* Assigned meaning in release 2.0 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
361 /* call function for all accessible objects */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
362 traverseproc tp_traverse;
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
363
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
364 /* delete references to contained objects */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
365 inquiry tp_clear;
12990
e615596c5c47 Round 1 of Neil Schemenauer's GC patches:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12481
diff changeset
366
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
367 /* Assigned meaning in release 2.1 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
368 /* rich comparisons */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
369 richcmpfunc tp_richcompare;
15938
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
370
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
371 /* weak reference enabler */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
372 Py_ssize_t tp_weaklistoffset;
8124
bd744af6845f Add new spares to the end of the type object struct.
Guido van Rossum <guido@python.org>
parents: 7983
diff changeset
373
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
374 /* Added in release 2.2 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
375 /* Iterators */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
376 getiterfunc tp_iter;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
377 iternextfunc tp_iternext;
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
378
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
379 /* Attribute descriptor and subclassing stuff */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
380 struct PyMethodDef *tp_methods;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
381 struct PyMemberDef *tp_members;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
382 struct PyGetSetDef *tp_getset;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
383 struct _typeobject *tp_base;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
384 PyObject *tp_dict;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
385 descrgetfunc tp_descr_get;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
386 descrsetfunc tp_descr_set;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
387 Py_ssize_t tp_dictoffset;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
388 initproc tp_init;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
389 allocfunc tp_alloc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
390 newfunc tp_new;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
391 freefunc tp_free; /* Low-level free-memory routine */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
392 inquiry tp_is_gc; /* For PyObject_IS_GC */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
393 PyObject *tp_bases;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
394 PyObject *tp_mro; /* method resolution order */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
395 PyObject *tp_cache;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
396 PyObject *tp_subclasses;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
397 PyObject *tp_weaklist;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
398 destructor tp_del;
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
399
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
400 /* Type attribute cache version tag. Added in version 2.6 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
401 unsigned int tp_version_tag;
44664
387d48c3a0b3 Re-apply patch #1700288 (first applied in r59931, rolled back in r59940)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44661
diff changeset
402
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1329
diff changeset
403 #ifdef COUNT_ALLOCS
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
404 /* these must be last and never explicitly initialized */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
405 Py_ssize_t tp_allocs;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
406 Py_ssize_t tp_frees;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
407 Py_ssize_t tp_maxalloc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
408 struct _typeobject *tp_prev;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
409 struct _typeobject *tp_next;
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1329
diff changeset
410 #endif
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
411 } PyTypeObject;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
412
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
413
28219
7c8e8807aed2 - The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents: 26263
diff changeset
414 /* The *real* layout of a type object when allocated on the heap */
7c8e8807aed2 - The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents: 26263
diff changeset
415 typedef struct _heaptypeobject {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
416 /* Note: there's a dependency on the order of these members
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
417 in slotptr() in typeobject.c . */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
418 PyTypeObject ht_type;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
419 PyNumberMethods as_number;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
420 PyMappingMethods as_mapping;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
421 PySequenceMethods as_sequence; /* as_sequence comes after as_mapping,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
422 so that the mapping wins when both
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
423 the mapping and the sequence define
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
424 a given operator (e.g. __getitem__).
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
425 see add_operators() in typeobject.c . */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
426 PyBufferProcs as_buffer;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
427 PyObject *ht_name, *ht_slots;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
428 /* here are optional user slots, followed by the members. */
28219
7c8e8807aed2 - The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents: 26263
diff changeset
429 } PyHeapTypeObject;
7c8e8807aed2 - The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents: 26263
diff changeset
430
7c8e8807aed2 - The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents: 26263
diff changeset
431 /* access macro to the members which are floating "behind" the object */
7c8e8807aed2 - The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents: 26263
diff changeset
432 #define PyHeapType_GET_MEMBERS(etype) \
44350
26384b8180c7 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. Macros for b/w compatibility are available.
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
433 ((PyMemberDef *)(((char *)etype) + Py_TYPE(etype)->tp_basicsize))
28219
7c8e8807aed2 - The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents: 26263
diff changeset
434
7c8e8807aed2 - The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents: 26263
diff changeset
435
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
436 /* Generic type check */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
437 PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *);
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
438 #define PyObject_TypeCheck(ob, tp) \
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
439 (Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
440
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
441 PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
442 PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
443 PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
444
40908
d01bd37bf5ce Variation of patch # 1624059 to speed up checking if an object is a subclass
Neal Norwitz <nnorwitz@gmail.com>
parents: 39463
diff changeset
445 #define PyType_Check(op) \
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
446 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS)
44350
26384b8180c7 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. Macros for b/w compatibility are available.
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
447 #define PyType_CheckExact(op) (Py_TYPE(op) == &PyType_Type)
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
448
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
449 PyAPI_FUNC(int) PyType_Ready(PyTypeObject *);
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 35999
diff changeset
450 PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t);
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
451 PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
452 PyObject *, PyObject *);
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
453 PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *);
53904
1ecdca11eb9e add _PyObject_LookupSpecial to handle fetching special method lookup
Benjamin Peterson <benjamin@python.org>
parents: 52899
diff changeset
454 PyAPI_FUNC(PyObject *) _PyObject_LookupSpecial(PyObject *, char *, PyObject **);
45025
ea3fe302d392 Added clear cache methods to clear the internal type lookup cache for ref leak test runs.
Christian Heimes <christian@cheimes.de>
parents: 44664
diff changeset
455 PyAPI_FUNC(unsigned int) PyType_ClearCache(void);
47358
93fe913fae55 #2989: add PyType_Modified().
Georg Brandl <georg@python.org>
parents: 47294
diff changeset
456 PyAPI_FUNC(void) PyType_Modified(PyTypeObject *);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
457
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
458 /* Generic operations on objects */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
459 PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
460 PyAPI_FUNC(void) _PyObject_Dump(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
461 PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *);
35331
ef11cbc08dab Change the %s format specifier for str objects so that it returns a
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 33541
diff changeset
462 PyAPI_FUNC(PyObject *) _PyObject_Str(PyObject *);
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
463 PyAPI_FUNC(PyObject *) PyObject_Str(PyObject *);
48872
edd2ca894a67 sort of backport 66038 by aliasing PyObject_Bytes to PyObject_Str
Benjamin Peterson <benjamin@python.org>
parents: 48308
diff changeset
464 #define PyObject_Bytes PyObject_Str
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19283
diff changeset
465 #ifdef Py_USING_UNICODE
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
466 PyAPI_FUNC(PyObject *) PyObject_Unicode(PyObject *);
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19283
diff changeset
467 #endif
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
468 PyAPI_FUNC(int) PyObject_Compare(PyObject *, PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
469 PyAPI_FUNC(PyObject *) PyObject_RichCompare(PyObject *, PyObject *, int);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
470 PyAPI_FUNC(int) PyObject_RichCompareBool(PyObject *, PyObject *, int);
35999
9541369b0dca Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35331
diff changeset
471 PyAPI_FUNC(PyObject *) PyObject_GetAttrString(PyObject *, const char *);
9541369b0dca Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35331
diff changeset
472 PyAPI_FUNC(int) PyObject_SetAttrString(PyObject *, const char *, PyObject *);
9541369b0dca Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35331
diff changeset
473 PyAPI_FUNC(int) PyObject_HasAttrString(PyObject *, const char *);
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
474 PyAPI_FUNC(PyObject *) PyObject_GetAttr(PyObject *, PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
475 PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
476 PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
477 PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *);
28320
fd5ef7003469 Renamed PyObject_GenericGetIter to PyObject_SelfIter
Raymond Hettinger <python@rcn.com>
parents: 28308
diff changeset
478 PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *);
50754
e9748db47635 #3720: Interpreter crashes when an evil iterator removes its own next function.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 48872
diff changeset
479 PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *);
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
480 PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
481 PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
482 PyObject *, PyObject *);
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
483 PyAPI_FUNC(long) PyObject_Hash(PyObject *);
47961
f9b80a820a25 Issue 2235: __hash__ is once again inherited by default, but inheritance can be blocked explicitly so that collections.Hashable remains meaningful
Nick Coghlan <ncoghlan@gmail.com>
parents: 47948
diff changeset
484 PyAPI_FUNC(long) PyObject_HashNotImplemented(PyObject *);
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
485 PyAPI_FUNC(int) PyObject_IsTrue(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
486 PyAPI_FUNC(int) PyObject_Not(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
487 PyAPI_FUNC(int) PyCallable_Check(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
488 PyAPI_FUNC(int) PyNumber_Coerce(PyObject **, PyObject **);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
489 PyAPI_FUNC(int) PyNumber_CoerceEx(PyObject **, PyObject **);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
490
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
491 PyAPI_FUNC(void) PyObject_ClearWeakRefs(PyObject *);
16385
1fb6672b20ef PEP 205, Weak References -- initial checkin.
Fred Drake <fdrake@acm.org>
parents: 16235
diff changeset
492
19970
f761cab28c1c Hopefully fix 3-way comparisons. This unfortunately adds yet another
Guido van Rossum <guido@python.org>
parents: 19705
diff changeset
493 /* A slot function whose address we need to compare */
f761cab28c1c Hopefully fix 3-way comparisons. This unfortunately adds yet another
Guido van Rossum <guido@python.org>
parents: 19705
diff changeset
494 extern int _PyObject_SlotCompare(PyObject *, PyObject *);
64300
b2e8dcd15040 Merged revisions 84344 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61463
diff changeset
495 /* Same as PyObject_Generic{Get,Set}Attr, but passing the attributes
b2e8dcd15040 Merged revisions 84344 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61463
diff changeset
496 dict as the last parameter. */
b2e8dcd15040 Merged revisions 84344 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61463
diff changeset
497 PyAPI_FUNC(PyObject *)
b2e8dcd15040 Merged revisions 84344 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61463
diff changeset
498 _PyObject_GenericGetAttrWithDict(PyObject *, PyObject *, PyObject *);
b2e8dcd15040 Merged revisions 84344 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61463
diff changeset
499 PyAPI_FUNC(int)
b2e8dcd15040 Merged revisions 84344 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61463
diff changeset
500 _PyObject_GenericSetAttrWithDict(PyObject *, PyObject *,
b2e8dcd15040 Merged revisions 84344 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61463
diff changeset
501 PyObject *, PyObject *);
19970
f761cab28c1c Hopefully fix 3-way comparisons. This unfortunately adds yet another
Guido van Rossum <guido@python.org>
parents: 19705
diff changeset
502
f761cab28c1c Hopefully fix 3-way comparisons. This unfortunately adds yet another
Guido van Rossum <guido@python.org>
parents: 19705
diff changeset
503
19705
b7f6fbc087a7 At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents: 19576
diff changeset
504 /* PyObject_Dir(obj) acts like Python __builtin__.dir(obj), returning a
b7f6fbc087a7 At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents: 19576
diff changeset
505 list of strings. PyObject_Dir(NULL) is like __builtin__.dir(),
b7f6fbc087a7 At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents: 19576
diff changeset
506 returning the names of the current locals. In this case, if there are
b7f6fbc087a7 At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents: 19576
diff changeset
507 no current locals, NULL is returned, and PyErr_Occurred() is false.
b7f6fbc087a7 At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents: 19576
diff changeset
508 */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
509 PyAPI_FUNC(PyObject *) PyObject_Dir(PyObject *);
19705
b7f6fbc087a7 At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents: 19576
diff changeset
510
b7f6fbc087a7 At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents: 19576
diff changeset
511
7983
068303f925ea Add prototypes for Py_Repr{Enter,Leave}.
Guido van Rossum <guido@python.org>
parents: 7935
diff changeset
512 /* Helpers for printing recursive container types */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
513 PyAPI_FUNC(int) Py_ReprEnter(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
514 PyAPI_FUNC(void) Py_ReprLeave(PyObject *);
7983
068303f925ea Add prototypes for Py_Repr{Enter,Leave}.
Guido van Rossum <guido@python.org>
parents: 7935
diff changeset
515
13141
cca84745da3e This patch addresses two main issues: (1) There exist some non-fatal
Fred Drake <fdrake@acm.org>
parents: 12993
diff changeset
516 /* Helpers for hash functions */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
517 PyAPI_FUNC(long) _Py_HashDouble(double);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
518 PyAPI_FUNC(long) _Py_HashPointer(void*);
13141
cca84745da3e This patch addresses two main issues: (1) There exist some non-fatal
Fred Drake <fdrake@acm.org>
parents: 12993
diff changeset
519
75100
6b7704fe1be1 - Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents: 61465
diff changeset
520 typedef struct {
6b7704fe1be1 - Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents: 61465
diff changeset
521 long prefix;
6b7704fe1be1 - Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents: 61465
diff changeset
522 long suffix;
6b7704fe1be1 - Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents: 61465
diff changeset
523 } _Py_HashSecret_t;
6b7704fe1be1 - Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents: 61465
diff changeset
524 PyAPI_DATA(_Py_HashSecret_t) _Py_HashSecret;
6b7704fe1be1 - Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents: 61465
diff changeset
525
75133
357e268e7c5f ensure no one tries to hash things before the random seed is found
Benjamin Peterson <benjamin@python.org>
parents: 75100
diff changeset
526 #ifdef Py_DEBUG
357e268e7c5f ensure no one tries to hash things before the random seed is found
Benjamin Peterson <benjamin@python.org>
parents: 75100
diff changeset
527 PyAPI_DATA(int) _Py_HashSecret_Initialized;
357e268e7c5f ensure no one tries to hash things before the random seed is found
Benjamin Peterson <benjamin@python.org>
parents: 75100
diff changeset
528 #endif
357e268e7c5f ensure no one tries to hash things before the random seed is found
Benjamin Peterson <benjamin@python.org>
parents: 75100
diff changeset
529
16394
f700e6b8de1f Undo recent change that banned using import to bind a global, as per
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16385
diff changeset
530 /* Helper for passing objects to printf and the like */
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47504
diff changeset
531 #define PyObject_REPR(obj) PyString_AS_STRING(PyObject_Repr(obj))
16394
f700e6b8de1f Undo recent change that banned using import to bind a global, as per
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16385
diff changeset
532
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
533 /* Flag bits for printing: */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
534 #define Py_PRINT_RAW 1 /* No string quotes etc. */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
535
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
536 /*
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
537 `Type flags (tp_flags)
9304
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
538
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
539 These flags are used to extend the type structure in a backwards-compatible
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
540 fashion. Extensions can use the flags to indicate (and test) when a given
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
541 type structure contains a new feature. The Python core will use these when
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
542 introducing new functionality between major revisions (to avoid mid-version
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
543 changes in the PYTHON_API_VERSION).
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
544
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
545 Arbitration of the flag bit positions will need to be coordinated among
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
546 all extension writers who publically release their extensions (this will
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
547 be fewer than you might expect!)..
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
548
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
549 Python 1.5.2 introduced the bf_getcharbuffer slot into PyBufferProcs.
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
550
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
551 Type definitions should use Py_TPFLAGS_DEFAULT for their tp_flags value.
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
552
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
553 Code can use PyType_HasFeature(type_ob, flag_value) to test whether the
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
554 given type object has a specified feature.
48308
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
555
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
556 NOTE: when building the core, Py_TPFLAGS_DEFAULT includes
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
557 Py_TPFLAGS_HAVE_VERSION_TAG; outside the core, it doesn't. This is so
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
558 that extensions that modify tp_dict of their own types directly don't
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
559 break, since this was allowed in 2.5. In 3.0 they will have to
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
560 manually remove this flag though!
9304
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
561 */
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
562
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
563 /* PyBufferProcs contains bf_getcharbuffer */
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
564 #define Py_TPFLAGS_HAVE_GETCHARBUFFER (1L<<0)
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
565
11867
06104bcf06a6 Patch by Mozhe Zadka, for __contains__ (overloading 'in'). This adds
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
566 /* PySequenceMethods contains sq_contains */
06104bcf06a6 Patch by Mozhe Zadka, for __contains__ (overloading 'in'). This adds
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
567 #define Py_TPFLAGS_HAVE_SEQUENCE_IN (1L<<1)
06104bcf06a6 Patch by Mozhe Zadka, for __contains__ (overloading 'in'). This adds
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
568
19576
b67309407cfc Change the GC type flag since the API has changed. Allow types using
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 19470
diff changeset
569 /* This is here for backwards compatibility. Extensions that use the old GC
b67309407cfc Change the GC type flag since the API has changed. Allow types using
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 19470
diff changeset
570 * API will still compile but the objects will not be tracked by the GC. */
b67309407cfc Change the GC type flag since the API has changed. Allow types using
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 19470
diff changeset
571 #define Py_TPFLAGS_GC 0 /* used to be (1L<<2) */
12993
8f79c5b69e0a part 2 of Neil Schemenauer's GC patches:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12990
diff changeset
572
14162
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
573 /* PySequenceMethods and PyNumberMethods contain in-place operators */
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
574 #define Py_TPFLAGS_HAVE_INPLACEOPS (1L<<3)
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
575
15716
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
576 /* PyNumberMethods do their own coercion */
15938
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
577 #define Py_TPFLAGS_CHECKTYPES (1L<<4)
15716
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
578
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
579 /* tp_richcompare is defined */
16235
5c60184f7f52 Add a flag to indicate the presence of the tp_richcompare field, and
Guido van Rossum <guido@python.org>
parents: 16195
diff changeset
580 #define Py_TPFLAGS_HAVE_RICHCOMPARE (1L<<5)
5c60184f7f52 Add a flag to indicate the presence of the tp_richcompare field, and
Guido van Rossum <guido@python.org>
parents: 16195
diff changeset
581
16420
38204093d9c9 Use a type flag to determine the applicability of the tp_weaklistoffset
Fred Drake <fdrake@acm.org>
parents: 16394
diff changeset
582 /* Objects which are weakly referencable if their tp_weaklistoffset is >0 */
38204093d9c9 Use a type flag to determine the applicability of the tp_weaklistoffset
Fred Drake <fdrake@acm.org>
parents: 16394
diff changeset
583 #define Py_TPFLAGS_HAVE_WEAKREFS (1L<<6)
38204093d9c9 Use a type flag to determine the applicability of the tp_weaklistoffset
Fred Drake <fdrake@acm.org>
parents: 16394
diff changeset
584
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
585 /* tp_iter is defined */
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
586 #define Py_TPFLAGS_HAVE_ITER (1L<<7)
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
587
19051
f20727cc3d0f Implement PEP 238 in its (almost) full glory.
Guido van Rossum <guido@python.org>
parents: 19040
diff changeset
588 /* New members introduced by Python 2.2 exist */
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
589 #define Py_TPFLAGS_HAVE_CLASS (1L<<8)
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
590
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
591 /* Set if the type object is dynamically allocated */
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
592 #define Py_TPFLAGS_HEAPTYPE (1L<<9)
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
593
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
594 /* Set if the type allows subclassing */
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
595 #define Py_TPFLAGS_BASETYPE (1L<<10)
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
596
19134
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
597 /* Set if the type is 'ready' -- fully initialized */
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
598 #define Py_TPFLAGS_READY (1L<<12)
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
599
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
600 /* Set while the type is being 'readied', to prevent recursive ready calls */
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
601 #define Py_TPFLAGS_READYING (1L<<13)
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
602
19576
b67309407cfc Change the GC type flag since the API has changed. Allow types using
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 19470
diff changeset
603 /* Objects support garbage collection (see objimp.h) */
b67309407cfc Change the GC type flag since the API has changed. Allow types using
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 19470
diff changeset
604 #define Py_TPFLAGS_HAVE_GC (1L<<14)
b67309407cfc Change the GC type flag since the API has changed. Allow types using
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 19470
diff changeset
605
36882
6a9c7165b17b Checking in the code for PEP 357.
Guido van Rossum <guido@python.org>
parents: 36837
diff changeset
606 /* These two bits are preserved for Stackless Python, next after this is 17 */
29184
9aa06cbd9cc1 Preserved one bit in type objects for Stackless.
Christian Tismer <tismer@stackless.com>
parents: 28653
diff changeset
607 #ifdef STACKLESS
29245
ca0c8137de84 After Raymond's remark, I changed the Stackless bits to
Christian Tismer <tismer@stackless.com>
parents: 29240
diff changeset
608 #define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION (3L<<15)
29184
9aa06cbd9cc1 Preserved one bit in type objects for Stackless.
Christian Tismer <tismer@stackless.com>
parents: 28653
diff changeset
609 #else
29240
e721025cca09 Generalized my type flags structure extension without being specific about
Christian Tismer <tismer@stackless.com>
parents: 29184
diff changeset
610 #define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION 0
29184
9aa06cbd9cc1 Preserved one bit in type objects for Stackless.
Christian Tismer <tismer@stackless.com>
parents: 28653
diff changeset
611 #endif
9aa06cbd9cc1 Preserved one bit in type objects for Stackless.
Christian Tismer <tismer@stackless.com>
parents: 28653
diff changeset
612
36882
6a9c7165b17b Checking in the code for PEP 357.
Guido van Rossum <guido@python.org>
parents: 36837
diff changeset
613 /* Objects support nb_index in PyNumberMethods */
6a9c7165b17b Checking in the code for PEP 357.
Guido van Rossum <guido@python.org>
parents: 36837
diff changeset
614 #define Py_TPFLAGS_HAVE_INDEX (1L<<17)
6a9c7165b17b Checking in the code for PEP 357.
Guido van Rossum <guido@python.org>
parents: 36837
diff changeset
615
44664
387d48c3a0b3 Re-apply patch #1700288 (first applied in r59931, rolled back in r59940)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44661
diff changeset
616 /* Objects support type attribute cache */
387d48c3a0b3 Re-apply patch #1700288 (first applied in r59931, rolled back in r59940)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44661
diff changeset
617 #define Py_TPFLAGS_HAVE_VERSION_TAG (1L<<18)
387d48c3a0b3 Re-apply patch #1700288 (first applied in r59931, rolled back in r59940)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44661
diff changeset
618 #define Py_TPFLAGS_VALID_VERSION_TAG (1L<<19)
387d48c3a0b3 Re-apply patch #1700288 (first applied in r59931, rolled back in r59940)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 44661
diff changeset
619
45543
6592e5a90c2c Move abc._Abstract into object by adding a new flag Py_TPFLAGS_IS_ABSTRACT,
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 45025
diff changeset
620 /* Type is abstract and cannot be instantiated */
6592e5a90c2c Move abc._Abstract into object by adding a new flag Py_TPFLAGS_IS_ABSTRACT,
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 45025
diff changeset
621 #define Py_TPFLAGS_IS_ABSTRACT (1L<<20)
6592e5a90c2c Move abc._Abstract into object by adding a new flag Py_TPFLAGS_IS_ABSTRACT,
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 45025
diff changeset
622
45793
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
623 /* Has the new buffer protocol */
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
624 #define Py_TPFLAGS_HAVE_NEWBUFFER (1L<<21)
f11c00246fb5 Add necessary headers to back-port new buffer protocol to Python 2.6
Travis E. Oliphant <oliphant@enthought.com>
parents: 45543
diff changeset
625
40908
d01bd37bf5ce Variation of patch # 1624059 to speed up checking if an object is a subclass
Neal Norwitz <nnorwitz@gmail.com>
parents: 39463
diff changeset
626 /* These flags are used to determine if a type is a subclass. */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
627 #define Py_TPFLAGS_INT_SUBCLASS (1L<<23)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
628 #define Py_TPFLAGS_LONG_SUBCLASS (1L<<24)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
629 #define Py_TPFLAGS_LIST_SUBCLASS (1L<<25)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
630 #define Py_TPFLAGS_TUPLE_SUBCLASS (1L<<26)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
631 #define Py_TPFLAGS_STRING_SUBCLASS (1L<<27)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
632 #define Py_TPFLAGS_UNICODE_SUBCLASS (1L<<28)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
633 #define Py_TPFLAGS_DICT_SUBCLASS (1L<<29)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
634 #define Py_TPFLAGS_BASE_EXC_SUBCLASS (1L<<30)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
635 #define Py_TPFLAGS_TYPE_SUBCLASS (1L<<31)
40908
d01bd37bf5ce Variation of patch # 1624059 to speed up checking if an object is a subclass
Neal Norwitz <nnorwitz@gmail.com>
parents: 39463
diff changeset
636
48308
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
637 #define Py_TPFLAGS_DEFAULT_EXTERNAL ( \
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
638 Py_TPFLAGS_HAVE_GETCHARBUFFER | \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
639 Py_TPFLAGS_HAVE_SEQUENCE_IN | \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
640 Py_TPFLAGS_HAVE_INPLACEOPS | \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
641 Py_TPFLAGS_HAVE_RICHCOMPARE | \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
642 Py_TPFLAGS_HAVE_WEAKREFS | \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
643 Py_TPFLAGS_HAVE_ITER | \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
644 Py_TPFLAGS_HAVE_CLASS | \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
645 Py_TPFLAGS_HAVE_STACKLESS_EXTENSION | \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
646 Py_TPFLAGS_HAVE_INDEX | \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
647 0)
48308
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
648 #define Py_TPFLAGS_DEFAULT_CORE (Py_TPFLAGS_DEFAULT_EXTERNAL | \
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
649 Py_TPFLAGS_HAVE_VERSION_TAG)
48308
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
650
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
651 #ifdef Py_BUILD_CORE
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
652 #define Py_TPFLAGS_DEFAULT Py_TPFLAGS_DEFAULT_CORE
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
653 #else
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
654 #define Py_TPFLAGS_DEFAULT Py_TPFLAGS_DEFAULT_EXTERNAL
96a4cda65c55 Hopeful fix for issue 1878: remove Py_TPFLAGS_HAVE_VERSION_TAG from
Guido van Rossum <guido@python.org>
parents: 48221
diff changeset
655 #endif
9304
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
656
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
657 #define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0)
40908
d01bd37bf5ce Variation of patch # 1624059 to speed up checking if an object is a subclass
Neal Norwitz <nnorwitz@gmail.com>
parents: 39463
diff changeset
658 #define PyType_FastSubclass(t,f) PyType_HasFeature(t,f)
9304
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
659
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
660
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
661 /*
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
662 The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
663 reference counts. Py_DECREF calls the object's deallocator function when
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
664 the refcount falls to 0; for
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
665 objects that don't contain references to other objects or heap memory
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
666 this can be the standard function free(). Both macros can be used
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
667 wherever a void expression is allowed. The argument must not be a
46175
efef4e3fed17 NIL => NULL
Benjamin Peterson <benjamin@python.org>
parents: 45793
diff changeset
668 NULL pointer. If it may be NULL, use Py_XINCREF/Py_XDECREF instead.
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
669 The macro _Py_NewReference(op) initialize reference counts to 1, and
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
670 in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
671 bookkeeping appropriate to the special build.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
672
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
673 We assume that the reference count field can never overflow; this can
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
674 be proven when the size of the field is the same as the pointer size, so
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
675 we ignore the possibility. Provided a C int is at least 32 bits (which
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
676 is implicitly assumed in many parts of this code), that's enough for
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
677 about 2**31 references to an object.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
678
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
679 XXX The following became out of date in Python 2.2, but I'm not sure
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
680 XXX what the full truth is now. Certainly, heap-allocated type objects
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
681 XXX can and should be deallocated.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
682 Type objects should never be deallocated; the type pointer in an object
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
683 is not considered to be a reference to the type object, to save
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
684 complications in the deallocation function. (This is actually a
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
685 decision that's up to the implementer of each new type so if you want,
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
686 you can count such references to the type object.)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
687
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
688 *** WARNING*** The Py_DECREF macro must have a side-effect-free argument
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
689 since it may evaluate its argument multiple times. (The alternative
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
690 would be to mace it a proper function or assign it to a global temporary
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
691 variable first, both of which are slower; and in a multi-threaded
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
692 environment the global variable trick is not safe.)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
693 */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
694
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
695 /* First define a pile of simple helper macros, one set per special
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
696 * build symbol. These either expand to the obvious things, or to
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
697 * nothing at all when the special mode isn't in effect. The main
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
698 * macros can later be defined just once then, yet expand to different
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
699 * things depending on which special build options are and aren't in effect.
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
700 * Trust me <wink>: while painful, this is 20x easier to understand than,
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
701 * e.g, defining _Py_NewReference five different times in a maze of nested
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
702 * #ifdefs (we used to do that -- it was impenetrable).
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
703 */
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
704 #ifdef Py_REF_DEBUG
36837
3a3aed49b245 Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36748
diff changeset
705 PyAPI_DATA(Py_ssize_t) _Py_RefTotal;
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
706 PyAPI_FUNC(void) _Py_NegativeRefcount(const char *fname,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
707 int lineno, PyObject *op);
37638
65ecb83ea7dd Ignore the references to the dummy objects used as deleted keys
Armin Rigo <arigo@tunes.org>
parents: 36882
diff changeset
708 PyAPI_FUNC(PyObject *) _PyDict_Dummy(void);
65ecb83ea7dd Ignore the references to the dummy objects used as deleted keys
Armin Rigo <arigo@tunes.org>
parents: 36882
diff changeset
709 PyAPI_FUNC(PyObject *) _PySet_Dummy(void);
65ecb83ea7dd Ignore the references to the dummy objects used as deleted keys
Armin Rigo <arigo@tunes.org>
parents: 36882
diff changeset
710 PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void);
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
711 #define _Py_INC_REFTOTAL _Py_RefTotal++
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
712 #define _Py_DEC_REFTOTAL _Py_RefTotal--
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
713 #define _Py_REF_DEBUG_COMMA ,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
714 #define _Py_CHECK_REFCNT(OP) \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
715 { if (((PyObject*)OP)->ob_refcnt < 0) \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
716 _Py_NegativeRefcount(__FILE__, __LINE__, \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
717 (PyObject *)(OP)); \
24155
9456a2ccda61 The Py_REF_DEBUG/COUNT_ALLOCS/Py_TRACE_REFS macro minefield: added
Tim Peters <tim.peters@gmail.com>
parents: 24126
diff changeset
718 }
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
719 #else
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
720 #define _Py_INC_REFTOTAL
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
721 #define _Py_DEC_REFTOTAL
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
722 #define _Py_REF_DEBUG_COMMA
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
723 #define _Py_CHECK_REFCNT(OP) /* a semicolon */;
24171
5e4b8d1e9fd6 Uglified the new Py_REF_DEBUG (etc) lexical helper macro definitions so
Tim Peters <tim.peters@gmail.com>
parents: 24155
diff changeset
724 #endif /* Py_REF_DEBUG */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
725
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1329
diff changeset
726 #ifdef COUNT_ALLOCS
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
727 PyAPI_FUNC(void) inc_count(PyTypeObject *);
37831
d82dced6f1fa Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents: 37726
diff changeset
728 PyAPI_FUNC(void) dec_count(PyTypeObject *);
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
729 #define _Py_INC_TPALLOCS(OP) inc_count(Py_TYPE(OP))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
730 #define _Py_INC_TPFREES(OP) dec_count(Py_TYPE(OP))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
731 #define _Py_DEC_TPFREES(OP) Py_TYPE(OP)->tp_frees--
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
732 #define _Py_COUNT_ALLOCS_COMMA ,
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
733 #else
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
734 #define _Py_INC_TPALLOCS(OP)
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
735 #define _Py_INC_TPFREES(OP)
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
736 #define _Py_DEC_TPFREES(OP)
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
737 #define _Py_COUNT_ALLOCS_COMMA
24171
5e4b8d1e9fd6 Uglified the new Py_REF_DEBUG (etc) lexical helper macro definitions so
Tim Peters <tim.peters@gmail.com>
parents: 24155
diff changeset
738 #endif /* COUNT_ALLOCS */
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1329
diff changeset
739
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
740 #ifdef Py_TRACE_REFS
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
741 /* Py_TRACE_REFS is such major surgery that we call external routines. */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
742 PyAPI_FUNC(void) _Py_NewReference(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
743 PyAPI_FUNC(void) _Py_ForgetReference(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
744 PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
745 PyAPI_FUNC(void) _Py_PrintReferences(FILE *);
28653
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28396
diff changeset
746 PyAPI_FUNC(void) _Py_PrintReferenceAddresses(FILE *);
28396
d56282c28a1e Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents: 28389
diff changeset
747 PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force);
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
748
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
749 #else
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
750 /* Without Py_TRACE_REFS, there's little enough to do that we expand code
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
751 * inline.
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
752 */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
753 #define _Py_NewReference(op) ( \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
754 _Py_INC_TPALLOCS(op) _Py_COUNT_ALLOCS_COMMA \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
755 _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
756 Py_REFCNT(op) = 1)
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
757
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
758 #define _Py_ForgetReference(op) _Py_INC_TPFREES(op)
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
759
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
760 #define _Py_Dealloc(op) ( \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
761 _Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
762 (*Py_TYPE(op)->tp_dealloc)((PyObject *)(op)))
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
763 #endif /* !Py_TRACE_REFS */
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
764
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
765 #define Py_INCREF(op) ( \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
766 _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
767 ((PyObject*)(op))->ob_refcnt++)
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
768
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
769 #define Py_DECREF(op) \
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 53904
diff changeset
770 do { \
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 53904
diff changeset
771 if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 53904
diff changeset
772 --((PyObject*)(op))->ob_refcnt != 0) \
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 53904
diff changeset
773 _Py_CHECK_REFCNT(op) \
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 53904
diff changeset
774 else \
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 53904
diff changeset
775 _Py_Dealloc((PyObject *)(op)); \
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 53904
diff changeset
776 } while (0)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
777
37726
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
778 /* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
779 * and tp_dealloc implementatons.
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
780 *
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
781 * Note that "the obvious" code can be deadly:
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
782 *
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
783 * Py_XDECREF(op);
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
784 * op = NULL;
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
785 *
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
786 * Typically, `op` is something like self->containee, and `self` is done
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
787 * using its `containee` member. In the code sequence above, suppose
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
788 * `containee` is non-NULL with a refcount of 1. Its refcount falls to
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
789 * 0 on the first line, which can trigger an arbitrary amount of code,
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
790 * possibly including finalizers (like __del__ methods or weakref callbacks)
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
791 * coded in Python, which in turn can release the GIL and allow other threads
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
792 * to run, etc. Such code may even invoke methods of `self` again, or cause
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
793 * cyclic gc to trigger, but-- oops! --self->containee still points to the
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
794 * object being torn down, and it may be in an insane state while being torn
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
795 * down. This has in fact been a rich historic source of miserable (rare &
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
796 * hard-to-diagnose) segfaulting (and other) bugs.
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
797 *
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
798 * The safe way is:
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
799 *
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
800 * Py_CLEAR(op);
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
801 *
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
802 * That arranges to set `op` to NULL _before_ decref'ing, so that any code
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
803 * triggered as a side-effect of `op` getting torn down no longer believes
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
804 * `op` points to a valid object.
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
805 *
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
806 * There are cases where it's safe to use the naive code, but they're brittle.
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
807 * For example, if `op` points to a Python integer, you know that destroying
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
808 * one of those can't cause problems -- but in part that relies on that
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
809 * Python integers aren't currently weakly referencable. Best practice is
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
810 * to use Py_CLEAR() even if you can't think of a reason for why you need to.
27a639c4471a There were no comments explaining what Py_CLEAR() did or
Tim Peters <tim.peters@gmail.com>
parents: 37638
diff changeset
811 */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
812 #define Py_CLEAR(op) \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
813 do { \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
814 if (op) { \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
815 PyObject *_py_tmp = (PyObject *)(op); \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
816 (op) = NULL; \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
817 Py_DECREF(_py_tmp); \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
818 } \
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
819 } while (0)
32670
a1a9776fab53 Implemented a new Py_CLEAR macro. This macro should be used when
Jim Fulton <jim@zope.com>
parents: 31940
diff changeset
820
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
821 /* Macros to use in case the object pointer may be NULL: */
52899
b0429c7fa71a Issue #1113244: Py_XINCREF, Py_DECREF, Py_XDECREF: Add `do { ... } while (0)'
Matthias Klose <doko@ubuntu.com>
parents: 52872
diff changeset
822 #define Py_XINCREF(op) do { if ((op) == NULL) ; else Py_INCREF(op); } while (0)
b0429c7fa71a Issue #1113244: Py_XINCREF, Py_DECREF, Py_XDECREF: Add `do { ... } while (0)'
Matthias Klose <doko@ubuntu.com>
parents: 52872
diff changeset
823 #define Py_XDECREF(op) do { if ((op) == NULL) ; else Py_DECREF(op); } while (0)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
824
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
825 /*
31940
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
826 These are provided as conveniences to Python runtime embedders, so that
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
827 they can have object code that is not dependent on Python compilation flags.
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
828 */
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
829 PyAPI_FUNC(void) Py_IncRef(PyObject *);
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
830 PyAPI_FUNC(void) Py_DecRef(PyObject *);
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
831
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
832 /*
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
833 _Py_NoneStruct is an object of undefined type which can be used in contexts
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
834 where NULL (nil) is not suitable (since NULL often means 'error').
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
835
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
836 Don't forget to apply Py_INCREF() when returning this value!!!
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
837 */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
838 PyAPI_DATA(PyObject) _Py_NoneStruct; /* Don't use this directly */
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
839 #define Py_None (&_Py_NoneStruct)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
840
30719
7dfdf9e8d95d Defined macros Py_RETURN_(TRUE|FALSE|NONE) as helper functions for returning
Brett Cannon <bcannon@gmail.com>
parents: 29245
diff changeset
841 /* Macro for returning Py_None from a function */
32793
1e2187f50631 SF bug 994255: Py_RETURN_NONE causes too much warnings
Tim Peters <tim.peters@gmail.com>
parents: 32670
diff changeset
842 #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
30719
7dfdf9e8d95d Defined macros Py_RETURN_(TRUE|FALSE|NONE) as helper functions for returning
Brett Cannon <bcannon@gmail.com>
parents: 29245
diff changeset
843
15716
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
844 /*
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
845 Py_NotImplemented is a singleton used to signal that an operation is
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
846 not implemented for a given type combination.
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
847 */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
848 PyAPI_DATA(PyObject) _Py_NotImplementedStruct; /* Don't use this directly */
15716
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
849 #define Py_NotImplemented (&_Py_NotImplementedStruct)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
850
15938
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
851 /* Rich comparison opcodes */
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
852 #define Py_LT 0
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
853 #define Py_LE 1
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
854 #define Py_EQ 2
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
855 #define Py_NE 3
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
856 #define Py_GT 4
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
857 #define Py_GE 5
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
858
33541
781aef974463 A static swapped_op[] array was defined in 3 different C files, & I think
Tim Peters <tim.peters@gmail.com>
parents: 33386
diff changeset
859 /* Maps Py_LT to Py_GT, ..., Py_GE to Py_LE.
781aef974463 A static swapped_op[] array was defined in 3 different C files, & I think
Tim Peters <tim.peters@gmail.com>
parents: 33386
diff changeset
860 * Defined in object.c.
781aef974463 A static swapped_op[] array was defined in 3 different C files, & I think
Tim Peters <tim.peters@gmail.com>
parents: 33386
diff changeset
861 */
781aef974463 A static swapped_op[] array was defined in 3 different C files, & I think
Tim Peters <tim.peters@gmail.com>
parents: 33386
diff changeset
862 PyAPI_DATA(int) _Py_SwappedOp[];
781aef974463 A static swapped_op[] array was defined in 3 different C files, & I think
Tim Peters <tim.peters@gmail.com>
parents: 33386
diff changeset
863
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
864 /*
24280
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
865 Define staticforward and statichere for source compatibility with old
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
866 C extensions.
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
867
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
868 The staticforward define was needed to support certain broken C
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
869 compilers (notably SCO ODT 3.0, perhaps early AIX as well) botched the
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
870 static keyword when it was used with a forward declaration of a static
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
871 initialized structure. Standard C allows the forward declaration with
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
872 static, and we've decided to stop catering to broken C compilers.
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
873 (In fact, we expect that the compilers are all fixed eight years later.)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
874 */
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
875
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
876 #define staticforward static
2422
f4f71ebea53f change in staticforward -- added statichere
Guido van Rossum <guido@python.org>
parents: 2364
diff changeset
877 #define statichere static
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
878
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
879
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
880 /*
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
881 More conventions
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
882 ================
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
883
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
884 Argument Checking
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
885 -----------------
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
886
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
887 Functions that take objects as arguments normally don't check for nil
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
888 arguments, but they do check the type of the argument, and return an
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
889 error if the function doesn't apply to the type.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
890
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
891 Failure Modes
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
892 -------------
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
893
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
894 Functions may fail for a variety of reasons, including running out of
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
895 memory. This is communicated to the caller in two ways: an error string
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
896 is set (see errors.h), and the function result differs: functions that
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
897 normally return a pointer return NULL for failure, functions returning
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
898 an integer return -1 (which could be a legal return value too!), and
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
899 other functions return 0 for success and -1 for failure.
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
900 Callers should always check for errors before using the result. If
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
901 an error was set, the caller must either explicitly clear it, or pass
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
902 the error on to its caller.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
903
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
904 Reference Counts
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
905 ----------------
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
906
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
907 It takes a while to get used to the proper usage of reference counts.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
908
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
909 Functions that create an object set the reference count to 1; such new
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
910 objects must be stored somewhere or destroyed again with Py_DECREF().
30887
3ae82928b113 fixed buggy comment as per SF bug #827856
Alex Martelli <aleaxit@gmail.com>
parents: 30721
diff changeset
911 Some functions that 'store' objects, such as PyTuple_SetItem() and
3ae82928b113 fixed buggy comment as per SF bug #827856
Alex Martelli <aleaxit@gmail.com>
parents: 30721
diff changeset
912 PyList_SetItem(),
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
913 don't increment the reference count of the object, since the most
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
914 frequent use is to store a fresh object. Functions that 'retrieve'
30887
3ae82928b113 fixed buggy comment as per SF bug #827856
Alex Martelli <aleaxit@gmail.com>
parents: 30721
diff changeset
915 objects, such as PyTuple_GetItem() and PyDict_GetItemString(), also
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
916 don't increment
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
917 the reference count, since most frequently the object is only looked at
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
918 quickly. Thus, to retrieve an object and store it again, the caller
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
919 must call Py_INCREF() explicitly.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
920
30887
3ae82928b113 fixed buggy comment as per SF bug #827856
Alex Martelli <aleaxit@gmail.com>
parents: 30721
diff changeset
921 NOTE: functions that 'consume' a reference count, like
3ae82928b113 fixed buggy comment as per SF bug #827856
Alex Martelli <aleaxit@gmail.com>
parents: 30721
diff changeset
922 PyList_SetItem(), consume the reference even if the object wasn't
3ae82928b113 fixed buggy comment as per SF bug #827856
Alex Martelli <aleaxit@gmail.com>
parents: 30721
diff changeset
923 successfully stored, to simplify error handling.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
924
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
925 It seems attractive to make other functions that take an object as
30887
3ae82928b113 fixed buggy comment as per SF bug #827856
Alex Martelli <aleaxit@gmail.com>
parents: 30721
diff changeset
926 argument consume a reference count; however, this may quickly get
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
927 confusing (even the current practice is already confusing). Consider
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
928 it carefully, it may save lots of calls to Py_INCREF() and Py_DECREF() at
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
929 times.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
930 */
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
931
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
932
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
933 /* Trashcan mechanism, thanks to Christian Tismer.
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
934
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
935 When deallocating a container object, it's possible to trigger an unbounded
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
936 chain of deallocations, as each Py_DECREF in turn drops the refcount on "the
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
937 next" object in the chain to 0. This can easily lead to stack faults, and
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
938 especially in threads (which typically have less stack space to work with).
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
939
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
940 A container object that participates in cyclic gc can avoid this by
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
941 bracketing the body of its tp_dealloc function with a pair of macros:
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
942
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
943 static void
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
944 mytype_dealloc(mytype *p)
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
945 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
946 ... declarations go here ...
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
947
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
948 PyObject_GC_UnTrack(p); // must untrack first
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
949 Py_TRASHCAN_SAFE_BEGIN(p)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
950 ... The body of the deallocator goes here, including all calls ...
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
951 ... to Py_DECREF on contained objects. ...
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52826
diff changeset
952 Py_TRASHCAN_SAFE_END(p)
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
953 }
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
954
24654
f672e1dbad92 Added info about the right way to leave the body of a trashcan-protected
Tim Peters <tim.peters@gmail.com>
parents: 24420
diff changeset
955 CAUTION: Never return from the middle of the body! If the body needs to
f672e1dbad92 Added info about the right way to leave the body of a trashcan-protected
Tim Peters <tim.peters@gmail.com>
parents: 24420
diff changeset
956 "get out early", put a label immediately before the Py_TRASHCAN_SAFE_END
f672e1dbad92 Added info about the right way to leave the body of a trashcan-protected
Tim Peters <tim.peters@gmail.com>
parents: 24420
diff changeset
957 call, and goto it. Else the call-depth counter (see below) will stay
f672e1dbad92 Added info about the right way to leave the body of a trashcan-protected
Tim Peters <tim.peters@gmail.com>
parents: 24420
diff changeset
958 above 0 forever, and the trashcan will never get emptied.
f672e1dbad92 Added info about the right way to leave the body of a trashcan-protected
Tim Peters <tim.peters@gmail.com>
parents: 24420
diff changeset
959
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
960 How it works: The BEGIN macro increments a call-depth counter. So long
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
961 as this counter is small, the body of the deallocator is run directly without
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
962 further ado. But if the counter gets large, it instead adds p to a list of
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
963 objects to be deallocated later, skips the body of the deallocator, and
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
964 resumes execution after the END macro. The tp_dealloc routine then returns
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
965 without deallocating anything (and so unbounded call-stack depth is avoided).
12481
a8898a172fe2 Christian Tismer -- total rewrite on trashcan code.
Guido van Rossum <guido@python.org>
parents: 12406
diff changeset
966
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
967 When the call stack finishes unwinding again, code generated by the END macro
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
968 notices this, and calls another routine to deallocate all the objects that
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
969 may have been added to the list of deferred deallocations. In effect, a
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
970 chain of N deallocations is broken into N / PyTrash_UNWIND_LEVEL pieces,
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
971 with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL.
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
972 */
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
973
78855
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
974 /* This is the old private API, invoked by the macros before 2.7.4.
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
975 Kept for binary compatibility of extensions. */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
976 PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
977 PyAPI_FUNC(void) _PyTrash_destroy_chain(void);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
978 PyAPI_DATA(int) _PyTrash_delete_nesting;
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
979 PyAPI_DATA(PyObject *) _PyTrash_delete_later;
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
980
78855
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
981 /* The new thread-safe private API, invoked by the macros below. */
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
982 PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*);
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
983 PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void);
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
984
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
985 #define PyTrash_UNWIND_LEVEL 50
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
986
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
987 #define Py_TRASHCAN_SAFE_BEGIN(op) \
78855
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
988 do { \
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
989 PyThreadState *_tstate = PyThreadState_GET(); \
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
990 if (_tstate->trash_delete_nesting < PyTrash_UNWIND_LEVEL) { \
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
991 ++_tstate->trash_delete_nesting;
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
992 /* The body of the deallocator is here. */
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
993 #define Py_TRASHCAN_SAFE_END(op) \
78855
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
994 --_tstate->trash_delete_nesting; \
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
995 if (_tstate->trash_delete_later && _tstate->trash_delete_nesting <= 0) \
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
996 _PyTrash_thread_destroy_chain(); \
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
997 } \
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
998 else \
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
999 _PyTrash_thread_deposit_object((PyObject*)op); \
5a2ef447b80d Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents: 75135
diff changeset
1000 } while (0);
12481
a8898a172fe2 Christian Tismer -- total rewrite on trashcan code.
Guido van Rossum <guido@python.org>
parents: 12406
diff changeset
1001
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
1002 #ifdef __cplusplus
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
1003 }
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
1004 #endif
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
1005 #endif /* !Py_OBJECT_H */