@@ -315,19 +315,13 @@ static PyGetSetDef Dialect_getsetlist[] = {
315
315
static void
316
316
Dialect_dealloc (DialectObj * self )
317
317
{
318
- PyObject_GC_UnTrack (self );
319
318
PyTypeObject * tp = Py_TYPE (self );
320
- Py_CLEAR (self -> lineterminator );
321
- tp -> tp_free ((PyObject * )self );
319
+ PyObject_GC_UnTrack (self );
320
+ tp -> tp_clear ((PyObject * )self );
321
+ PyObject_GC_Del (self );
322
322
Py_DECREF (tp );
323
323
}
324
324
325
- static void
326
- Dialect_finalize (DialectObj * self )
327
- {
328
- Py_CLEAR (self -> lineterminator );
329
- }
330
-
331
325
static char * dialect_kws [] = {
332
326
"dialect" ,
333
327
"delimiter" ,
@@ -514,8 +508,16 @@ PyDoc_STRVAR(Dialect_Type_doc,
514
508
"The Dialect type records CSV parsing and generation options.\n" );
515
509
516
510
static int
517
- Dialect_traverse ( PyObject * self , visitproc visit , void * arg )
511
+ Dialect_clear ( DialectObj * self )
518
512
{
513
+ Py_CLEAR (self -> lineterminator );
514
+ return 0 ;
515
+ }
516
+
517
+ static int
518
+ Dialect_traverse (DialectObj * self , visitproc visit , void * arg )
519
+ {
520
+ Py_VISIT (self -> lineterminator );
519
521
Py_VISIT (Py_TYPE (self ));
520
522
return 0 ;
521
523
}
@@ -526,8 +528,8 @@ static PyType_Slot Dialect_Type_slots[] = {
526
528
{Py_tp_getset , Dialect_getsetlist },
527
529
{Py_tp_new , dialect_new },
528
530
{Py_tp_methods , dialect_methods },
529
- {Py_tp_finalize , Dialect_finalize },
530
531
{Py_tp_dealloc , Dialect_dealloc },
532
+ {Py_tp_clear , Dialect_clear },
531
533
{Py_tp_traverse , Dialect_traverse },
532
534
{0 , NULL }
533
535
};
@@ -894,29 +896,11 @@ Reader_dealloc(ReaderObj *self)
894
896
{
895
897
PyTypeObject * tp = Py_TYPE (self );
896
898
PyObject_GC_UnTrack (self );
897
- Py_CLEAR (self -> dialect );
898
- Py_CLEAR (self -> input_iter );
899
- Py_CLEAR (self -> fields );
900
- if (self -> field != NULL ) {
901
- PyMem_Free (self -> field );
902
- self -> field = NULL ;
903
- }
899
+ tp -> tp_clear ((PyObject * )self );
904
900
PyObject_GC_Del (self );
905
901
Py_DECREF (tp );
906
902
}
907
903
908
- static void
909
- Reader_finalize (ReaderObj * self )
910
- {
911
- Py_CLEAR (self -> dialect );
912
- Py_CLEAR (self -> input_iter );
913
- Py_CLEAR (self -> fields );
914
- if (self -> field != NULL ) {
915
- PyMem_Free (self -> field );
916
- self -> field = NULL ;
917
- }
918
- }
919
-
920
904
static int
921
905
Reader_traverse (ReaderObj * self , visitproc visit , void * arg )
922
906
{
@@ -933,6 +917,10 @@ Reader_clear(ReaderObj *self)
933
917
Py_CLEAR (self -> dialect );
934
918
Py_CLEAR (self -> input_iter );
935
919
Py_CLEAR (self -> fields );
920
+ if (self -> field != NULL ) {
921
+ PyMem_Free (self -> field );
922
+ self -> field = NULL ;
923
+ }
936
924
return 0 ;
937
925
}
938
926
@@ -958,12 +946,11 @@ static struct PyMemberDef Reader_memberlist[] = {
958
946
static PyType_Slot Reader_Type_slots [] = {
959
947
{Py_tp_doc , (char * )Reader_Type_doc },
960
948
{Py_tp_traverse , Reader_traverse },
961
- {Py_tp_clear , Reader_clear },
962
949
{Py_tp_iter , PyObject_SelfIter },
963
950
{Py_tp_iternext , Reader_iternext },
964
951
{Py_tp_methods , Reader_methods },
965
952
{Py_tp_members , Reader_memberlist },
966
- {Py_tp_finalize , Reader_finalize },
953
+ {Py_tp_clear , Reader_clear },
967
954
{Py_tp_dealloc , Reader_dealloc },
968
955
{0 , NULL }
969
956
};
@@ -1359,27 +1346,22 @@ Writer_clear(WriterObj *self)
1359
1346
Py_CLEAR (self -> dialect );
1360
1347
Py_CLEAR (self -> write );
1361
1348
Py_CLEAR (self -> error_obj );
1349
+ if (self -> rec != NULL ) {
1350
+ PyMem_Free (self -> rec );
13
6D4E
51
+ }
1362
1352
return 0 ;
1363
1353
}
1364
1354
1365
1355
static void
1366
1356
Writer_dealloc (WriterObj * self )
1367
1357
{
1368
- PyObject_GC_UnTrack (self );
1369
1358
PyTypeObject * tp = Py_TYPE (self );
1359
+ PyObject_GC_UnTrack (self );
1370
1360
tp -> tp_clear ((PyObject * )self );
1361
+ PyObject_GC_Del (self );
1371
1362
Py_DECREF (tp );
1372
1363
}
1373
1364
1374
- static void
1375
- Writer_finalize (WriterObj * self )
1376
- {
1377
- Writer_clear (self );
1378
- if (self -> rec != NULL ) {
1379
- PyMem_Free (self -> rec );
1380
- }
1381
- }
1382
-
1383
1365
PyDoc_STRVAR (Writer_Type_doc ,
1384
1366
"CSV writer\n"
1385
1367
"\n"
@@ -1388,7 +1370,6 @@ PyDoc_STRVAR(Writer_Type_doc,
1388
1370
);
1389
1371
1390
1372
static PyType_Slot Writer_Type_slots [] = {
1391
- {Py_tp_finalize , Writer_finalize },
1392
1373
{Py_tp_doc , (char * )Writer_Type_doc },
1393
1374
{Py_tp_traverse , Writer_traverse },
1394
1375
{Py_tp_clear , Writer_clear },
0 commit comments