@@ -589,10 +589,14 @@ Tkapp_New(const char *screenName, const char *className,
589
589
int interactive , int wantobjects , int wantTk , int sync ,
590
590
const char * use )
591
591
{
592
+ PyTypeObject * type ;
592
593
TkappObject * v ;
593
594
char * argv0 ;
594
595
595
- v = PyObject_New (TkappObject , (PyTypeObject * ) Tkapp_Type );
596
+ type = (PyTypeObject * )Tkapp_Type ;
597
+ assert (type != NULL );
598
+ assert (type -> tp_alloc != NULL );
599
+ v = (TkappObject * )type -> tp_alloc (type , 0 );
596
600
if (v == NULL )
597
601
return NULL ;
598
602
@@ -788,8 +792,13 @@ static PyObject *PyTclObject_Type;
788
792
static PyObject *
789
793
newPyTclObject (Tcl_Obj * arg )
790
794
{
795
+ PyTypeObject * type ;
791
796
PyTclObject * self ;
792
- self = PyObject_New (PyTclObject , (PyTypeObject * ) PyTclObject_Type );
797
+
798
+ type = (PyTypeObject * )PyTclObject_Type ;
799
+ assert (type != NULL );
800
+ assert (type -> tp_alloc != NULL );
801
+ self = (PyTclObject * )type -> tp_alloc (type , 0 );
793
802
if (self == NULL )
794
803
return NULL ;
795
804
Tcl_IncrRefCount (arg );
@@ -799,16 +808,24 @@ newPyTclObject(Tcl_Obj *arg)
799
808
}
800
809
801
810
static void
802
- PyTclObject_dealloc (PyObject * _self )
811
+ PyTclObject_dealloc (PyObject * op )
803
812
{
804
- PyTclObject * self = PyTclObject_CAST (_self );
805
- PyObject * tp = (PyObject * ) Py_TYPE (self );
813
+ PyTypeObject * tp = Py_TYPE (op );
814
+ PyObject_GC_UnTrack (op );
815
+ PyTclObject * self = PyTclObject_CAST (op );
806
816
Tcl_DecrRefCount (self -> value );
807
817
Py_XDECREF (self -> string );
808
- PyObject_Free (self );
818
+ tp -> tp_free (self );
809
819
Py_DECREF (tp );
810
820
}
811
821
822
+ static int
823
+ PyTclObject_traverse (PyObject * op , visitproc visit , void * arg )
824
+ {
825
+ Py_VISIT (Py_TYPE (op ));
826
+ return 0 ;
827
+ }
828
+
812
829
/* Like _str, but create Unicode if necessary. */
813
830
PyDoc_STRVAR (PyTclObject_string__doc__ ,
814
831
"the string representation of this object, either as str or bytes" );
@@ -897,6 +914,7 @@ static PyGetSetDef PyTclObject_getsetlist[] = {
897
914
898
915
static PyType_Slot PyTclObject_Type_slots [] = {
899
916
{Py_tp_dealloc , PyTclObject_dealloc },
917
+ {Py_tp_traverse , PyTclObject_traverse },
900
918
{Py_tp_repr , PyTclObject_repr },
901
919
{Py_tp_str , PyTclObject_str },
902
920
{Py_tp_getattro , PyObject_GenericGetAttr },
@@ -906,11 +924,14 @@ static PyType_Slot PyTclObject_Type_slots[] = {
906
924
};
907
925
908
926
static PyType_Spec PyTclObject_Type_spec = {
909
- "_tkinter.Tcl_Obj" ,
910
- sizeof (PyTclObject ),
911
- 0 ,
912
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
913
- PyTclObject_Type_slots ,
927
+ .name = "_tkinter.Tcl_Obj" ,
928
+ .basicsize = sizeof (PyTclObject ),
929
+ .flags = (
930
+ Py_TPFLAGS_DEFAULT
931
+ | Py_TPFLAGS_DISALLOW_INSTANTIATION
932
+ | Py_TPFLAGS_HAVE_GC
933
+ ),
934
+ .slots = PyTclObject_Type_slots ,
914
935
};
915
936
916
937
@@ -2742,9 +2763,13 @@ _tkinter_tktimertoken_deletetimerhandler_impl(TkttObject *self)
2742
2763
static TkttObject *
2743
2764
Tktt_New (PyObject * func )
2744
2765
{
2766
+ PyTypeObject * type ;
2745
2767
TkttObject * v ;
2746
2768
2747
- v = PyObject_New (TkttObject , (PyTypeObject * ) Tktt_Type );
2769
+ type = (PyTypeObject * )Tktt_Type ;
2770
+ assert (type != NULL );
2771
+ assert (type -> tp_alloc != NULL );
2772
+ v = (TkttObject * )type -> tp_alloc (type , 0 );
2748
2773
if (v == NULL )
2749
2774
return NULL ;
2750
2775
@@ -2756,18 +2781,25 @@ Tktt_New(PyObject *func)
2756
2781
}
2757
2782
2758
2783
static void
2759
- Tktt_Dealloc (PyObject * self )
2784
+ Tktt_Dealloc (PyObject * op )
2760
2785
{
2761
- TkttObject * v = TkttObject_CAST (self );
2762
- PyObject * func = v -> func ;
2763
- PyObject * tp = (PyObject * ) Py_TYPE (self );
2764
-
2765
- Py_XDECREF (func );
2766
-
2767
- PyObject_Free (self );
2786
+ PyTypeObject * tp = Py_TYPE (op );
2787
+ PyObject_GC_UnTrack (op );
2788
+ TkttObject * self = TkttObject_CAST (op );
2789
+ Py_XDECREF (self -> func );
2790
+ tp -> tp_free (self );
2768
2791
Py_DECREF (tp );
2769
2792
}
2770
2793
2794
+ static int
2795
+ Tktt_Traverse (PyObject * op , visitproc visit , void * arg )
2796
+ {
2797
+ TkttObject * self = TkttObject_CAST (op );
2798
+ Py_VISIT (Py_TYPE (op ));
2799
+ Py_VISIT (self -> func );
2800
+ return 0 ;
2801
+ }
2802
+
2771
2803
static PyObject *
2772
2804
Tktt_Repr (PyObject * self )
2773
2805
{
@@ -3061,18 +3093,27 @@ _tkinter_tkapp_willdispatch_impl(TkappObject *self)
3061
3093
static void
3062
3094
Tkapp_Dealloc (PyObject * op )
3063
3095
{
3096
+ PyTypeObject * tp = Py_TYPE (op );
3097
+ PyObject_GC_UnTrack (op );
3064
3098
TkappObject * self = TkappObject_CAST (op );
3065
- PyTypeObject * tp = Py_TYPE (self );
3066
3099
/*CHECK_TCL_APPARTMENT;*/
3067
3100
ENTER_TCL
3068
3101
Tcl_DeleteInterp (Tkapp_Interp (self ));
3069
3102
LEAVE_TCL
3070
3103
Py_XDECREF (self -> trace );
3071
- PyObject_Free (self );
3104
+ tp -> tp_free (self );
3072
3105
Py_DECREF (tp );
3073
3106
DisableEventHook ();
3074
3107
}
3075
3108
3109
+ static int
3110
+ Tkapp_Traverse (PyObject * op , visitproc visit , void * arg )
3111
+ {
3112
+ TkappObject * self = TkappObject_CAST (op );
3113
+ Py_VISIT (Py_TYPE (op ));
3114
+ Py_VISIT (self -> trace );
3115
+ return 0 ;
3116
+ }
3076
3117
3077
3118
3078
3119
/**** Tkinter Module ****/
@@ -3261,17 +3302,21 @@ static PyMethodDef Tktt_methods[] =
3261
3302
3262
3303
static PyType_Slot Tktt_Type_slots [] = {
3263
3304
{Py_tp_dealloc , Tktt_Dealloc },
3305
+ {Py_tp_traverse , Tktt_Traverse },
3264
3306
{Py_tp_repr , Tktt_Repr },
3265
3307
{Py_tp_methods , Tktt_methods },
3266
3308
{0 , 0 }
3267
3309
};
3268
3310
3269
3311
static PyType_Spec Tktt_Type_spec = {
3270
- "_tkinter.tktimertoken" ,
3271
- sizeof (TkttObject ),
3272
- 0 ,
3273
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
3274
- Tktt_Type_slots ,
3312
+ .name = "_tkinter.tktimertoken" ,
3313
+ .basicsize = sizeof (TkttObject ),
3314
+ .flags = (
3315
+ Py_TPFLAGS_DEFAULT
3316
+ | Py_TPFLAGS_DISALLOW_INSTANTIATION
3317
+ | Py_TPFLAGS_HAVE_GC
3318
+ ),
3319
+ .slots = Tktt_Type_slots ,
3275
3320
};
3276
3321
3277
3322
@@ -3317,17 +3362,21 @@ static PyMethodDef Tkapp_methods[] =
3317
3362
3318
3363
static PyType_Slot Tkapp_Type_slots [] = {
3319
3364
{Py_tp_dealloc , Tkapp_Dealloc },
3365
+ {Py_tp_traverse , Tkapp_Traverse },
3320
3366
{Py_tp_methods , Tkapp_methods },
3321
3367
{0 , 0 }
3322
3368
};
3323
3369
3324
3370
3325
3371
static PyType_Spec Tkapp_Type_spec = {
3326
- "_tkinter.tkapp" ,
3327
- sizeof (TkappObject ),
3328
- 0 ,
3329
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
3330
- Tkapp_Type_slots ,
3372
+ .name = "_tkinter.tkapp" ,
3373
+ .basicsize = sizeof (TkappObject ),
3374
+ .flags = (
3375
+ Py_TPFLAGS_DEFAULT
3376
+ | Py_TPFLAGS_DISALLOW_INSTANTIATION
3377
+ | Py_TPFLAGS_HAVE_GC
3378
+ ),
3379
+ .slots = Tkapp_Type_slots ,
3331
3380
};
3332
3381
3333
3382
static PyMethodDef moduleMethods [] =
0 commit comments