annotate Include/object.h @ 25135:0f0016632be4 legacy-trunk

_formatparam(), set_param(): RFC 2231 encoding support by Oleg Broytmann in SF patch #600096. Specifically, the former function now encodes the triplets, while the latter adds optional charset and language arguments.
author Barry Warsaw <barry@python.org>
date Fri, 06 Sep 2002 03:55:04 +0000
parents 71dca7c76fa2
children 244e8fbe4e20
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
1 #ifndef Py_OBJECT_H
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
2 #define Py_OBJECT_H
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
3 #ifdef __cplusplus
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
4 extern "C" {
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
5 #endif
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
6
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
7
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 /* Object and type object interface */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 /*
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 Objects are structures allocated on the heap. Special rules apply to
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 the use of objects to ensure they are properly garbage-collected.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 Objects are never allocated statically or on the stack; they must be
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 accessed through special macros and functions only. (Type objects are
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 exceptions to the first rule; the standard types are represented by
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
16 statically initialized type objects, although work on type/class unification
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
17 for Python 2.2 made it possible to have heap-allocated type objects too).
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 An object has a 'reference count' that is increased or decreased when a
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 pointer to the object is copied or deleted; when the reference count
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 reaches zero there are no references to the object left and it can be
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 removed from the heap.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 An object has a 'type' that determines what it represents and what kind
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 of data it contains. An object's type is fixed when it is created.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 Types themselves are represented as objects; an object contains a
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 pointer to the corresponding type object. The type itself has a type
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 pointer pointing to the object representing the type 'type', which
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 contains a pointer to itself!).
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 Objects do not float around in memory; once allocated an object keeps
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 the same size and address. Objects that must hold variable-size data
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 can contain pointers to variable-size parts of the object. Not all
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 objects of the same type have the same size; but the size cannot change
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 after allocation. (These restrictions are made so a reference to an
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 object can be simply a pointer -- moving an object would require
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 updating all the pointers, and changing an object's size would require
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 moving it if there was another object right next to it.)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
40 Objects are always accessed through pointers of the type 'PyObject *'.
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
41 The type 'PyObject' is a structure that only contains the reference count
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 and the type pointer. The actual memory allocated for an object
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 contains other data that can only be accessed after casting the pointer
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 to a pointer to a longer structure type. This longer type must start
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
45 with the reference count and type fields; the macro PyObject_HEAD should be
13620
5b727ab37092 Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents: 13464
diff changeset
46 used for this (to accommodate for future changes). The implementation
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 of a particular object type can cast the object pointer to the proper
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 type and back.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 A standard interface exists for objects that contain an array of items
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 whose size is determined when the object is allocated.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
54 /* Py_DEBUG implies Py_TRACE_REFS. */
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
55 #if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
56 #define Py_TRACE_REFS
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
57 #endif
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
59 /* Py_TRACE_REFS implies Py_REF_DEBUG. */
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
60 #if defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG)
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
61 #define Py_REF_DEBUG
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
62 #endif
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
63
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
64 #ifdef Py_TRACE_REFS
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
65 /* Define pointers to support a doubly-linked list of all live heap objects. */
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
66 #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
67 struct _object *_ob_next; \
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
68 struct _object *_ob_prev;
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
69
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
70 #define _PyObject_EXTRA_INIT 0, 0,
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
71
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
72 #else
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
73 #define _PyObject_HEAD_EXTRA
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
74 #define _PyObject_EXTRA_INIT
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
75 #endif
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
76
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
77 /* PyObject_HEAD defines the initial segment of every PyObject. */
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_HEAD \
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
79 _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
80 int ob_refcnt; \
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 struct _typeobject *ob_type;
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
82
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
83 #define PyObject_HEAD_INIT(type) \
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
84 _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
85 1, type,
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
87 /* 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
88 * 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
89 * 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
90 * 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
91 * 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
92 */
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
93 #define PyObject_VAR_HEAD \
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
94 PyObject_HEAD \
2058
508036dbba3b Added 1995 copyright.
Guido van Rossum <guido@python.org>
parents: 1794
diff changeset
95 int ob_size; /* Number of items in variable part */
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
96
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
97 /* 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
98 * 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
99 * 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
100 * 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
101 */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 typedef struct _object {
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
103 PyObject_HEAD
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
104 } PyObject;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 typedef struct {
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
107 PyObject_VAR_HEAD
5535
20c2b715188e Oops, another forgotten renaming: varobject -> PyVarObject.
Guido van Rossum <guido@python.org>
parents: 5410
diff changeset
108 } PyVarObject;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 /*
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 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
113 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
114 PyObject_NewVar()),
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
115 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
116 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
117 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
118 checking for a nil pointer; it should always be implemented except if
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 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
120 reach zero (e.g., for statically allocated type objects).
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
121
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 NB: the methods for certain type groups are now contained in separate
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 method blocks.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125
13418
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
126 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
127 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
128 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
129 typedef int (*inquiry)(PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
130 typedef int (*coercion)(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
131 typedef PyObject *(*intargfunc)(PyObject *, int);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
132 typedef PyObject *(*intintargfunc)(PyObject *, int, int);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
133 typedef int(*intobjargproc)(PyObject *, int, PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
134 typedef int(*intintobjargproc)(PyObject *, int, int, PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
135 typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
136 typedef int (*getreadbufferproc)(PyObject *, int, void **);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
137 typedef int (*getwritebufferproc)(PyObject *, int, void **);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
138 typedef int (*getsegcountproc)(PyObject *, int *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
139 typedef int (*getcharbufferproc)(PyObject *, int, const char **);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
140 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
141 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
142 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
143
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
144 typedef struct {
15938
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
145 /* For numbers without flag bit Py_TPFLAGS_CHECKTYPES set, all
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
146 arguments are guaranteed to be of the object's type (modulo
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
147 coercion hacks -- i.e. if the type's coercion function
15938
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
148 returns other types, then these are allowed as well). Numbers that
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
149 have the Py_TPFLAGS_CHECKTYPES flag bit set should check *both*
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
150 arguments for proper type and implement the necessary conversions
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
151 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
152
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
153 binaryfunc nb_add;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
154 binaryfunc nb_subtract;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
155 binaryfunc nb_multiply;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
156 binaryfunc nb_divide;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
157 binaryfunc nb_remainder;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
158 binaryfunc nb_divmod;
1770
b0dca2972b2b * Objects/{int,long,float}object.c, Include/object.h,
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
159 ternaryfunc nb_power;
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
160 unaryfunc nb_negative;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
161 unaryfunc nb_positive;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
162 unaryfunc nb_absolute;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
163 inquiry nb_nonzero;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
164 unaryfunc nb_invert;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
165 binaryfunc nb_lshift;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
166 binaryfunc nb_rshift;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
167 binaryfunc nb_and;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
168 binaryfunc nb_xor;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
169 binaryfunc nb_or;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
170 coercion nb_coerce;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
171 unaryfunc nb_int;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
172 unaryfunc nb_long;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
173 unaryfunc nb_float;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
174 unaryfunc nb_oct;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
175 unaryfunc nb_hex;
19283
b865cd5c1925 Added comments before recently added/assigned slots in the type object,
Fred Drake <fdrake@acm.org>
parents: 19134
diff changeset
176 /* Added in release 2.0 */
14162
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
177 binaryfunc nb_inplace_add;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
178 binaryfunc nb_inplace_subtract;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
179 binaryfunc nb_inplace_multiply;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
180 binaryfunc nb_inplace_divide;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
181 binaryfunc nb_inplace_remainder;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
182 ternaryfunc nb_inplace_power;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
183 binaryfunc nb_inplace_lshift;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
184 binaryfunc nb_inplace_rshift;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
185 binaryfunc nb_inplace_and;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
186 binaryfunc nb_inplace_xor;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
187 binaryfunc nb_inplace_or;
19051
f20727cc3d0f Implement PEP 238 in its (almost) full glory.
Guido van Rossum <guido@python.org>
parents: 19040
diff changeset
188
19283
b865cd5c1925 Added comments before recently added/assigned slots in the type object,
Fred Drake <fdrake@acm.org>
parents: 19134
diff changeset
189 /* Added in release 2.2 */
19051
f20727cc3d0f Implement PEP 238 in its (almost) full glory.
Guido van Rossum <guido@python.org>
parents: 19040
diff changeset
190 /* The following require the Py_TPFLAGS_HAVE_CLASS flag */
f20727cc3d0f Implement PEP 238 in its (almost) full glory.
Guido van Rossum <guido@python.org>
parents: 19040
diff changeset
191 binaryfunc nb_floor_divide;
f20727cc3d0f Implement PEP 238 in its (almost) full glory.
Guido van Rossum <guido@python.org>
parents: 19040
diff changeset
192 binaryfunc nb_true_divide;
f20727cc3d0f Implement PEP 238 in its (almost) full glory.
Guido van Rossum <guido@python.org>
parents: 19040
diff changeset
193 binaryfunc nb_inplace_floor_divide;
f20727cc3d0f Implement PEP 238 in its (almost) full glory.
Guido van Rossum <guido@python.org>
parents: 19040
diff changeset
194 binaryfunc nb_inplace_true_divide;
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
195 } PyNumberMethods;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
196
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 typedef struct {
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
198 inquiry sq_length;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
199 binaryfunc sq_concat;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
200 intargfunc sq_repeat;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
201 intargfunc sq_item;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
202 intintargfunc sq_slice;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
203 intobjargproc sq_ass_item;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
204 intintobjargproc sq_ass_slice;
11867
06104bcf06a6 Patch by Mozhe Zadka, for __contains__ (overloading 'in'). This adds
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
205 objobjproc sq_contains;
19283
b865cd5c1925 Added comments before recently added/assigned slots in the type object,
Fred Drake <fdrake@acm.org>
parents: 19134
diff changeset
206 /* Added in release 2.0 */
14162
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
207 binaryfunc sq_inplace_concat;
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
208 intargfunc 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
209 } PySequenceMethods;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
210
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 typedef struct {
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
212 inquiry mp_length;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
213 binaryfunc mp_subscript;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
214 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
215 } PyMappingMethods;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
216
5410
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
217 typedef struct {
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
218 getreadbufferproc bf_getreadbuffer;
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
219 getwritebufferproc bf_getwritebuffer;
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
220 getsegcountproc bf_getsegcount;
9304
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
221 getcharbufferproc bf_getcharbuffer;
5410
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
222 } PyBufferProcs;
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
223
5410
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
224
22969
3100ba26913c Change the type of the tp_free from 'destructor' to 'freefunc'.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22785
diff changeset
225 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
226 typedef void (*destructor)(PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
227 typedef int (*printfunc)(PyObject *, FILE *, int);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
228 typedef PyObject *(*getattrfunc)(PyObject *, char *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
229 typedef PyObject *(*getattrofunc)(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
230 typedef int (*setattrfunc)(PyObject *, char *, PyObject *);
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 (*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
232 typedef int (*cmpfunc)(PyObject *, PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
233 typedef PyObject *(*reprfunc)(PyObject *);
85520c220067 Got RID of redundant coercions in longobject.c (as spotted by Greg
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
234 typedef long (*hashfunc)(PyObject *);
15938
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
235 typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int);
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
236 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
237 typedef PyObject *(*iternextfunc) (PyObject *);
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
238 typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *);
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
239 typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *);
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
240 typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
241 typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *);
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
242 typedef PyObject *(*allocfunc)(struct _typeobject *, int);
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
243
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 typedef struct _typeobject {
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
245 PyObject_VAR_HEAD
21313
91dd223829c6 Patch supplied by Burton Radons for his own SF bug #487390: Modifying
Guido van Rossum <guido@python.org>
parents: 20725
diff changeset
246 char *tp_name; /* For printing, in format "<module>.<name>" */
2058
508036dbba3b Added 1995 copyright.
Guido van Rossum <guido@python.org>
parents: 1794
diff changeset
247 int 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
248
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 /* 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
250
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
251 destructor tp_dealloc;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
252 printfunc tp_print;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
253 getattrfunc tp_getattr;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
254 setattrfunc tp_setattr;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
255 cmpfunc tp_compare;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
256 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
257
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
258 /* 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
259
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
260 PyNumberMethods *tp_as_number;
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
261 PySequenceMethods *tp_as_sequence;
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
262 PyMappingMethods *tp_as_mapping;
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1049
diff changeset
263
12026
8dc0918ae2c2 Updated comment: in PyTypeObject:
Fred Drake <fdrake@acm.org>
parents: 11999
diff changeset
264 /* 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
265
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
266 hashfunc tp_hash;
2841
64928f6a8e80 keyword arguments and faster function calls
Guido van Rossum <guido@python.org>
parents: 2669
diff changeset
267 ternaryfunc tp_call;
2071
048e91a59c75 new tp_str and tp_doc members in type object
Guido van Rossum <guido@python.org>
parents: 2058
diff changeset
268 reprfunc tp_str;
3983
44902516614a Added tp_getattro, tp_setattro (Sjoerd)
Guido van Rossum <guido@python.org>
parents: 3605
diff changeset
269 getattrofunc tp_getattro;
44902516614a Added tp_getattro, tp_setattro (Sjoerd)
Guido van Rossum <guido@python.org>
parents: 3605
diff changeset
270 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
271
5410
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
272 /* Functions to access object as input/output buffer */
3b2fda31bf1b Checkin of Jack's buffer mods.
Guido van Rossum <guido@python.org>
parents: 4839
diff changeset
273 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
274
9304
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
275 /* Flags to define presence of optional/expanded features */
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
276 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
277
048e91a59c75 new tp_str and tp_doc members in type object
Guido van Rossum <guido@python.org>
parents: 2058
diff changeset
278 char *tp_doc; /* Documentation string */
048e91a59c75 new tp_str and tp_doc members in type object
Guido van Rossum <guido@python.org>
parents: 2058
diff changeset
279
19283
b865cd5c1925 Added comments before recently added/assigned slots in the type object,
Fred Drake <fdrake@acm.org>
parents: 19134
diff changeset
280 /* Assigned meaning in release 2.0 */
12990
e615596c5c47 Round 1 of Neil Schemenauer's GC patches:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12481
diff changeset
281 /* call function for all accessible objects */
e615596c5c47 Round 1 of Neil Schemenauer's GC patches:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12481
diff changeset
282 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
283
12990
e615596c5c47 Round 1 of Neil Schemenauer's GC patches:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12481
diff changeset
284 /* delete references to contained objects */
e615596c5c47 Round 1 of Neil Schemenauer's GC patches:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12481
diff changeset
285 inquiry tp_clear;
e615596c5c47 Round 1 of Neil Schemenauer's GC patches:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12481
diff changeset
286
19283
b865cd5c1925 Added comments before recently added/assigned slots in the type object,
Fred Drake <fdrake@acm.org>
parents: 19134
diff changeset
287 /* Assigned meaning in release 2.1 */
15938
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
288 /* rich comparisons */
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
289 richcmpfunc tp_richcompare;
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
290
16385
1fb6672b20ef PEP 205, Weak References -- initial checkin.
Fred Drake <fdrake@acm.org>
parents: 16235
diff changeset
291 /* weak reference enabler */
1fb6672b20ef PEP 205, Weak References -- initial checkin.
Fred Drake <fdrake@acm.org>
parents: 16235
diff changeset
292 long 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
293
19283
b865cd5c1925 Added comments before recently added/assigned slots in the type object,
Fred Drake <fdrake@acm.org>
parents: 19134
diff changeset
294 /* Added in release 2.2 */
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
295 /* Iterators */
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
296 getiterfunc tp_iter;
17617
aac65f50df6f Mondo changes to the iterator stuff, without changing how Python code
Guido van Rossum <guido@python.org>
parents: 17597
diff changeset
297 iternextfunc tp_iternext;
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
298
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
299 /* Attribute descriptor and subclassing stuff */
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
300 struct PyMethodDef *tp_methods;
20012
3faabf54b8b8 Add optional docstrings to member descriptors. For backwards
Guido van Rossum <guido@python.org>
parents: 19970
diff changeset
301 struct PyMemberDef *tp_members;
20015
ca7af2a5d915 Add optional docstrings to getset descriptors. Fortunately, there's
Guido van Rossum <guido@python.org>
parents: 20012
diff changeset
302 struct PyGetSetDef *tp_getset;
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
303 struct _typeobject *tp_base;
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
304 PyObject *tp_dict;
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
305 descrgetfunc tp_descr_get;
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
306 descrsetfunc tp_descr_set;
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
307 long tp_dictoffset;
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
308 initproc tp_init;
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
309 allocfunc tp_alloc;
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
310 newfunc tp_new;
22969
3100ba26913c Change the type of the tp_free from 'destructor' to 'freefunc'.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22785
diff changeset
311 freefunc tp_free; /* Low-level free-memory routine */
20220
0b99174d6b17 Add Garbage Collection support to new-style classes (not yet to their
Guido van Rossum <guido@python.org>
parents: 20015
diff changeset
312 inquiry tp_is_gc; /* For PyObject_IS_GC */
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
313 PyObject *tp_bases;
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
314 PyObject *tp_mro; /* method resolution order */
20445
27ab0327b2fc Get rid of __defined__ and tp_defined -- there's no need to
Guido van Rossum <guido@python.org>
parents: 20439
diff changeset
315 PyObject *tp_cache;
20315
7b41f7a2e528 Keep track of a type's subclasses (subtypes), in tp_subclasses, which
Guido van Rossum <guido@python.org>
parents: 20284
diff changeset
316 PyObject *tp_subclasses;
7b41f7a2e528 Keep track of a type's subclasses (subtypes), in tp_subclasses, which
Guido van Rossum <guido@python.org>
parents: 20284
diff changeset
317 PyObject *tp_weaklist;
24678
71dca7c76fa2 A modest speedup of object deallocation. call_finalizer() did rather
Guido van Rossum <guido@python.org>
parents: 24654
diff changeset
318 destructor tp_del;
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
319
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1329
diff changeset
320 #ifdef COUNT_ALLOCS
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
321 /* these must be last and never explicitly initialized */
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
322 int tp_allocs;
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
323 int tp_frees;
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1329
diff changeset
324 int tp_maxalloc;
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1329
diff changeset
325 struct _typeobject *tp_next;
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1329
diff changeset
326 #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
327 } PyTypeObject;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
328
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
329
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
330 /* 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
331 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
332 #define PyObject_TypeCheck(ob, tp) \
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
333 ((ob)->ob_type == (tp) || PyType_IsSubtype((ob)->ob_type, (tp)))
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
334
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
335 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
336 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
337 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
338
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
339 #define PyType_Check(op) PyObject_TypeCheck(op, &PyType_Type)
20725
7130750a6222 SF bug #475327: type() produces incorrect error msg
Tim Peters <tim.peters@gmail.com>
parents: 20445
diff changeset
340 #define PyType_CheckExact(op) ((op)->ob_type == &PyType_Type)
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
341
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
342 PyAPI_FUNC(int) PyType_Ready(PyTypeObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
343 PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, int);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
344 PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *,
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
345 PyObject *, PyObject *);
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
346 PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
347
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
348 /* Generic operations on objects */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
349 PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
350 PyAPI_FUNC(void) _PyObject_Dump(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
351 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
352 PyAPI_FUNC(PyObject *) PyObject_Str(PyObject *);
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19283
diff changeset
353 #ifdef Py_USING_UNICODE
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
354 PyAPI_FUNC(PyObject *) PyObject_Unicode(PyObject *);
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19283
diff changeset
355 #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
356 PyAPI_FUNC(int) PyObject_Compare(PyObject *, PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
357 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
358 PyAPI_FUNC(int) PyObject_RichCompareBool(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
359 PyAPI_FUNC(PyObject *) PyObject_GetAttrString(PyObject *, char *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
360 PyAPI_FUNC(int) PyObject_SetAttrString(PyObject *, char *, PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
361 PyAPI_FUNC(int) PyObject_HasAttrString(PyObject *, char *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
362 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
363 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
364 PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
365 PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
366 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
367 PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *,
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
368 PyObject *, PyObject *);
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
369 PyAPI_FUNC(long) PyObject_Hash(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
370 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
371 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
372 PyAPI_FUNC(int) PyCallable_Check(PyObject *);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
373 PyAPI_FUNC(int) PyNumber_Coerce(PyObject **, PyObject **);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
374 PyAPI_FUNC(int) PyNumber_CoerceEx(PyObject **, PyObject **);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
375
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
376 PyAPI_FUNC(void) PyObject_ClearWeakRefs(PyObject *);
16385
1fb6672b20ef PEP 205, Weak References -- initial checkin.
Fred Drake <fdrake@acm.org>
parents: 16235
diff changeset
377
19970
f761cab28c1c Hopefully fix 3-way comparisons. This unfortunately adds yet another
Guido van Rossum <guido@python.org>
parents: 19705
diff changeset
378 /* A slot function whose address we need to compare */
f761cab28c1c Hopefully fix 3-way comparisons. This unfortunately adds yet another
Guido van Rossum <guido@python.org>
parents: 19705
diff changeset
379 extern int _PyObject_SlotCompare(PyObject *, PyObject *);
f761cab28c1c Hopefully fix 3-way comparisons. This unfortunately adds yet another
Guido van Rossum <guido@python.org>
parents: 19705
diff changeset
380
f761cab28c1c Hopefully fix 3-way comparisons. This unfortunately adds yet another
Guido van Rossum <guido@python.org>
parents: 19705
diff changeset
381
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
382 /* PyObject_Dir(obj) acts like Python __builtin__.dir(obj), returning a
b7f6fbc087a7 At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents: 19576
diff changeset
383 list of strings. PyObject_Dir(NULL) is like __builtin__.dir(),
b7f6fbc087a7 At Guido's suggestion, here's a new C API function, PyObject_Dir(), like
Tim Peters <tim.peters@gmail.com>
parents: 19576
diff changeset
384 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
385 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
386 */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
387 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
388
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
389
7983
068303f925ea Add prototypes for Py_Repr{Enter,Leave}.
Guido van Rossum <guido@python.org>
parents: 7935
diff changeset
390 /* 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
391 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
392 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
393
13141
cca84745da3e This patch addresses two main issues: (1) There exist some non-fatal
Fred Drake <fdrake@acm.org>
parents: 12993
diff changeset
394 /* Helpers for hash functions */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
395 PyAPI_FUNC(long) _Py_HashDouble(double);
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
396 PyAPI_FUNC(long) _Py_HashPointer(void*);
13141
cca84745da3e This patch addresses two main issues: (1) There exist some non-fatal
Fred Drake <fdrake@acm.org>
parents: 12993
diff changeset
397
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
398 /* Helper for passing objects to printf and the like */
f700e6b8de1f Undo recent change that banned using import to bind a global, as per
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16385
diff changeset
399 #define PyObject_REPR(obj) PyString_AS_STRING(PyObject_Repr(obj))
f700e6b8de1f Undo recent change that banned using import to bind a global, as per
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16385
diff changeset
400
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
401 /* Flag bits for printing: */
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
402 #define Py_PRINT_RAW 1 /* No string quotes etc. */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
403
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
404 /*
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
405 `Type flags (tp_flags)
9304
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
406
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
407 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
408 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
409 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
410 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
411 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
412
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
413 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
414 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
415 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
416
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
417 Python 1.5.2 introduced the bf_getcharbuffer slot into PyBufferProcs.
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
418
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
419 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
420
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
421 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
422 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
423 */
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
424
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
425 /* PyBufferProcs contains bf_getcharbuffer */
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
426 #define Py_TPFLAGS_HAVE_GETCHARBUFFER (1L<<0)
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
427
11867
06104bcf06a6 Patch by Mozhe Zadka, for __contains__ (overloading 'in'). This adds
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
428 /* PySequenceMethods contains sq_contains */
06104bcf06a6 Patch by Mozhe Zadka, for __contains__ (overloading 'in'). This adds
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
429 #define Py_TPFLAGS_HAVE_SEQUENCE_IN (1L<<1)
06104bcf06a6 Patch by Mozhe Zadka, for __contains__ (overloading 'in'). This adds
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
430
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
431 /* This is here for backwards compatibility. Extensions that use the old GC
b67309407cfc Change the GC type flag since the API has changed. Allow types using
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 19470
diff changeset
432 * API will still compile but the objects will not be tracked by the GC. */
b67309407cfc Change the GC type flag since the API has changed. Allow types using
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 19470
diff changeset
433 #define Py_TPFLAGS_GC 0 /* used to be (1L<<2) */
12993
8f79c5b69e0a part 2 of Neil Schemenauer's GC patches:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12990
diff changeset
434
14162
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
435 /* PySequenceMethods and PyNumberMethods contain in-place operators */
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
436 #define Py_TPFLAGS_HAVE_INPLACEOPS (1L<<3)
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
437
15716
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
438 /* PyNumberMethods do their own coercion */
15938
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
439 #define Py_TPFLAGS_CHECKTYPES (1L<<4)
15716
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
440
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
441 /* tp_richcompare is defined */
16235
5c60184f7f52 Add a flag to indicate the presence of the tp_richcompare field, and
Guido van Rossum <guido@python.org>
parents: 16195
diff changeset
442 #define Py_TPFLAGS_HAVE_RICHCOMPARE (1L<<5)
5c60184f7f52 Add a flag to indicate the presence of the tp_richcompare field, and
Guido van Rossum <guido@python.org>
parents: 16195
diff changeset
443
16420
38204093d9c9 Use a type flag to determine the applicability of the tp_weaklistoffset
Fred Drake <fdrake@acm.org>
parents: 16394
diff changeset
444 /* Objects which are weakly referencable if their tp_weaklistoffset is >0 */
38204093d9c9 Use a type flag to determine the applicability of the tp_weaklistoffset
Fred Drake <fdrake@acm.org>
parents: 16394
diff changeset
445 #define Py_TPFLAGS_HAVE_WEAKREFS (1L<<6)
38204093d9c9 Use a type flag to determine the applicability of the tp_weaklistoffset
Fred Drake <fdrake@acm.org>
parents: 16394
diff changeset
446
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
447 /* tp_iter is defined */
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
448 #define Py_TPFLAGS_HAVE_ITER (1L<<7)
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
449
19051
f20727cc3d0f Implement PEP 238 in its (almost) full glory.
Guido van Rossum <guido@python.org>
parents: 19040
diff changeset
450 /* New members introduced by Python 2.2 exist */
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
451 #define Py_TPFLAGS_HAVE_CLASS (1L<<8)
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
452
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
453 /* Set if the type object is dynamically allocated */
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
454 #define Py_TPFLAGS_HEAPTYPE (1L<<9)
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
455
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
456 /* Set if the type allows subclassing */
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
457 #define Py_TPFLAGS_BASETYPE (1L<<10)
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
458
19134
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
459 /* Set if the type is 'ready' -- fully initialized */
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
460 #define Py_TPFLAGS_READY (1L<<12)
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
461
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
462 /* Set while the type is being 'readied', to prevent recursive ready calls */
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
463 #define Py_TPFLAGS_READYING (1L<<13)
d98121930e70 Add new flags for PyType_Ready(): READY to explicitly indicate the
Guido van Rossum <guido@python.org>
parents: 19051
diff changeset
464
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
465 /* Objects support garbage collection (see objimp.h) */
b67309407cfc Change the GC type flag since the API has changed. Allow types using
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 19470
diff changeset
466 #define Py_TPFLAGS_HAVE_GC (1L<<14)
b67309407cfc Change the GC type flag since the API has changed. Allow types using
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 19470
diff changeset
467
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
468 #define Py_TPFLAGS_DEFAULT ( \
5c60184f7f52 Add a flag to indicate the presence of the tp_richcompare field, and
Guido van Rossum <guido@python.org>
parents: 16195
diff changeset
469 Py_TPFLAGS_HAVE_GETCHARBUFFER | \
14162
27d7d89c774b The real suport for augmented assignment: new opcodes, new PyNumber and
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
470 Py_TPFLAGS_HAVE_SEQUENCE_IN | \
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
471 Py_TPFLAGS_HAVE_INPLACEOPS | \
5c60184f7f52 Add a flag to indicate the presence of the tp_richcompare field, and
Guido van Rossum <guido@python.org>
parents: 16195
diff changeset
472 Py_TPFLAGS_HAVE_RICHCOMPARE | \
16420
38204093d9c9 Use a type flag to determine the applicability of the tp_weaklistoffset
Fred Drake <fdrake@acm.org>
parents: 16394
diff changeset
473 Py_TPFLAGS_HAVE_WEAKREFS | \
17597
32e7d0898eab Iterators phase 1. This comprises:
Guido van Rossum <guido@python.org>
parents: 16768
diff changeset
474 Py_TPFLAGS_HAVE_ITER | \
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 17617
diff changeset
475 Py_TPFLAGS_HAVE_CLASS | \
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
476 0)
9304
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
477
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
478 #define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0)
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
479
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
480
cc3e14837379 Changes by Greg Stein (code) and GvR (design).
Guido van Rossum <guido@python.org>
parents: 8124
diff changeset
481 /*
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
482 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
483 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
484 the refcount falls to 0; for
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
485 objects that don't contain references to other objects or heap memory
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
486 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
487 wherever a void expression is allowed. The argument must not be a
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
488 NIL pointer. If it may be NIL, use Py_XINCREF/Py_XDECREF instead.
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
489 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
490 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
491 bookkeeping appropriate to the special build.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
492
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
493 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
494 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
495 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
496 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
497 about 2**31 references to an object.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
498
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
499 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
500 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
501 XXX can and should be deallocated.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
502 Type objects should never be deallocated; the type pointer in an object
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
503 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
504 complications in the deallocation function. (This is actually a
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
505 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
506 you can count such references to the type object.)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
507
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
508 *** WARNING*** The Py_DECREF macro must have a side-effect-free argument
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
509 since it may evaluate its argument multiple times. (The alternative
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
510 would be to mace it a proper function or assign it to a global temporary
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
511 variable first, both of which are slower; and in a multi-threaded
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
512 environment the global variable trick is not safe.)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
513 */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
514
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
515 /* 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
516 * 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
517 * 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
518 * 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
519 * 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
520 * 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
521 * 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
522 * #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
523 */
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
524 #ifdef Py_REF_DEBUG
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_DATA(long) _Py_RefTotal;
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(void) _Py_NegativeRefcount(const char *fname,
24155
9456a2ccda61 The Py_REF_DEBUG/COUNT_ALLOCS/Py_TRACE_REFS macro minefield: added
Tim Peters <tim.peters@gmail.com>
parents: 24126
diff changeset
527 int lineno, PyObject *op);
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
528 #define _Py_INC_REFTOTAL _Py_RefTotal++
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
529 #define _Py_DEC_REFTOTAL _Py_RefTotal--
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
530 #define _Py_REF_DEBUG_COMMA ,
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
531 #define _Py_CHECK_REFCNT(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
532 { if ((OP)->ob_refcnt < 0) \
9456a2ccda61 The Py_REF_DEBUG/COUNT_ALLOCS/Py_TRACE_REFS macro minefield: added
Tim Peters <tim.peters@gmail.com>
parents: 24126
diff changeset
533 _Py_NegativeRefcount(__FILE__, __LINE__, \
9456a2ccda61 The Py_REF_DEBUG/COUNT_ALLOCS/Py_TRACE_REFS macro minefield: added
Tim Peters <tim.peters@gmail.com>
parents: 24126
diff changeset
534 (PyObject *)(OP)); \
9456a2ccda61 The Py_REF_DEBUG/COUNT_ALLOCS/Py_TRACE_REFS macro minefield: added
Tim Peters <tim.peters@gmail.com>
parents: 24126
diff changeset
535 }
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
536 #else
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
537 #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
538 #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
539 #define _Py_REF_DEBUG_COMMA
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
540 #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
541 #endif /* Py_REF_DEBUG */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
542
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1329
diff changeset
543 #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
544 PyAPI_FUNC(void) inc_count(PyTypeObject *);
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
545 #define _Py_INC_TPALLOCS(OP) inc_count((OP)->ob_type)
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
546 #define _Py_INC_TPFREES(OP) (OP)->ob_type->tp_frees++
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
547 #define _Py_DEC_TPFREES(OP) (OP)->ob_type->tp_frees--
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
548 #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
549 #else
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
550 #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
551 #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
552 #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
553 #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
554 #endif /* COUNT_ALLOCS */
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1329
diff changeset
555
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
556 #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
557 /* 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
558 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
559 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
560 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
561 PyAPI_FUNC(void) _Py_PrintReferences(FILE *);
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(void) _Py_ResetReferences(void);
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
563
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
564 #else
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
565 /* 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
566 * inline.
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
567 */
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
568 #define _Py_NewReference(op) ( \
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
569 _Py_INC_TPALLOCS(op) _Py_COUNT_ALLOCS_COMMA \
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
570 _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
571 (op)->ob_refcnt = 1)
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
572
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
573 #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
574
24171
5e4b8d1e9fd6 Uglified the new Py_REF_DEBUG (etc) lexical helper macro definitions so
Tim Peters <tim.peters@gmail.com>
parents: 24155
diff changeset
575 #define _Py_Dealloc(op) ( \
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
576 _Py_INC_TPFREES(op) _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
577 (*(op)->ob_type->tp_dealloc)((PyObject *)(op)))
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
578 #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
579
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
580 #define Py_INCREF(op) ( \
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
581 _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \
24126
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
582 (op)->ob_refcnt++)
fdf80e04e4bb Rearranged and added comments to object.h, to clarify many things
Tim Peters <tim.peters@gmail.com>
parents: 24122
diff changeset
583
24184
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
584 #define Py_DECREF(op) \
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
585 if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
586 --(op)->ob_refcnt != 0) \
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
587 _Py_CHECK_REFCNT(op) \
c4dcb80f48ea object.h special-build macro minefield: renamed all the new lexical
Tim Peters <tim.peters@gmail.com>
parents: 24171
diff changeset
588 else \
5943
ac877c4768e1 Add a cast to the call to _Py_Dealloc in the expanded version of
Guido van Rossum <guido@python.org>
parents: 5535
diff changeset
589 _Py_Dealloc((PyObject *)(op))
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
590
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
591 /* Macros to use in case the object pointer may be NULL: */
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
592 #define Py_XINCREF(op) if ((op) == NULL) ; else Py_INCREF(op)
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
593 #define Py_XDECREF(op) if ((op) == NULL) ; else Py_DECREF(op)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
594
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
595 /*
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
596 _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
597 where NULL (nil) is not suitable (since NULL often means 'error').
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
598
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
599 Don't forget to apply Py_INCREF() when returning this value!!!
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
600 */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
601 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
602 #define Py_None (&_Py_NoneStruct)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
603
15716
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
604 /*
362e53f43dd2 - Add nb_cmp slot for new style nubmers.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 14497
diff changeset
605 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
606 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
607 */
24420
36e2fd3f08f7 Excise DL_IMPORT/EXPORT from object.h, and related files. This patch
Mark Hammond <mhammond@skippinet.com.au>
parents: 24280
diff changeset
608 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
609 #define Py_NotImplemented (&_Py_NotImplementedStruct)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
610
15938
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
611 /* Rich comparison opcodes */
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
612 #define Py_LT 0
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
613 #define Py_LE 1
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
614 #define Py_EQ 2
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
615 #define Py_NE 3
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
616 #define Py_GT 4
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
617 #define Py_GE 5
8fd221aed357 Introduction to rich comparisons:
Guido van Rossum <guido@python.org>
parents: 15716
diff changeset
618
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
619 /*
24280
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
620 Define staticforward and statichere for source compatibility with old
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
621 C extensions.
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
622
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
623 The staticforward define was needed to support certain broken C
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
624 compilers (notably SCO ODT 3.0, perhaps early AIX as well) botched the
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
625 static keyword when it was used with a forward declaration of a static
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
626 initialized structure. Standard C allows the forward declaration with
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
627 static, and we've decided to stop catering to broken C compilers.
1598a1e473e2 staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24184
diff changeset
628 (In fact, we expect that the compilers are all fixed eight years later.)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
629 */
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
630
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
631 #define staticforward static
2422
f4f71ebea53f change in staticforward -- added statichere
Guido van Rossum <guido@python.org>
parents: 2364
diff changeset
632 #define statichere static
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
633
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
634
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1400
diff changeset
635 /*
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
636 More conventions
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
637 ================
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
638
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
639 Argument Checking
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
640 -----------------
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
641
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
642 Functions that take objects as arguments normally don't check for nil
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
643 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
644 error if the function doesn't apply to the type.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
645
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
646 Failure Modes
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
647 -------------
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
648
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
649 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
650 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
651 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
652 normally return a pointer return NULL for failure, functions returning
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 68
diff changeset
653 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
654 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
655 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
656 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
657 the error on to its caller.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
658
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
659 Reference Counts
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
660 ----------------
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
661
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
662 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
663
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
664 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
665 objects must be stored somewhere or destroyed again with Py_DECREF().
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
666 Functions that 'store' objects such as PyTuple_SetItem() and
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
667 PyDict_SetItemString()
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
668 don't increment the reference count of the object, since the most
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
669 frequent use is to store a fresh object. Functions that 'retrieve'
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
670 objects such as PyTuple_GetItem() and PyDict_GetItemString() also
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
671 don't increment
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
672 the reference count, since most frequently the object is only looked at
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
673 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
674 must call Py_INCREF() explicitly.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
675
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2071
diff changeset
676 NOTE: functions that 'consume' a reference count like
6244
5ab21d1b61d8 Fix in trailing comment: PyDict_SetItemString() does *not* consume a reference
Fred Drake <fdrake@acm.org>
parents: 5943
diff changeset
677 PyList_SetItemString() even consume the reference if the object wasn't
5ab21d1b61d8 Fix in trailing comment: PyDict_SetItemString() does *not* consume a reference
Fred Drake <fdrake@acm.org>
parents: 5943
diff changeset
678 stored, to simplify error handling.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
679
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
680 It seems attractive to make other functions that take an object as
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
681 argument consume a reference count; however this may quickly get
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
682 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
683 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
684 times.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
685 */
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
686
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
687
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
688 /* 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
689
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
690 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
691 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
692 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
693 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
694
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
695 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
696 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
697
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
698 static void
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
699 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
700 {
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
701 ... declarations go here ...
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
702
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
703 PyObject_GC_UnTrack(p); // must untrack first
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
704 Py_TRASHCAN_SAFE_BEGIN(p)
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
705 ... The body of the deallocator goes here, including all calls ...
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
706 ... to Py_DECREF on contained objects. ...
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
707 Py_TRASHCAN_SAFE_END(p)
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
708 }
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
709
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
710 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
711 "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
712 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
713 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
714
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
715 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
716 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
717 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
718 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
719 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
720 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
721
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
722 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
723 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
724 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
725 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
726 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
727 */
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
728
24420
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) _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
730 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
731 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
732 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
733
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
734 #define PyTrash_UNWIND_LEVEL 50
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
735
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
736 #define Py_TRASHCAN_SAFE_BEGIN(op) \
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
737 if (_PyTrash_delete_nesting < PyTrash_UNWIND_LEVEL) { \
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
738 ++_PyTrash_delete_nesting;
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
739 /* The body of the deallocator is here. */
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
740 #define Py_TRASHCAN_SAFE_END(op) \
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
741 --_PyTrash_delete_nesting; \
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
742 if (_PyTrash_delete_later && _PyTrash_delete_nesting <= 0) \
12481
a8898a172fe2 Christian Tismer -- total rewrite on trashcan code.
Guido van Rossum <guido@python.org>
parents: 12406
diff changeset
743 _PyTrash_destroy_chain(); \
11999
c94247b5c355 Christian Tismer's "trashcan" patch:
Guido van Rossum <guido@python.org>
parents: 11891
diff changeset
744 } \
24122
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
745 else \
d332484e394a Trashcan cleanup: Now that cyclic gc is always there, the trashcan
Tim Peters <tim.peters@gmail.com>
parents: 24121
diff changeset
746 _PyTrash_deposit_object((PyObject*)op);
12481
a8898a172fe2 Christian Tismer -- total rewrite on trashcan code.
Guido van Rossum <guido@python.org>
parents: 12406
diff changeset
747
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
748 #ifdef __cplusplus
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
749 }
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
750 #endif
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1324
diff changeset
751 #endif /* !Py_OBJECT_H */