Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7e628db

Browse filesBrowse files
gh-101819: Port _io.PyBytesIOBuffer_Type to heap type
1 parent cab1298 commit 7e628db
Copy full SHA for 7e628db

File tree

4 files changed

+29
-51
lines changed
Filter options

4 files changed

+29
-51
lines changed

‎Modules/_io/_iomodule.c

Copy file name to clipboardExpand all lines: Modules/_io/_iomodule.c
+1-4Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -671,9 +671,6 @@ static PyTypeObject* static_types[] = {
671671
&PyBufferedIOBase_Type,
672672
&PyRawIOBase_Type,
673673
&PyTextIOBase_Type,
674-
675-
// PyRawIOBase_Type(PyIOBase_Type) subclasses
676-
&_PyBytesIOBuffer_Type,
677674
};
678675

679676

@@ -771,7 +768,7 @@ PyInit__io(void)
771768
state->PyBufferedIOBase_Type);
772769

773770
// PyRawIOBase_Type(PyIOBase_Type) subclasses
774-
state->PyBytesIOBuffer_Type = (PyTypeObject *)Py_NewRef(&_PyBytesIOBuffer_Type);
771+
ADD_TYPE(m, state->PyBytesIOBuffer_Type, &bytesiobuf_spec, NULL); // XXX: should be subclass of PyRawIOBase_Type?
775772
ADD_TYPE(m, state->PyFileIO_Type, &fileio_spec, state->PyRawIOBase_Type);
776773
#ifdef MS_WINDOWS
777774
ADD_TYPE(m, state->PyWindowsConsoleIO_Type, &winconsoleio_spec,

‎Modules/_io/_iomodule.h

Copy file name to clipboardExpand all lines: Modules/_io/_iomodule.h
+1-2Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ extern PyType_Spec bufferedreader_spec;
2020
extern PyType_Spec bufferedrwpair_spec;
2121
extern PyType_Spec bufferedwriter_spec;
2222
extern PyType_Spec bytesio_spec;
23+
extern PyType_Spec bytesiobuf_spec;
2324
extern PyType_Spec fileio_spec;
2425
extern PyType_Spec nldecoder_spec;
2526
extern PyType_Spec stringio_spec;
@@ -194,5 +195,3 @@ extern _PyIO_State *_PyIO_get_module_state(void);
194195
#ifdef HAVE_WINDOWS_CONSOLE_IO
195196
extern char _PyIO_get_console_type(PyObject *);
196197
#endif
197-
198-
extern Py_EXPORTED_SYMBOL PyTypeObject _PyBytesIOBuffer_Type;

‎Modules/_io/bytesio.c

Copy file name to clipboardExpand all lines: Modules/_io/bytesio.c
+27-44Lines changed: 27 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,64 +1090,47 @@ bytesiobuf_releasebuffer(bytesiobuf *obj, Py_buffer *view)
10901090
b->exports--;
10911091
}
10921092

1093+
static int
1094+
bytesiobuf_clear(bytesiobuf *self)
1095+
{
1096+
Py_CLEAR(self->source);
1097+
return 0;
1098+
}
1099+
10931100
static int
10941101
bytesiobuf_traverse(bytesiobuf *self, visitproc visit, void *arg)
10951102
{
1103+
Py_VISIT(Py_TYPE(self));
10961104
Py_VISIT(self->source);
10971105
return 0;
10981106
}
10991107

11001108
static void
11011109
bytesiobuf_dealloc(bytesiobuf *self)
11021110
{
1111+
PyTypeObject *tp = Py_TYPE(self);
11031112
/* bpo-31095: UnTrack is needed before calling any callbacks */
11041113
PyObject_GC_UnTrack(self);
1105-
Py_CLEAR(self->source);
1106-
Py_TYPE(self)->tp_free(self);
1114+
(void)bytesiobuf_clear(self);
1115+
tp->tp_free(self);
1116+
Py_DECREF(tp);
11071117
}
11081118

1109-
static PyBufferProcs bytesiobuf_as_buffer = {
1110-
(getbufferproc) bytesiobuf_getbuffer,
1111-
(releasebufferproc) bytesiobuf_releasebuffer,
1119+
static PyType_Slot bytesiobuf_slots[] = {
1120+
{Py_tp_dealloc, bytesiobuf_dealloc},
1121+
{Py_tp_traverse, bytesiobuf_traverse},
1122+
{Py_tp_clear, bytesiobuf_clear},
1123+
1124+
// Buffer protocol
1125+
{Py_bf_getbuffer, bytesiobuf_getbuffer},
1126+
{Py_bf_releasebuffer, bytesiobuf_releasebuffer},
1127+
{0, NULL},
11121128
};
11131129

1114-
Py_EXPORTED_SYMBOL PyTypeObject _PyBytesIOBuffer_Type = {
1115-
PyVarObject_HEAD_INIT(NULL, 0)
1116-
"_io._BytesIOBuffer", /*tp_name*/
1117-
sizeof(bytesiobuf), /*tp_basicsize*/
1118-
0, /*tp_itemsize*/
1119-
(destructor)bytesiobuf_dealloc, /*tp_dealloc*/
1120-
0, /*tp_vectorcall_offset*/
1121-
0, /*tp_getattr*/
1122-
0, /*tp_setattr*/
1123-
0, /*tp_as_async*/
1124-
0, /*tp_repr*/
1125-
0, /*tp_as_number*/
1126-
0, /*tp_as_sequence*/
1127-
0, /*tp_as_mapping*/
1128-
0, /*tp_hash*/
1129-
0, /*tp_call*/
1130-
0, /*tp_str*/
1131-
0, /*tp_getattro*/
1132-
0, /*tp_setattro*/
1133-
&bytesiobuf_as_buffer, /*tp_as_buffer*/
1134-
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /*tp_flags*/
1135-
0, /*tp_doc*/
1136-
(traverseproc)bytesiobuf_traverse, /*tp_traverse*/
1137-
0, /*tp_clear*/
1138-
0, /*tp_richcompare*/
1139-
0, /*tp_weaklistoffset*/
1140-
0, /*tp_iter*/
1141-
0, /*tp_iternext*/
1142-
0, /*tp_methods*/
1143-
0, /*tp_members*/
1144-
0, /*tp_getset*/
1145-
0, /*tp_base*/
1146-
0, /*tp_dict*/
1147-
0, /*tp_descr_get*/
1148-
0, /*tp_descr_set*/
1149-
0, /*tp_dictoffset*/
1150-
0, /*tp_init*/
1151-
0, /*tp_alloc*/
1152-
0, /*tp_new*/
1130+
PyType_Spec bytesiobuf_spec = {
1131+
.name = "_io._BytesIOBuffer",
1132+
.basicsize = sizeof(bytesiobuf),
1133+
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1134+
Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION),
1135+
.slots = bytesiobuf_slots,
11531136
};

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

Copy file name to clipboardExpand all lines: Tools/c-analyzer/cpython/globals-to-fix.tsv
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,6 @@ Python/instrumentation.c - _PyInstrumentation_MISSING -
318318
## static types
319319

320320
Modules/_io/bufferedio.c - PyBufferedIOBase_Type -
321-
Modules/_io/bytesio.c - _PyBytesIOBuffer_Type -
322321
Modules/_io/iobase.c - PyIOBase_Type -
323322
Modules/_io/iobase.c - PyRawIOBase_Type -
324323
Modules/_io/textio.c - PyTextIOBase_Type -

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.