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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
1 #ifndef Py_OBJECT_H
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
2 #define Py_OBJECT_H
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
3 #ifdef __cplusplus
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
4 extern "C" {
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
5 #endif
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
6
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
7
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 /* Object and type object interface */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 /*
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 Objects are structures allocated on the heap. Special rules apply to
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 the use of objects to ensure they are properly garbage-collected.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 Objects are never allocated statically or on the stack; they must be
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 accessed through special macros and functions only. (Type objects are
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 exceptions to the first rule; the standard types are represented by
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
16 statically initialized type objects, although work on type/class unification
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
17 for Python 2.2 made it possible to have heap-allocated type objects too).
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 An object has a 'reference count' that is increased or decreased when a
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 pointer to the object is copied or deleted; when the reference count
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 reaches zero there are no references to the object left and it can be
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 removed from the heap.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 An object has a 'type' that determines what it represents and what kind
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 of data it contains. An object's type is fixed when it is created.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 Types themselves are represented as objects; an object contains a
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 pointer to the corresponding type object. The type itself has a type
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 pointer pointing to the object representing the type 'type', which
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 contains a pointer to itself!).
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 Objects do not float around in memory; once allocated an object keeps
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 the same size and address. Objects that must hold variable-size data
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 can contain pointers to variable-size parts of the object. Not all
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 objects of the same type have the same size; but the size cannot change
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 after allocation. (These restrictions are made so a reference to an
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 object can be simply a pointer -- moving an object would require
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 updating all the pointers, and changing an object's size would require
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 moving it if there was another object right next to it.)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
40 Objects are always accessed through pointers of the type 'PyObject *'.
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
41 The type 'PyObject' is a structure that only contains the reference count
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 and the type pointer. The actual memory allocated for an object
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 contains other data that can only be accessed after casting the pointer
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 to a pointer to a longer structure type. This longer type must start
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
45 with the reference count and type fields; the macro PyObject_HEAD should be
13620
5b727ab37092 Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents: 13464
diff changeset
46 used for this (to accommodate for future changes). The implementation
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 of a particular object type can cast the object pointer to the proper
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 type and back.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 A standard interface exists for objects that contain an array of items
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 whose size is determined when the object is allocated.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
54 /* Py_DEBUG implies Py_TRACE_REFS. */
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
55 #if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
56 #define Py_TRACE_REFS
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
57 #endif
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
59 /* Py_TRACE_REFS implies Py_REF_DEBUG. */
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
60 #if defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG)
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
61 #define Py_REF_DEBUG
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
62 #endif
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
63
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 /*
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 checking for a nil pointer; it should always be implemented except if
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
160
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 NB: the methods for certain type groups are now contained in separate
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 method blocks.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
279
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
293
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
494
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
570
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
656 objects that don't contain references to other objects or heap memory
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
663
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
673 Type objects should never be deallocated; the type pointer in an object
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
674 is not considered to be a reference to the type object, to save
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
675 complications in the deallocation function. (This is actually a
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
676 decision that's up to the implementer of each new type so if you want,
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
677 you can count such references to the type object.)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
678 */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
824
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
825 /*
31940
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
826 These are provided as conveniences to Python runtime embedders, so that
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
827 they can have object code that is not dependent on Python compilation flags.
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
828 */
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
829 PyAPI_FUNC(void) Py_IncRef(PyObject *);
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
830 PyAPI_FUNC(void) Py_DecRef(PyObject *);
059740d52ae5 Two new public API functions, Py_IncRef and Py_DecRef. Useful for
Thomas Heller <theller@ctypes.org>
parents: 30887
diff changeset
831
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
837 where NULL (nil) is not suitable (since NULL often means 'error').
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
873 More conventions
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
874 ================
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
875
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
876 Argument Checking
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
877 -----------------
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
878
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
879 Functions that take objects as arguments normally don't check for nil
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
880 arguments, but they do check the type of the argument, and return an
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
881 error if the function doesn't apply to the type.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
882
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
883 Failure Modes
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
884 -------------
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
885
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
886 Functions may fail for a variety of reasons, including running out of
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
887 memory. This is communicated to the caller in two ways: an error string
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
888 is set (see errors.h), and the function result differs: functions that
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
889 normally return a pointer return NULL for failure, functions returning
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
890 an integer return -1 (which could be a legal return value too!), and
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
895
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
896 Reference Counts
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
897 ----------------
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
898
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
899 It takes a while to get used to the proper usage of reference counts.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
900
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
905 don't increment the reference count of the object, since the most
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
909 the reference count, since most frequently the object is only looked at
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
916
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
921 times.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
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>
parents: 77651 78856
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 */