@@ -101,17 +101,6 @@ PyAPI_FUNC(void *) PyObject_Calloc(size_t nelem, size_t elsize);
101101PyAPI_FUNC (void * ) PyObject_Realloc (void * ptr , size_t new_size );
102102PyAPI_FUNC (void ) PyObject_Free (void * ptr );
103103
104- #ifndef Py_LIMITED_API
105- /* This function returns the number of allocated memory blocks, regardless of size */
106- PyAPI_FUNC (Py_ssize_t ) _Py_GetAllocatedBlocks (void );
107- #endif /* !Py_LIMITED_API */
108-
109- /* Macros */
110- #ifdef WITH_PYMALLOC
111- #ifndef Py_LIMITED_API
112- PyAPI_FUNC (int ) _PyObject_DebugMallocStats (FILE * out );
113- #endif /* #ifndef Py_LIMITED_API */
114- #endif
115104
116105/* Macros */
117106#define PyObject_MALLOC PyObject_Malloc
@@ -226,24 +215,6 @@ _PyObject_INIT_VAR(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size)
226215 constructor you would start directly with PyObject_Init/InitVar
227216*/
228217
229- #ifndef Py_LIMITED_API
230- typedef struct {
231- /* user context passed as the first argument to the 2 functions */
232- void * ctx ;
233-
234- /* allocate an arena of size bytes */
235- void * (* alloc ) (void * ctx , size_t size );
236-
237- /* free an arena */
238- void (* free ) (void * ctx , void * ptr , size_t size );
239- } PyObjectArenaAllocator ;
240-
241- /* Get the arena allocator. */
242- PyAPI_FUNC (void ) PyObject_GetArenaAllocator (PyObjectArenaAllocator * allocator );
243-
244- /* Set the arena allocator. */
245- PyAPI_FUNC (void ) PyObject_SetArenaAllocator (PyObjectArenaAllocator * allocator );
246- #endif
247218
248219
249220/*
@@ -254,11 +225,6 @@ PyAPI_FUNC(void) PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator);
254225/* C equivalent of gc.collect() which ignores the state of gc.enabled. */
255226PyAPI_FUNC (Py_ssize_t ) PyGC_Collect (void );
256227
257- #ifndef Py_LIMITED_API
258- PyAPI_FUNC (Py_ssize_t ) _PyGC_CollectNoFail (void );
259- PyAPI_FUNC (Py_ssize_t ) _PyGC_CollectIfEnabled (void );
260- #endif
261-
262228/* Test if a type has a GC head */
263229#define PyType_IS_GC (t ) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
264230
@@ -267,72 +233,7 @@ PyAPI_FUNC(PyVarObject *) _PyObject_GC_Resize(PyVarObject *, Py_ssize_t);
267233 ( (type *) _PyObject_GC_Resize(_PyVarObject_CAST(op), (n)) )
268234
269235
270- #ifndef Py_LIMITED_API
271- /* Test if an object has a GC head */
272- #define PyObject_IS_GC (o ) \
273- (PyType_IS_GC(Py_TYPE(o)) \
274- && (Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o)))
275-
276- /* GC information is stored BEFORE the object structure. */
277- typedef struct {
278- // Pointer to next object in the list.
279- // 0 means the object is not tracked
280- uintptr_t _gc_next ;
281-
282- // Pointer to previous object in the list.
283- // Lowest two bits are used for flags documented later.
284- uintptr_t _gc_prev ;
285- } PyGC_Head ;
286-
287- #define _Py_AS_GC (o ) ((PyGC_Head *)(o)-1)
288-
289- /* True if the object is currently tracked by the GC. */
290- #define _PyObject_GC_IS_TRACKED (o ) (_Py_AS_GC(o)->_gc_next != 0)
291-
292- /* True if the object may be tracked by the GC in the future, or already is.
293- This can be useful to implement some optimizations. */
294- #define _PyObject_GC_MAY_BE_TRACKED (obj ) \
295- (PyObject_IS_GC(obj) && \
296- (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj)))
297-
298-
299- /* Bit flags for _gc_prev */
300- /* Bit 0 is set when tp_finalize is called */
301- #define _PyGC_PREV_MASK_FINALIZED (1)
302- /* Bit 1 is set when the object is in generation which is GCed currently. */
303- #define _PyGC_PREV_MASK_COLLECTING (2)
304- /* The (N-2) most significant bits contain the real address. */
305- #define _PyGC_PREV_SHIFT (2)
306- #define _PyGC_PREV_MASK (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
307-
308- // Lowest bit of _gc_next is used for flags only in GC.
309- // But it is always 0 for normal code.
310- #define _PyGCHead_NEXT (g ) ((PyGC_Head*)(g)->_gc_next)
311- #define _PyGCHead_SET_NEXT (g , p ) ((g)->_gc_next = (uintptr_t)(p))
312-
313- // Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags.
314- #define _PyGCHead_PREV (g ) ((PyGC_Head*)((g)->_gc_prev & _PyGC_PREV_MASK))
315- #define _PyGCHead_SET_PREV (g , p ) do { \
316- assert(((uintptr_t)p & ~_PyGC_PREV_MASK) == 0); \
317- (g)->_gc_prev = ((g)->_gc_prev & ~_PyGC_PREV_MASK) \
318- | ((uintptr_t)(p)); \
319- } while (0)
320-
321- #define _PyGCHead_FINALIZED (g ) \
322- (((g)->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0)
323- #define _PyGCHead_SET_FINALIZED (g ) \
324- ((g)->_gc_prev |= _PyGC_PREV_MASK_FINALIZED)
325-
326- #define _PyGC_FINALIZED (o ) \
327- _PyGCHead_FINALIZED(_Py_AS_GC(o))
328- #define _PyGC_SET_FINALIZED (o ) \
329- _PyGCHead_SET_FINALIZED(_Py_AS_GC(o))
330- #endif /* !defined(Py_LIMITED_API) */
331236
332- #ifndef Py_LIMITED_API
333- PyAPI_FUNC (PyObject * ) _PyObject_GC_Malloc (size_t size );
334- PyAPI_FUNC (PyObject * ) _PyObject_GC_Calloc (size_t size );
335- #endif /* !Py_LIMITED_API */
336237PyAPI_FUNC (PyObject * ) _PyObject_GC_New (PyTypeObject * );
337238PyAPI_FUNC (PyVarObject * ) _PyObject_GC_NewVar (PyTypeObject * , Py_ssize_t );
338239
@@ -368,13 +269,10 @@ PyAPI_FUNC(void) PyObject_GC_Del(void *);
368269 } \
369270 } while (0)
370271
371-
372- /* Test if a type supports weak references */
373272#ifndef Py_LIMITED_API
374- #define PyType_SUPPORTS_WEAKREFS (t ) ((t)->tp_weaklistoffset > 0)
375-
376- #define PyObject_GET_WEAKREFS_LISTPTR (o ) \
377- ((PyObject **) (((char *) (o)) + Py_TYPE(o)->tp_weaklistoffset))
273+ # define Py_CPYTHON_OBJIMPL_H
274+ # include "cpython/objimpl.h"
275+ # undef Py_CPYTHON_OBJIMPL_H
378276#endif
379277
380278#ifdef __cplusplus
0 commit comments