From 5ee23584f2d96beaae1e0f1591f0fdfba9cb7965 Mon Sep 17 00:00:00 2001 From: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com> Date: Mon, 15 May 2023 23:37:21 +0000 Subject: [PATCH 1/3] visit instance dict --- Modules/_io/_iomodule.h | 8 ++++++++ Modules/_io/bufferedio.c | 1 + Modules/_io/iobase.c | 7 +------ Modules/_io/textio.c | 1 + 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h index afd638a120ba08..b97215d89138b4 100644 --- a/Modules/_io/_iomodule.h +++ b/Modules/_io/_iomodule.h @@ -195,3 +195,11 @@ extern PyObject *_PyIOBase_cannot_pickle(PyObject *self, PyObject *args); #ifdef HAVE_WINDOWS_CONSOLE_IO extern char _PyIO_get_console_type(PyObject *); #endif + + +typedef struct { + PyObject_HEAD + + PyObject *dict; + PyObject *weakreflist; +} iobase; diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 7a0c516411c73b..b6dff7777a5b9a 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -2428,6 +2428,7 @@ static int bufferediobase_traverse(PyObject *self, visitproc visit, void *arg) { Py_VISIT(Py_TYPE(self)); + Py_VISIT(((iobase *)self)->dict); return 0; } diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index 14d48813aefe83..a489bc30e88535 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -26,12 +26,6 @@ class _io._RawIOBase "PyObject *" "clinic_state()->PyRawIOBase_Type" * IOBase class, an abstract class */ -typedef struct { - PyObject_HEAD - - PyObject *dict; - PyObject *weakreflist; -} iobase; PyDoc_STRVAR(iobase_doc, "The abstract base class for all I/O classes.\n" @@ -1040,6 +1034,7 @@ static int rawiobase_traverse(PyObject *self, visitproc visit, void *arg) { Py_VISIT(Py_TYPE(self)); + Py_VISIT(((iobase *)self)->dict); return 0; } diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index e858a1fb498f82..f736db1b232adb 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -171,6 +171,7 @@ static int textiobase_traverse(PyObject *self, visitproc visit, void *arg) { Py_VISIT(Py_TYPE(self)); + Py_VISIT(((iobase *)self)->dict); return 0; } From 1e710b403a7df12a92f89a307910ceae385cd3cd Mon Sep 17 00:00:00 2001 From: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com> Date: Tue, 16 May 2023 11:34:22 +0000 Subject: [PATCH 2/3] fix by inheriting vsitor --- Modules/_io/_iomodule.h | 8 -------- Modules/_io/bufferedio.c | 11 +---------- Modules/_io/iobase.c | 17 +++++++---------- Modules/_io/textio.c | 10 +--------- 4 files changed, 9 insertions(+), 37 deletions(-) diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h index b97215d89138b4..afd638a120ba08 100644 --- a/Modules/_io/_iomodule.h +++ b/Modules/_io/_iomodule.h @@ -195,11 +195,3 @@ extern PyObject *_PyIOBase_cannot_pickle(PyObject *self, PyObject *args); #ifdef HAVE_WINDOWS_CONSOLE_IO extern char _PyIO_get_console_type(PyObject *); #endif - - -typedef struct { - PyObject_HEAD - - PyObject *dict; - PyObject *weakreflist; -} iobase; diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index b6dff7777a5b9a..d980588ec44461 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -2424,14 +2424,6 @@ _io_BufferedRandom___init___impl(buffered *self, PyObject *raw, #include "clinic/bufferedio.c.h" #undef clinic_state -static int -bufferediobase_traverse(PyObject *self, visitproc visit, void *arg) -{ - Py_VISIT(Py_TYPE(self)); - Py_VISIT(((iobase *)self)->dict); - return 0; -} - static PyMethodDef bufferediobase_methods[] = { _IO__BUFFEREDIOBASE_DETACH_METHODDEF _IO__BUFFEREDIOBASE_READ_METHODDEF @@ -2445,13 +2437,12 @@ static PyMethodDef bufferediobase_methods[] = { static PyType_Slot bufferediobase_slots[] = { {Py_tp_doc, (void *)bufferediobase_doc}, {Py_tp_methods, bufferediobase_methods}, - {Py_tp_traverse, bufferediobase_traverse}, {0, NULL}, }; PyType_Spec bufferediobase_spec = { .name = "_io._BufferedIOBase", - .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_IMMUTABLETYPE), .slots = bufferediobase_slots, }; diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index a489bc30e88535..43784c7115607d 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -26,6 +26,12 @@ class _io._RawIOBase "PyObject *" "clinic_state()->PyRawIOBase_Type" * IOBase class, an abstract class */ +typedef struct { + PyObject_HEAD + + PyObject *dict; + PyObject *weakreflist; +} iobase; PyDoc_STRVAR(iobase_doc, "The abstract base class for all I/O classes.\n" @@ -1030,14 +1036,6 @@ rawiobase_write(PyObject *self, PyObject *args) return NULL; } -static int -rawiobase_traverse(PyObject *self, visitproc visit, void *arg) -{ - Py_VISIT(Py_TYPE(self)); - Py_VISIT(((iobase *)self)->dict); - return 0; -} - static PyMethodDef rawiobase_methods[] = { _IO__RAWIOBASE_READ_METHODDEF _IO__RAWIOBASE_READALL_METHODDEF @@ -1049,13 +1047,12 @@ static PyMethodDef rawiobase_methods[] = { static PyType_Slot rawiobase_slots[] = { {Py_tp_doc, (void *)rawiobase_doc}, {Py_tp_methods, rawiobase_methods}, - {Py_tp_traverse, rawiobase_traverse}, {0, NULL}, }; PyType_Spec rawiobase_spec = { .name = "_io._RawIOBase", - .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_IMMUTABLETYPE), .slots = rawiobase_slots, }; diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index f736db1b232adb..4109b38d65a6e5 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -167,13 +167,6 @@ textiobase_errors_get(PyObject *self, void *context) Py_RETURN_NONE; } -static int -textiobase_traverse(PyObject *self, visitproc visit, void *arg) -{ - Py_VISIT(Py_TYPE(self)); - Py_VISIT(((iobase *)self)->dict); - return 0; -} static PyMethodDef textiobase_methods[] = { _IO__TEXTIOBASE_DETACH_METHODDEF @@ -194,13 +187,12 @@ static PyType_Slot textiobase_slots[] = { {Py_tp_doc, (void *)textiobase_doc}, {Py_tp_methods, textiobase_methods}, {Py_tp_getset, textiobase_getset}, - {Py_tp_traverse, textiobase_traverse}, {0, NULL}, }; PyType_Spec textiobase_spec = { .name = "_io._TextIOBase", - .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_IMMUTABLETYPE), .slots = textiobase_slots, }; From 78c12ff40fc00e30d57d02ea0868274750781a90 Mon Sep 17 00:00:00 2001 From: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com> Date: Tue, 16 May 2023 11:39:55 +0000 Subject: [PATCH 3/3] Add comment --- Modules/_io/bufferedio.c | 1 + Modules/_io/iobase.c | 1 + Modules/_io/textio.c | 1 + 3 files changed, 3 insertions(+) diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index d980588ec44461..f30d54a5e11b0a 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -2440,6 +2440,7 @@ static PyType_Slot bufferediobase_slots[] = { {0, NULL}, }; +/* Do not set Py_TPFLAGS_HAVE_GC so that tp_traverse and tp_clear are inherited */ PyType_Spec bufferediobase_spec = { .name = "_io._BufferedIOBase", .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index 43784c7115607d..bcb498d9c5b5de 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -1050,6 +1050,7 @@ static PyType_Slot rawiobase_slots[] = { {0, NULL}, }; +/* Do not set Py_TPFLAGS_HAVE_GC so that tp_traverse and tp_clear are inherited */ PyType_Spec rawiobase_spec = { .name = "_io._RawIOBase", .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 4109b38d65a6e5..46411c70a96753 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -190,6 +190,7 @@ static PyType_Slot textiobase_slots[] = { {0, NULL}, }; +/* Do not set Py_TPFLAGS_HAVE_GC so that tp_traverse and tp_clear are inherited */ PyType_Spec textiobase_spec = { .name = "_io._TextIOBase", .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy