]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-141376: Fix exported symbols (GH-141377)
authorVictor Stinner <vstinner@python.org>
Tue, 11 Nov 2025 08:21:24 +0000 (09:21 +0100)
committerGitHub <noreply@github.com>
Tue, 11 Nov 2025 08:21:24 +0000 (09:21 +0100)
* gh-141376: Fix exported symbols

* _io module: add "_Py_" prefix to "spec" variables. For example,
  rename bufferedrandom_spec to _Py_bufferedrandom_spec.
* typevarobject.c: add "static" to "spec" and "slots" variables.
* import.c: add "static" to "pkgcontext" variable.

* No longer export textiowrapper_slots

Modules/_io/_iomodule.c
Modules/_io/_iomodule.h
Modules/_io/bufferedio.c
Modules/_io/bytesio.c
Modules/_io/fileio.c
Modules/_io/iobase.c
Modules/_io/stringio.c
Modules/_io/textio.c
Modules/_io/winconsoleio.c
Objects/typevarobject.c
Python/import.c

index 274834945595fb8eda78acffac25d3613b3acc51..433d68d515ccc64ef173d608c5873c2b2d274222 100644 (file)
@@ -681,40 +681,40 @@ iomodule_exec(PyObject *m)
     }
 
     // Base classes
-    ADD_TYPE(m, state->PyIncrementalNewlineDecoder_Type, &nldecoder_spec, NULL);
-    ADD_TYPE(m, state->PyBytesIOBuffer_Type, &bytesiobuf_spec, NULL);
-    ADD_TYPE(m, state->PyIOBase_Type, &iobase_spec, NULL);
+    ADD_TYPE(m, state->PyIncrementalNewlineDecoder_Type, &_Py_nldecoder_spec, NULL);
+    ADD_TYPE(m, state->PyBytesIOBuffer_Type, &_Py_bytesiobuf_spec, NULL);
+    ADD_TYPE(m, state->PyIOBase_Type, &_Py_iobase_spec, NULL);
 
     // PyIOBase_Type subclasses
