blob: d63ace17c35658bb993dd004de807dce08fb6666 [file] [log] [blame]
Guido van Rossuma3309961993-07-28 09:05:47 +00001#ifndef Py_OBJECT_H
2#define Py_OBJECT_H
3#ifdef __cplusplus
4extern "C" {
5#endif
6
Guido van Rossumf70e43a1991-02-19 12:39:46 +00007/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00008Copyright (c) 2000, BeOpen.com.
9Copyright (c) 1995-2000, Corporation for National Research Initiatives.
10Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
11All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000012
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000013See the file "Misc/COPYRIGHT" for information on usage and
14redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000015******************************************************************/
16
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000017/* Object and type object interface */
18
19/*
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000020Objects are structures allocated on the heap. Special rules apply to
21the use of objects to ensure they are properly garbage-collected.
22Objects are never allocated statically or on the stack; they must be
23accessed through special macros and functions only. (Type objects are
24exceptions to the first rule; the standard types are represented by
25statically initialized type objects.)
26
27An object has a 'reference count' that is increased or decreased when a
28pointer to the object is copied or deleted; when the reference count
29reaches zero there are no references to the object left and it can be
30removed from the heap.
31
32An object has a 'type' that determines what it represents and what kind
33of data it contains. An object's type is fixed when it is created.
34Types themselves are represented as objects; an object contains a
35pointer to the corresponding type object. The type itself has a type
36pointer pointing to the object representing the type 'type', which
37contains a pointer to itself!).
38
39Objects do not float around in memory; once allocated an object keeps
40the same size and address. Objects that must hold variable-size data
41can contain pointers to variable-size parts of the object. Not all
42objects of the same type have the same size; but the size cannot change
43after allocation. (These restrictions are made so a reference to an
44object can be simply a pointer -- moving an object would require
45updating all the pointers, and changing an object's size would require
46moving it if there was another object right next to it.)
47
Guido van Rossumcaa63801995-01-12 11:45:45 +000048Objects are always accessed through pointers of the type 'PyObject *'.
49The type 'PyObject' is a structure that only contains the reference count
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000050and the type pointer. The actual memory allocated for an object
51contains other data that can only be accessed after casting the pointer
52to a pointer to a longer structure type. This longer type must start
Guido van Rossumcaa63801995-01-12 11:45:45 +000053with the reference count and type fields; the macro PyObject_HEAD should be
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000054used for this (to accomodate for future changes). The implementation
55of a particular object type can cast the object pointer to the proper
56type and back.
57
58A standard interface exists for objects that contain an array of items
59whose size is determined when the object is allocated.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000060*/
61
Guido van Rossum408027e1996-12-30 16:17:54 +000062#ifdef Py_DEBUG
Guido van Rossum3f5da241990-12-20 15:06:42 +000063
64/* Turn on heavy reference debugging */
Guido van Rossumcaa63801995-01-12 11:45:45 +000065#define Py_TRACE_REFS
Guido van Rossum3f5da241990-12-20 15:06:42 +000066
67/* Turn on reference counting */
Guido van Rossumcaa63801995-01-12 11:45:45 +000068#define Py_REF_DEBUG
Guido van Rossum3f5da241990-12-20 15:06:42 +000069
Guido van Rossum408027e1996-12-30 16:17:54 +000070#endif /* Py_DEBUG */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000071
Guido van Rossumcaa63801995-01-12 11:45:45 +000072#ifdef Py_TRACE_REFS
73#define PyObject_HEAD \
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000074 struct _object *_ob_next, *_ob_prev; \
Guido van Rossumc8564cd1990-11-02 17:51:56 +000075 int ob_refcnt; \
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000076 struct _typeobject *ob_type;
Guido van Rossumcaa63801995-01-12 11:45:45 +000077#define PyObject_HEAD_INIT(type) 0, 0, 1, type,
Guido van Rossum60be1db1996-05-22 16:33:22 +000078#else /* !Py_TRACE_REFS */
Guido van Rossumcaa63801995-01-12 11:45:45 +000079#define PyObject_HEAD \
Guido van Rossum5799b521995-01-04 19:06:22 +000080 int ob_refcnt; \
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000081 struct _typeobject *ob_type;
Guido van Rossumcaa63801995-01-12 11:45:45 +000082#define PyObject_HEAD_INIT(type) 1, type,
Guido van Rossum60be1db1996-05-22 16:33:22 +000083#endif /* !Py_TRACE_REFS */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000084
Guido van Rossumcaa63801995-01-12 11:45:45 +000085#define PyObject_VAR_HEAD \
86 PyObject_HEAD \
Guido van Rossum5799b521995-01-04 19:06:22 +000087 int ob_size; /* Number of items in variable part */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000088
89typedef struct _object {
Guido van Rossumcaa63801995-01-12 11:45:45 +000090 PyObject_HEAD
91} PyObject;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000092
93typedef struct {
Guido van Rossumcaa63801995-01-12 11:45:45 +000094 PyObject_VAR_HEAD
Guido van Rossumd0c87ee1997-05-15 21:31:03 +000095} PyVarObject;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000096
97
98/*
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000099Type objects contain a string containing the type name (to help somewhat
100in debugging), the allocation parameters (see newobj() and newvarobj()),
101and methods for accessing objects of the type. Methods are optional,a
102nil pointer meaning that particular kind of access is not available for
Guido van Rossumcaa63801995-01-12 11:45:45 +0000103this type. The Py_DECREF() macro uses the tp_dealloc method without
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000104checking for a nil pointer; it should always be implemented except if
105the implementation can guarantee that the reference count will never
106reach zero (e.g., for type objects).
107
108NB: the methods for certain type groups are now contained in separate
109method blocks.
110*/
111
Tim Peters9ace6bc2000-07-08 00:32:04 +0000112typedef PyObject * (*unaryfunc)(PyObject *);
113typedef PyObject * (*binaryfunc)(PyObject *, PyObject *);
114typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *);
115typedef int (*inquiry)(PyObject *);
116typedef int (*coercion)(PyObject **, PyObject **);
117typedef PyObject *(*intargfunc)(PyObject *, int);
118typedef PyObject *(*intintargfunc)(PyObject *, int, int);
119typedef int(*intobjargproc)(PyObject *, int, PyObject *);
120typedef int(*intintobjargproc)(PyObject *, int, int, PyObject *);
121typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *);
122typedef int (*getreadbufferproc)(PyObject *, int, void **);
123typedef int (*getwritebufferproc)(PyObject *, int, void **);
124typedef int (*getsegcountproc)(PyObject *, int *);
125typedef int (*getcharbufferproc)(PyObject *, int, const char **);
126typedef int (*objobjproc)(PyObject *, PyObject *);
127typedef int (*visitproc)(PyObject *, void *);
128typedef int (*traverseproc)(PyObject *, visitproc, void *);
Guido van Rossumb6775db1994-08-01 11:34:53 +0000129
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000130typedef struct {
Guido van Rossumb6775db1994-08-01 11:34:53 +0000131 binaryfunc nb_add;
132 binaryfunc nb_subtract;
133 binaryfunc nb_multiply;
134 binaryfunc nb_divide;
135 binaryfunc nb_remainder;
136 binaryfunc nb_divmod;
Guido van Rossum75abc631994-08-09 13:21:54 +0000137 ternaryfunc nb_power;
Guido van Rossumb6775db1994-08-01 11:34:53 +0000138 unaryfunc nb_negative;
139 unaryfunc nb_positive;
140 unaryfunc nb_absolute;
141 inquiry nb_nonzero;
142 unaryfunc nb_invert;
143 binaryfunc nb_lshift;
144 binaryfunc nb_rshift;
145 binaryfunc nb_and;
146 binaryfunc nb_xor;
147 binaryfunc nb_or;
148 coercion nb_coerce;
149 unaryfunc nb_int;
150 unaryfunc nb_long;
151 unaryfunc nb_float;
152 unaryfunc nb_oct;
153 unaryfunc nb_hex;
Guido van Rossumcaa63801995-01-12 11:45:45 +0000154} PyNumberMethods;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000155
156typedef struct {
Guido van Rossumb6775db1994-08-01 11:34:53 +0000157 inquiry sq_length;
158 binaryfunc sq_concat;
159 intargfunc sq_repeat;
160 intargfunc sq_item;
161 intintargfunc sq_slice;
162 intobjargproc sq_ass_item;
163 intintobjargproc sq_ass_slice;
Guido van Rossumcecb27a2000-02-28 15:00:40 +0000164 objobjproc sq_contains;
Guido van Rossumcaa63801995-01-12 11:45:45 +0000165} PySequenceMethods;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000166
167typedef struct {
Guido van Rossumb6775db1994-08-01 11:34:53 +0000168 inquiry mp_length;
169 binaryfunc mp_subscript;
170 objobjargproc mp_ass_subscript;
Guido van Rossumcaa63801995-01-12 11:45:45 +0000171} PyMappingMethods;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000172
Guido van Rossumfdf95dd1997-05-05 22:15:02 +0000173typedef struct {
174 getreadbufferproc bf_getreadbuffer;
175 getwritebufferproc bf_getwritebuffer;
176 getsegcountproc bf_getsegcount;
Guido van Rossum36eef3c1998-10-08 02:10:56 +0000177 getcharbufferproc bf_getcharbuffer;
Guido van Rossumfdf95dd1997-05-05 22:15:02 +0000178} PyBufferProcs;
179
180
Tim Peters9ace6bc2000-07-08 00:32:04 +0000181typedef void (*destructor)(PyObject *);
182typedef int (*printfunc)(PyObject *, FILE *, int);
183typedef PyObject *(*getattrfunc)(PyObject *, char *);
184typedef PyObject *(*getattrofunc)(PyObject *, PyObject *);
185typedef int (*setattrfunc)(PyObject *, char *, PyObject *);
186typedef int (*setattrofunc)(PyObject *, PyObject *, PyObject *);
187typedef int (*cmpfunc)(PyObject *, PyObject *);
188typedef PyObject *(*reprfunc)(PyObject *);
189typedef long (*hashfunc)(PyObject *);
Guido van Rossumb6775db1994-08-01 11:34:53 +0000190
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000191typedef struct _typeobject {
Guido van Rossumcaa63801995-01-12 11:45:45 +0000192 PyObject_VAR_HEAD
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000193 char *tp_name; /* For printing */
Guido van Rossum5799b521995-01-04 19:06:22 +0000194 int tp_basicsize, tp_itemsize; /* For allocation */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000195
196 /* Methods to implement standard operations */
197
Guido van Rossumb6775db1994-08-01 11:34:53 +0000198 destructor tp_dealloc;
199 printfunc tp_print;
200 getattrfunc tp_getattr;
201 setattrfunc tp_setattr;
202 cmpfunc tp_compare;
203 reprfunc tp_repr;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000204
205 /* Method suites for standard classes */
206
Guido van Rossumcaa63801995-01-12 11:45:45 +0000207 PyNumberMethods *tp_as_number;
208 PySequenceMethods *tp_as_sequence;
209 PyMappingMethods *tp_as_mapping;
Guido van Rossum9bfef441993-03-29 10:43:31 +0000210
Fred Drake0e12bcd2000-03-21 16:14:47 +0000211 /* More standard operations (here for binary compatibility) */
Guido van Rossum9bfef441993-03-29 10:43:31 +0000212
Guido van Rossumb6775db1994-08-01 11:34:53 +0000213 hashfunc tp_hash;
Guido van Rossum884afd61995-07-18 14:21:06 +0000214 ternaryfunc tp_call;
Guido van Rossum6fde3901995-01-07 10:32:04 +0000215 reprfunc tp_str;
Guido van Rossum0693dd21996-08-09 20:48:52 +0000216 getattrofunc tp_getattro;
217 setattrofunc tp_setattro;
Guido van Rossum6fde3901995-01-07 10:32:04 +0000218
Guido van Rossumfdf95dd1997-05-05 22:15:02 +0000219 /* Functions to access object as input/output buffer */
220 PyBufferProcs *tp_as_buffer;
221
Guido van Rossum36eef3c1998-10-08 02:10:56 +0000222 /* Flags to define presence of optional/expanded features */
223 long tp_flags;
Guido van Rossum6fde3901995-01-07 10:32:04 +0000224
225 char *tp_doc; /* Documentation string */
226
Jeremy Hylton8caad492000-06-23 14:18:11 +0000227 /* call function for all accessible objects */
228 traverseproc tp_traverse;
229
230 /* delete references to contained objects */
231 inquiry tp_clear;
232
Guido van Rossuma9c2d7a1998-04-23 19:16:44 +0000233 /* More spares */
Guido van Rossuma9c2d7a1998-04-23 19:16:44 +0000234 long tp_xxx7;
235 long tp_xxx8;
236
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000237#ifdef COUNT_ALLOCS
238 /* these must be last */
239 int tp_alloc;
240 int tp_free;
241 int tp_maxalloc;
242 struct _typeobject *tp_next;
243#endif
Guido van Rossumcaa63801995-01-12 11:45:45 +0000244} PyTypeObject;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000245
Sjoerd Mullender107c7471995-04-25 11:53:24 +0000246extern DL_IMPORT(PyTypeObject) PyType_Type; /* The type of type objects */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000247
Guido van Rossumcaa63801995-01-12 11:45:45 +0000248#define PyType_Check(op) ((op)->ob_type == &PyType_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000249
Guido van Rossum3f5da241990-12-20 15:06:42 +0000250/* Generic operations on objects */
Tim Peters9ace6bc2000-07-08 00:32:04 +0000251extern DL_IMPORT(int) PyObject_Print(PyObject *, FILE *, int);
252extern DL_IMPORT(PyObject *) PyObject_Repr(PyObject *);
253extern DL_IMPORT(PyObject *) PyObject_Str(PyObject *);
254extern DL_IMPORT(int) PyObject_Compare(PyObject *, PyObject *);
255extern DL_IMPORT(PyObject *) PyObject_GetAttrString(PyObject *, char *);
256extern DL_IMPORT(int) PyObject_SetAttrString(PyObject *, char *, PyObject *);
257extern DL_IMPORT(int) PyObject_HasAttrString(PyObject *, char *);
258extern DL_IMPORT(PyObject *) PyObject_GetAttr(PyObject *, PyObject *);
259extern DL_IMPORT(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *);
260extern DL_IMPORT(int) PyObject_HasAttr(PyObject *, PyObject *);
261extern DL_IMPORT(long) PyObject_Hash(PyObject *);
262extern DL_IMPORT(int) PyObject_IsTrue(PyObject *);
263extern DL_IMPORT(int) PyObject_Not(PyObject *);
264extern DL_IMPORT(int) PyCallable_Check(PyObject *);
265extern DL_IMPORT(int) PyNumber_Coerce(PyObject **, PyObject **);
266extern DL_IMPORT(int) PyNumber_CoerceEx(PyObject **, PyObject **);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000267
Guido van Rossum26d4ac31998-04-10 22:32:24 +0000268/* Helpers for printing recursive container types */
Tim Peters9ace6bc2000-07-08 00:32:04 +0000269extern DL_IMPORT(int) Py_ReprEnter(PyObject *);
270extern DL_IMPORT(void) Py_ReprLeave(PyObject *);
Guido van Rossum26d4ac31998-04-10 22:32:24 +0000271
Jeremy Hylton4a3dd2d2000-04-14 19:13:24 +0000272/* tstate dict key for PyObject_Compare helper */
273extern PyObject *_PyCompareState_Key;
274
Fred Drake13634cf2000-06-29 19:17:04 +0000275/* Helpers for hash functions */
Tim Peters9ace6bc2000-07-08 00:32:04 +0000276extern DL_IMPORT(long) _Py_HashDouble(double);
277extern DL_IMPORT(long) _Py_HashPointer(void*);
Fred Drake13634cf2000-06-29 19:17:04 +0000278
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000279/* Flag bits for printing: */
Guido van Rossumcaa63801995-01-12 11:45:45 +0000280#define Py_PRINT_RAW 1 /* No string quotes etc. */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000281
282/*
Guido van Rossum36eef3c1998-10-08 02:10:56 +0000283
284Type flags (tp_flags)
285
286These flags are used to extend the type structure in a backwards-compatible
287fashion. Extensions can use the flags to indicate (and test) when a given
288type structure contains a new feature. The Python core will use these when
289introducing new functionality between major revisions (to avoid mid-version
290changes in the PYTHON_API_VERSION).
291
292Arbitration of the flag bit positions will need to be coordinated among
293all extension writers who publically release their extensions (this will
294be fewer than you might expect!)..
295
296Python 1.5.2 introduced the bf_getcharbuffer slot into PyBufferProcs.
297
298Type definitions should use Py_TPFLAGS_DEFAULT for their tp_flags value.
299
300Code can use PyType_HasFeature(type_ob, flag_value) to test whether the
301given type object has a specified feature.
302
303*/
304
305/* PyBufferProcs contains bf_getcharbuffer */
306#define Py_TPFLAGS_HAVE_GETCHARBUFFER (1L<<0)
307
Guido van Rossumcecb27a2000-02-28 15:00:40 +0000308/* PySequenceMethods contains sq_contains */
309#define Py_TPFLAGS_HAVE_SEQUENCE_IN (1L<<1)
310
Jeremy Hyltond08b4c42000-06-23 19:37:02 +0000311/* Objects which participate in garbage collection (see objimp.h) */
312#ifdef WITH_CYCLE_GC
313#define Py_TPFLAGS_GC (1L<<2)
314#else
315#define Py_TPFLAGS_GC 0
316#endif
317
Guido van Rossumcecb27a2000-02-28 15:00:40 +0000318#define Py_TPFLAGS_DEFAULT (Py_TPFLAGS_HAVE_GETCHARBUFFER | \
319 Py_TPFLAGS_HAVE_SEQUENCE_IN)
Guido van Rossum36eef3c1998-10-08 02:10:56 +0000320
321#define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0)
322
323
324/*
Guido van Rossumcaa63801995-01-12 11:45:45 +0000325The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement
326reference counts. Py_DECREF calls the object's deallocator function; for
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000327objects that don't contain references to other objects or heap memory
328this can be the standard function free(). Both macros can be used
329whereever a void expression is allowed. The argument shouldn't be a
Guido van Rossumcaa63801995-01-12 11:45:45 +0000330NIL pointer. The macro _Py_NewReference(op) is used only to initialize
331reference counts to 1; it is defined here for convenience.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000332
333We assume that the reference count field can never overflow; this can
334be proven when the size of the field is the same as the pointer size
335but even with a 16-bit reference count field it is pretty unlikely so
336we ignore the possibility. (If you are paranoid, make it a long.)
337
338Type objects should never be deallocated; the type pointer in an object
339is not considered to be a reference to the type object, to save
340complications in the deallocation function. (This is actually a
341decision that's up to the implementer of each new type so if you want,
342you can count such references to the type object.)
343
Guido van Rossumcaa63801995-01-12 11:45:45 +0000344*** WARNING*** The Py_DECREF macro must have a side-effect-free argument
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000345since it may evaluate its argument multiple times. (The alternative
346would be to mace it a proper function or assign it to a global temporary
347variable first, both of which are slower; and in a multi-threaded
348environment the global variable trick is not safe.)
349*/
350
Guido van Rossumcaa63801995-01-12 11:45:45 +0000351#ifdef Py_TRACE_REFS
352#ifndef Py_REF_DEBUG
353#define Py_REF_DEBUG
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000354#endif
355#endif
356
Guido van Rossumd86b3801996-08-12 21:31:32 +0000357#ifdef Py_TRACE_REFS
Tim Peters9ace6bc2000-07-08 00:32:04 +0000358extern DL_IMPORT(void) _Py_Dealloc(PyObject *);
359extern DL_IMPORT(void) _Py_NewReference(PyObject *);
360extern DL_IMPORT(void) _Py_ForgetReference(PyObject *);
361extern DL_IMPORT(void) _Py_PrintReferences(FILE *);
362extern DL_IMPORT(void) _Py_ResetReferences(void);
Guido van Rossumd86b3801996-08-12 21:31:32 +0000363#endif
364
Guido van Rossumcaa63801995-01-12 11:45:45 +0000365#ifndef Py_TRACE_REFS
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000366#ifdef COUNT_ALLOCS
Guido van Rossumcaa63801995-01-12 11:45:45 +0000367#define _Py_Dealloc(op) ((op)->ob_type->tp_free++, (*(op)->ob_type->tp_dealloc)((PyObject *)(op)))
Sjoerd Mullender91e7a0b1995-04-06 13:47:48 +0000368#define _Py_ForgetReference(op) ((op)->ob_type->tp_free++)
Guido van Rossumd86b3801996-08-12 21:31:32 +0000369#else /* !COUNT_ALLOCS */
Guido van Rossumcaa63801995-01-12 11:45:45 +0000370#define _Py_Dealloc(op) (*(op)->ob_type->tp_dealloc)((PyObject *)(op))
Guido van Rossumcaa63801995-01-12 11:45:45 +0000371#define _Py_ForgetReference(op) /*empty*/
Guido van Rossumd86b3801996-08-12 21:31:32 +0000372#endif /* !COUNT_ALLOCS */
373#endif /* !Py_TRACE_REFS */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000374
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000375#ifdef COUNT_ALLOCS
Tim Peters9ace6bc2000-07-08 00:32:04 +0000376extern DL_IMPORT(void) inc_count(PyTypeObject *);
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000377#endif
378
Guido van Rossumcaa63801995-01-12 11:45:45 +0000379#ifdef Py_REF_DEBUG
Guido van Rossum60be1db1996-05-22 16:33:22 +0000380
Guido van Rossum43466ec1998-12-04 18:48:25 +0000381extern DL_IMPORT(long) _Py_RefTotal;
Guido van Rossum60be1db1996-05-22 16:33:22 +0000382
Guido van Rossumcaa63801995-01-12 11:45:45 +0000383#ifndef Py_TRACE_REFS
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000384#ifdef COUNT_ALLOCS
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000385#define _Py_NewReference(op) (inc_count((op)->ob_type), _Py_RefTotal++, (op)->ob_refcnt = 1)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000386#else
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000387#define _Py_NewReference(op) (_Py_RefTotal++, (op)->ob_refcnt = 1)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000388#endif
Guido van Rossum60be1db1996-05-22 16:33:22 +0000389#endif /* !Py_TRACE_REFS */
390
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000391#define Py_INCREF(op) (_Py_RefTotal++, (op)->ob_refcnt++)
Guido van Rossumcaa63801995-01-12 11:45:45 +0000392#define Py_DECREF(op) \
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000393 if (--_Py_RefTotal, --(op)->ob_refcnt != 0) \
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000394 ; \
395 else \
Guido van Rossum1d529d11997-08-05 02:30:44 +0000396 _Py_Dealloc((PyObject *)(op))
Guido van Rossum60be1db1996-05-22 16:33:22 +0000397#else /* !Py_REF_DEBUG */
398
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000399#ifdef COUNT_ALLOCS
Guido van Rossumcaa63801995-01-12 11:45:45 +0000400#define _Py_NewReference(op) (inc_count((op)->ob_type), (op)->ob_refcnt = 1)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000401#else
Guido van Rossumcaa63801995-01-12 11:45:45 +0000402#define _Py_NewReference(op) ((op)->ob_refcnt = 1)
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000403#endif
Guido van Rossum60be1db1996-05-22 16:33:22 +0000404
Guido van Rossumcaa63801995-01-12 11:45:45 +0000405#define Py_INCREF(op) ((op)->ob_refcnt++)
406#define Py_DECREF(op) \
Guido van Rossum5799b521995-01-04 19:06:22 +0000407 if (--(op)->ob_refcnt != 0) \
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000408 ; \
409 else \
Guido van Rossum1d529d11997-08-05 02:30:44 +0000410 _Py_Dealloc((PyObject *)(op))
Guido van Rossum60be1db1996-05-22 16:33:22 +0000411#endif /* !Py_REF_DEBUG */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000412
Guido van Rossum3f5da241990-12-20 15:06:42 +0000413/* Macros to use in case the object pointer may be NULL: */
414
Guido van Rossumcaa63801995-01-12 11:45:45 +0000415#define Py_XINCREF(op) if ((op) == NULL) ; else Py_INCREF(op)
416#define Py_XDECREF(op) if ((op) == NULL) ; else Py_DECREF(op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000417
418/* Definition of NULL, so you don't have to include <stdio.h> */
419
420#ifndef NULL
421#define NULL 0
422#endif
423
424
425/*
Guido van Rossumcaa63801995-01-12 11:45:45 +0000426_Py_NoneStruct is an object of undefined type which can be used in contexts
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000427where NULL (nil) is not suitable (since NULL often means 'error').
428
Guido van Rossumcaa63801995-01-12 11:45:45 +0000429Don't forget to apply Py_INCREF() when returning this value!!!
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000430*/
431
Sjoerd Mullender107c7471995-04-25 11:53:24 +0000432extern DL_IMPORT(PyObject) _Py_NoneStruct; /* Don't use this directly */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000433
Guido van Rossumcaa63801995-01-12 11:45:45 +0000434#define Py_None (&_Py_NoneStruct)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000435
436
437/*
Guido van Rossumb6775db1994-08-01 11:34:53 +0000438A common programming style in Python requires the forward declaration
Guido van Rossumcaa63801995-01-12 11:45:45 +0000439of static, initialized structures, e.g. for a type object that is used
Guido van Rossumb6775db1994-08-01 11:34:53 +0000440by the functions whose address must be used in the initializer.
441Some compilers (notably SCO ODT 3.0, I seem to remember early AIX as
442well) botch this if you use the static keyword for both declarations
443(they allocate two objects, and use the first, uninitialized one until
444the second declaration is encountered). Therefore, the forward
445declaration should use the 'forwardstatic' keyword. This expands to
446static on most systems, but to extern on a few. The actual storage
447and name will still be static because the second declaration is
448static, so no linker visible symbols will be generated. (Standard C
449compilers take offense to the extern forward declaration of a static
450object, so I can't just put extern in all cases. :-( )
451*/
452
453#ifdef BAD_STATIC_FORWARD
454#define staticforward extern
Guido van Rossum57836fe1995-02-21 21:06:10 +0000455#ifdef __SC__
456#define statichere
Guido van Rossumb6775db1994-08-01 11:34:53 +0000457#else
Guido van Rossum57836fe1995-02-21 21:06:10 +0000458#define statichere static
459#endif /* __SC__ */
460#else /* !BAD_STATIC_FORWARD */
Guido van Rossumb6775db1994-08-01 11:34:53 +0000461#define staticforward static
Guido van Rossum57836fe1995-02-21 21:06:10 +0000462#define statichere static
463#endif /* !BAD_STATIC_FORWARD */
Guido van Rossumb6775db1994-08-01 11:34:53 +0000464
465
466/*
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000467More conventions
468================
469
470Argument Checking
471-----------------
472
473Functions that take objects as arguments normally don't check for nil
474arguments, but they do check the type of the argument, and return an
475error if the function doesn't apply to the type.
476
477Failure Modes
478-------------
479
480Functions may fail for a variety of reasons, including running out of
Guido van Rossum3f5da241990-12-20 15:06:42 +0000481memory. This is communicated to the caller in two ways: an error string
482is set (see errors.h), and the function result differs: functions that
483normally return a pointer return NULL for failure, functions returning
484an integer return -1 (which could be a legal return value too!), and
485other functions return 0 for success and -1 for failure.
486Callers should always check for errors before using the result.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000487
488Reference Counts
489----------------
490
491It takes a while to get used to the proper usage of reference counts.
492
493Functions that create an object set the reference count to 1; such new
Guido van Rossumcaa63801995-01-12 11:45:45 +0000494objects must be stored somewhere or destroyed again with Py_DECREF().
495Functions that 'store' objects such as PyTuple_SetItem() and
496PyDict_SetItemString()
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000497don't increment the reference count of the object, since the most
498frequent use is to store a fresh object. Functions that 'retrieve'
Guido van Rossumcaa63801995-01-12 11:45:45 +0000499objects such as PyTuple_GetItem() and PyDict_GetItemString() also
500don't increment
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000501the reference count, since most frequently the object is only looked at
502quickly. Thus, to retrieve an object and store it again, the caller
Guido van Rossumcaa63801995-01-12 11:45:45 +0000503must call Py_INCREF() explicitly.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000504
Guido van Rossumcaa63801995-01-12 11:45:45 +0000505NOTE: functions that 'consume' a reference count like
Fred Drake49bb0e31997-09-05 17:53:53 +0000506PyList_SetItemString() even consume the reference if the object wasn't
507stored, to simplify error handling.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000508
509It seems attractive to make other functions that take an object as
510argument consume a reference count; however this may quickly get
511confusing (even the current practice is already confusing). Consider
Guido van Rossumcaa63801995-01-12 11:45:45 +0000512it carefully, it may save lots of calls to Py_INCREF() and Py_DECREF() at
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000513times.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000514*/
Guido van Rossuma3309961993-07-28 09:05:47 +0000515
Guido van Rossumd724b232000-03-13 16:01:29 +0000516/*
517 trashcan
518 CT 2k0130
519 non-recursively destroy nested objects
520
521 CT 2k0223
522 redefinition for better locality and less overhead.
523
524 Objects that want to be recursion safe need to use
525 the macroes
526 Py_TRASHCAN_SAFE_BEGIN(name)
527 and
528 Py_TRASHCAN_SAFE_END(name)
529 surrounding their actual deallocation code.
530
531 It would be nice to do this using the thread state.
532 Also, we could do an exact stack measure then.
533 Unfortunately, deallocations also take place when
534 the thread state is undefined.
Guido van Rossume92e6102000-04-24 15:40:53 +0000535
536 CT 2k0422 complete rewrite.
537 There is no need to allocate new objects.
538 Everything is done vialob_refcnt and ob_type now.
539 Adding support for free-threading should be easy, too.
Guido van Rossumd724b232000-03-13 16:01:29 +0000540*/
541
542#define PyTrash_UNWIND_LEVEL 50
543
544#define Py_TRASHCAN_SAFE_BEGIN(op) \
545 { \
546 ++_PyTrash_delete_nesting; \
547 if (_PyTrash_delete_nesting < PyTrash_UNWIND_LEVEL) { \
548
549#define Py_TRASHCAN_SAFE_END(op) \
550 ;} \
551 else \
552 _PyTrash_deposit_object((PyObject*)op);\
553 --_PyTrash_delete_nesting; \
554 if (_PyTrash_delete_later && _PyTrash_delete_nesting <= 0) \
Guido van Rossume92e6102000-04-24 15:40:53 +0000555 _PyTrash_destroy_chain(); \
Guido van Rossumd724b232000-03-13 16:01:29 +0000556 } \
557
Tim Peters9ace6bc2000-07-08 00:32:04 +0000558extern DL_IMPORT(void) _PyTrash_deposit_object(PyObject*);
559extern DL_IMPORT(void) _PyTrash_destroy_chain();
Guido van Rossumd724b232000-03-13 16:01:29 +0000560
561extern DL_IMPORT(int) _PyTrash_delete_nesting;
562extern DL_IMPORT(PyObject *) _PyTrash_delete_later;
563
564/* swap the "xx" to check the speed loss */
565
566#define xxPy_TRASHCAN_SAFE_BEGIN(op)
567#define xxPy_TRASHCAN_SAFE_END(op) ;
Guido van Rossume92e6102000-04-24 15:40:53 +0000568
Guido van Rossuma3309961993-07-28 09:05:47 +0000569#ifdef __cplusplus
570}
571#endif
572#endif /* !Py_OBJECT_H */