Mercurial > cpython-lru_cache-weakref
annotate Include/object.h @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 7d6c27fa7f32 |
| children |
| 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 | 7 |
| 6 | 8 /* Object and type object interface */ |
| 9 | |
| 10 /* | |
| 11 Objects are structures allocated on the heap. Special rules apply to | |
| 12 the use of objects to ensure they are properly garbage-collected. | |
| 13 Objects are never allocated statically or on the stack; they must be | |
| 14 accessed through special macros and functions only. (Type objects are | |
| 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 | 18 |
| 19 An object has a 'reference count' that is increased or decreased when a | |
| 20 pointer to the object is copied or deleted; when the reference count | |
| 21 reaches zero there are no references to the object left and it can be | |
| 22 removed from the heap. | |
| 23 | |
| 24 An object has a 'type' that determines what it represents and what kind | |
| 25 of data it contains. An object's type is fixed when it is created. | |
| 26 Types themselves are represented as objects; an object contains a | |
| 27 pointer to the corresponding type object. The type itself has a type | |
| 28 pointer pointing to the object representing the type 'type', which | |
| 29 contains a pointer to itself!). | |
| 30 | |
| 31 Objects do not float around in memory; once allocated an object keeps | |
| 32 the same size and address. Objects that must hold variable-size data | |
| 33 can contain pointers to variable-size parts of the object. Not all | |
| 34 objects of the same type have the same size; but the size cannot change | |
| 35 after allocation. (These restrictions are made so a reference to an | |
| 36 object can be simply a pointer -- moving an object would require | |
| 37 updating all the pointers, and changing an object's size would require | |
| 38 moving it if there was another object right next to it.) | |
| 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 | 42 and the type pointer. The actual memory allocated for an object |
| 43 contains other data that can only be accessed after casting the pointer | |
| 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 | 47 of a particular object type can cast the object pointer to the proper |
| 48 type and back. | |
| 49 | |
| 50 A standard interface exists for objects that contain an array of items | |
| 51 whose size is determined when the object is allocated. | |
| 52 */ | |
| 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 | 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 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
64 #if defined(Py_LIMITED_API) && defined(Py_REF_DEBUG) |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
65 #error Py_LIMITED_API is incompatible with Py_DEBUG, Py_TRACE_REFS, and Py_REF_DEBUG |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
66 #endif |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
67 |
|
2129
05360cd616ae
The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents:
2071
diff
changeset
|
68 #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
|
69 /* Define pointers to support a doubly-linked list of all live heap objects. */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
70 #define _PyObject_HEAD_EXTRA \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
71 struct _object *_ob_next; \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
72 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
|
73 |
|
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 0, 0, |
|
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
75 |
|
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
76 #else |
|
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
77 #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
|
78 #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
|
79 #endif |
|
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
80 |
|
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
81 /* PyObject_HEAD defines the initial segment of every PyObject. */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
82 #define PyObject_HEAD PyObject ob_base; |
|
24126
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
83 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
84 #define PyObject_HEAD_INIT(type) \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
85 { _PyObject_EXTRA_INIT \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
86 1, type }, |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
42084
diff
changeset
|
87 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
88 #define PyVarObject_HEAD_INIT(type, size) \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
89 { PyObject_HEAD_INIT(type) size }, |
| 6 | 90 |
|
24126
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
91 /* 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
|
92 * 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
|
93 * 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
|
94 * 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
|
95 * 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
|
96 */ |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
42084
diff
changeset
|
97 #define PyObject_VAR_HEAD PyVarObject ob_base; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
35999
diff
changeset
|
98 #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
|
99 |
|
24126
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
100 /* 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
|
101 * 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
|
102 * 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
|
103 * 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
|
104 */ |
| 6 | 105 typedef struct _object { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
106 _PyObject_HEAD_EXTRA |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
107 Py_ssize_t ob_refcnt; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
108 struct _typeobject *ob_type; |
|
2129
05360cd616ae
The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents:
2071
diff
changeset
|
109 } PyObject; |
| 6 | 110 |
| 111 typedef struct { | |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
112 PyObject ob_base; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
113 Py_ssize_t ob_size; /* Number of items in variable part */ |
|
5535
20c2b715188e
Oops, another forgotten renaming: varobject -> PyVarObject.
Guido van Rossum <guido@python.org>
parents:
5410
diff
changeset
|
114 } PyVarObject; |
| 6 | 115 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
116 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
117 #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
118 #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) |
| 6 | 119 |
|
74578
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
120 /********************* String Literals ****************************************/ |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
121 /* This structure helps managing static strings. The basic usage goes like this: |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
122 Instead of doing |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
123 |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
124 r = PyObject_CallMethod(o, "foo", "args", ...); |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
125 |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
126 do |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
127 |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
128 _Py_IDENTIFIER(foo); |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
129 ... |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
130 r = _PyObject_CallMethodId(o, &PyId_foo, "args", ...); |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
131 |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
132 PyId_foo is a static variable, either on block level or file level. On first |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
133 usage, the string "foo" is interned, and the structures are linked. On interpreter |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
134 shutdown, all strings are released (through _PyUnicode_ClearStaticStrings). |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
135 |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
136 Alternatively, _Py_static_string allows to choose the variable name. |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
137 _PyUnicode_FromId returns a borrowed reference to the interned string. |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
138 _PyObject_{Get,Set,Has}AttrId are __getattr__ versions using _Py_Identifier*. |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
139 */ |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
140 typedef struct _Py_Identifier { |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
141 struct _Py_Identifier *next; |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
142 const char* string; |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
143 PyObject *object; |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
144 } _Py_Identifier; |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
145 |
|
86974
954167ce92a3
Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents:
85910
diff
changeset
|
146 #define _Py_static_string_init(value) { 0, value, 0 } |
|
954167ce92a3
Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents:
85910
diff
changeset
|
147 #define _Py_static_string(varname, value) static _Py_Identifier varname = _Py_static_string_init(value) |
|
74578
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
148 #define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname) |
|
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
149 |
| 6 | 150 /* |
| 151 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
|
152 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
|
153 PyObject_NewVar()), |
|
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
154 and methods for accessing objects of the type. Methods are optional, a |
| 6 | 155 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
|
156 this type. The Py_DECREF() macro uses the tp_dealloc method without |
| 6 | 157 checking for a nil pointer; it should always be implemented except if |
| 158 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
|
159 reach zero (e.g., for statically allocated type objects). |
| 6 | 160 |
| 161 NB: the methods for certain type groups are now contained in separate | |
| 162 method blocks. | |
| 163 */ | |
| 164 | |
|
13418
85520c220067
Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents:
13256
diff
changeset
|
165 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
|
166 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
|
167 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
|
168 typedef int (*inquiry)(PyObject *); |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
35999
diff
changeset
|
169 typedef Py_ssize_t (*lenfunc)(PyObject *); |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
35999
diff
changeset
|
170 typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t); |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
35999
diff
changeset
|
171 typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t); |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
35999
diff
changeset
|
172 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
|
173 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
|
174 typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *); |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
35999
diff
changeset
|
175 |
|
67419
8a302a09ee83
Remove buffer API from stable ABI for now, see #10181.
Martin v. Löwis <martin@v.loewis.de>
parents:
66664
diff
changeset
|
176 #ifndef Py_LIMITED_API |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
177 /* buffer interface */ |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
178 typedef struct bufferinfo { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
179 void *buf; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
180 PyObject *obj; /* owned reference */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
181 Py_ssize_t len; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
182 Py_ssize_t itemsize; /* This is Py_ssize_t so it can be |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
183 pointed to by strides in simple case.*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
184 int readonly; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
185 int ndim; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
186 char *format; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
187 Py_ssize_t *shape; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
188 Py_ssize_t *strides; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
189 Py_ssize_t *suboffsets; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
190 void *internal; |
|
43423
0476a2cc5658
Change PyBuffer to Py_buffer to be consistent with other non-object structures like Py_complex. Add some more functionality to the memoryview object.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43420
diff
changeset
|
191 } Py_buffer; |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
192 |
|
43423
0476a2cc5658
Change PyBuffer to Py_buffer to be consistent with other non-object structures like Py_complex. Add some more functionality to the memoryview object.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43420
diff
changeset
|
193 typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); |
|
0476a2cc5658
Change PyBuffer to Py_buffer to be consistent with other non-object structures like Py_complex. Add some more functionality to the memoryview object.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43420
diff
changeset
|
194 typedef void (*releasebufferproc)(PyObject *, Py_buffer *); |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
195 |
|
75254
3f9b3b6f7ff0
- Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents:
75129
diff
changeset
|
196 /* Maximum number of dimensions */ |
|
3f9b3b6f7ff0
- Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents:
75129
diff
changeset
|
197 #define PyBUF_MAX_NDIM 64 |
|
3f9b3b6f7ff0
- Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents:
75129
diff
changeset
|
198 |
|
3f9b3b6f7ff0
- Issue #10181: New memoryview implementation fixes multiple ownership
Stefan Krah <skrah@bytereef.org>
parents:
75129
diff
changeset
|
199 /* Flags for getting buffers */ |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
200 #define PyBUF_SIMPLE 0 |
|
43555
8e72dacf7f3a
Eliminate use of PyBUF_CHARACTER flag which is no longer part of the buffer interface. Fix up array module to export the correct format for wide-builds.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43550
diff
changeset
|
201 #define PyBUF_WRITABLE 0x0001 |
|
43384
4e57c36f6d2e
Fixing the spelling of "writeable" to "writable", particularly PyBUF_WRITEABLE.
Sean Reifscheider <jafo@tummy.com>
parents:
43100
diff
changeset
|
202 /* we used to include an E, backwards compatible alias */ |
|
4e57c36f6d2e
Fixing the spelling of "writeable" to "writable", particularly PyBUF_WRITEABLE.
Sean Reifscheider <jafo@tummy.com>
parents:
43100
diff
changeset
|
203 #define PyBUF_WRITEABLE PyBUF_WRITABLE |
|
43555
8e72dacf7f3a
Eliminate use of PyBUF_CHARACTER flag which is no longer part of the buffer interface. Fix up array module to export the correct format for wide-builds.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43550
diff
changeset
|
204 #define PyBUF_FORMAT 0x0004 |
|
8e72dacf7f3a
Eliminate use of PyBUF_CHARACTER flag which is no longer part of the buffer interface. Fix up array module to export the correct format for wide-builds.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43550
diff
changeset
|
205 #define PyBUF_ND 0x0008 |
|
8e72dacf7f3a
Eliminate use of PyBUF_CHARACTER flag which is no longer part of the buffer interface. Fix up array module to export the correct format for wide-builds.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43550
diff
changeset
|
206 #define PyBUF_STRIDES (0x0010 | PyBUF_ND) |
|
8e72dacf7f3a
Eliminate use of PyBUF_CHARACTER flag which is no longer part of the buffer interface. Fix up array module to export the correct format for wide-builds.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43550
diff
changeset
|
207 #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) |
|
8e72dacf7f3a
Eliminate use of PyBUF_CHARACTER flag which is no longer part of the buffer interface. Fix up array module to export the correct format for wide-builds.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43550
diff
changeset
|
208 #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) |
|
8e72dacf7f3a
Eliminate use of PyBUF_CHARACTER flag which is no longer part of the buffer interface. Fix up array module to export the correct format for wide-builds.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43550
diff
changeset
|
209 #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) |
|
8e72dacf7f3a
Eliminate use of PyBUF_CHARACTER flag which is no longer part of the buffer interface. Fix up array module to export the correct format for wide-builds.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43550
diff
changeset
|
210 #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
211 |
|
43384
4e57c36f6d2e
Fixing the spelling of "writeable" to "writable", particularly PyBUF_WRITEABLE.
Sean Reifscheider <jafo@tummy.com>
parents:
43100
diff
changeset
|
212 #define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE) |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
213 #define PyBUF_CONTIG_RO (PyBUF_ND) |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
214 |
|
43384
4e57c36f6d2e
Fixing the spelling of "writeable" to "writable", particularly PyBUF_WRITEABLE.
Sean Reifscheider <jafo@tummy.com>
parents:
43100
diff
changeset
|
215 #define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE) |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
216 #define PyBUF_STRIDED_RO (PyBUF_STRIDES) |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
217 |
|
43384
4e57c36f6d2e
Fixing the spelling of "writeable" to "writable", particularly PyBUF_WRITEABLE.
Sean Reifscheider <jafo@tummy.com>
parents:
43100
diff
changeset
|
218 #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT) |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
219 #define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT) |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
220 |
|
43384
4e57c36f6d2e
Fixing the spelling of "writeable" to "writable", particularly PyBUF_WRITEABLE.
Sean Reifscheider <jafo@tummy.com>
parents:
43100
diff
changeset
|
221 #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT) |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
222 #define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT) |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
223 |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
224 |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
225 #define PyBUF_READ 0x100 |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
226 #define PyBUF_WRITE 0x200 |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
227 |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
228 /* End buffer interface */ |
|
67419
8a302a09ee83
Remove buffer API from stable ABI for now, see #10181.
Martin v. Löwis <martin@v.loewis.de>
parents:
66664
diff
changeset
|
229 #endif /* Py_LIMITED_API */ |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
35999
diff
changeset
|
230 |
|
13418
85520c220067
Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents:
13256
diff
changeset
|
231 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
|
232 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
|
233 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
|
234 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
235 #ifndef Py_LIMITED_API |
| 6 | 236 typedef struct { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
237 /* Number implementations must check *both* |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
238 arguments for proper type and implement the necessary conversions |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
239 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
|
240 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
241 binaryfunc nb_add; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
242 binaryfunc nb_subtract; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
243 binaryfunc nb_multiply; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
244 binaryfunc nb_remainder; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
245 binaryfunc nb_divmod; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
246 ternaryfunc nb_power; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
247 unaryfunc nb_negative; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
248 unaryfunc nb_positive; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
249 unaryfunc nb_absolute; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
250 inquiry nb_bool; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
251 unaryfunc nb_invert; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
252 binaryfunc nb_lshift; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
253 binaryfunc nb_rshift; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
254 binaryfunc nb_and; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
255 binaryfunc nb_xor; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
256 binaryfunc nb_or; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
257 unaryfunc nb_int; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
258 void *nb_reserved; /* the slot formerly known as nb_long */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
259 unaryfunc nb_float; |
|
39536
8f5b9982beba
Completely get rid of PyClass and PyInstance.
Guido van Rossum <guido@python.org>
parents:
39222
diff
changeset
|
260 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
261 binaryfunc nb_inplace_add; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
262 binaryfunc nb_inplace_subtract; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
263 binaryfunc nb_inplace_multiply; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
264 binaryfunc nb_inplace_remainder; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
265 ternaryfunc nb_inplace_power; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
266 binaryfunc nb_inplace_lshift; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
267 binaryfunc nb_inplace_rshift; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
268 binaryfunc nb_inplace_and; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
269 binaryfunc nb_inplace_xor; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
270 binaryfunc nb_inplace_or; |
|
19051
f20727cc3d0f
Implement PEP 238 in its (almost) full glory.
Guido van Rossum <guido@python.org>
parents:
19040
diff
changeset
|
271 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
272 binaryfunc nb_floor_divide; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
273 binaryfunc nb_true_divide; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
274 binaryfunc nb_inplace_floor_divide; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
275 binaryfunc nb_inplace_true_divide; |
|
36882
6a9c7165b17b
Checking in the code for PEP 357.
Guido van Rossum <guido@python.org>
parents:
36837
diff
changeset
|
276 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
277 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
|
278 } PyNumberMethods; |
| 6 | 279 |
| 280 typedef struct { | |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
281 lenfunc sq_length; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
282 binaryfunc sq_concat; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
283 ssizeargfunc sq_repeat; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
284 ssizeargfunc sq_item; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
285 void *was_sq_slice; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
286 ssizeobjargproc sq_ass_item; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
287 void *was_sq_ass_slice; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
288 objobjproc sq_contains; |
|
39536
8f5b9982beba
Completely get rid of PyClass and PyInstance.
Guido van Rossum <guido@python.org>
parents:
39222
diff
changeset
|
289 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
290 binaryfunc sq_inplace_concat; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
291 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
|
292 } PySequenceMethods; |
| 6 | 293 |
| 294 typedef struct { | |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
295 lenfunc mp_length; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
296 binaryfunc mp_subscript; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
297 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
|
298 } PyMappingMethods; |
| 6 | 299 |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
300 |
|
5410
3b2fda31bf1b
Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents:
4839
diff
changeset
|
301 typedef struct { |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
302 getbufferproc bf_getbuffer; |
|
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42334
diff
changeset
|
303 releasebufferproc bf_releasebuffer; |
|
5410
3b2fda31bf1b
Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents:
4839
diff
changeset
|
304 } PyBufferProcs; |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
305 #endif /* Py_LIMITED_API */ |
|
24122
d332484e394a
Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents:
24121
diff
changeset
|
306 |
|
22969
3100ba26913c
Change the type of the tp_free from 'destructor' to 'freefunc'.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
22785
diff
changeset
|
307 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
|
308 typedef void (*destructor)(PyObject *); |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
309 #ifndef Py_LIMITED_API |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
310 /* We can't provide a full compile-time check that limited-API |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
311 users won't implement tp_print. However, not defining printfunc |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
312 and making tp_print of a different function pointer type |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
313 should at least cause a warning in most cases. */ |
|
13418
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 int (*printfunc)(PyObject *, FILE *, int); |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
315 #endif |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36631
diff
changeset
|
316 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
|
317 typedef PyObject *(*getattrofunc)(PyObject *, PyObject *); |
|
36675
dba6494735d0
Revert backwards-incompatible const changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36631
diff
changeset
|
318 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
|
319 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
|
320 typedef PyObject *(*reprfunc)(PyObject *); |
|
65494
e8969fb822fc
make hashes always the size of pointers; introduce Py_hash_t #9778
Benjamin Peterson <benjamin@python.org>
parents:
64298
diff
changeset
|
321 typedef Py_hash_t (*hashfunc)(PyObject *); |
|
15938
8fd221aed357
Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents:
15716
diff
changeset
|
322 typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int); |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
16768
diff
changeset
|
323 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
|
324 typedef PyObject *(*iternextfunc) (PyObject *); |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
325 typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *); |
|
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
326 typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *); |
|
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
327 typedef int (*initproc)(PyObject *, PyObject *, PyObject *); |
|
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
328 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
|
329 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
|
330 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
331 #ifdef Py_LIMITED_API |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
332 typedef struct _typeobject PyTypeObject; /* opaque */ |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
333 #else |
| 6 | 334 typedef struct _typeobject { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
335 PyObject_VAR_HEAD |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
336 const char *tp_name; /* For printing, in format "<module>.<name>" */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
337 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
|
338 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
339 /* 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
|
340 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
341 destructor tp_dealloc; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
342 printfunc tp_print; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
343 getattrfunc tp_getattr; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
344 setattrfunc tp_setattr; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
345 void *tp_reserved; /* formerly known as tp_compare */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
346 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
|
347 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
348 /* 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
|
349 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
350 PyNumberMethods *tp_as_number; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
351 PySequenceMethods *tp_as_sequence; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
352 PyMappingMethods *tp_as_mapping; |
|
1257
1cabc2b6c970
* Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents:
1049
diff
changeset
|
353 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
354 /* 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
|
355 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
356 hashfunc tp_hash; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
357 ternaryfunc tp_call; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
358 reprfunc tp_str; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
359 getattrofunc tp_getattro; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
360 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
|
361 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
362 /* Functions to access object as input/output buffer */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
363 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
|
364 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
365 /* Flags to define presence of optional/expanded features */ |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
366 unsigned 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
|
367 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
368 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
|
369 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
370 /* Assigned meaning in release 2.0 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
371 /* call function for all accessible objects */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
372 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
|
373 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
374 /* delete references to contained objects */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
375 inquiry tp_clear; |
|
12990
e615596c5c47
Round 1 of Neil Schemenauer's GC patches:
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12481
diff
changeset
|
376 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
377 /* Assigned meaning in release 2.1 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
378 /* rich comparisons */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
379 richcmpfunc tp_richcompare; |
|
15938
8fd221aed357
Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents:
15716
diff
changeset
|
380 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
381 /* weak reference enabler */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
382 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
|
383 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
384 /* Iterators */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
385 getiterfunc tp_iter; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
386 iternextfunc tp_iternext; |
|
17597
32e7d0898eab
Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents:
16768
diff
changeset
|
387 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
388 /* Attribute descriptor and subclassing stuff */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
389 struct PyMethodDef *tp_methods; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
390 struct PyMemberDef *tp_members; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
391 struct PyGetSetDef *tp_getset; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
392 struct _typeobject *tp_base; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
393 PyObject *tp_dict; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
394 descrgetfunc tp_descr_get; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
395 descrsetfunc tp_descr_set; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
396 Py_ssize_t tp_dictoffset; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
397 initproc tp_init; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
398 allocfunc tp_alloc; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
399 newfunc tp_new; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
400 freefunc tp_free; /* Low-level free-memory routine */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
401 inquiry tp_is_gc; /* For PyObject_IS_GC */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
402 PyObject *tp_bases; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
403 PyObject *tp_mro; /* method resolution order */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
404 PyObject *tp_cache; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
405 PyObject *tp_subclasses; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
406 PyObject *tp_weaklist; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
407 destructor tp_del; |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
408 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
409 /* Type attribute cache version tag. Added in version 2.6 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
410 unsigned int tp_version_tag; |
|
44654
5a71dcc71eff
Merged revisions 59921-59932 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
411 |
|
84911
3f994367a979
Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents:
83937
diff
changeset
|
412 destructor tp_finalize; |
|
3f994367a979
Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents:
83937
diff
changeset
|
413 |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1329
diff
changeset
|
414 #ifdef COUNT_ALLOCS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
415 /* these must be last and never explicitly initialized */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
416 Py_ssize_t tp_allocs; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
417 Py_ssize_t tp_frees; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
418 Py_ssize_t tp_maxalloc; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
419 struct _typeobject *tp_prev; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
420 struct _typeobject *tp_next; |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1329
diff
changeset
|
421 #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
|
422 } PyTypeObject; |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
423 #endif |
| 6 | 424 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
425 typedef struct{ |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
426 int slot; /* slot id, see below */ |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
427 void *pfunc; /* function pointer */ |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
428 } PyType_Slot; |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
429 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
430 typedef struct{ |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
431 const char* name; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
432 int basicsize; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
433 int itemsize; |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
434 unsigned int flags; |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
435 PyType_Slot *slots; /* terminated by slot==0. */ |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
436 } PyType_Spec; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
437 |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
438 PyAPI_FUNC(PyObject*) PyType_FromSpec(PyType_Spec*); |
|
77651
bb6df3781edb
Issue #15146: Add PyType_FromSpecWithBases. Patch by Robin Schreiber.
Martin v. Löwis <martin@v.loewis.de>
parents:
77577
diff
changeset
|
439 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 |
|
bb6df3781edb
Issue #15146: Add PyType_FromSpecWithBases. Patch by Robin Schreiber.
Martin v. Löwis <martin@v.loewis.de>
parents:
77577
diff
changeset
|
440 PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*); |
|
bb6df3781edb
Issue #15146: Add PyType_FromSpecWithBases. Patch by Robin Schreiber.
Martin v. Löwis <martin@v.loewis.de>
parents:
77577
diff
changeset
|
441 #endif |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
442 |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
443 #ifndef Py_LIMITED_API |
|
28219
7c8e8807aed2
- The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents:
26263
diff
changeset
|
444 /* 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
|
445 typedef struct _heaptypeobject { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
446 /* Note: there's a dependency on the order of these members |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
447 in slotptr() in typeobject.c . */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
448 PyTypeObject ht_type; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
449 PyNumberMethods as_number; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
450 PyMappingMethods as_mapping; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
451 PySequenceMethods as_sequence; /* as_sequence comes after as_mapping, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
452 so that the mapping wins when both |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
453 the mapping and the sequence define |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
454 a given operator (e.g. __getitem__). |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
455 see add_operators() in typeobject.c . */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
456 PyBufferProcs as_buffer; |
|
73738
e1dbc72bd97f
PEP 3155 / issue #13448: Qualified name for classes and functions.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73669
diff
changeset
|
457 PyObject *ht_name, *ht_slots, *ht_qualname; |
|
76485
6e5855854a2e
Implement PEP 412: Key-sharing dictionaries (closes #13903)
Benjamin Peterson <benjamin@python.org>
parents:
76105
diff
changeset
|
458 struct _dictkeysobject *ht_cached_keys; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
459 /* 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
|
460 } PyHeapTypeObject; |
|
7c8e8807aed2
- The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents:
26263
diff
changeset
|
461 |
|
7c8e8807aed2
- The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents:
26263
diff
changeset
|
462 /* 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
|
463 #define PyHeapType_GET_MEMBERS(etype) \ |
|
44351
86a2679dca46
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
464 ((PyMemberDef *)(((char *)etype) + Py_TYPE(etype)->tp_basicsize)) |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
465 #endif |
|
28219
7c8e8807aed2
- The extended type structure used for heap types (new-style
Guido van Rossum <guido@python.org>
parents:
26263
diff
changeset
|
466 |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
467 /* 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
|
468 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
|
469 #define PyObject_TypeCheck(ob, tp) \ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
470 (Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp))) |
| 6 | 471 |
|
24420
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
472 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
|
473 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
|
474 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
|
475 |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
476 PyAPI_FUNC(unsigned long) PyType_GetFlags(PyTypeObject*); |
|
67877
aca91c55f38d
Issue #11067: Add PyType_GetFlags, to support PyUnicode_Check
Martin v. Löwis <martin@v.loewis.de>
parents:
67419
diff
changeset
|
477 |
|
40909
f2f0b41f270d
Merged revisions 53875-53911 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40737
diff
changeset
|
478 #define PyType_Check(op) \ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
479 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS) |
|
44351
86a2679dca46
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
480 #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
|
481 |
|
24420
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
482 PyAPI_FUNC(int) PyType_Ready(PyTypeObject *); |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
35999
diff
changeset
|
483 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
|
484 PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
485 PyObject *, PyObject *); |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
486 #ifndef Py_LIMITED_API |
|
24420
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(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *); |
|
85909
6aef095fdb30
Issue #18594: Fix the fast path for collections.Counter().
Raymond Hettinger <python@rcn.com>
parents:
78921
diff
changeset
|
488 PyAPI_FUNC(PyObject *) _PyType_LookupId(PyTypeObject *, _Py_Identifier *); |
|
74578
7d96679c5d46
use the static identifier api for looking up special methods
Benjamin Peterson <benjamin@python.org>
parents:
73984
diff
changeset
|
489 PyAPI_FUNC(PyObject *) _PyObject_LookupSpecial(PyObject *, _Py_Identifier *); |
|
73061
c2a89b509be4
Issue 1294232: Fix errors in metaclass calculation affecting some cases of metaclass inheritance. Patch by Daniel Urban.
Nick Coghlan <ncoghlan@gmail.com>
parents:
67924
diff
changeset
|
490 PyAPI_FUNC(PyTypeObject *) _PyType_CalculateMetaclass(PyTypeObject *, PyObject *); |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
491 #endif |
|
45026
ebfbaa1051e2
Merged revisions 60364-60378 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44654
diff
changeset
|
492 PyAPI_FUNC(unsigned int) PyType_ClearCache(void); |
|
47557
98827a21e352
Merged revisions 63724,63726,63732,63744,63754-63755,63757-63758,63760,63775,63781-63782,63787,63805-63808,63818-63819,63823-63824 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47500
diff
changeset
|
493 PyAPI_FUNC(void) PyType_Modified(PyTypeObject *); |
| 6 | 494 |
| 86 | 495 /* Generic operations on objects */ |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
71809
diff
changeset
|
496 struct _Py_Identifier; |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
497 #ifndef Py_LIMITED_API |
|
24420
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
498 PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int); |
|
40737
6ebad2a6b990
Merged revisions 53451-53537 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40401
diff
changeset
|
499 PyAPI_FUNC(void) _Py_BreakPoint(void); |
|
24420
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
500 PyAPI_FUNC(void) _PyObject_Dump(PyObject *); |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
501 #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
|
502 PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *); |
|
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
503 PyAPI_FUNC(PyObject *) PyObject_Str(PyObject *); |
|
47611
da47e7e135ae
#2630: Implement PEP 3138.
Georg Brandl <georg@python.org>
parents:
47557
diff
changeset
|
504 PyAPI_FUNC(PyObject *) PyObject_ASCII(PyObject *); |
|
48871
548dccc4008e
make bytes(o) respect __bytes__ #2415
Benjamin Peterson <benjamin@python.org>
parents:
48683
diff
changeset
|
505 PyAPI_FUNC(PyObject *) PyObject_Bytes(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
|
506 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
|
507 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
|
508 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
|
509 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
|
510 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
|
511 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
|
512 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
|
513 PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *); |
|
73984
e979b26a9172
improve abstract property support (closes #11610)
Benjamin Peterson <benjamin@python.org>
parents:
73738
diff
changeset
|
514 PyAPI_FUNC(int) _PyObject_IsAbstract(PyObject *); |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
71809
diff
changeset
|
515 PyAPI_FUNC(PyObject *) _PyObject_GetAttrId(PyObject *, struct _Py_Identifier *); |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
71809
diff
changeset
|
516 PyAPI_FUNC(int) _PyObject_SetAttrId(PyObject *, struct _Py_Identifier *, PyObject *); |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
71809
diff
changeset
|
517 PyAPI_FUNC(int) _PyObject_HasAttrId(PyObject *, struct _Py_Identifier *); |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
518 #ifndef Py_LIMITED_API |
|
24420
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
519 PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *); |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
520 #endif |
|
28320
fd5ef7003469
Renamed PyObject_GenericGetIter to PyObject_SelfIter
Raymond Hettinger <python@rcn.com>
parents:
28308
diff
changeset
|
521 PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *); |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
522 #ifndef Py_LIMITED_API |
|
50755
c99ce0164699
Merged revisions 68560 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
50490
diff
changeset
|
523 PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *); |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
524 #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
|
525 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
|
526 PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
527 PyObject *, PyObject *); |
|
75050
78f93eb7dd75
add generic implementation of a __dict__ descriptor for C types
Benjamin Peterson <benjamin@python.org>
parents:
74578
diff
changeset
|
528 PyAPI_FUNC(int) PyObject_GenericSetDict(PyObject *, PyObject *, void *); |
|
65494
e8969fb822fc
make hashes always the size of pointers; introduce Py_hash_t #9778
Benjamin Peterson <benjamin@python.org>
parents:
64298
diff
changeset
|
529 PyAPI_FUNC(Py_hash_t) PyObject_Hash(PyObject *); |
|
e8969fb822fc
make hashes always the size of pointers; introduce Py_hash_t #9778
Benjamin Peterson <benjamin@python.org>
parents:
64298
diff
changeset
|
530 PyAPI_FUNC(Py_hash_t) 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
|
531 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
|
532 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
|
533 PyAPI_FUNC(int) PyCallable_Check(PyObject *); |
| 6 | 534 |
|
24420
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
535 PyAPI_FUNC(void) PyObject_ClearWeakRefs(PyObject *); |
|
84911
3f994367a979
Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents:
83937
diff
changeset
|
536 PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *); |
|
3f994367a979
Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents:
83937
diff
changeset
|
537 PyAPI_FUNC(int) PyObject_CallFinalizerFromDealloc(PyObject *); |
|
16385
1fb6672b20ef
PEP 205, Weak References -- initial checkin.
Fred Drake <fdrake@acm.org>
parents:
16235
diff
changeset
|
538 |
|
64298
0265d5f7bd07
Issue #1868: Eliminate subtle timing issues in thread-local objects by
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
539 /* Same as PyObject_Generic{Get,Set}Attr, but passing the attributes |
|
0265d5f7bd07
Issue #1868: Eliminate subtle timing issues in thread-local objects by
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
540 dict as the last parameter. */ |
|
0265d5f7bd07
Issue #1868: Eliminate subtle timing issues in thread-local objects by
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
541 PyAPI_FUNC(PyObject *) |
|
0265d5f7bd07
Issue #1868: Eliminate subtle timing issues in thread-local objects by
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
542 _PyObject_GenericGetAttrWithDict(PyObject *, PyObject *, PyObject *); |
|
0265d5f7bd07
Issue #1868: Eliminate subtle timing issues in thread-local objects by
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
543 PyAPI_FUNC(int) |
|
0265d5f7bd07
Issue #1868: Eliminate subtle timing issues in thread-local objects by
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
544 _PyObject_GenericSetAttrWithDict(PyObject *, PyObject *, |
|
0265d5f7bd07
Issue #1868: Eliminate subtle timing issues in thread-local objects by
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
545 PyObject *, PyObject *); |
|
0265d5f7bd07
Issue #1868: Eliminate subtle timing issues in thread-local objects by
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
546 |
|
76105
fb907ee4fdfa
Rename _PyIter_GetBuiltin to _PyObject_GetBuiltin, and do not include it in the stable ABI.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75254
diff
changeset
|
547 /* Helper to look up a builtin object */ |
|
fb907ee4fdfa
Rename _PyIter_GetBuiltin to _PyObject_GetBuiltin, and do not include it in the stable ABI.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75254
diff
changeset
|
548 #ifndef Py_LIMITED_API |
|
fb907ee4fdfa
Rename _PyIter_GetBuiltin to _PyObject_GetBuiltin, and do not include it in the stable ABI.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75254
diff
changeset
|
549 PyAPI_FUNC(PyObject *) |
|
fb907ee4fdfa
Rename _PyIter_GetBuiltin to _PyObject_GetBuiltin, and do not include it in the stable ABI.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75254
diff
changeset
|
550 _PyObject_GetBuiltin(const char *name); |
|
fb907ee4fdfa
Rename _PyIter_GetBuiltin to _PyObject_GetBuiltin, and do not include it in the stable ABI.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75254
diff
changeset
|
551 #endif |
|
19970
f761cab28c1c
Hopefully fix 3-way comparisons. This unfortunately adds yet another
Guido van Rossum <guido@python.org>
parents:
19705
diff
changeset
|
552 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43866
diff
changeset
|
553 /* PyObject_Dir(obj) acts like Python builtins.dir(obj), returning a |
|
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43866
diff
changeset
|
554 list of strings. PyObject_Dir(NULL) is like builtins.dir(), |
|
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
|
555 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
|
556 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
|
557 */ |
|
24420
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
558 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
|
559 |
|
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
|
560 |
|
7983
068303f925ea
Add prototypes for Py_Repr{Enter,Leave}.
Guido van Rossum <guido@python.org>
parents:
7935
diff
changeset
|
561 /* 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
|
562 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
|
563 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
|
564 |
|
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
|
565 /* Helper for passing objects to printf and the like */ |
|
48660
85b67fb5672b
Rename PyUnicode_AsString -> _PyUnicode_AsString and
Marc-André Lemburg <mal@egenix.com>
parents:
48499
diff
changeset
|
566 #define PyObject_REPR(obj) _PyUnicode_AsString(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
|
567 |
| 6 | 568 /* Flag bits for printing: */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
569 #define Py_PRINT_RAW 1 /* No string quotes etc. */ |
| 6 | 570 |
| 571 /* | |
|
24126
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
572 `Type flags (tp_flags) |
|
9304
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
573 |
|
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
574 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
|
575 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
|
576 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
|
577 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
|
578 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
|
579 |
|
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
580 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
|
581 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
|
582 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
|
583 |
|
39222
b0cdcbcc5f45
Get rid of most of the flags (in tp_flags) that keep track of various
Guido van Rossum <guido@python.org>
parents:
37879
diff
changeset
|
584 Most flags were removed as of Python 3.0 to make room for new flags. (Some |
|
b0cdcbcc5f45
Get rid of most of the flags (in tp_flags) that keep track of various
Guido van Rossum <guido@python.org>
parents:
37879
diff
changeset
|
585 flags are not for backwards compatibility but to indicate the presence of an |
|
b0cdcbcc5f45
Get rid of most of the flags (in tp_flags) that keep track of various
Guido van Rossum <guido@python.org>
parents:
37879
diff
changeset
|
586 optional feature; these flags remain of course.) |
|
9304
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
587 |
|
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
588 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
|
589 |
|
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
590 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
|
591 given type object has a specified feature. |
|
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
592 */ |
|
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
593 |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
594 /* Set if the type object is dynamically allocated */ |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
595 #define Py_TPFLAGS_HEAPTYPE (1UL << 9) |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
596 |
|
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
597 /* Set if the type allows subclassing */ |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
598 #define Py_TPFLAGS_BASETYPE (1UL << 10) |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
17617
diff
changeset
|
599 |
|
19134
d98121930e70
Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents:
19051
diff
changeset
|
600 /* Set if the type is 'ready' -- fully initialized */ |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
601 #define Py_TPFLAGS_READY (1UL << 12) |
|
19134
d98121930e70
Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents:
19051
diff
changeset
|
602 |
|
d98121930e70
Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents:
19051
diff
changeset
|
603 /* Set while the type is being 'readied', to prevent recursive ready calls */ |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
604 #define Py_TPFLAGS_READYING (1UL << 13) |
|
19134
d98121930e70
Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents:
19051
diff
changeset
|
605 |
|
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
|
606 /* Objects support garbage collection (see objimp.h) */ |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
607 #define Py_TPFLAGS_HAVE_GC (1UL << 14) |
|
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
|
608 |
|
36882
6a9c7165b17b
Checking in the code for PEP 357.
Guido van Rossum <guido@python.org>
parents:
36837
diff
changeset
|
609 /* 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
|
610 #ifdef STACKLESS |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
611 #define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION (3UL << 15) |
|
29184
9aa06cbd9cc1
Preserved one bit in type objects for Stackless.
Christian Tismer <tismer@stackless.com>
parents:
28653
diff
changeset
|
612 #else |
|
29240
e721025cca09
Generalized my type flags structure extension without being specific about
Christian Tismer <tismer@stackless.com>
parents:
29184
diff
changeset
|
613 #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
|
614 #endif |
|
9aa06cbd9cc1
Preserved one bit in type objects for Stackless.
Christian Tismer <tismer@stackless.com>
parents:
28653
diff
changeset
|
615 |
|
44654
5a71dcc71eff
Merged revisions 59921-59932 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
616 /* Objects support type attribute cache */ |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
617 #define Py_TPFLAGS_HAVE_VERSION_TAG (1UL << 18) |
|
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
618 #define Py_TPFLAGS_VALID_VERSION_TAG (1UL << 19) |
|
44654
5a71dcc71eff
Merged revisions 59921-59932 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44351
diff
changeset
|
619 |
|
45549
8dd30fe11a4b
Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61083,61085,61092-61103 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45401
diff
changeset
|
620 /* Type is abstract and cannot be instantiated */ |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
621 #define Py_TPFLAGS_IS_ABSTRACT (1UL << 20) |
|
45549
8dd30fe11a4b
Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61083,61085,61092-61103 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45401
diff
changeset
|
622 |
|
40909
f2f0b41f270d
Merged revisions 53875-53911 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40737
diff
changeset
|
623 /* These flags are used to determine if a type is a subclass. */ |
|
80065
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
624 #define Py_TPFLAGS_LONG_SUBCLASS (1UL << 24) |
|
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
625 #define Py_TPFLAGS_LIST_SUBCLASS (1UL << 25) |
|
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
626 #define Py_TPFLAGS_TUPLE_SUBCLASS (1UL << 26) |
|
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
627 #define Py_TPFLAGS_BYTES_SUBCLASS (1UL << 27) |
|
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
628 #define Py_TPFLAGS_UNICODE_SUBCLASS (1UL << 28) |
|
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
629 #define Py_TPFLAGS_DICT_SUBCLASS (1UL << 29) |
|
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
630 #define Py_TPFLAGS_BASE_EXC_SUBCLASS (1UL << 30) |
|
10795aac6df7
Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned
Victor Stinner <victor.stinner@gmail.com>
parents:
78921
diff
changeset
|
631 #define Py_TPFLAGS_TYPE_SUBCLASS (1UL << 31) |
|
40909
f2f0b41f270d
Merged revisions 53875-53911 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40737
diff
changeset
|
632 |
|
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
|
633 #define Py_TPFLAGS_DEFAULT ( \ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
634 Py_TPFLAGS_HAVE_STACKLESS_EXTENSION | \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
635 Py_TPFLAGS_HAVE_VERSION_TAG | \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
636 0) |
|
9304
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
637 |
|
84911
3f994367a979
Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents:
83937
diff
changeset
|
638 /* NOTE: The following flags reuse lower bits (removed as part of the |
|
3f994367a979
Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents:
83937
diff
changeset
|
639 * Python 3.0 transition). */ |
|
3f994367a979
Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents:
83937
diff
changeset
|
640 |
|
3f994367a979
Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents:
83937
diff
changeset
|
641 /* Type structure has tp_finalize member (3.4) */ |
|
3f994367a979
Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents:
83937
diff
changeset
|
642 #define Py_TPFLAGS_HAVE_FINALIZE (1UL << 0) |
|
3f994367a979
Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents:
83937
diff
changeset
|
643 |
|
67877
aca91c55f38d
Issue #11067: Add PyType_GetFlags, to support PyUnicode_Check
Martin v. Löwis <martin@v.loewis.de>
parents:
67419
diff
changeset
|
644 #ifdef Py_LIMITED_API |
|
aca91c55f38d
Issue #11067: Add PyType_GetFlags, to support PyUnicode_Check
Martin v. Löwis <martin@v.loewis.de>
parents:
67419
diff
changeset
|
645 #define PyType_HasFeature(t,f) ((PyType_GetFlags(t) & (f)) != 0) |
|
aca91c55f38d
Issue #11067: Add PyType_GetFlags, to support PyUnicode_Check
Martin v. Löwis <martin@v.loewis.de>
parents:
67419
diff
changeset
|
646 #else |
|
9304
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
647 #define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) |
|
67877
aca91c55f38d
Issue #11067: Add PyType_GetFlags, to support PyUnicode_Check
Martin v. Löwis <martin@v.loewis.de>
parents:
67419
diff
changeset
|
648 #endif |
|
40909
f2f0b41f270d
Merged revisions 53875-53911 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40737
diff
changeset
|
649 #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
|
650 |
|
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
651 |
|
cc3e14837379
Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents:
8124
diff
changeset
|
652 /* |
|
2129
05360cd616ae
The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents:
2071
diff
changeset
|
653 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
|
654 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
|
655 the refcount falls to 0; for |
| 6 | 656 objects that don't contain references to other objects or heap memory |
| 657 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
|
658 wherever a void expression is allowed. The argument must not be a |
|
46222
aed698c8647b
Merged revisions 62021,62029,62035-62038,62043-62044,62052-62053 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45549
diff
changeset
|
659 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
|
660 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
|
661 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
|
662 bookkeeping appropriate to the special build. |
| 6 | 663 |
| 664 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
|
665 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
|
666 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
|
667 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
|
668 about 2**31 references to an object. |
| 6 | 669 |
|
24126
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
670 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
|
671 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
|
672 XXX can and should be deallocated. |
| 6 | 673 Type objects should never be deallocated; the type pointer in an object |
| 674 is not considered to be a reference to the type object, to save | |
| 675 complications in the deallocation function. (This is actually a | |
| 676 decision that's up to the implementer of each new type so if you want, | |
| 677 you can count such references to the type object.) | |
| 678 */ | |
| 679 | |
|
24184
c4dcb80f48ea
object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents:
24171
diff
changeset
|
680 /* 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
|
681 * 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
|
682 * 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
|
683 * 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
|
684 * 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
|
685 * 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
|
686 * 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
|
687 * #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
|
688 */ |
|
24126
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
689 #ifdef Py_REF_DEBUG |
|
36837
3a3aed49b245
Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36748
diff
changeset
|
690 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
|
691 PyAPI_FUNC(void) _Py_NegativeRefcount(const char *fname, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
692 int lineno, PyObject *op); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
693 PyAPI_FUNC(PyObject *) _PyDict_Dummy(void); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
694 PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
695 #define _Py_INC_REFTOTAL _Py_RefTotal++ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
696 #define _Py_DEC_REFTOTAL _Py_RefTotal-- |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
697 #define _Py_REF_DEBUG_COMMA , |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
698 #define _Py_CHECK_REFCNT(OP) \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
699 { if (((PyObject*)OP)->ob_refcnt < 0) \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
700 _Py_NegativeRefcount(__FILE__, __LINE__, \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
701 (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
|
702 } |
|
24126
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
703 #else |
|
24184
c4dcb80f48ea
object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents:
24171
diff
changeset
|
704 #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
|
705 #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
|
706 #define _Py_REF_DEBUG_COMMA |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
707 #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
|
708 #endif /* Py_REF_DEBUG */ |
| 6 | 709 |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1329
diff
changeset
|
710 #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
|
711 PyAPI_FUNC(void) inc_count(PyTypeObject *); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
712 PyAPI_FUNC(void) dec_count(PyTypeObject *); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
713 #define _Py_INC_TPALLOCS(OP) inc_count(Py_TYPE(OP)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
714 #define _Py_INC_TPFREES(OP) dec_count(Py_TYPE(OP)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
715 #define _Py_DEC_TPFREES(OP) Py_TYPE(OP)->tp_frees-- |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
716 #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
|
717 #else |
|
24184
c4dcb80f48ea
object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents:
24171
diff
changeset
|
718 #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
|
719 #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
|
720 #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
|
721 #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
|
722 #endif /* COUNT_ALLOCS */ |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1329
diff
changeset
|
723 |
|
24126
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
724 #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
|
725 /* 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
|
726 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
|
727 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
|
728 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
|
729 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
|
730 PyAPI_FUNC(void) _Py_PrintReferenceAddresses(FILE *); |
|
28396
d56282c28a1e
Improved new Py_TRACE_REFS gimmicks.
Tim Peters <tim.peters@gmail.com>
parents:
28389
diff
changeset
|
731 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
|
732 |
|
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
733 #else |
|
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
734 /* 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
|
735 * inline. |
|
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
736 */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
737 #define _Py_NewReference(op) ( \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
738 _Py_INC_TPALLOCS(op) _Py_COUNT_ALLOCS_COMMA \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
739 _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
740 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
|
741 |
|
24184
c4dcb80f48ea
object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents:
24171
diff
changeset
|
742 #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
|
743 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
744 #ifdef Py_LIMITED_API |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
745 PyAPI_FUNC(void) _Py_Dealloc(PyObject *); |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
746 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
747 #define _Py_Dealloc(op) ( \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
748 _Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
749 (*Py_TYPE(op)->tp_dealloc)((PyObject *)(op))) |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65944
diff
changeset
|
750 #endif |
|
24126
fdf80e04e4bb
Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents:
24122
diff
changeset
|
751 #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
|
752 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
753 #define Py_INCREF(op) ( \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
754 _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \ |
|
83937
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
755 ((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
|
756 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
757 #define Py_DECREF(op) \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
758 do { \ |
|
83937
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
759 PyObject *_py_decref_tmp = (PyObject *)(op); \ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
760 if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \ |
|
83937
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
761 --(_py_decref_tmp)->ob_refcnt != 0) \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
762 _Py_CHECK_REFCNT(_py_decref_tmp) \ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
763 else \ |
|
83937
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
764 _Py_Dealloc(_py_decref_tmp); \ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
765 } while (0) |
| 6 | 766 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
767 /* Safely decref `op` and set `op` to NULL, especially useful in tp_clear |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
768 * and tp_dealloc implementatons. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
769 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
770 * Note that "the obvious" code can be deadly: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
771 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
772 * Py_XDECREF(op); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
773 * op = NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
774 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
775 * Typically, `op` is something like self->containee, and `self` is done |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
776 * using its `containee` member. In the code sequence above, suppose |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
777 * `containee` is non-NULL with a refcount of 1. Its refcount falls to |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
778 * 0 on the first line, which can trigger an arbitrary amount of code, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
779 * possibly including finalizers (like __del__ methods or weakref callbacks) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
780 * coded in Python, which in turn can release the GIL and allow other threads |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
781 * to run, etc. Such code may even invoke methods of `self` again, or cause |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
782 * cyclic gc to trigger, but-- oops! --self->containee still points to the |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
783 * object being torn down, and it may be in an insane state while being torn |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
784 * down. This has in fact been a rich historic source of miserable (rare & |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
785 * hard-to-diagnose) segfaulting (and other) bugs. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
786 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
787 * The safe way is: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
788 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
789 * Py_CLEAR(op); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
790 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
791 * That arranges to set `op` to NULL _before_ decref'ing, so that any code |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
792 * triggered as a side-effect of `op` getting torn down no longer believes |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
793 * `op` points to a valid object. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
794 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
795 * There are cases where it's safe to use the naive code, but they're brittle. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
796 * For example, if `op` points to a Python integer, you know that destroying |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
797 * one of those can't cause problems -- but in part that relies on that |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
798 * Python integers aren't currently weakly referencable. Best practice is |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
799 * to use Py_CLEAR() even if you can't think of a reason for why you need to. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37191
diff
changeset
|
800 */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
801 #define Py_CLEAR(op) \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
802 do { \ |
|
83937
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
803 PyObject *_py_tmp = (PyObject *)(op); \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
804 if (_py_tmp != NULL) { \ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
805 (op) = NULL; \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
806 Py_DECREF(_py_tmp); \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
807 } \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
808 } 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
|
809 |
| 86 | 810 /* Macros to use in case the object pointer may be NULL: */ |
|
83937
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
811 #define Py_XINCREF(op) \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
812 do { \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
813 PyObject *_py_xincref_tmp = (PyObject *)(op); \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
814 if (_py_xincref_tmp != NULL) \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
815 Py_INCREF(_py_xincref_tmp); \ |
|
86974
954167ce92a3
Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents:
85910
diff
changeset
|
816 } while (0) |
|
83937
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
817 |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
818 #define Py_XDECREF(op) \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
819 do { \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
820 PyObject *_py_xdecref_tmp = (PyObject *)(op); \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
821 if (_py_xdecref_tmp != NULL) \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
822 Py_DECREF(_py_xdecref_tmp); \ |
|
aff41a6421c2
don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents:
80526
diff
changeset
|
823 } while (0) |
| 6 | 824 |
| 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 |
|
87670
9fcba15d7685
Issue #6477: Keep PyNotImplemented_Type and PyNone_Type private.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
87665
diff
changeset
|
832 PyAPI_DATA(PyTypeObject) _PyNone_Type; |
|
9fcba15d7685
Issue #6477: Keep PyNotImplemented_Type and PyNone_Type private.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
87665
diff
changeset
|
833 PyAPI_DATA(PyTypeObject) _PyNotImplemented_Type; |
|
87665
16eba94d3cfe
Issue #6477: Added support for pickling the types of built-in singletons.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
85909
diff
changeset
|
834 |
|
31940
059740d52ae5
Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents:
30887
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 _Py_NoneStruct is an object of undefined type which can be used in contexts |
| 6 | 837 where NULL (nil) is not suitable (since NULL often means 'error'). |
| 838 | |
|
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 Don't forget to apply Py_INCREF() when returning this value!!! |
| 6 | 840 */ |
|
24420
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
841 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
|
842 #define Py_None (&_Py_NoneStruct) |
| 6 | 843 |
|
30719
7dfdf9e8d95d
Defined macros Py_RETURN_(TRUE|FALSE|NONE) as helper functions for returning
Brett Cannon <bcannon@gmail.com>
parents:
29245
diff
changeset
|
844 /* 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
|
845 #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
|
846 |
|
15716
362e53f43dd2
- Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
14497
diff
changeset
|
847 /* |
|
362e53f43dd2
- Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
14497
diff
changeset
|
848 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
|
849 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
|
850 */ |
|
24420
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
851 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
|
852 #define Py_NotImplemented (&_Py_NotImplementedStruct) |
| 6 | 853 |
|
71809
77a65b078852
Add Py_RETURN_NOTIMPLEMENTED macro. Fixes #12724.
Brian Curtin <brian@python.org>
parents:
67924
diff
changeset
|
854 /* Macro for returning Py_NotImplemented from a function */ |
|
77a65b078852
Add Py_RETURN_NOTIMPLEMENTED macro. Fixes #12724.
Brian Curtin <brian@python.org>
parents:
67924
diff
changeset
|
855 #define Py_RETURN_NOTIMPLEMENTED \ |
|
77a65b078852
Add Py_RETURN_NOTIMPLEMENTED macro. Fixes #12724.
Brian Curtin <brian@python.org>
parents:
67924
diff
changeset
|
856 return Py_INCREF(Py_NotImplemented), Py_NotImplemented |
|
77a65b078852
Add Py_RETURN_NOTIMPLEMENTED macro. Fixes #12724.
Brian Curtin <brian@python.org>
parents:
67924
diff
changeset
|
857 |
|
15938
8fd221aed357
Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents:
15716
diff
changeset
|
858 /* Rich comparison opcodes */ |
|
8fd221aed357
Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents:
15716
diff
changeset
|
859 #define Py_LT 0 |
|
8fd221aed357
Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents:
15716
diff
changeset
|
860 #define Py_LE 1 |
|
8fd221aed357
Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents:
15716
diff
changeset
|
861 #define Py_EQ 2 |
|
8fd221aed357
Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents:
15716
diff
changeset
|
862 #define Py_NE 3 |
|
8fd221aed357
Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents:
15716
diff
changeset
|
863 #define Py_GT 4 |
|
8fd221aed357
Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents:
15716
diff
changeset
|
864 #define Py_GE 5 |
|
8fd221aed357
Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents:
15716
diff
changeset
|
865 |
|
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
|
866 /* 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
|
867 * 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
|
868 */ |
|
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
|
869 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
|
870 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1400
diff
changeset
|
871 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1400
diff
changeset
|
872 /* |
| 6 | 873 More conventions |
| 874 ================ | |
| 875 | |
| 876 Argument Checking | |
| 877 ----------------- | |
| 878 | |
| 879 Functions that take objects as arguments normally don't check for nil | |
| 880 arguments, but they do check the type of the argument, and return an | |
| 881 error if the function doesn't apply to the type. | |
| 882 | |
| 883 Failure Modes | |
| 884 ------------- | |
| 885 | |
| 886 Functions may fail for a variety of reasons, including running out of | |
| 86 | 887 memory. This is communicated to the caller in two ways: an error string |
| 888 is set (see errors.h), and the function result differs: functions that | |
| 889 normally return a pointer return NULL for failure, functions returning | |
| 890 an integer return -1 (which could be a legal return value too!), and | |
| 891 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
|
892 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
|
893 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
|
894 the error on to its caller. |
| 6 | 895 |
| 896 Reference Counts | |
| 897 ---------------- | |
| 898 | |
| 899 It takes a while to get used to the proper usage of reference counts. | |
| 900 | |
| 901 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
|
902 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
|
903 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
|
904 PyList_SetItem(), |
| 6 | 905 don't increment the reference count of the object, since the most |
| 906 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
|
907 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
|
908 don't increment |
| 6 | 909 the reference count, since most frequently the object is only looked at |
| 910 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
|
911 must call Py_INCREF() explicitly. |
| 6 | 912 |
|
30887
3ae82928b113
fixed buggy comment as per SF bug #827856
Alex Martelli <aleaxit@gmail.com>
parents:
30721
diff
changeset
|
913 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
|
914 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
|
915 successfully stored, to simplify error handling. |
| 6 | 916 |
| 917 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
|
918 argument consume a reference count; however, this may quickly get |
| 6 | 919 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
|
920 it carefully, it may save lots of calls to Py_INCREF() and Py_DECREF() at |
| 6 | 921 times. |
| 922 */ | |
|
1329
519c25039c6a
* Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents:
1324
diff
changeset
|
923 |
|
24122
d332484e394a
Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents:
24121
diff
changeset
|
924 |
|
d332484e394a
Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents:
24121
diff
changeset
|
925 /* 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
|
926 |
|
d332484e394a
Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents:
24121
diff
changeset
|
927 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
|
928 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
|
929 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
|
930 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
|
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 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
|
933 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
|
934 |
|
d332484e394a
Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents:
24121
diff
changeset
|
935 static void |
|
d332484e394a
Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents:
24121
diff
changeset
|
936 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
|
937 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
938 ... declarations go here ... |
|
11999
c94247b5c355
Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents:
11891
diff
changeset
|
939 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
940 PyObject_GC_UnTrack(p); // must untrack first |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
941 Py_TRASHCAN_SAFE_BEGIN(p) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
942 ... The body of the deallocator goes here, including all calls ... |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
943 ... to Py_DECREF on contained objects. ... |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53905
diff
changeset
|
944 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
|
945 } |
|
11999
c94247b5c355
Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents:
11891
diff
changeset
|
946 |
|
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
|
947 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
|
948 "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
|
949 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
|
950 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
|
951 |
|
24122
d332484e394a
Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents:
24121
diff
changeset
|
952 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
|
953 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
|
954 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
|
955 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
|
956 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
|
957 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
|
958 |
|
24122
d332484e394a
Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents:
24121
diff
changeset
|
959 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
|
960 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
|
961 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
|
962 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
|
963 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
|
964 */ |
|
c94247b5c355
Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents:
11891
diff
changeset
|
965 |
|
78912
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
966 /* This is the old private API, invoked by the macros before 3.2.4. |
|
78857
6bcaba9e8df2
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
967 Kept for binary compatibility of extensions using the stable ABI. */ |
|
24420
36e2fd3f08f7
Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
968 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
|
969 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
|
970 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
|
971 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
|
972 |
|
78912
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
973 /* The new thread-safe private API, invoked by the macros below. */ |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
974 PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*); |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
975 PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void); |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
976 |
|
11999
c94247b5c355
Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents:
11891
diff
changeset
|
977 #define PyTrash_UNWIND_LEVEL 50 |
|
c94247b5c355
Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents:
11891
diff
changeset
|
978 |
|
c94247b5c355
Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents:
11891
diff
changeset
|
979 #define Py_TRASHCAN_SAFE_BEGIN(op) \ |
|
78912
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
980 do { \ |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
981 PyThreadState *_tstate = PyThreadState_GET(); \ |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
982 if (_tstate->trash_delete_nesting < PyTrash_UNWIND_LEVEL) { \ |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
983 ++_tstate->trash_delete_nesting; |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
984 /* The body of the deallocator is here. */ |
|
11999
c94247b5c355
Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents:
11891
diff
changeset
|
985 #define Py_TRASHCAN_SAFE_END(op) \ |
|
78912
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
986 --_tstate->trash_delete_nesting; \ |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
987 if (_tstate->trash_delete_later && _tstate->trash_delete_nesting <= 0) \ |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
988 _PyTrash_thread_destroy_chain(); \ |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
989 } \ |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
990 else \ |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
991 _PyTrash_thread_deposit_object((PyObject*)op); \ |
|
5aa1bc2f00ad
Issue #13992: The trashcan mechanism is now thread-safe. This eliminates
Antoine Pitrou <solipsis@pitrou.net>
parents:
77651
diff
changeset
|
992 } while (0); |
|
12481
a8898a172fe2
Christian Tismer -- total rewrite on trashcan code.
Guido van Rossum <guido@python.org>
parents:
12406
diff
changeset
|
993 |
|
77577
d63a80abfbec
Issue #14785: Add sys._debugmallocstats() to help debug low-level memory allocation issues
David Malcolm <dmalcolm@redhat.com>
parents:
76485
diff
changeset
|
994 #ifndef Py_LIMITED_API |
|
d63a80abfbec
Issue #14785: Add sys._debugmallocstats() to help debug low-level memory allocation issues
David Malcolm <dmalcolm@redhat.com>
parents:
76485
diff
changeset
|
995 PyAPI_FUNC(void) |
|
d63a80abfbec
Issue #14785: Add sys._debugmallocstats() to help debug low-level memory allocation issues
David Malcolm <dmalcolm@redhat.com>
parents:
76485
diff
changeset
|
996 _PyDebugAllocatorStats(FILE *out, const char *block_name, int num_blocks, |
|
d63a80abfbec
Issue #14785: Add sys._debugmallocstats() to help debug low-level memory allocation issues
David Malcolm <dmalcolm@redhat.com>
parents:
76485
diff
changeset
|
997 size_t sizeof_block); |
|
d63a80abfbec
Issue #14785: Add sys._debugmallocstats() to help debug low-level memory allocation issues
David Malcolm <dmalcolm@redhat.com>
parents:
76485
diff
changeset
|
998 PyAPI_FUNC(void) |
|
d63a80abfbec
Issue #14785: Add sys._debugmallocstats() to help debug low-level memory allocation issues
David Malcolm <dmalcolm@redhat.com>
parents:
76485
diff
changeset
|
999 _PyObject_DebugTypeStats(FILE *out); |
|
d63a80abfbec
Issue #14785: Add sys._debugmallocstats() to help debug low-level memory allocation issues
David Malcolm <dmalcolm@redhat.com>
parents:
76485
diff
changeset
|
1000 #endif /* ifndef Py_LIMITED_API */ |
|
d63a80abfbec
Issue #14785: Add sys._debugmallocstats() to help debug low-level memory allocation issues
David Malcolm <dmalcolm@redhat.com>
parents:
76485
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 */ |
