mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
part 2 of Neil Schemenauer's GC patches:
This patch modifies the type structures of objects that participate in GC. The object's tp_basicsize is increased when GC is enabled. GC information is prefixed to the object to maintain binary compatibility. GC objects also define the tp_flag Py_TPFLAGS_GC.
This commit is contained in:
parent
d22162bac7
commit
d08b4c4524
7 changed files with 36 additions and 20 deletions
|
@ -93,7 +93,8 @@ PyTuple_New(size)
|
|||
int nbytes = size * sizeof(PyObject *);
|
||||
/* Check for overflow */
|
||||
if (nbytes / sizeof(PyObject *) != (size_t)size ||
|
||||
(nbytes += sizeof(PyTupleObject) - sizeof(PyObject *))
|
||||
(nbytes += sizeof(PyTupleObject) - sizeof(PyObject *)
|
||||
+ PyGC_INFO_SIZE)
|
||||
<= 0)
|
||||
{
|
||||
return PyErr_NoMemory();
|
||||
|
@ -452,7 +453,7 @@ PyTypeObject PyTuple_Type = {
|
|||
PyObject_HEAD_INIT(&PyType_Type)
|
||||
0,
|
||||
"tuple",
|
||||
sizeof(PyTupleObject) - sizeof(PyObject *),
|
||||
sizeof(PyTupleObject) - sizeof(PyObject *) + PyGC_INFO_SIZE,
|
||||
sizeof(PyObject *),
|
||||
(destructor)tupledealloc, /*tp_dealloc*/
|
||||
(printfunc)tupleprint, /*tp_print*/
|
||||
|
@ -469,7 +470,7 @@ PyTypeObject PyTuple_Type = {
|
|||
0, /*tp_getattro*/
|
||||
0, /*tp_setattro*/
|
||||
0, /*tp_as_buffer*/
|
||||
Py_TPFLAGS_DEFAULT, /*tp_flags*/
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC, /*tp_flags*/
|
||||
0, /*tp_doc*/
|
||||
(traverseproc)tupletraverse, /* tp_traverse */
|
||||
};
|
||||
|
@ -557,8 +558,9 @@ _PyTuple_Resize(pv, newsize, last_is_sticky)
|
|||
#endif
|
||||
{
|
||||
sv = (PyTupleObject *)
|
||||
PyObject_REALLOC((char *)v,
|
||||
sizeof(PyTupleObject) + newsize * sizeof(PyObject *));
|
||||
PyObject_REALLOC((char *)v, sizeof(PyTupleObject)
|
||||
+ PyGC_INFO_SIZE
|
||||
+ newsize * sizeof(PyObject *));
|
||||
*pv = (PyObject *) sv;
|
||||
if (sv == NULL) {
|
||||
PyObject_DEL(v);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue