Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
e83c00ef
Kaydet (Commit)
e83c00ef
authored
Agu 29, 2001
tarafından
Neil Schemenauer
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Use new GC API.
üst
fd34369e
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
76 additions
and
99 deletions
+76
-99
_weakref.c
Modules/_weakref.c
+10
-10
cellobject.c
Objects/cellobject.c
+6
-6
classobject.c
Objects/classobject.c
+19
-22
dictobject.c
Objects/dictobject.c
+6
-7
funcobject.c
Objects/funcobject.c
+6
-7
listobject.c
Objects/listobject.c
+10
-15
moduleobject.c
Objects/moduleobject.c
+6
-6
tupleobject.c
Objects/tupleobject.c
+13
-26
No files found.
Modules/_weakref.c
Dosyayı görüntüle @
e83c00ef
...
@@ -38,7 +38,7 @@ new_weakref(void)
...
@@ -38,7 +38,7 @@ new_weakref(void)
_Py_NewReference
((
PyObject
*
)
result
);
_Py_NewReference
((
PyObject
*
)
result
);
}
}
else
{
else
{
result
=
PyObject_
NEW
(
PyWeakReference
,
&
PyWeakReference_Type
);
result
=
PyObject_
GC_New
(
PyWeakReference
,
&
PyWeakReference_Type
);
}
}
if
(
result
)
if
(
result
)
result
->
hash
=
-
1
;
result
->
hash
=
-
1
;
...
@@ -77,8 +77,8 @@ clear_weakref(PyWeakReference *self)
...
@@ -77,8 +77,8 @@ clear_weakref(PyWeakReference *self)
static
void
static
void
weakref_dealloc
(
PyWeakReference
*
self
)
weakref_dealloc
(
PyWeakReference
*
self
)
{
{
PyObject_GC_UnTrack
((
PyObject
*
)
self
);
clear_weakref
(
self
);
clear_weakref
(
self
);
PyObject_GC_Fini
((
PyObject
*
)
self
);
self
->
wr_next
=
free_list
;
self
->
wr_next
=
free_list
;
free_list
=
self
;
free_list
=
self
;
}
}
...
@@ -170,7 +170,7 @@ PyWeakReference_Type = {
...
@@ -170,7 +170,7 @@ PyWeakReference_Type = {
PyObject_HEAD_INIT
(
NULL
)
PyObject_HEAD_INIT
(
NULL
)
0
,
0
,
"weakref"
,
"weakref"
,
sizeof
(
PyWeakReference
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyWeakReference
),
0
,
0
,
(
destructor
)
weakref_dealloc
,
/*tp_dealloc*/
(
destructor
)
weakref_dealloc
,
/*tp_dealloc*/
0
,
/*tp_print*/
0
,
/*tp_print*/
...
@@ -187,7 +187,7 @@ PyWeakReference_Type = {
...
@@ -187,7 +187,7 @@ PyWeakReference_Type = {
0
,
/*tp_getattro*/
0
,
/*tp_getattro*/
0
,
/*tp_setattro*/
0
,
/*tp_setattro*/
0
,
/*tp_as_buffer*/
0
,
/*tp_as_buffer*/
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_GC
|
Py_TPFLAGS_HAVE_RICHCOMPARE
,
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_
GC
|
Py_TPFLAGS_HAVE_RICHCOMPARE
,
0
,
/*tp_doc*/
0
,
/*tp_doc*/
(
traverseproc
)
gc_traverse
,
/*tp_traverse*/
(
traverseproc
)
gc_traverse
,
/*tp_traverse*/
(
inquiry
)
gc_clear
,
/*tp_clear*/
(
inquiry
)
gc_clear
,
/*tp_clear*/
...
@@ -429,7 +429,7 @@ PyWeakProxy_Type = {
...
@@ -429,7 +429,7 @@ PyWeakProxy_Type = {
PyObject_HEAD_INIT
(
NULL
)
PyObject_HEAD_INIT
(
NULL
)
0
,
0
,
"weakproxy"
,
"weakproxy"
,
sizeof
(
PyWeakReference
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyWeakReference
),
0
,
0
,
/* methods */
/* methods */
(
destructor
)
weakref_dealloc
,
/*tp_dealloc*/
(
destructor
)
weakref_dealloc
,
/*tp_dealloc*/
...
@@ -447,7 +447,7 @@ PyWeakProxy_Type = {
...
@@ -447,7 +447,7 @@ PyWeakProxy_Type = {
(
getattrofunc
)
proxy_getattr
,
/*tp_getattro*/
(
getattrofunc
)
proxy_getattr
,
/*tp_getattro*/
(
setattrofunc
)
proxy_setattr
,
/*tp_setattro*/
(
setattrofunc
)
proxy_setattr
,
/*tp_setattro*/
0
,
/*tp_as_buffer*/
0
,
/*tp_as_buffer*/
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_GC
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_
GC
|
Py_TPFLAGS_CHECKTYPES
,
/*tp_flags*/
|
Py_TPFLAGS_CHECKTYPES
,
/*tp_flags*/
0
,
/*tp_doc*/
0
,
/*tp_doc*/
(
traverseproc
)
gc_traverse
,
/*tp_traverse*/
(
traverseproc
)
gc_traverse
,
/*tp_traverse*/
...
@@ -460,7 +460,7 @@ PyWeakCallableProxy_Type = {
...
@@ -460,7 +460,7 @@ PyWeakCallableProxy_Type = {
PyObject_HEAD_INIT
(
NULL
)
PyObject_HEAD_INIT
(
NULL
)
0
,
0
,
"weakcallableproxy"
,
"weakcallableproxy"
,
sizeof
(
PyWeakReference
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyWeakReference
),
0
,
0
,
/* methods */
/* methods */
(
destructor
)
weakref_dealloc
,
/*tp_dealloc*/
(
destructor
)
weakref_dealloc
,
/*tp_dealloc*/
...
@@ -478,7 +478,7 @@ PyWeakCallableProxy_Type = {
...
@@ -478,7 +478,7 @@ PyWeakCallableProxy_Type = {
(
getattrofunc
)
proxy_getattr
,
/*tp_getattro*/
(
getattrofunc
)
proxy_getattr
,
/*tp_getattro*/
(
setattrofunc
)
proxy_setattr
,
/*tp_setattro*/
(
setattrofunc
)
proxy_setattr
,
/*tp_setattro*/
0
,
/*tp_as_buffer*/
0
,
/*tp_as_buffer*/
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_GC
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_
GC
|
Py_TPFLAGS_CHECKTYPES
,
/*tp_flags*/
|
Py_TPFLAGS_CHECKTYPES
,
/*tp_flags*/
0
,
/*tp_doc*/
0
,
/*tp_doc*/
(
traverseproc
)
gc_traverse
,
/*tp_traverse*/
(
traverseproc
)
gc_traverse
,
/*tp_traverse*/
...
@@ -648,7 +648,7 @@ weakref_ref(PyObject *self, PyObject *args)
...
@@ -648,7 +648,7 @@ weakref_ref(PyObject *self, PyObject *args)
else
else
insert_after
(
result
,
prev
);
insert_after
(
result
,
prev
);
}
}
PyObject_GC_
Init
((
PyObject
*
)
result
);
PyObject_GC_
Track
(
result
);
}
}
}
}
}
}
...
@@ -706,7 +706,7 @@ weakref_proxy(PyObject *self, PyObject *args)
...
@@ -706,7 +706,7 @@ weakref_proxy(PyObject *self, PyObject *args)
insert_head
(
result
,
list
);
insert_head
(
result
,
list
);
else
else
insert_after
(
result
,
prev
);
insert_after
(
result
,
prev
);
PyObject_GC_
Init
((
PyObject
*
)
result
);
PyObject_GC_
Track
(
result
);
}
}
}
}
}
}
...
...
Objects/cellobject.c
Dosyayı görüntüle @
e83c00ef
...
@@ -7,11 +7,11 @@ PyCell_New(PyObject *obj)
...
@@ -7,11 +7,11 @@ PyCell_New(PyObject *obj)
{
{
PyCellObject
*
op
;
PyCellObject
*
op
;
op
=
(
PyCellObject
*
)
PyObject_New
(
PyCellObject
,
&
PyCell_Type
);
op
=
(
PyCellObject
*
)
PyObject_
GC_
New
(
PyCellObject
,
&
PyCell_Type
);
op
->
ob_ref
=
obj
;
op
->
ob_ref
=
obj
;
Py_XINCREF
(
obj
);
Py_XINCREF
(
obj
);
PyObject_GC_Init
(
op
);
_PyObject_GC_TRACK
(
op
);
return
(
PyObject
*
)
op
;
return
(
PyObject
*
)
op
;
}
}
...
@@ -42,9 +42,9 @@ PyCell_Set(PyObject *op, PyObject *obj)
...
@@ -42,9 +42,9 @@ PyCell_Set(PyObject *op, PyObject *obj)
static
void
static
void
cell_dealloc
(
PyCellObject
*
op
)
cell_dealloc
(
PyCellObject
*
op
)
{
{
PyObject_GC_Fini
(
op
);
_PyObject_GC_UNTRACK
(
op
);
Py_XDECREF
(
op
->
ob_ref
);
Py_XDECREF
(
op
->
ob_ref
);
PyObject_Del
(
op
);
PyObject_
GC_
Del
(
op
);
}
}
static
int
static
int
...
@@ -90,7 +90,7 @@ PyTypeObject PyCell_Type = {
...
@@ -90,7 +90,7 @@ PyTypeObject PyCell_Type = {
PyObject_HEAD_INIT
(
&
PyType_Type
)
PyObject_HEAD_INIT
(
&
PyType_Type
)
0
,
0
,
"cell"
,
"cell"
,
sizeof
(
PyCellObject
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyCellObject
),
0
,
0
,
(
destructor
)
cell_dealloc
,
/* tp_dealloc */
(
destructor
)
cell_dealloc
,
/* tp_dealloc */
0
,
/* tp_print */
0
,
/* tp_print */
...
@@ -107,7 +107,7 @@ PyTypeObject PyCell_Type = {
...
@@ -107,7 +107,7 @@ PyTypeObject PyCell_Type = {
PyObject_GenericGetAttr
,
/* tp_getattro */
PyObject_GenericGetAttr
,
/* tp_getattro */
0
,
/* tp_setattro */
0
,
/* tp_setattro */
0
,
/* tp_as_buffer */
0
,
/* tp_as_buffer */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
GC
,
/* tp_flags */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_GC
,
/* tp_flags */
0
,
/* tp_doc */
0
,
/* tp_doc */
(
traverseproc
)
cell_traverse
,
/* tp_traverse */
(
traverseproc
)
cell_traverse
,
/* tp_traverse */
(
inquiry
)
cell_clear
,
/* tp_clear */
(
inquiry
)
cell_clear
,
/* tp_clear */
...
...
Objects/classobject.c
Dosyayı görüntüle @
e83c00ef
...
@@ -81,7 +81,7 @@ PyClass_New(PyObject *bases, PyObject *dict, PyObject *name)
...
@@ -81,7 +81,7 @@ PyClass_New(PyObject *bases, PyObject *dict, PyObject *name)
}
}
Py_INCREF
(
bases
);
Py_INCREF
(
bases
);
}
}
op
=
PyObject_
NEW
(
PyClassObject
,
&
PyClass_Type
);
op
=
PyObject_
GC_New
(
PyClassObject
,
&
PyClass_Type
);
if
(
op
==
NULL
)
{
if
(
op
==
NULL
)
{
Py_DECREF
(
bases
);
Py_DECREF
(
bases
);
return
NULL
;
return
NULL
;
...
@@ -102,7 +102,7 @@ PyClass_New(PyObject *bases, PyObject *dict, PyObject *name)
...
@@ -102,7 +102,7 @@ PyClass_New(PyObject *bases, PyObject *dict, PyObject *name)
Py_XINCREF
(
op
->
cl_getattr
);
Py_XINCREF
(
op
->
cl_getattr
);
Py_XINCREF
(
op
->
cl_setattr
);
Py_XINCREF
(
op
->
cl_setattr
);
Py_XINCREF
(
op
->
cl_delattr
);
Py_XINCREF
(
op
->
cl_delattr
);
PyObject_GC_Init
(
op
);
_PyObject_GC_TRACK
(
op
);
return
(
PyObject
*
)
op
;
return
(
PyObject
*
)
op
;
}
}
...
@@ -123,15 +123,14 @@ class_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
...
@@ -123,15 +123,14 @@ class_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
static
void
static
void
class_dealloc
(
PyClassObject
*
op
)
class_dealloc
(
PyClassObject
*
op
)
{
{
PyObject_GC_Fini
(
op
);
_PyObject_GC_UNTRACK
(
op
);
Py_DECREF
(
op
->
cl_bases
);
Py_DECREF
(
op
->
cl_bases
);
Py_DECREF
(
op
->
cl_dict
);
Py_DECREF
(
op
->
cl_dict
);
Py_XDECREF
(
op
->
cl_name
);
Py_XDECREF
(
op
->
cl_name
);
Py_XDECREF
(
op
->
cl_getattr
);
Py_XDECREF
(
op
->
cl_getattr
);
Py_XDECREF
(
op
->
cl_setattr
);
Py_XDECREF
(
op
->
cl_setattr
);
Py_XDECREF
(
op
->
cl_delattr
);
Py_XDECREF
(
op
->
cl_delattr
);
op
=
(
PyClassObject
*
)
PyObject_AS_GC
(
op
);
PyObject_GC_Del
(
op
);
PyObject_DEL
(
op
);
}
}
static
PyObject
*
static
PyObject
*
...
@@ -394,7 +393,7 @@ PyTypeObject PyClass_Type = {
...
@@ -394,7 +393,7 @@ PyTypeObject PyClass_Type = {
PyObject_HEAD_INIT
(
&
PyType_Type
)
PyObject_HEAD_INIT
(
&
PyType_Type
)
0
,
0
,
"class"
,
"class"
,
sizeof
(
PyClassObject
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyClassObject
),
0
,
0
,
(
destructor
)
class_dealloc
,
/* tp_dealloc */
(
destructor
)
class_dealloc
,
/* tp_dealloc */
0
,
/* tp_print */
0
,
/* tp_print */
...
@@ -411,7 +410,7 @@ PyTypeObject PyClass_Type = {
...
@@ -411,7 +410,7 @@ PyTypeObject PyClass_Type = {
(
getattrofunc
)
class_getattr
,
/* tp_getattro */
(
getattrofunc
)
class_getattr
,
/* tp_getattro */
(
setattrofunc
)
class_setattr
,
/* tp_setattro */
(
setattrofunc
)
class_setattr
,
/* tp_setattro */
0
,
/* tp_as_buffer */
0
,
/* tp_as_buffer */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
GC
,
/* tp_flags */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_GC
,
/* tp_flags */
0
,
/* tp_doc */
0
,
/* tp_doc */
(
traverseproc
)
class_traverse
,
/* tp_traverse */
(
traverseproc
)
class_traverse
,
/* tp_traverse */
0
,
/* tp_clear */
0
,
/* tp_clear */
...
@@ -474,7 +473,7 @@ PyInstance_NewRaw(PyObject *klass, PyObject *dict)
...
@@ -474,7 +473,7 @@ PyInstance_NewRaw(PyObject *klass, PyObject *dict)
}
}
Py_INCREF
(
dict
);
Py_INCREF
(
dict
);
}
}
inst
=
PyObject_
NEW
(
PyInstanceObject
,
&
PyInstance_Type
);
inst
=
PyObject_
GC_New
(
PyInstanceObject
,
&
PyInstance_Type
);
if
(
inst
==
NULL
)
{
if
(
inst
==
NULL
)
{
Py_DECREF
(
dict
);
Py_DECREF
(
dict
);
return
NULL
;
return
NULL
;
...
@@ -483,7 +482,7 @@ PyInstance_NewRaw(PyObject *klass, PyObject *dict)
...
@@ -483,7 +482,7 @@ PyInstance_NewRaw(PyObject *klass, PyObject *dict)
Py_INCREF
(
klass
);
Py_INCREF
(
klass
);
inst
->
in_class
=
(
PyClassObject
*
)
klass
;
inst
->
in_class
=
(
PyClassObject
*
)
klass
;
inst
->
in_dict
=
dict
;
inst
->
in_dict
=
dict
;
PyObject_GC_Init
(
inst
);
_PyObject_GC_TRACK
(
inst
);
return
(
PyObject
*
)
inst
;
return
(
PyObject
*
)
inst
;
}
}
...
@@ -542,7 +541,7 @@ instance_dealloc(register PyInstanceObject *inst)
...
@@ -542,7 +541,7 @@ instance_dealloc(register PyInstanceObject *inst)
#ifdef Py_REF_DEBUG
#ifdef Py_REF_DEBUG
extern
long
_Py_RefTotal
;
extern
long
_Py_RefTotal
;
#endif
#endif
_PyObject_GC_UNTRACK
(
inst
);
PyObject_ClearWeakRefs
((
PyObject
*
)
inst
);
PyObject_ClearWeakRefs
((
PyObject
*
)
inst
);
/* Temporarily resurrect the object. */
/* Temporarily resurrect the object. */
...
@@ -592,6 +591,7 @@ instance_dealloc(register PyInstanceObject *inst)
...
@@ -592,6 +591,7 @@ instance_dealloc(register PyInstanceObject *inst)
#ifdef COUNT_ALLOCS
#ifdef COUNT_ALLOCS
inst
->
ob_type
->
tp_frees
--
;
inst
->
ob_type
->
tp_frees
--
;
#endif
#endif
_PyObject_GC_TRACK
(
inst
);
return
;
/* __del__ added a reference; don't delete now */
return
;
/* __del__ added a reference; don't delete now */
}
}
#ifdef Py_TRACE_REFS
#ifdef Py_TRACE_REFS
...
@@ -604,11 +604,9 @@ instance_dealloc(register PyInstanceObject *inst)
...
@@ -604,11 +604,9 @@ instance_dealloc(register PyInstanceObject *inst)
inst
->
ob_type
=
NULL
;
inst
->
ob_type
=
NULL
;
#endif
#endif
#endif
#endif
PyObject_GC_Fini
(
inst
);
Py_DECREF
(
inst
->
in_class
);
Py_DECREF
(
inst
->
in_class
);
Py_XDECREF
(
inst
->
in_dict
);
Py_XDECREF
(
inst
->
in_dict
);
inst
=
(
PyInstanceObject
*
)
PyObject_AS_GC
(
inst
);
PyObject_GC_Del
(
inst
);
PyObject_DEL
(
inst
);
}
}
static
PyObject
*
static
PyObject
*
...
@@ -1896,7 +1894,7 @@ PyTypeObject PyInstance_Type = {
...
@@ -1896,7 +1894,7 @@ PyTypeObject PyInstance_Type = {
PyObject_HEAD_INIT
(
&
PyType_Type
)
PyObject_HEAD_INIT
(
&
PyType_Type
)
0
,
0
,
"instance"
,
"instance"
,
sizeof
(
PyInstanceObject
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyInstanceObject
),
0
,
0
,
(
destructor
)
instance_dealloc
,
/* tp_dealloc */
(
destructor
)
instance_dealloc
,
/* tp_dealloc */
0
,
/* tp_print */
0
,
/* tp_print */
...
@@ -1913,7 +1911,7 @@ PyTypeObject PyInstance_Type = {
...
@@ -1913,7 +1911,7 @@ PyTypeObject PyInstance_Type = {
(
getattrofunc
)
instance_getattr
,
/* tp_getattro */
(
getattrofunc
)
instance_getattr
,
/* tp_getattro */
(
setattrofunc
)
instance_setattr
,
/* tp_setattro */
(
setattrofunc
)
instance_setattr
,
/* tp_setattro */
0
,
/* tp_as_buffer */
0
,
/* tp_as_buffer */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_GC
|
Py_TPFLAGS_CHECKTYPES
,
/*tp_flags*/
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_
GC
|
Py_TPFLAGS_CHECKTYPES
,
/*tp_flags*/
0
,
/* tp_doc */
0
,
/* tp_doc */
(
traverseproc
)
instance_traverse
,
/* tp_traverse */
(
traverseproc
)
instance_traverse
,
/* tp_traverse */
0
,
/* tp_clear */
0
,
/* tp_clear */
...
@@ -1946,7 +1944,7 @@ PyMethod_New(PyObject *func, PyObject *self, PyObject *class)
...
@@ -1946,7 +1944,7 @@ PyMethod_New(PyObject *func, PyObject *self, PyObject *class)
PyObject_INIT
(
im
,
&
PyMethod_Type
);
PyObject_INIT
(
im
,
&
PyMethod_Type
);
}
}
else
{
else
{
im
=
PyObject_
NEW
(
PyMethodObject
,
&
PyMethod_Type
);
im
=
PyObject_
GC_New
(
PyMethodObject
,
&
PyMethod_Type
);
if
(
im
==
NULL
)
if
(
im
==
NULL
)
return
NULL
;
return
NULL
;
}
}
...
@@ -1957,7 +1955,7 @@ PyMethod_New(PyObject *func, PyObject *self, PyObject *class)
...
@@ -1957,7 +1955,7 @@ PyMethod_New(PyObject *func, PyObject *self, PyObject *class)
im
->
im_self
=
self
;
im
->
im_self
=
self
;
Py_XINCREF
(
class
);
Py_XINCREF
(
class
);
im
->
im_class
=
class
;
im
->
im_class
=
class
;
PyObject_GC_Init
(
im
);
_PyObject_GC_TRACK
(
im
);
return
(
PyObject
*
)
im
;
return
(
PyObject
*
)
im
;
}
}
...
@@ -2018,8 +2016,8 @@ instancemethod_getattro(register PyMethodObject *im, PyObject *name)
...
@@ -2018,8 +2016,8 @@ instancemethod_getattro(register PyMethodObject *im, PyObject *name)
static
void
static
void
instancemethod_dealloc
(
register
PyMethodObject
*
im
)
instancemethod_dealloc
(
register
PyMethodObject
*
im
)
{
{
_PyObject_GC_UNTRACK
(
im
);
PyObject_ClearWeakRefs
((
PyObject
*
)
im
);
PyObject_ClearWeakRefs
((
PyObject
*
)
im
);
PyObject_GC_Fini
(
im
);
Py_DECREF
(
im
->
im_func
);
Py_DECREF
(
im
->
im_func
);
Py_XDECREF
(
im
->
im_self
);
Py_XDECREF
(
im
->
im_self
);
Py_XDECREF
(
im
->
im_class
);
Py_XDECREF
(
im
->
im_class
);
...
@@ -2244,7 +2242,7 @@ PyTypeObject PyMethod_Type = {
...
@@ -2244,7 +2242,7 @@ PyTypeObject PyMethod_Type = {
PyObject_HEAD_INIT
(
&
PyType_Type
)
PyObject_HEAD_INIT
(
&
PyType_Type
)
0
,
0
,
"instance method"
,
"instance method"
,
sizeof
(
PyMethodObject
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyMethodObject
),
0
,
0
,
(
destructor
)
instancemethod_dealloc
,
/* tp_dealloc */
(
destructor
)
instancemethod_dealloc
,
/* tp_dealloc */
0
,
/* tp_print */
0
,
/* tp_print */
...
@@ -2261,7 +2259,7 @@ PyTypeObject PyMethod_Type = {
...
@@ -2261,7 +2259,7 @@ PyTypeObject PyMethod_Type = {
(
getattrofunc
)
instancemethod_getattro
,
/* tp_getattro */
(
getattrofunc
)
instancemethod_getattro
,
/* tp_getattro */
(
setattrofunc
)
instancemethod_setattro
,
/* tp_setattro */
(
setattrofunc
)
instancemethod_setattro
,
/* tp_setattro */
0
,
/* tp_as_buffer */
0
,
/* tp_as_buffer */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
GC
,
/* tp_flags */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_GC
,
/* tp_flags */
0
,
/* tp_doc */
0
,
/* tp_doc */
(
traverseproc
)
instancemethod_traverse
,
/* tp_traverse */
(
traverseproc
)
instancemethod_traverse
,
/* tp_traverse */
0
,
/* tp_clear */
0
,
/* tp_clear */
...
@@ -2287,7 +2285,6 @@ PyMethod_Fini(void)
...
@@ -2287,7 +2285,6 @@ PyMethod_Fini(void)
while
(
free_list
)
{
while
(
free_list
)
{
PyMethodObject
*
im
=
free_list
;
PyMethodObject
*
im
=
free_list
;
free_list
=
(
PyMethodObject
*
)(
im
->
im_self
);
free_list
=
(
PyMethodObject
*
)(
im
->
im_self
);
im
=
(
PyMethodObject
*
)
PyObject_AS_GC
(
im
);
PyObject_GC_Del
(
im
);
PyObject_DEL
(
im
);
}
}
}
}
Objects/dictobject.c
Dosyayı görüntüle @
e83c00ef
...
@@ -158,7 +158,7 @@ PyDict_New(void)
...
@@ -158,7 +158,7 @@ PyDict_New(void)
Py_AtExit
(
show_counts
);
Py_AtExit
(
show_counts
);
#endif
#endif
}
}
mp
=
PyObject_
NEW
(
dictobject
,
&
PyDict_Type
);
mp
=
PyObject_
GC_New
(
dictobject
,
&
PyDict_Type
);
if
(
mp
==
NULL
)
if
(
mp
==
NULL
)
return
NULL
;
return
NULL
;
EMPTY_TO_MINSIZE
(
mp
);
EMPTY_TO_MINSIZE
(
mp
);
...
@@ -166,7 +166,7 @@ PyDict_New(void)
...
@@ -166,7 +166,7 @@ PyDict_New(void)
#ifdef SHOW_CONVERSION_COUNTS
#ifdef SHOW_CONVERSION_COUNTS
++
created
;
++
created
;
#endif
#endif
PyObject_GC_Init
(
mp
);
_PyObject_GC_TRACK
(
mp
);
return
(
PyObject
*
)
mp
;
return
(
PyObject
*
)
mp
;
}
}
...
@@ -692,7 +692,7 @@ dict_dealloc(register dictobject *mp)
...
@@ -692,7 +692,7 @@ dict_dealloc(register dictobject *mp)
register
dictentry
*
ep
;
register
dictentry
*
ep
;
int
fill
=
mp
->
ma_fill
;
int
fill
=
mp
->
ma_fill
;
Py_TRASHCAN_SAFE_BEGIN
(
mp
)
Py_TRASHCAN_SAFE_BEGIN
(
mp
)
PyObject_GC_Fini
(
mp
);
_PyObject_GC_UNTRACK
(
mp
);
for
(
ep
=
mp
->
ma_table
;
fill
>
0
;
ep
++
)
{
for
(
ep
=
mp
->
ma_table
;
fill
>
0
;
ep
++
)
{
if
(
ep
->
me_key
)
{
if
(
ep
->
me_key
)
{
--
fill
;
--
fill
;
...
@@ -702,8 +702,7 @@ dict_dealloc(register dictobject *mp)
...
@@ -702,8 +702,7 @@ dict_dealloc(register dictobject *mp)
}
}
if
(
mp
->
ma_table
!=
mp
->
ma_smalltable
)
if
(
mp
->
ma_table
!=
mp
->
ma_smalltable
)
PyMem_DEL
(
mp
->
ma_table
);
PyMem_DEL
(
mp
->
ma_table
);
mp
=
(
dictobject
*
)
PyObject_AS_GC
(
mp
);
PyObject_GC_Del
(
mp
);
PyObject_DEL
(
mp
);
Py_TRASHCAN_SAFE_END
(
mp
)
Py_TRASHCAN_SAFE_END
(
mp
)
}
}
...
@@ -1703,7 +1702,7 @@ PyTypeObject PyDict_Type = {
...
@@ -1703,7 +1702,7 @@ PyTypeObject PyDict_Type = {
PyObject_HEAD_INIT
(
&
PyType_Type
)
PyObject_HEAD_INIT
(
&
PyType_Type
)
0
,
0
,
"dictionary"
,
"dictionary"
,
sizeof
(
dictobject
)
+
PyGC_HEAD_SIZE
,
sizeof
(
dictobject
),
0
,
0
,
(
destructor
)
dict_dealloc
,
/* tp_dealloc */
(
destructor
)
dict_dealloc
,
/* tp_dealloc */
(
printfunc
)
dict_print
,
/* tp_print */
(
printfunc
)
dict_print
,
/* tp_print */
...
@@ -1720,7 +1719,7 @@ PyTypeObject PyDict_Type = {
...
@@ -1720,7 +1719,7 @@ PyTypeObject PyDict_Type = {
PyObject_GenericGetAttr
,
/* tp_getattro */
PyObject_GenericGetAttr
,
/* tp_getattro */
0
,
/* tp_setattro */
0
,
/* tp_setattro */
0
,
/* tp_as_buffer */
0
,
/* tp_as_buffer */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_GC
|
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_
GC
|
Py_TPFLAGS_BASETYPE
,
/* tp_flags */
Py_TPFLAGS_BASETYPE
,
/* tp_flags */
"dictionary type"
,
/* tp_doc */
"dictionary type"
,
/* tp_doc */
(
traverseproc
)
dict_traverse
,
/* tp_traverse */
(
traverseproc
)
dict_traverse
,
/* tp_traverse */
...
...
Objects/funcobject.c
Dosyayı görüntüle @
e83c00ef
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
PyObject
*
PyObject
*
PyFunction_New
(
PyObject
*
code
,
PyObject
*
globals
)
PyFunction_New
(
PyObject
*
code
,
PyObject
*
globals
)
{
{
PyFunctionObject
*
op
=
PyObject_
NEW
(
PyFunctionObject
,
PyFunctionObject
*
op
=
PyObject_
GC_New
(
PyFunctionObject
,
&
PyFunction_Type
);
&
PyFunction_Type
);
if
(
op
!=
NULL
)
{
if
(
op
!=
NULL
)
{
PyObject
*
doc
;
PyObject
*
doc
;
...
@@ -37,7 +37,7 @@ PyFunction_New(PyObject *code, PyObject *globals)
...
@@ -37,7 +37,7 @@ PyFunction_New(PyObject *code, PyObject *globals)
}
}
else
else
return
NULL
;
return
NULL
;
PyObject_GC_Init
(
op
);
_PyObject_GC_TRACK
(
op
);
return
(
PyObject
*
)
op
;
return
(
PyObject
*
)
op
;
}
}
...
@@ -223,8 +223,8 @@ func_setattro(PyObject *op, PyObject *name, PyObject *value)
...
@@ -223,8 +223,8 @@ func_setattro(PyObject *op, PyObject *name, PyObject *value)
static
void
static
void
func_dealloc
(
PyFunctionObject
*
op
)
func_dealloc
(
PyFunctionObject
*
op
)
{
{
_PyObject_GC_UNTRACK
(
op
);
PyObject_ClearWeakRefs
((
PyObject
*
)
op
);
PyObject_ClearWeakRefs
((
PyObject
*
)
op
);
PyObject_GC_Fini
(
op
);
Py_DECREF
(
op
->
func_code
);
Py_DECREF
(
op
->
func_code
);
Py_DECREF
(
op
->
func_globals
);
Py_DECREF
(
op
->
func_globals
);
Py_DECREF
(
op
->
func_name
);
Py_DECREF
(
op
->
func_name
);
...
@@ -232,8 +232,7 @@ func_dealloc(PyFunctionObject *op)
...
@@ -232,8 +232,7 @@ func_dealloc(PyFunctionObject *op)
Py_XDECREF
(
op
->
func_doc
);
Py_XDECREF
(
op
->
func_doc
);
Py_XDECREF
(
op
->
func_dict
);
Py_XDECREF
(
op
->
func_dict
);
Py_XDECREF
(
op
->
func_closure
);
Py_XDECREF
(
op
->
func_closure
);
op
=
(
PyFunctionObject
*
)
PyObject_AS_GC
(
op
);
PyObject_GC_Del
(
op
);
PyObject_DEL
(
op
);
}
}
static
PyObject
*
static
PyObject
*
...
@@ -352,7 +351,7 @@ PyTypeObject PyFunction_Type = {
...
@@ -352,7 +351,7 @@ PyTypeObject PyFunction_Type = {
PyObject_HEAD_INIT
(
&
PyType_Type
)
PyObject_HEAD_INIT
(
&
PyType_Type
)
0
,
0
,
"function"
,
"function"
,
sizeof
(
PyFunctionObject
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyFunctionObject
),
0
,
0
,
(
destructor
)
func_dealloc
,
/* tp_dealloc */
(
destructor
)
func_dealloc
,
/* tp_dealloc */
0
,
/* tp_print */
0
,
/* tp_print */
...
@@ -369,7 +368,7 @@ PyTypeObject PyFunction_Type = {
...
@@ -369,7 +368,7 @@ PyTypeObject PyFunction_Type = {
func_getattro
,
/* tp_getattro */
func_getattro
,
/* tp_getattro */
func_setattro
,
/* tp_setattro */
func_setattro
,
/* tp_setattro */
0
,
/* tp_as_buffer */
0
,
/* tp_as_buffer */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
GC
,
/* tp_flags */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_GC
,
/* tp_flags */
0
,
/* tp_doc */
0
,
/* tp_doc */
(
traverseproc
)
func_traverse
,
/* tp_traverse */
(
traverseproc
)
func_traverse
,
/* tp_traverse */
0
,
/* tp_clear */
0
,
/* tp_clear */
...
...
Objects/listobject.c
Dosyayı görüntüle @
e83c00ef
...
@@ -61,27 +61,23 @@ PyList_New(int size)
...
@@ -61,27 +61,23 @@ PyList_New(int size)
if
(
nbytes
/
sizeof
(
PyObject
*
)
!=
(
size_t
)
size
)
{
if
(
nbytes
/
sizeof
(
PyObject
*
)
!=
(
size_t
)
size
)
{
return
PyErr_NoMemory
();
return
PyErr_NoMemory
();
}
}
/* PyObject_NewVar is inlined */
op
=
PyObject_GC_New
(
PyListObject
,
&
PyList_Type
);
op
=
(
PyListObject
*
)
PyObject_MALLOC
(
sizeof
(
PyListObject
)
+
PyGC_HEAD_SIZE
);
if
(
op
==
NULL
)
{
if
(
op
==
NULL
)
{
return
PyErr_NoMemory
()
;
return
NULL
;
}
}
op
=
(
PyListObject
*
)
PyObject_FROM_GC
(
op
);
if
(
size
<=
0
)
{
if
(
size
<=
0
)
{
op
->
ob_item
=
NULL
;
op
->
ob_item
=
NULL
;
}
}
else
{
else
{
op
->
ob_item
=
(
PyObject
**
)
PyMem_MALLOC
(
nbytes
);
op
->
ob_item
=
(
PyObject
**
)
PyMem_MALLOC
(
nbytes
);
if
(
op
->
ob_item
==
NULL
)
{
if
(
op
->
ob_item
==
NULL
)
{
PyObject_FREE
(
PyObject_AS_GC
(
op
));
return
PyErr_NoMemory
();
return
PyErr_NoMemory
();
}
}
}
}
PyObject_INIT_VAR
(
op
,
&
PyList_Type
,
size
)
;
op
->
ob_size
=
size
;
for
(
i
=
0
;
i
<
size
;
i
++
)
for
(
i
=
0
;
i
<
size
;
i
++
)
op
->
ob_item
[
i
]
=
NULL
;
op
->
ob_item
[
i
]
=
NULL
;
PyObject_GC_Init
(
op
);
_PyObject_GC_TRACK
(
op
);
return
(
PyObject
*
)
op
;
return
(
PyObject
*
)
op
;
}
}
...
@@ -200,7 +196,7 @@ list_dealloc(PyListObject *op)
...
@@ -200,7 +196,7 @@ list_dealloc(PyListObject *op)
{
{
int
i
;
int
i
;
Py_TRASHCAN_SAFE_BEGIN
(
op
)
Py_TRASHCAN_SAFE_BEGIN
(
op
)
PyObject_GC_Fini
(
op
);
_PyObject_GC_UNTRACK
(
op
);
if
(
op
->
ob_item
!=
NULL
)
{
if
(
op
->
ob_item
!=
NULL
)
{
/* Do it backwards, for Christian Tismer.
/* Do it backwards, for Christian Tismer.
There's a simple test case where somehow this reduces
There's a simple test case where somehow this reduces
...
@@ -212,8 +208,7 @@ list_dealloc(PyListObject *op)
...
@@ -212,8 +208,7 @@ list_dealloc(PyListObject *op)
}
}
PyMem_FREE
(
op
->
ob_item
);
PyMem_FREE
(
op
->
ob_item
);
}
}
op
=
(
PyListObject
*
)
PyObject_AS_GC
(
op
);
PyObject_GC_Del
(
op
);
PyObject_DEL
(
op
);
Py_TRASHCAN_SAFE_END
(
op
)
Py_TRASHCAN_SAFE_END
(
op
)
}
}
...
@@ -1675,7 +1670,7 @@ PyTypeObject PyList_Type = {
...
@@ -1675,7 +1670,7 @@ PyTypeObject PyList_Type = {
PyObject_HEAD_INIT
(
&
PyType_Type
)
PyObject_HEAD_INIT
(
&
PyType_Type
)
0
,
0
,
"list"
,
"list"
,
sizeof
(
PyListObject
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyListObject
),
0
,
0
,
(
destructor
)
list_dealloc
,
/* tp_dealloc */
(
destructor
)
list_dealloc
,
/* tp_dealloc */
(
printfunc
)
list_print
,
/* tp_print */
(
printfunc
)
list_print
,
/* tp_print */
...
@@ -1692,7 +1687,7 @@ PyTypeObject PyList_Type = {
...
@@ -1692,7 +1687,7 @@ PyTypeObject PyList_Type = {
PyObject_GenericGetAttr
,
/* tp_getattro */
PyObject_GenericGetAttr
,
/* tp_getattro */
0
,
/* tp_setattro */
0
,
/* tp_setattro */
0
,
/* tp_as_buffer */
0
,
/* tp_as_buffer */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_GC
|
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_
GC
|
Py_TPFLAGS_BASETYPE
,
/* tp_flags */
Py_TPFLAGS_BASETYPE
,
/* tp_flags */
list_doc
,
/* tp_doc */
list_doc
,
/* tp_doc */
(
traverseproc
)
list_traverse
,
/* tp_traverse */
(
traverseproc
)
list_traverse
,
/* tp_traverse */
...
@@ -1762,7 +1757,7 @@ static PyTypeObject immutable_list_type = {
...
@@ -1762,7 +1757,7 @@ static PyTypeObject immutable_list_type = {
PyObject_HEAD_INIT
(
&
PyType_Type
)
PyObject_HEAD_INIT
(
&
PyType_Type
)
0
,
0
,
"list (immutable, during sort)"
,
"list (immutable, during sort)"
,
sizeof
(
PyListObject
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyListObject
),
0
,
0
,
0
,
/* Cannot happen */
/* tp_dealloc */
0
,
/* Cannot happen */
/* tp_dealloc */
(
printfunc
)
list_print
,
/* tp_print */
(
printfunc
)
list_print
,
/* tp_print */
...
@@ -1779,7 +1774,7 @@ static PyTypeObject immutable_list_type = {
...
@@ -1779,7 +1774,7 @@ static PyTypeObject immutable_list_type = {
PyObject_GenericGetAttr
,
/* tp_getattro */
PyObject_GenericGetAttr
,
/* tp_getattro */
0
,
/* tp_setattro */
0
,
/* tp_setattro */
0
,
/* tp_as_buffer */
0
,
/* tp_as_buffer */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
GC
,
/* tp_flags */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_GC
,
/* tp_flags */
list_doc
,
/* tp_doc */
list_doc
,
/* tp_doc */
(
traverseproc
)
list_traverse
,
/* tp_traverse */
(
traverseproc
)
list_traverse
,
/* tp_traverse */
0
,
/* tp_clear */
0
,
/* tp_clear */
...
...
Objects/moduleobject.c
Dosyayı görüntüle @
e83c00ef
...
@@ -19,12 +19,11 @@ PyModule_New(char *name)
...
@@ -19,12 +19,11 @@ PyModule_New(char *name)
{
{
PyModuleObject
*
m
;
PyModuleObject
*
m
;
PyObject
*
nameobj
;
PyObject
*
nameobj
;
m
=
PyObject_
NEW
(
PyModuleObject
,
&
PyModule_Type
);
m
=
PyObject_
GC_New
(
PyModuleObject
,
&
PyModule_Type
);
if
(
m
==
NULL
)
if
(
m
==
NULL
)
return
NULL
;
return
NULL
;
nameobj
=
PyString_FromString
(
name
);
nameobj
=
PyString_FromString
(
name
);
m
->
md_dict
=
PyDict_New
();
m
->
md_dict
=
PyDict_New
();
PyObject_GC_Init
(
m
);
if
(
m
->
md_dict
==
NULL
||
nameobj
==
NULL
)
if
(
m
->
md_dict
==
NULL
||
nameobj
==
NULL
)
goto
fail
;
goto
fail
;
if
(
PyDict_SetItemString
(
m
->
md_dict
,
"__name__"
,
nameobj
)
!=
0
)
if
(
PyDict_SetItemString
(
m
->
md_dict
,
"__name__"
,
nameobj
)
!=
0
)
...
@@ -32,6 +31,7 @@ PyModule_New(char *name)
...
@@ -32,6 +31,7 @@ PyModule_New(char *name)
if
(
PyDict_SetItemString
(
m
->
md_dict
,
"__doc__"
,
Py_None
)
!=
0
)
if
(
PyDict_SetItemString
(
m
->
md_dict
,
"__doc__"
,
Py_None
)
!=
0
)
goto
fail
;
goto
fail
;
Py_DECREF
(
nameobj
);
Py_DECREF
(
nameobj
);
PyObject_GC_Track
(
m
);
return
(
PyObject
*
)
m
;
return
(
PyObject
*
)
m
;
fail:
fail:
...
@@ -146,12 +146,12 @@ module_init(PyModuleObject *m, PyObject *args, PyObject *kw)
...
@@ -146,12 +146,12 @@ module_init(PyModuleObject *m, PyObject *args, PyObject *kw)
static
void
static
void
module_dealloc
(
PyModuleObject
*
m
)
module_dealloc
(
PyModuleObject
*
m
)
{
{
PyObject_GC_
Fini
(
m
);
PyObject_GC_
UnTrack
(
m
);
if
(
m
->
md_dict
!=
NULL
)
{
if
(
m
->
md_dict
!=
NULL
)
{
_PyModule_Clear
((
PyObject
*
)
m
);
_PyModule_Clear
((
PyObject
*
)
m
);
Py_DECREF
(
m
->
md_dict
);
Py_DECREF
(
m
->
md_dict
);
}
}
PyObject_
DEL
(
PyObject_AS_GC
(
m
)
);
PyObject_
GC_Del
(
m
);
}
}
static
PyObject
*
static
PyObject
*
...
@@ -188,7 +188,7 @@ PyTypeObject PyModule_Type = {
...
@@ -188,7 +188,7 @@ PyTypeObject PyModule_Type = {
PyObject_HEAD_INIT
(
&
PyType_Type
)
PyObject_HEAD_INIT
(
&
PyType_Type
)
0
,
/* ob_size */
0
,
/* ob_size */
"module"
,
/* tp_name */
"module"
,
/* tp_name */
sizeof
(
PyModuleObject
)
+
PyGC_HEAD_SIZE
,
/* tp_size */
sizeof
(
PyModuleObject
)
,
/* tp_size */
0
,
/* tp_itemsize */
0
,
/* tp_itemsize */
(
destructor
)
module_dealloc
,
/* tp_dealloc */
(
destructor
)
module_dealloc
,
/* tp_dealloc */
0
,
/* tp_print */
0
,
/* tp_print */
...
@@ -205,7 +205,7 @@ PyTypeObject PyModule_Type = {
...
@@ -205,7 +205,7 @@ PyTypeObject PyModule_Type = {
PyObject_GenericGetAttr
,
/* tp_getattro */
PyObject_GenericGetAttr
,
/* tp_getattro */
PyObject_GenericSetAttr
,
/* tp_setattro */
PyObject_GenericSetAttr
,
/* tp_setattro */
0
,
/* tp_as_buffer */
0
,
/* tp_as_buffer */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_GC
|
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_
GC
|
Py_TPFLAGS_BASETYPE
,
/* tp_flags */
Py_TPFLAGS_BASETYPE
,
/* tp_flags */
0
,
/* tp_doc */
0
,
/* tp_doc */
(
traverseproc
)
module_traverse
,
/* tp_traverse */
(
traverseproc
)
module_traverse
,
/* tp_traverse */
...
...
Objects/tupleobject.c
Dosyayı görüntüle @
e83c00ef
...
@@ -62,18 +62,14 @@ PyTuple_New(register int size)
...
@@ -62,18 +62,14 @@ PyTuple_New(register int size)
int
nbytes
=
size
*
sizeof
(
PyObject
*
);
int
nbytes
=
size
*
sizeof
(
PyObject
*
);
/* Check for overflow */
/* Check for overflow */
if
(
nbytes
/
sizeof
(
PyObject
*
)
!=
(
size_t
)
size
||
if
(
nbytes
/
sizeof
(
PyObject
*
)
!=
(
size_t
)
size
||
(
nbytes
+=
sizeof
(
PyTupleObject
)
-
sizeof
(
PyObject
*
)
(
nbytes
+=
sizeof
(
PyTupleObject
)
-
sizeof
(
PyObject
*
))
+
PyGC_HEAD_SIZE
)
<=
0
)
<=
0
)
{
{
return
PyErr_NoMemory
();
return
PyErr_NoMemory
();
}
}
/* PyObject_NewVar is inlined */
op
=
PyObject_GC_NewVar
(
PyTupleObject
,
&
PyTuple_Type
,
size
);
op
=
(
PyTupleObject
*
)
PyObject_MALLOC
(
nbytes
);
if
(
op
==
NULL
)
if
(
op
==
NULL
)
return
PyErr_NoMemory
();
return
NULL
;
op
=
(
PyTupleObject
*
)
PyObject_FROM_GC
(
op
);
PyObject_INIT_VAR
(
op
,
&
PyTuple_Type
,
size
);
}
}
for
(
i
=
0
;
i
<
size
;
i
++
)
for
(
i
=
0
;
i
<
size
;
i
++
)
op
->
ob_item
[
i
]
=
NULL
;
op
->
ob_item
[
i
]
=
NULL
;
...
@@ -84,7 +80,7 @@ PyTuple_New(register int size)
...
@@ -84,7 +80,7 @@ PyTuple_New(register int size)
Py_INCREF
(
op
);
/* extra INCREF so that this is never freed */
Py_INCREF
(
op
);
/* extra INCREF so that this is never freed */
}
}
#endif
#endif
PyObject_GC_Init
(
op
);
_PyObject_GC_TRACK
(
op
);
return
(
PyObject
*
)
op
;
return
(
PyObject
*
)
op
;
}
}
...
@@ -144,7 +140,7 @@ tupledealloc(register PyTupleObject *op)
...
@@ -144,7 +140,7 @@ tupledealloc(register PyTupleObject *op)
register
int
i
;
register
int
i
;
register
int
len
=
op
->
ob_size
;
register
int
len
=
op
->
ob_size
;
Py_TRASHCAN_SAFE_BEGIN
(
op
)
Py_TRASHCAN_SAFE_BEGIN
(
op
)
PyObject_GC_Fini
(
op
);
_PyObject_GC_UNTRACK
(
op
);
if
(
len
>
0
)
{
if
(
len
>
0
)
{
i
=
len
;
i
=
len
;
while
(
--
i
>=
0
)
while
(
--
i
>=
0
)
...
@@ -158,8 +154,7 @@ tupledealloc(register PyTupleObject *op)
...
@@ -158,8 +154,7 @@ tupledealloc(register PyTupleObject *op)
}
}
#endif
#endif
}
}
op
=
(
PyTupleObject
*
)
PyObject_AS_GC
(
op
);
PyObject_GC_Del
(
op
);
PyObject_DEL
(
op
);
done:
done:
Py_TRASHCAN_SAFE_END
(
op
)
Py_TRASHCAN_SAFE_END
(
op
)
}
}
...
@@ -517,7 +512,7 @@ PyTypeObject PyTuple_Type = {
...
@@ -517,7 +512,7 @@ PyTypeObject PyTuple_Type = {
PyObject_HEAD_INIT
(
&
PyType_Type
)
PyObject_HEAD_INIT
(
&
PyType_Type
)
0
,
0
,
"tuple"
,
"tuple"
,
sizeof
(
PyTupleObject
)
-
sizeof
(
PyObject
*
)
+
PyGC_HEAD_SIZE
,
sizeof
(
PyTupleObject
)
-
sizeof
(
PyObject
*
),
sizeof
(
PyObject
*
),
sizeof
(
PyObject
*
),
(
destructor
)
tupledealloc
,
/* tp_dealloc */
(
destructor
)
tupledealloc
,
/* tp_dealloc */
(
printfunc
)
tupleprint
,
/* tp_print */
(
printfunc
)
tupleprint
,
/* tp_print */
...
@@ -534,7 +529,7 @@ PyTypeObject PyTuple_Type = {
...
@@ -534,7 +529,7 @@ PyTypeObject PyTuple_Type = {
PyObject_GenericGetAttr
,
/* tp_getattro */
PyObject_GenericGetAttr
,
/* tp_getattro */
0
,
/* tp_setattro */
0
,
/* tp_setattro */
0
,
/* tp_as_buffer */
0
,
/* tp_as_buffer */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
GC
,
/* tp_flags */
Py_TPFLAGS_DEFAULT
|
Py_TPFLAGS_
HAVE_GC
,
/* tp_flags */
tuple_doc
,
/* tp_doc */
tuple_doc
,
/* tp_doc */
(
traverseproc
)
tupletraverse
,
/* tp_traverse */
(
traverseproc
)
tupletraverse
,
/* tp_traverse */
0
,
/* tp_clear */
0
,
/* tp_clear */
...
@@ -595,30 +590,23 @@ _PyTuple_Resize(PyObject **pv, int newsize)
...
@@ -595,30 +590,23 @@ _PyTuple_Resize(PyObject **pv, int newsize)
#ifdef Py_REF_DEBUG
#ifdef Py_REF_DEBUG
--
_Py_RefTotal
;
--
_Py_RefTotal
;
#endif
#endif
_PyObject_GC_UNTRACK
(
v
);
_Py_ForgetReference
((
PyObject
*
)
v
);
_Py_ForgetReference
((
PyObject
*
)
v
);
for
(
i
=
newsize
;
i
<
v
->
ob_size
;
i
++
)
{
for
(
i
=
newsize
;
i
<
v
->
ob_size
;
i
++
)
{
Py_XDECREF
(
v
->
ob_item
[
i
]);
Py_XDECREF
(
v
->
ob_item
[
i
]);
v
->
ob_item
[
i
]
=
NULL
;
v
->
ob_item
[
i
]
=
NULL
;
}
}
PyObject_GC_Fini
(
v
);
sv
=
PyObject_GC_Resize
(
PyTupleObject
,
v
,
newsize
);
v
=
(
PyTupleObject
*
)
PyObject_AS_GC
(
v
);
sv
=
(
PyTupleObject
*
)
PyObject_REALLOC
((
char
*
)
v
,
sizeof
(
PyTupleObject
)
+
PyGC_HEAD_SIZE
+
newsize
*
sizeof
(
PyObject
*
));
if
(
sv
==
NULL
)
{
if
(
sv
==
NULL
)
{
*
pv
=
NULL
;
*
pv
=
NULL
;
PyObject_DEL
(
v
);
PyObject_GC_Del
(
v
);
PyErr_NoMemory
();
return
-
1
;
return
-
1
;
}
}
sv
=
(
PyTupleObject
*
)
PyObject_FROM_GC
(
sv
);
_Py_NewReference
((
PyObject
*
)
sv
);
_Py_NewReference
((
PyObject
*
)
sv
);
for
(
i
=
sv
->
ob_size
;
i
<
newsize
;
i
++
)
for
(
i
=
sv
->
ob_size
;
i
<
newsize
;
i
++
)
sv
->
ob_item
[
i
]
=
NULL
;
sv
->
ob_item
[
i
]
=
NULL
;
sv
->
ob_size
=
newsize
;
*
pv
=
(
PyObject
*
)
sv
;
*
pv
=
(
PyObject
*
)
sv
;
PyObject_GC_Init
(
sv
);
_PyObject_GC_TRACK
(
sv
);
return
0
;
return
0
;
}
}
...
@@ -638,8 +626,7 @@ PyTuple_Fini(void)
...
@@ -638,8 +626,7 @@ PyTuple_Fini(void)
while
(
p
)
{
while
(
p
)
{
q
=
p
;
q
=
p
;
p
=
(
PyTupleObject
*
)(
p
->
ob_item
[
0
]);
p
=
(
PyTupleObject
*
)(
p
->
ob_item
[
0
]);
q
=
(
PyTupleObject
*
)
PyObject_AS_GC
(
q
);
PyObject_GC_Del
(
q
);
PyObject_DEL
(
q
);
}
}
}
}
#endif
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment