mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	Allow PyObject_Del to be used as a function designator. Provide binary
compatibility function. Make PyObject_GC_Track and PyObject_GC_UnTrack functions instead of trivial macros wrapping functions. Provide binary compatibility functions.
This commit is contained in:
		
							parent
							
								
									20d0a1a071
								
							
						
					
					
						commit
						fec4eb1be1
					
				
					 1 changed files with 39 additions and 14 deletions
				
			
		| 
						 | 
					@ -810,14 +810,26 @@ void _PyGC_Dump(PyGC_Head *g)
 | 
				
			||||||
/* extension modules might be compiled with GC support so these
 | 
					/* extension modules might be compiled with GC support so these
 | 
				
			||||||
   functions must always be available */
 | 
					   functions must always be available */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#undef PyObject_GC_Track
 | 
				
			||||||
 | 
					#undef PyObject_GC_UnTrack
 | 
				
			||||||
 | 
					#undef PyObject_GC_Del
 | 
				
			||||||
 | 
					#undef _PyObject_GC_Malloc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
_PyObject_GC_Track(PyObject *op)
 | 
					PyObject_GC_Track(void *op)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	_PyObject_GC_TRACK(op);
 | 
						_PyObject_GC_TRACK(op);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* for binary compatibility with 2.2 */
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
_PyObject_GC_UnTrack(PyObject *op)
 | 
					_PyObject_GC_Track(PyObject *op)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PyObject_GC_Track(op);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					PyObject_GC_UnTrack(void *op)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef WITH_CYCLE_GC
 | 
					#ifdef WITH_CYCLE_GC
 | 
				
			||||||
	PyGC_Head *gc = AS_GC(op);
 | 
						PyGC_Head *gc = AS_GC(op);
 | 
				
			||||||
| 
						 | 
					@ -826,14 +838,19 @@ _PyObject_GC_UnTrack(PyObject *op)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* for binary compatibility with 2.2 */
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					_PyObject_GC_UnTrack(PyObject *op)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PyObject_GC_UnTrack(op);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PyObject *
 | 
					PyObject *
 | 
				
			||||||
_PyObject_GC_Malloc(PyTypeObject *tp, int nitems)
 | 
					_PyObject_GC_Malloc(size_t basicsize)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	PyObject *op;
 | 
						PyObject *op;
 | 
				
			||||||
	const size_t basicsize = _PyObject_VAR_SIZE(tp, nitems);
 | 
					 | 
				
			||||||
#ifdef WITH_CYCLE_GC
 | 
					#ifdef WITH_CYCLE_GC
 | 
				
			||||||
	const size_t nbytes = sizeof(PyGC_Head) + basicsize;
 | 
						PyGC_Head *g = PyObject_MALLOC(sizeof(PyGC_Head) + basicsize);
 | 
				
			||||||
	PyGC_Head *g = _PyMalloc_MALLOC(nbytes);
 | 
					 | 
				
			||||||
	if (g == NULL)
 | 
						if (g == NULL)
 | 
				
			||||||
		return (PyObject *)PyErr_NoMemory();
 | 
							return (PyObject *)PyErr_NoMemory();
 | 
				
			||||||
	g->gc.gc_next = NULL;
 | 
						g->gc.gc_next = NULL;
 | 
				
			||||||
| 
						 | 
					@ -849,7 +866,7 @@ _PyObject_GC_Malloc(PyTypeObject *tp, int nitems)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	op = FROM_GC(g);
 | 
						op = FROM_GC(g);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	op = _PyMalloc_MALLOC(basicsize);
 | 
						op = PyObject_MALLOC(basicsize);
 | 
				
			||||||
	if (op == NULL)
 | 
						if (op == NULL)
 | 
				
			||||||
		return (PyObject *)PyErr_NoMemory();
 | 
							return (PyObject *)PyErr_NoMemory();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -860,14 +877,15 @@ _PyObject_GC_Malloc(PyTypeObject *tp, int nitems)
 | 
				
			||||||
PyObject *
 | 
					PyObject *
 | 
				
			||||||
_PyObject_GC_New(PyTypeObject *tp)
 | 
					_PyObject_GC_New(PyTypeObject *tp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	PyObject *op = _PyObject_GC_Malloc(tp, 0);
 | 
						PyObject *op = _PyObject_GC_Malloc(_PyObject_SIZE(tp));
 | 
				
			||||||
	return PyObject_INIT(op, tp);
 | 
						return PyObject_INIT(op, tp);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PyVarObject *
 | 
					PyVarObject *
 | 
				
			||||||
_PyObject_GC_NewVar(PyTypeObject *tp, int nitems)
 | 
					_PyObject_GC_NewVar(PyTypeObject *tp, int nitems)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	PyVarObject *op = (PyVarObject *) _PyObject_GC_Malloc(tp, nitems);
 | 
						const size_t size = _PyObject_VAR_SIZE(tp, nitems);
 | 
				
			||||||
 | 
						PyVarObject *op = (PyVarObject *) _PyObject_GC_Malloc(size);
 | 
				
			||||||
	return PyObject_INIT_VAR(op, tp, nitems);
 | 
						return PyObject_INIT_VAR(op, tp, nitems);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -877,12 +895,12 @@ _PyObject_GC_Resize(PyVarObject *op, int nitems)
 | 
				
			||||||
	const size_t basicsize = _PyObject_VAR_SIZE(op->ob_type, nitems);
 | 
						const size_t basicsize = _PyObject_VAR_SIZE(op->ob_type, nitems);
 | 
				
			||||||
#ifdef WITH_CYCLE_GC
 | 
					#ifdef WITH_CYCLE_GC
 | 
				
			||||||
	PyGC_Head *g = AS_GC(op);
 | 
						PyGC_Head *g = AS_GC(op);
 | 
				
			||||||
	g = _PyMalloc_REALLOC(g,  sizeof(PyGC_Head) + basicsize);
 | 
						g = PyObject_REALLOC(g,  sizeof(PyGC_Head) + basicsize);
 | 
				
			||||||
	if (g == NULL)
 | 
						if (g == NULL)
 | 
				
			||||||
		return (PyVarObject *)PyErr_NoMemory();
 | 
							return (PyVarObject *)PyErr_NoMemory();
 | 
				
			||||||
	op = (PyVarObject *) FROM_GC(g);
 | 
						op = (PyVarObject *) FROM_GC(g);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	op = _PyMalloc_REALLOC(op, basicsize);
 | 
						op = PyObject_REALLOC(op, basicsize);
 | 
				
			||||||
	if (op == NULL)
 | 
						if (op == NULL)
 | 
				
			||||||
		return (PyVarObject *)PyErr_NoMemory();
 | 
							return (PyVarObject *)PyErr_NoMemory();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -891,7 +909,7 @@ _PyObject_GC_Resize(PyVarObject *op, int nitems)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
_PyObject_GC_Del(PyObject *op)
 | 
					PyObject_GC_Del(void *op)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef WITH_CYCLE_GC
 | 
					#ifdef WITH_CYCLE_GC
 | 
				
			||||||
	PyGC_Head *g = AS_GC(op);
 | 
						PyGC_Head *g = AS_GC(op);
 | 
				
			||||||
| 
						 | 
					@ -900,9 +918,16 @@ _PyObject_GC_Del(PyObject *op)
 | 
				
			||||||
	if (allocated > 0) {
 | 
						if (allocated > 0) {
 | 
				
			||||||
		allocated--;
 | 
							allocated--;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_PyMalloc_FREE(g);
 | 
						PyObject_FREE(g);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	_PyMalloc_FREE(op);
 | 
						PyObject_FREE(op);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* for binary compatibility with 2.2 */
 | 
				
			||||||
 | 
					#undef _PyObject_GC_Del
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					_PyObject_GC_Del(PyObject *op)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PyObject_GC_Del(op);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue