xref: /third_party/python/Include/cpython/object.h (revision 7db96d56)
1#ifndef Py_CPYTHON_OBJECT_H
2#  error "this header file must not be included directly"
3#endif
4
5PyAPI_FUNC(void) _Py_NewReference(PyObject *op);
6
7#ifdef Py_TRACE_REFS
8/* Py_TRACE_REFS is such major surgery that we call external routines. */
9PyAPI_FUNC(void) _Py_ForgetReference(PyObject *);
10#endif
11
12#ifdef Py_REF_DEBUG
13PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void);
14#endif
15
16
17/********************* String Literals ****************************************/
18/* This structure helps managing static strings. The basic usage goes like this:
19   Instead of doing
20
21       r = PyObject_CallMethod(o, "foo", "args", ...);
22
23   do
24
25       _Py_IDENTIFIER(foo);
26       ...
27       r = _PyObject_CallMethodId(o, &PyId_foo, "args", ...);
28
29   PyId_foo is a static variable, either on block level or file level. On first
30   usage, the string "foo" is interned, and the structures are linked. On interpreter
31   shutdown, all strings are released.
32
33   Alternatively, _Py_static_string allows choosing the variable name.
34   _PyUnicode_FromId returns a borrowed reference to the interned string.
35   _PyObject_{Get,Set,Has}AttrId are __getattr__ versions using _Py_Identifier*.
36*/
37typedef struct _Py_Identifier {
38    const char* string;
39    // Index in PyInterpreterState.unicode.ids.array. It is process-wide
40    // unique and must be initialized to -1.
41    Py_ssize_t index;
42} _Py_Identifier;
43
44#if defined(NEEDS_PY_IDENTIFIER) || !defined(Py_BUILD_CORE)
45// For now we are keeping _Py_IDENTIFIER for continued use
46// in non-builtin extensions (and naughty PyPI modules).
47
48#define _Py_static_string_init(value) { .string = value, .index = -1 }
49#define _Py_static_string(varname, value)  static _Py_Identifier varname = _Py_static_string_init(value)
50#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname)
51
52#endif  /* NEEDS_PY_IDENTIFIER */
53
54typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
55typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
56
57typedef PyObject *(*vectorcallfunc)(PyObject *callable, PyObject *const *args,
58                                    size_t nargsf, PyObject *kwnames);
59
60
61typedef struct {
62    /* Number implementations must check *both*
63       arguments for proper type and implement the necessary conversions
64       in the slot functions themselves. */
65
66    binaryfunc nb_add;
67    binaryfunc nb_subtract;
68    binaryfunc nb_multiply;
69    binaryfunc nb_remainder;
70    binaryfunc nb_divmod;
71    ternaryfunc nb_power;
72    unaryfunc nb_negative;
73    unaryfunc nb_positive;
74    unaryfunc nb_absolute;
75    inquiry nb_bool;
76    unaryfunc nb_invert;
77    binaryfunc nb_lshift;
78    binaryfunc nb_rshift;
79    binaryfunc nb_and;
80    binaryfunc nb_xor;
81    binaryfunc nb_or;
82    unaryfunc nb_int;
83    void *nb_reserved;  /* the slot formerly known as nb_long */
84    unaryfunc nb_float;
85
86    binaryfunc nb_inplace_add;
87    binaryfunc nb_inplace_subtract;
88    binaryfunc nb_inplace_multiply;
89    binaryfunc nb_inplace_remainder;
90    ternaryfunc nb_inplace_power;
91    binaryfunc nb_inplace_lshift;
92    binaryfunc nb_inplace_rshift;
93    binaryfunc nb_inplace_and;
94    binaryfunc nb_inplace_xor;
95    binaryfunc nb_inplace_or;
96
97    binaryfunc nb_floor_divide;
98    binaryfunc nb_true_divide;
99    binaryfunc nb_inplace_floor_divide;
100    binaryfunc nb_inplace_true_divide;
101
102    unaryfunc nb_index;
103
104    binaryfunc nb_matrix_multiply;
105    binaryfunc nb_inplace_matrix_multiply;
106} PyNumberMethods;
107
108typedef struct {
109    lenfunc sq_length;
110    binaryfunc sq_concat;
111    ssizeargfunc sq_repeat;
112    ssizeargfunc sq_item;
113    void *was_sq_slice;
114    ssizeobjargproc sq_ass_item;
115    void *was_sq_ass_slice;
116    objobjproc sq_contains;
117
118    binaryfunc sq_inplace_concat;
119    ssizeargfunc sq_inplace_repeat;
120} PySequenceMethods;
121
122typedef struct {
123    lenfunc mp_length;
124    binaryfunc mp_subscript;
125    objobjargproc mp_ass_subscript;
126} PyMappingMethods;
127
128typedef PySendResult (*sendfunc)(PyObject *iter, PyObject *value, PyObject **result);
129
130typedef struct {
131    unaryfunc am_await;
132    unaryfunc am_aiter;
133    unaryfunc am_anext;
134    sendfunc am_send;
135} PyAsyncMethods;
136
137typedef struct {
138     getbufferproc bf_getbuffer;
139     releasebufferproc bf_releasebuffer;
140} PyBufferProcs;
141
142/* Allow printfunc in the tp_vectorcall_offset slot for
143 * backwards-compatibility */
144typedef Py_ssize_t printfunc;
145
146// If this structure is modified, Doc/includes/typestruct.h should be updated
147// as well.
148struct _typeobject {
149    PyObject_VAR_HEAD
150    const char *tp_name; /* For printing, in format "<module>.<name>" */
151    Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */
152
153    /* Methods to implement standard operations */
154
155    destructor tp_dealloc;
156    Py_ssize_t tp_vectorcall_offset;
157    getattrfunc tp_getattr;
158    setattrfunc tp_setattr;
159    PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2)
160                                    or tp_reserved (Python 3) */
161    reprfunc tp_repr;
162
163    /* Method suites for standard classes */
164
165    PyNumberMethods *tp_as_number;
166    PySequenceMethods *tp_as_sequence;
167    PyMappingMethods *tp_as_mapping;
168
169    /* More standard operations (here for binary compatibility) */
170
171    hashfunc tp_hash;
172    ternaryfunc tp_call;
173    reprfunc tp_str;
174    getattrofunc tp_getattro;
175    setattrofunc tp_setattro;
176
177    /* Functions to access object as input/output buffer */
178    PyBufferProcs *tp_as_buffer;
179
180    /* Flags to define presence of optional/expanded features */
181    unsigned long tp_flags;
182
183    const char *tp_doc; /* Documentation string */
184
185    /* Assigned meaning in release 2.0 */
186    /* call function for all accessible objects */
187    traverseproc tp_traverse;
188
189    /* delete references to contained objects */
190    inquiry tp_clear;
191
192    /* Assigned meaning in release 2.1 */
193    /* rich comparisons */
194    richcmpfunc tp_richcompare;
195
196    /* weak reference enabler */
197    Py_ssize_t tp_weaklistoffset;
198
199    /* Iterators */
200    getiterfunc tp_iter;
201    iternextfunc tp_iternext;
202
203    /* Attribute descriptor and subclassing stuff */
204    PyMethodDef *tp_methods;
205    PyMemberDef *tp_members;
206    PyGetSetDef *tp_getset;
207    // Strong reference on a heap type, borrowed reference on a static type
208    PyTypeObject *tp_base;
209    PyObject *tp_dict;
210    descrgetfunc tp_descr_get;
211    descrsetfunc tp_descr_set;
212    Py_ssize_t tp_dictoffset;
213    initproc tp_init;
214    allocfunc tp_alloc;
215    newfunc tp_new;
216    freefunc tp_free; /* Low-level free-memory routine */
217    inquiry tp_is_gc; /* For PyObject_IS_GC */
218    PyObject *tp_bases;
219    PyObject *tp_mro; /* method resolution order */
220    PyObject *tp_cache;
221    PyObject *tp_subclasses;
222    PyObject *tp_weaklist;
223    destructor tp_del;
224
225    /* Type attribute cache version tag. Added in version 2.6 */
226    unsigned int tp_version_tag;
227
228    destructor tp_finalize;
229    vectorcallfunc tp_vectorcall;
230};
231
232/* This struct is used by the specializer
233 * It should should be treated as an opaque blob
234 * by code other than the specializer and interpreter. */
235struct _specialization_cache {
236    PyObject *getitem;
237};
238
239/* The *real* layout of a type object when allocated on the heap */
240typedef struct _heaptypeobject {
241    /* Note: there's a dependency on the order of these members
242       in slotptr() in typeobject.c . */
243    PyTypeObject ht_type;
244    PyAsyncMethods as_async;
245    PyNumberMethods as_number;
246    PyMappingMethods as_mapping;
247    PySequenceMethods as_sequence; /* as_sequence comes after as_mapping,
248                                      so that the mapping wins when both
249                                      the mapping and the sequence define
250                                      a given operator (e.g. __getitem__).
251                                      see add_operators() in typeobject.c . */
252    PyBufferProcs as_buffer;
253    PyObject *ht_name, *ht_slots, *ht_qualname;
254    struct _dictkeysobject *ht_cached_keys;
255    PyObject *ht_module;
256    char *_ht_tpname;  // Storage for "tp_name"; see PyType_FromModuleAndSpec
257    struct _specialization_cache _spec_cache; // For use by the specializer.
258    /* here are optional user slots, followed by the members. */
259} PyHeapTypeObject;
260
261PyAPI_FUNC(const char *) _PyType_Name(PyTypeObject *);
262PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *);
263PyAPI_FUNC(PyObject *) _PyType_LookupId(PyTypeObject *, _Py_Identifier *);
264PyAPI_FUNC(PyObject *) _PyObject_LookupSpecialId(PyObject *, _Py_Identifier *);
265#ifndef Py_BUILD_CORE
266// Backward compatibility for 3rd-party extensions
267// that may be using the old name.
268#define _PyObject_LookupSpecial _PyObject_LookupSpecialId
269#endif
270PyAPI_FUNC(PyTypeObject *) _PyType_CalculateMetaclass(PyTypeObject *, PyObject *);
271PyAPI_FUNC(PyObject *) _PyType_GetDocFromInternalDoc(const char *, const char *);
272PyAPI_FUNC(PyObject *) _PyType_GetTextSignatureFromInternalDoc(const char *, const char *);
273PyAPI_FUNC(PyObject *) PyType_GetModuleByDef(PyTypeObject *, PyModuleDef *);
274
275PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int);
276PyAPI_FUNC(void) _Py_BreakPoint(void);
277PyAPI_FUNC(void) _PyObject_Dump(PyObject *);
278PyAPI_FUNC(int) _PyObject_IsFreed(PyObject *);
279
280PyAPI_FUNC(int) _PyObject_IsAbstract(PyObject *);
281PyAPI_FUNC(PyObject *) _PyObject_GetAttrId(PyObject *, _Py_Identifier *);
282PyAPI_FUNC(int) _PyObject_SetAttrId(PyObject *, _Py_Identifier *, PyObject *);
283/* Replacements of PyObject_GetAttr() and _PyObject_GetAttrId() which
284   don't raise AttributeError.
285
286   Return 1 and set *result != NULL if an attribute is found.
287   Return 0 and set *result == NULL if an attribute is not found;
288   an AttributeError is silenced.
289   Return -1 and set *result == NULL if an error other than AttributeError
290   is raised.
291*/
292PyAPI_FUNC(int) _PyObject_LookupAttr(PyObject *, PyObject *, PyObject **);
293PyAPI_FUNC(int) _PyObject_LookupAttrId(PyObject *, _Py_Identifier *, PyObject **);
294
295PyAPI_FUNC(int) _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
296
297PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *);
298PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *);
299PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *);
300PyAPI_FUNC(int) PyObject_CallFinalizerFromDealloc(PyObject *);
301
302/* Same as PyObject_Generic{Get,Set}Attr, but passing the attributes
303   dict as the last parameter. */
304PyAPI_FUNC(PyObject *)
305_PyObject_GenericGetAttrWithDict(PyObject *, PyObject *, PyObject *, int);
306PyAPI_FUNC(int)
307_PyObject_GenericSetAttrWithDict(PyObject *, PyObject *,
308                                 PyObject *, PyObject *);
309
310PyAPI_FUNC(PyObject *) _PyObject_FunctionStr(PyObject *);
311
312/* Safely decref `op` and set `op` to `op2`.
313 *
314 * As in case of Py_CLEAR "the obvious" code can be deadly:
315 *
316 *     Py_DECREF(op);
317 *     op = op2;
318 *
319 * The safe way is:
320 *
321 *      Py_SETREF(op, op2);
322 *
323 * That arranges to set `op` to `op2` _before_ decref'ing, so that any code
324 * triggered as a side-effect of `op` getting torn down no longer believes
325 * `op` points to a valid object.
326 *
327 * Py_XSETREF is a variant of Py_SETREF that uses Py_XDECREF instead of
328 * Py_DECREF.
329 */
330
331#define Py_SETREF(op, op2)                      \
332    do {                                        \
333        PyObject *_py_tmp = _PyObject_CAST(op); \
334        (op) = (op2);                           \
335        Py_DECREF(_py_tmp);                     \
336    } while (0)
337
338#define Py_XSETREF(op, op2)                     \
339    do {                                        \
340        PyObject *_py_tmp = _PyObject_CAST(op); \
341        (op) = (op2);                           \
342        Py_XDECREF(_py_tmp);                    \
343    } while (0)
344
345
346PyAPI_DATA(PyTypeObject) _PyNone_Type;
347PyAPI_DATA(PyTypeObject) _PyNotImplemented_Type;
348
349/* Maps Py_LT to Py_GT, ..., Py_GE to Py_LE.
350 * Defined in object.c.
351 */
352PyAPI_DATA(int) _Py_SwappedOp[];
353
354PyAPI_FUNC(void)
355_PyDebugAllocatorStats(FILE *out, const char *block_name, int num_blocks,
356                       size_t sizeof_block);
357PyAPI_FUNC(void)
358_PyObject_DebugTypeStats(FILE *out);
359
360/* Define a pair of assertion macros:
361   _PyObject_ASSERT_FROM(), _PyObject_ASSERT_WITH_MSG() and _PyObject_ASSERT().
362
363   These work like the regular C assert(), in that they will abort the
364   process with a message on stderr if the given condition fails to hold,
365   but compile away to nothing if NDEBUG is defined.
366
367   However, before aborting, Python will also try to call _PyObject_Dump() on
368   the given object.  This may be of use when investigating bugs in which a
369   particular object is corrupt (e.g. buggy a tp_visit method in an extension
370   module breaking the garbage collector), to help locate the broken objects.
371
372   The WITH_MSG variant allows you to supply an additional message that Python
373   will attempt to print to stderr, after the object dump. */
374#ifdef NDEBUG
375   /* No debugging: compile away the assertions: */
376#  define _PyObject_ASSERT_FROM(obj, expr, msg, filename, lineno, func) \
377    ((void)0)
378#else
379   /* With debugging: generate checks: */
380#  define _PyObject_ASSERT_FROM(obj, expr, msg, filename, lineno, func) \
381    ((expr) \
382      ? (void)(0) \
383      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
384                               (msg), (filename), (lineno), (func)))
385#endif
386
387#define _PyObject_ASSERT_WITH_MSG(obj, expr, msg) \
388    _PyObject_ASSERT_FROM(obj, expr, msg, __FILE__, __LINE__, __func__)
389#define _PyObject_ASSERT(obj, expr) \
390    _PyObject_ASSERT_WITH_MSG(obj, expr, NULL)
391
392#define _PyObject_ASSERT_FAILED_MSG(obj, msg) \
393    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
394
395/* Declare and define _PyObject_AssertFailed() even when NDEBUG is defined,
396   to avoid causing compiler/linker errors when building extensions without
397   NDEBUG against a Python built with NDEBUG defined.
398
399   msg, expr and function can be NULL. */
400PyAPI_FUNC(void) _Py_NO_RETURN _PyObject_AssertFailed(
401    PyObject *obj,
402    const char *expr,
403    const char *msg,
404    const char *file,
405    int line,
406    const char *function);
407
408/* Check if an object is consistent. For example, ensure that the reference
409   counter is greater than or equal to 1, and ensure that ob_type is not NULL.
410
411   Call _PyObject_AssertFailed() if the object is inconsistent.
412
413   If check_content is zero, only check header fields: reduce the overhead.
414
415   The function always return 1. The return value is just here to be able to
416   write:
417
418   assert(_PyObject_CheckConsistency(obj, 1)); */
419PyAPI_FUNC(int) _PyObject_CheckConsistency(
420    PyObject *op,
421    int check_content);
422
423
424/* Trashcan mechanism, thanks to Christian Tismer.
425
426When deallocating a container object, it's possible to trigger an unbounded
427chain of deallocations, as each Py_DECREF in turn drops the refcount on "the
428next" object in the chain to 0.  This can easily lead to stack overflows,
429especially in threads (which typically have less stack space to work with).
430
431A container object can avoid this by bracketing the body of its tp_dealloc
432function with a pair of macros:
433
434static void
435mytype_dealloc(mytype *p)
436{
437    ... declarations go here ...
438
439    PyObject_GC_UnTrack(p);        // must untrack first
440    Py_TRASHCAN_BEGIN(p, mytype_dealloc)
441    ... The body of the deallocator goes here, including all calls ...
442    ... to Py_DECREF on contained objects.                         ...
443    Py_TRASHCAN_END                // there should be no code after this
444}
445
446CAUTION:  Never return from the middle of the body!  If the body needs to
447"get out early", put a label immediately before the Py_TRASHCAN_END
448call, and goto it.  Else the call-depth counter (see below) will stay
449above 0 forever, and the trashcan will never get emptied.
450
451How it works:  The BEGIN macro increments a call-depth counter.  So long
452as this counter is small, the body of the deallocator is run directly without
453further ado.  But if the counter gets large, it instead adds p to a list of
454objects to be deallocated later, skips the body of the deallocator, and
455resumes execution after the END macro.  The tp_dealloc routine then returns
456without deallocating anything (and so unbounded call-stack depth is avoided).
457
458When the call stack finishes unwinding again, code generated by the END macro
459notices this, and calls another routine to deallocate all the objects that
460may have been added to the list of deferred deallocations.  In effect, a
461chain of N deallocations is broken into (N-1)/(_PyTrash_UNWIND_LEVEL-1) pieces,
462with the call stack never exceeding a depth of _PyTrash_UNWIND_LEVEL.
463
464Since the tp_dealloc of a subclass typically calls the tp_dealloc of the base
465class, we need to ensure that the trashcan is only triggered on the tp_dealloc
466of the actual class being deallocated. Otherwise we might end up with a
467partially-deallocated object. To check this, the tp_dealloc function must be
468passed as second argument to Py_TRASHCAN_BEGIN().
469*/
470
471/* Python 3.9 private API, invoked by the macros below. */
472PyAPI_FUNC(int) _PyTrash_begin(PyThreadState *tstate, PyObject *op);
473PyAPI_FUNC(void) _PyTrash_end(PyThreadState *tstate);
474/* Python 3.10 private API, invoked by the Py_TRASHCAN_BEGIN(). */
475PyAPI_FUNC(int) _PyTrash_cond(PyObject *op, destructor dealloc);
476
477#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \
478    do { \
479        PyThreadState *_tstate = NULL; \
480        /* If "cond" is false, then _tstate remains NULL and the deallocator \
481         * is run normally without involving the trashcan */ \
482        if (cond) { \
483            _tstate = PyThreadState_Get(); \
484            if (_PyTrash_begin(_tstate, _PyObject_CAST(op))) { \
485                break; \
486            } \
487        }
488        /* The body of the deallocator is here. */
489#define Py_TRASHCAN_END \
490        if (_tstate) { \
491            _PyTrash_end(_tstate); \
492        } \
493    } while (0);
494
495#define Py_TRASHCAN_BEGIN(op, dealloc) \
496    Py_TRASHCAN_BEGIN_CONDITION(op, \
497        _PyTrash_cond(_PyObject_CAST(op), (destructor)dealloc))
498
499/* The following two macros, Py_TRASHCAN_SAFE_BEGIN and
500 * Py_TRASHCAN_SAFE_END, are deprecated since version 3.11 and
501 * will be removed in the future.
502 * Use Py_TRASHCAN_BEGIN and Py_TRASHCAN_END instead.
503 */
504Py_DEPRECATED(3.11) typedef int UsingDeprecatedTrashcanMacro;
505#define Py_TRASHCAN_SAFE_BEGIN(op) \
506    do { \
507        UsingDeprecatedTrashcanMacro cond=1; \
508        Py_TRASHCAN_BEGIN_CONDITION(op, cond);
509#define Py_TRASHCAN_SAFE_END(op) \
510        Py_TRASHCAN_END; \
511    } while(0);
512