8000 gh-101819: Port _io.PyIncrementalNewlineDecoder_Type to heap type (#1… · python/cpython@3952379 · GitHub
[go: up one dir, main page]

Skip to content

Commit 3952379

Browse files
gh-101819: Port _io.PyIncrementalNewlineDecoder_Type to heap type (#104249)
1 parent 4729383 commit 3952379

File tree

4 files changed

+42
-48
lines changed

4 files changed

+42
-48
lines changed

Modules/_io/_iomodule.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,6 @@ struct PyModuleDef _PyIO_Module = {
660660
static PyTypeObject* static_types[] = {
661661
// Base classes
662662
&PyIOBase_Type,
663-
&PyIncrementalNewlineDecoder_Type,
664663

665664
// PyIOBase_Type subclasses
666665
&PyBufferedIOBase_Type,
@@ -757,7 +756,7 @@ PyInit__io(void)
757756
}
758757

759758
// Base classes
760-
state->PyIncrementalNewlineDecoder_Type = (PyTypeObject *)Py_NewRef(&PyIncrementalNewlineDecoder_Type);
759+
ADD_TYPE(m, state->PyIncrementalNewlineDecoder_Type, &nldecoder_spec, NULL);
761760

762761
// PyIOBase_Type subclasses
763762
state->PyRawIOBase_Type = (PyTypeObject *)Py_NewRef(&PyRawIOBase_Type);

Modules/_io/_iomodule.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,14 @@ extern PyTypeObject PyRawIOBase_Type;
1414
extern PyTypeObject PyBufferedIOBase_Type;
1515
extern PyTypeObject PyTextIOBase_Type;
1616

17-
/* Concrete classes */
18-
extern PyTypeObject PyIncrementalNewlineDecoder_Type;
19-
2017
/* Type specs */
2118
extern PyType_Spec bufferedrandom_spec;
2219
extern PyType_Spec bufferedreader_spec;
2320
extern PyType_Spec bufferedrwpair_spec;
2421
extern PyType_Spec bufferedwriter_spec;
2522
extern PyType_Spec bytesio_spec;
2623
extern PyType_Spec fileio_spec;
24+
extern PyType_Spec nldecoder_spec;
2725
extern PyType_Spec stringio_spec;
2826
extern PyType_Spec textiowrapper_spec;
2927

Modules/_io/textio.c

Lines changed: 40 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,32 @@ _io_IncrementalNewlineDecoder___init___impl(nldecoder_object *self,
248248
return 0;
249249
}
250250

251-
static void
252-
incrementalnewlinedecoder_dealloc(nldecoder_object *self)
251+
static int
252+
incrementalnewlinedecoder_traverse(nldecoder_object *self, visitproc visit,
253+
void *arg)
254+
{
255+
Py_VISIT(Py_TYPE(self));
256+
Py_VISIT(self->decoder);
257+
Py_VISIT(self->errors);
258+
return 0;
259+
}
260+
261+
static int
262+
incrementalnewlinedecoder_clear(nldecoder_object *self)
253263
{
254264
Py_CLEAR(self->decoder);
255265
Py_CLEAR(self->errors);
256-
Py_TYPE(self)->tp_free((PyObject *)self);
266+
return 0;
267+
}
268+
269+
static void
270+
incrementalnewlinedecoder_dealloc(nldecoder_object *self)
271+
{
272+
PyTypeObject *tp = Py_TYPE(self);
273+
_PyObject_GC_UNTRACK(self);
274+
(void)incrementalnewlinedecoder_clear(self);
275+
tp->tp_free((PyObject *)self);
276+
Py_DECREF(tp);
257277
}
258278

259279
static int
@@ -3176,45 +3196,23 @@ static PyGetSetDef incrementalnewlinedecoder_getset[] = {
31763196
{NULL}
31773197
};
31783198

3179-
PyTypeObject PyIncrementalNewlineDecoder_Type = {
3180-
PyVarObject_HEAD_INIT(NULL, 0)
3181-
"_io.IncrementalNewlineDecoder", /*tp_name*/
3182-
sizeof(nldecoder_object), /*tp_basicsize*/
3183-
0, /*tp_itemsize*/
3184-
(destructor)incrementalnewlinedecoder_dealloc, /*tp_dealloc*/
3185-
0, /*tp_vectorcall_offset*/
3186-
0, /*tp_getattr*/
3187-
0, /*tp_setattr*/
3188-
0, /*tp_as_async*/
3189-
0, /*tp_repr*/
3190-
0, /*tp_as_number*/
3191-
0, /*tp_as_sequence*/
3192-
0, /*tp_as_mapping*/
3193-
0, /*tp_hash */
3194-
0, /*tp_call*/
3195-
0, /*tp_str*/
3196-
0, /*tp_getattro*/
3197-
0, /*tp_setattro*/
3198-
0, /*tp_as_buffer*/
3199-
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
3200-
_io_IncrementalNewlineDecoder___init____doc__, /* tp_doc */
3201-
0, /* tp_traverse */
3202-
0, /* tp_clear */
3203-
0, /* tp_richcompare */
3204-
0, /*tp_weaklistoffset*/
3205-
0, /* tp_iter */
3206-
0, /* tp_iternext */
3207-
incrementalnewlinedecoder_methods, /* tp_methods */
3208-
0, /* tp_members */
3209-
incrementalnewlinedecoder_getset, /* tp_getset */
3210-
0, /* tp_base */
3211-
0, /* tp_dict */
3212-
0, /* tp_descr_get */
3213-
0, /* tp_descr_set */
3214-
0, /* tp_dictoffset */
3215-
_io_IncrementalNewlineDecoder___init__, /* tp_init */
3216-
0, /* tp_alloc */
3217-
PyType_GenericNew, /* tp_new */
3199+
static PyType_Slot nldecoder_slots[] = {
3200+
{Py_tp_dealloc, incrementalnewlinedecoder_dealloc},
3201+
{Py_tp_doc, (void *)_io_IncrementalNewlineDecoder___init____doc__},
3202+
{Py_tp_methods, incrementalnewlinedecoder_methods},
3203+
{Py_tp_getset, incrementalnewlinedecoder_getset},
3204+
{Py_tp_traverse, incrementalnewlinedecoder_traverse},
3205+
{Py_tp_clear, incrementalnewlinedecoder_clear},
3206+
{Py_tp_init, _io_IncrementalNewlineDecoder___init__},
3207+
{0, NULL},
3208+
};
3209+
3210+
PyType_Spec nldecoder_spec = {
3211+
.name = "_io.IncrementalNewlineDecoder",
3212+
.basicsize = sizeof(nldecoder_object),
3213+
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
3214+
Py_TPFLAGS_IMMUTABLETYPE),
3215+
.slots = nldecoder_slots,
32183216
};
32193217

32203218

Tools/c-analyzer/cpython/globals-to-fix.tsv

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,6 @@ Modules/_io/bufferedio.c - PyBufferedIOBase_Type -
321321
Modules/_io/bytesio.c - _PyBytesIOBuffer_Type -
322322
Modules/_io/iobase.c - PyIOBase_Type -
323323
Modules/_io/iobase.c - PyRawIOBase_Type -
324-
Modules/_io/textio.c - PyIncrementalNewlineDecoder_Type -
325324
Modules/_io/textio.c - PyTextIOBase_Type -
326325
Modules/_io/winconsoleio.c - PyWindowsConsoleIO_Type -
327326
Modules/_testcapi/vectorcall.c - MethodDescriptorBase_Type -

0 commit comments

Comments
 (0)
0