-    ADD_TYPE(m, state->PyTextIOBase_Type, &textiobase_spec,
+    ADD_TYPE(m, state->PyTextIOBase_Type, &_Py_textiobase_spec,
              state->PyIOBase_Type);
-    ADD_TYPE(m, state->PyBufferedIOBase_Type, &bufferediobase_spec,
+    ADD_TYPE(m, state->PyBufferedIOBase_Type, &_Py_bufferediobase_spec,
              state->PyIOBase_Type);
-    ADD_TYPE(m, state->PyRawIOBase_Type, &rawiobase_spec,
+    ADD_TYPE(m, state->PyRawIOBase_Type, &_Py_rawiobase_spec,
              state->PyIOBase_Type);
 
     // PyBufferedIOBase_Type(PyIOBase_Type) subclasses
-    ADD_TYPE(m, state->PyBytesIO_Type, &bytesio_spec, state->PyBufferedIOBase_Type);
-    ADD_TYPE(m, state->PyBufferedWriter_Type, &bufferedwriter_spec,
+    ADD_TYPE(m, state->PyBytesIO_Type, &_Py_bytesio_spec, state->PyBufferedIOBase_Type);
+    ADD_TYPE(m, state->PyBufferedWriter_Type, &_Py_bufferedwriter_spec,
              state->PyBufferedIOBase_Type);
-    ADD_TYPE(m, state->PyBufferedReader_Type, &bufferedreader_spec,
+    ADD_TYPE(m, state->PyBufferedReader_Type, &_Py_bufferedreader_spec,
              state->PyBufferedIOBase_Type);
-    ADD_TYPE(m, state->PyBufferedRWPair_Type, &bufferedrwpair_spec,
+    ADD_TYPE(m, state->PyBufferedRWPair_Type, &_Py_bufferedrwpair_spec,
              state->PyBufferedIOBase_Type);
-    ADD_TYPE(m, state->PyBufferedRandom_Type, &bufferedrandom_spec,
+    ADD_TYPE(m, state->PyBufferedRandom_Type, &_Py_bufferedrandom_spec,
              state->PyBufferedIOBase_Type);
 
     // PyRawIOBase_Type(PyIOBase_Type) subclasses
-    ADD_TYPE(m, state->PyFileIO_Type, &fileio_spec, state->PyRawIOBase_Type);
+    ADD_TYPE(m, state->PyFileIO_Type, &_Py_fileio_spec, state->PyRawIOBase_Type);
 
 #ifdef HAVE_WINDOWS_CONSOLE_IO
-    ADD_TYPE(m, state->PyWindowsConsoleIO_Type, &winconsoleio_spec,
+    ADD_TYPE(m, state->PyWindowsConsoleIO_Type, &_Py_winconsoleio_spec,
              state->PyRawIOBase_Type);
 #endif
 
     // PyTextIOBase_Type(PyIOBase_Type) subclasses
-    ADD_TYPE(m, state->PyStringIO_Type, &stringio_spec, state->PyTextIOBase_Type);
-    ADD_TYPE(m, state->PyTextIOWrapper_Type, &textiowrapper_spec,
+    ADD_TYPE(m, state->PyStringIO_Type, &_Py_stringio_spec, state->PyTextIOBase_Type);
+    ADD_TYPE(m, state->PyTextIOWrapper_Type, &_Py_textiowrapper_spec,
              state->PyTextIOBase_Type);
 
 #undef ADD_TYPE
index 18cf20edf26f7d9cabe98df927f3ef85a75023c0..4ae487c8e2adf72081f20101d16095ce99e03a4b 100644 (file)
@@ -9,23 +9,23 @@
 #include "structmember.h"
 
 /* Type specs */
-extern PyType_Spec bufferediobase_spec;
-extern PyType_Spec bufferedrandom_spec;
-extern PyType_Spec bufferedreader_spec;
-extern PyType_Spec bufferedrwpair_spec;
-extern PyType_Spec bufferedwriter_spec;
-extern PyType_Spec bytesio_spec;
-extern PyType_Spec bytesiobuf_spec;
-extern PyType_Spec fileio_spec;
-extern PyType_Spec iobase_spec;
-extern PyType_Spec nldecoder_spec;
-extern PyType_Spec rawiobase_spec;
-extern PyType_Spec stringio_spec;
-extern PyType_Spec textiobase_spec;
-extern PyType_Spec textiowrapper_spec;
+extern PyType_Spec _Py_bufferediobase_spec;
+extern PyType_Spec _Py_bufferedrandom_spec;
+extern PyType_Spec _Py_bufferedreader_spec;
+extern PyType_Spec _Py_bufferedrwpair_spec;
+extern PyType_Spec _Py_bufferedwriter_spec;
+extern PyType_Spec _Py_bytesio_spec;
+extern PyType_Spec _Py_bytesiobuf_spec;
+extern PyType_Spec _Py_fileio_spec;
+extern PyType_Spec _Py_iobase_spec;
+extern PyType_Spec _Py_nldecoder_spec;
+extern PyType_Spec _Py_rawiobase_spec;
+extern PyType_Spec _Py_stringio_spec;
+extern PyType_Spec _Py_textiobase_spec;
+extern PyType_Spec _Py_textiowrapper_spec;
 
 #ifdef HAVE_WINDOWS_CONSOLE_IO
-extern PyType_Spec winconsoleio_spec;
+extern PyType_Spec _Py_winconsoleio_spec;
 #endif
 
 /* These functions are used as METH_NOARGS methods, are normally called
index 0b4bc4c6b8ad421c32f97f9b1d99827ca391b342..4602f2b42a601779a13a58994e88e0c2b375cd0f 100644 (file)
@@ -2537,7 +2537,7 @@ static PyType_Slot bufferediobase_slots[] = {
 };
 
 /* Do not set Py_TPFLAGS_HAVE_GC so that tp_traverse and tp_clear are inherited */
-PyType_Spec bufferediobase_spec = {
+PyType_Spec _Py_bufferediobase_spec = {
     .name = "_io._BufferedIOBase",
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
               Py_TPFLAGS_IMMUTABLETYPE),
@@ -2600,7 +2600,7 @@ static PyType_Slot bufferedreader_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec bufferedreader_spec = {
+PyType_Spec _Py_bufferedreader_spec = {
     .name = "_io.BufferedReader",
     .basicsize = sizeof(buffered),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
@@ -2658,7 +2658,7 @@ static PyType_Slot bufferedwriter_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec bufferedwriter_spec = {
+PyType_Spec _Py_bufferedwriter_spec = {
     .name = "_io.BufferedWriter",
     .basicsize = sizeof(buffered),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
@@ -2708,7 +2708,7 @@ static PyType_Slot bufferedrwpair_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec bufferedrwpair_spec = {
+PyType_Spec _Py_bufferedrwpair_spec = {
     .name = "_io.BufferedRWPair",
     .basicsize = sizeof(rwpair),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
@@ -2776,7 +2776,7 @@ static PyType_Slot bufferedrandom_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec bufferedrandom_spec = {
+PyType_Spec _Py_bufferedrandom_spec = {
     .name = "_io.BufferedRandom",
     .basicsize = sizeof(buffered),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
index 30d61f9d68e61018525786b97668d86583d1a344..d6bfb93177c9ee666a207a84ed4647f46a82f3ec 100644 (file)
@@ -1156,7 +1156,7 @@ static PyType_Slot bytesio_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec bytesio_spec = {
+PyType_Spec _Py_bytesio_spec = {
     .name = "_io.BytesIO",
     .basicsize = sizeof(bytesio),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
@@ -1246,7 +1246,7 @@ static PyType_Slot bytesiobuf_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec bytesiobuf_spec = {
+PyType_Spec _Py_bytesiobuf_spec = {
     .name = "_io._BytesIOBuffer",
     .basicsize = sizeof(bytesiobuf),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
index b84c1bd3e22c1874a9389862bc7c1d58199d4a8c..2544ff4ea91ec87ed68abfe6768c2c77eeea525f 100644 (file)
@@ -1329,7 +1329,7 @@ static PyType_Slot fileio_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec fileio_spec = {
+PyType_Spec _Py_fileio_spec = {
     .name = "_io.FileIO",
     .basicsize = sizeof(fileio),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
index e304fc8bee2beadd6287fd9300741b59159fc9e2..f1c2fe1780188136619a456051fce2959d42e587 100644 (file)
@@ -885,7 +885,7 @@ static PyType_Slot iobase_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec iobase_spec = {
+PyType_Spec _Py_iobase_spec = {
     .name = "_io._IOBase",
     .basicsize = sizeof(iobase),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
@@ -1046,7 +1046,7 @@ static PyType_Slot rawiobase_slots[] = {
 };
 
 /* Do not set Py_TPFLAGS_HAVE_GC so that tp_traverse and tp_clear are inherited */
-PyType_Spec rawiobase_spec = {
+PyType_Spec _Py_rawiobase_spec = {
     .name = "_io._RawIOBase",
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
               Py_TPFLAGS_IMMUTABLETYPE),
index 20b7cfc00880cdc82bc81382c6511795fa0389ed..781ca4327f93ae9444013a53f63e6271e8214fa4 100644 (file)
@@ -1094,7 +1094,7 @@ static PyType_Slot stringio_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec stringio_spec = {
+PyType_Spec _Py_stringio_spec = {
     .name = "_io.StringIO",
     .basicsize = sizeof(stringio),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
index c462bd2ac578fe5714a8bc4e5ad3e2f9ac6f74ae..84b7d9df4005780e7d63f6e3d9b3cc71322270f2 100644 (file)
@@ -208,7 +208,7 @@ static PyType_Slot textiobase_slots[] = {
 };
 
 /* Do not set Py_TPFLAGS_HAVE_GC so that tp_traverse and tp_clear are inherited */
-PyType_Spec textiobase_spec = {
+PyType_Spec _Py_textiobase_spec = {
     .name = "_io._TextIOBase",
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
               Py_TPFLAGS_IMMUTABLETYPE),
@@ -3352,7 +3352,7 @@ static PyType_Slot nldecoder_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec nldecoder_spec = {
+PyType_Spec _Py_nldecoder_spec = {
     .name = "_io.IncrementalNewlineDecoder",
     .basicsize = sizeof(nldecoder_object),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
@@ -3404,7 +3404,7 @@ static PyGetSetDef textiowrapper_getset[] = {
     {NULL}
 };
 
-PyType_Slot textiowrapper_slots[] = {
+static PyType_Slot textiowrapper_slots[] = {
     {Py_tp_dealloc, textiowrapper_dealloc},
     {Py_tp_repr, textiowrapper_repr},
     {Py_tp_doc, (void *)_io_TextIOWrapper___init____doc__},
@@ -3418,7 +3418,7 @@ PyType_Slot textiowrapper_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec textiowrapper_spec = {
+PyType_Spec _Py_textiowrapper_spec = {
     .name = "_io.TextIOWrapper",
     .basicsize = sizeof(textio),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
index 950b7fe241ccde506fa9d8e9c9527ba9ecb59354..677d7e85d4e626fe02136c4774f61ba8914992a6 100644 (file)
@@ -1253,7 +1253,7 @@ static PyType_Slot winconsoleio_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec winconsoleio_spec = {
+PyType_Spec _Py_winconsoleio_spec = {
     .name = "_io._WindowsConsoleIO",
     .basicsize = sizeof(winconsoleio),
     .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
index 75a69d4bc3e019521a31e0d4c1eb10648121cac9..8e43962c7e37f4c155c6fe111da721634af06939 100644 (file)
@@ -251,7 +251,7 @@ static PyType_Slot constevaluator_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec constevaluator_spec = {
+static PyType_Spec constevaluator_spec = {
     .name = "_typing._ConstEvaluator",
     .basicsize = sizeof(constevaluatorobject),
     .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE
@@ -930,7 +930,7 @@ static PyType_Slot typevar_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec typevar_spec = {
+static PyType_Spec typevar_spec = {
     .name = "typing.TypeVar",
     .basicsize = sizeof(typevarobject),
     .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE
@@ -1078,7 +1078,7 @@ static PyType_Slot paramspecargs_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec paramspecargs_spec = {
+static PyType_Spec paramspecargs_spec = {
     .name = "typing.ParamSpecArgs",
     .basicsize = sizeof(paramspecattrobject),
     .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE
@@ -1158,7 +1158,7 @@ static PyType_Slot paramspeckwargs_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec paramspeckwargs_spec = {
+static PyType_Spec paramspeckwargs_spec = {
     .name = "typing.ParamSpecKwargs",
     .basicsize = sizeof(paramspecattrobject),
     .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE
@@ -1509,7 +1509,7 @@ static PyType_Slot paramspec_slots[] = {
     {0, 0},
 };
 
-PyType_Spec paramspec_spec = {
+static PyType_Spec paramspec_spec = {
     .name = "typing.ParamSpec",
     .basicsize = sizeof(paramspecobject),
     .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE
@@ -1789,7 +1789,7 @@ Note that only TypeVarTuples defined in the global scope can be\n\
 pickled.\n\
 ");
 
-PyType_Slot typevartuple_slots[] = {
+static PyType_Slot typevartuple_slots[] = {
     {Py_tp_doc, (void *)typevartuple_doc},
     {Py_tp_members, typevartuple_members},
     {Py_tp_methods, typevartuple_methods},
@@ -1805,7 +1805,7 @@ PyType_Slot typevartuple_slots[] = {
     {0, 0},
 };
 
-PyType_Spec typevartuple_spec = {
+static PyType_Spec typevartuple_spec = {
     .name = "typing.TypeVarTuple",
     .basicsize = sizeof(typevartupleobject),
     .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT
@@ -2347,7 +2347,7 @@ static PyType_Slot generic_slots[] = {
     {0, NULL},
 };
 
-PyType_Spec generic_spec = {
+static PyType_Spec generic_spec = {
     .name = "typing.Generic",
     .basicsize = sizeof(PyObject),
     .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
index 6cf4a061ca610f668e078c25870b2cc0084bf2e2..2afa7c15e6a8dc08bdc2e8ec09549e8cba1ec792 100644 (file)
@@ -804,7 +804,7 @@ _PyImport_ClearModulesByIndex(PyInterpreterState *interp)
    substitute this (if the name actually matches).
 */
 
-_Py_thread_local const char *pkgcontext = NULL;
+static _Py_thread_local const char *pkgcontext = NULL;
 # undef PKGCONTEXT
 # define PKGCONTEXT pkgcontext