gh-107211: No longer export internal functions (7) (#108425)

No longer export _PyUnicode_FromId() internal C API function.

Change comment style to "// comment" and add comment explaining why
other functions have to be exported.

Update Tools/build/generate_token.py to update Include/internal/pycore_token.h
comments.
This commit is contained in:
Victor Stinner 2023-08-24 17:40:56 +02:00 committed by GitHub
parent 52c6a6e48a
commit f1ae706ca5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 69 additions and 46 deletions

View File

@ -98,16 +98,20 @@ extern int _Py_FdIsInteractive(FILE *fp, PyObject *filename);
extern const char* _Py_gitidentifier(void); extern const char* _Py_gitidentifier(void);
extern const char* _Py_gitversion(void); extern const char* _Py_gitversion(void);
// Export for '_asyncio' shared extension
PyAPI_FUNC(int) _Py_IsInterpreterFinalizing(PyInterpreterState *interp); PyAPI_FUNC(int) _Py_IsInterpreterFinalizing(PyInterpreterState *interp);
/* Random */ /* Random */
extern int _PyOS_URandom(void *buffer, Py_ssize_t size); extern int _PyOS_URandom(void *buffer, Py_ssize_t size);
// Export for '_random' shared extension // Export for '_random' shared extension
PyAPI_FUNC(int) _PyOS_URandomNonblock(void *buffer, Py_ssize_t size); PyAPI_FUNC(int) _PyOS_URandomNonblock(void *buffer, Py_ssize_t size);
/* Legacy locale support */ /* Legacy locale support */
extern int _Py_CoerceLegacyLocale(int warn); extern int _Py_CoerceLegacyLocale(int warn);
extern int _Py_LegacyLocaleDetected(int warn); extern int _Py_LegacyLocaleDetected(int warn);
// Export for 'readline' shared extension
PyAPI_FUNC(char*) _Py_SetLocaleFromEnv(int category); PyAPI_FUNC(char*) _Py_SetLocaleFromEnv(int category);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -66,6 +66,9 @@ _Py_ThreadCanHandleSignals(PyInterpreterState *interp)
#if defined(HAVE_THREAD_LOCAL) && !defined(Py_BUILD_CORE_MODULE) #if defined(HAVE_THREAD_LOCAL) && !defined(Py_BUILD_CORE_MODULE)
extern _Py_thread_local PyThreadState *_Py_tss_tstate; extern _Py_thread_local PyThreadState *_Py_tss_tstate;
#endif #endif
// Export for most shared extensions, used via _PyThreadState_GET() static
// inline function.
PyAPI_FUNC(PyThreadState *) _PyThreadState_GetCurrent(void); PyAPI_FUNC(PyThreadState *) _PyThreadState_GetCurrent(void);
/* Get the current Python thread state. /* Get the current Python thread state.

View File

@ -272,6 +272,9 @@ typedef struct pyruntimestate {
/* other API */ /* other API */
// Export _PyRuntime for shared extensions which use it in static inline
// functions for best performance, like _Py_IsMainThread() or _Py_ID().
// It's also made accessible for debuggers and profilers.
PyAPI_DATA(_PyRuntimeState) _PyRuntime; PyAPI_DATA(_PyRuntimeState) _PyRuntime;
extern PyStatus _PyRuntimeState_Init(_PyRuntimeState *runtime); extern PyStatus _PyRuntimeState_Init(_PyRuntimeState *runtime);

View File

@ -8,17 +8,17 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define" # error "this header requires Py_BUILD_CORE define"
#endif #endif
// Export for 'pickle' shared extension // Export for '_pickle' shared extension
PyAPI_FUNC(int) _PySet_NextEntry( PyAPI_FUNC(int) _PySet_NextEntry(
PyObject *set, PyObject *set,
Py_ssize_t *pos, Py_ssize_t *pos,
PyObject **key, PyObject **key,
Py_hash_t *hash); Py_hash_t *hash);
// Export for 'pickle' shared extension // Export for '_pickle' shared extension
PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable); PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable);
// Export _PySet_Dummy for the gdb plugin's benefit // Export for the gdb plugin's (python-gdb.py) benefit
PyAPI_DATA(PyObject *) _PySet_Dummy; PyAPI_DATA(PyObject *) _PySet_Dummy;
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -14,8 +14,8 @@ extern int _PySys_Audit(
const char *argFormat, const char *argFormat,
...); ...);
/* We want minimal exposure of this function, so use extern rather than // _PySys_ClearAuditHooks() must not be exported: use extern rather than
PyAPI_FUNC() to not export the symbol. */ // PyAPI_FUNC(). We want minimal exposure of this function.
extern void _PySys_ClearAuditHooks(PyThreadState *tstate); extern void _PySys_ClearAuditHooks(PyThreadState *tstate);
extern int _PySys_SetAttr(PyObject *, PyObject *); extern int _PySys_SetAttr(PyObject *, PyObject *);

View File

@ -1,4 +1,4 @@
/* Auto-generated by Tools/build/generate_token.py */ // Auto-generated by Tools/build/generate_token.py
/* Token types */ /* Token types */
#ifndef Py_INTERNAL_TOKEN_H #ifndef Py_INTERNAL_TOKEN_H
@ -94,7 +94,7 @@ extern "C" {
(x) == FSTRING_MIDDLE) (x) == FSTRING_MIDDLE)
// Symbols exported for test_peg_generator // Export these 4 symbols for 'test_peg_generator'
PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */ PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */
PyAPI_FUNC(int) _PyToken_OneChar(int); PyAPI_FUNC(int) _PyToken_OneChar(int);
PyAPI_FUNC(int) _PyToken_TwoChars(int, int); PyAPI_FUNC(int) _PyToken_TwoChars(int, int);

View File

@ -114,8 +114,10 @@ extern static_builtin_state * _PyStaticType_GetState(PyInterpreterState *, PyTyp
extern void _PyStaticType_ClearWeakRefs(PyInterpreterState *, PyTypeObject *type); extern void _PyStaticType_ClearWeakRefs(PyInterpreterState *, PyTypeObject *type);
extern void _PyStaticType_Dealloc(PyInterpreterState *, PyTypeObject *); extern void _PyStaticType_Dealloc(PyInterpreterState *, PyTypeObject *);
// Export for 'math' shared extension via _PyType_IsReady() function // Export for 'math' shared extension, used via _PyType_IsReady() static inline
// function
PyAPI_FUNC(PyObject *) _PyType_GetDict(PyTypeObject *); PyAPI_FUNC(PyObject *) _PyType_GetDict(PyTypeObject *);
extern PyObject * _PyType_GetBases(PyTypeObject *type); extern PyObject * _PyType_GetBases(PyTypeObject *type);
extern PyObject * _PyType_GetMRO(PyTypeObject *type); extern PyObject * _PyType_GetMRO(PyTypeObject *type);
extern PyObject* _PyType_GetSubclasses(PyTypeObject *); extern PyObject* _PyType_GetSubclasses(PyTypeObject *);

View File

@ -24,6 +24,7 @@ extern int _PyUnicode_IsCased(Py_UCS4 ch);
/* --- Unicode API -------------------------------------------------------- */ /* --- Unicode API -------------------------------------------------------- */
// Export for '_json' shared extension
PyAPI_FUNC(int) _PyUnicode_CheckConsistency( PyAPI_FUNC(int) _PyUnicode_CheckConsistency(
PyObject *op, PyObject *op,
int check_content); int check_content);
@ -31,10 +32,10 @@ PyAPI_FUNC(int) _PyUnicode_CheckConsistency(
extern void _PyUnicode_ExactDealloc(PyObject *op); extern void _PyUnicode_ExactDealloc(PyObject *op);
extern Py_ssize_t _PyUnicode_InternedSize(void); extern Py_ssize_t _PyUnicode_InternedSize(void);
/* Get a copy of a Unicode string. */ // Get a copy of a Unicode string.
// Export for '_datetime' shared extension.
PyAPI_FUNC(PyObject*) _PyUnicode_Copy( PyAPI_FUNC(PyObject*) _PyUnicode_Copy(
PyObject *unicode PyObject *unicode);
);
/* Unsafe version of PyUnicode_Fill(): don't check arguments and so may crash /* Unsafe version of PyUnicode_Fill(): don't check arguments and so may crash
if parameters are invalid (e.g. if length is longer than the string). */ if parameters are invalid (e.g. if length is longer than the string). */
@ -93,11 +94,13 @@ typedef struct {
unsigned char readonly; unsigned char readonly;
} _PyUnicodeWriter ; } _PyUnicodeWriter ;
/* Initialize a Unicode writer. // Initialize a Unicode writer.
* //
* By default, the minimum buffer size is 0 character and overallocation is // By default, the minimum buffer size is 0 character and overallocation is
* disabled. Set min_length, min_char and overallocate attributes to control // disabled. Set min_length, min_char and overallocate attributes to control
* the allocation of the buffer. */ // the allocation of the buffer.
//
// Export the _PyUnicodeWriter API for '_multibytecodec' shared extension.
PyAPI_FUNC(void) PyAPI_FUNC(void)
_PyUnicodeWriter_Init(_PyUnicodeWriter *writer); _PyUnicodeWriter_Init(_PyUnicodeWriter *writer);
@ -204,12 +207,14 @@ extern PyObject* _PyUnicode_EncodeUTF7(
/* --- UTF-8 Codecs ------------------------------------------------------- */ /* --- UTF-8 Codecs ------------------------------------------------------- */
// Export for '_tkinter' shared extension.
PyAPI_FUNC(PyObject*) _PyUnicode_AsUTF8String( PyAPI_FUNC(PyObject*) _PyUnicode_AsUTF8String(
PyObject *unicode, PyObject *unicode,
const char *errors); const char *errors);
/* --- UTF-32 Codecs ------------------------------------------------------ */ /* --- UTF-32 Codecs ------------------------------------------------------ */
// Export for '_tkinter' shared extension
PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF32( PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF32(
PyObject *object, /* Unicode object */ PyObject *object, /* Unicode object */
const char *errors, /* error handling */ const char *errors, /* error handling */
@ -217,20 +222,21 @@ PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF32(
/* --- UTF-16 Codecs ------------------------------------------------------ */ /* --- UTF-16 Codecs ------------------------------------------------------ */
/* Returns a Python string object holding the UTF-16 encoded value of // Returns a Python string object holding the UTF-16 encoded value of
the Unicode data. // the Unicode data.
//
If byteorder is not 0, output is written according to the following // If byteorder is not 0, output is written according to the following
byte order: // byte order:
//
byteorder == -1: little endian // byteorder == -1: little endian
byteorder == 0: native byte order (writes a BOM mark) // byteorder == 0: native byte order (writes a BOM mark)
byteorder == 1: big endian // byteorder == 1: big endian
//
If byteorder is 0, the output string will always start with the // If byteorder is 0, the output string will always start with the
Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is // Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is
prepended. // prepended.
*/ //
// Export for '_tkinter' shared extension
PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF16( PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF16(
PyObject* unicode, /* Unicode object */ PyObject* unicode, /* Unicode object */
const char *errors, /* error handling */ const char *errors, /* error handling */
@ -297,13 +303,14 @@ extern PyObject* _PyUnicode_EncodeCharmap(
/* --- Decimal Encoder ---------------------------------------------------- */ /* --- Decimal Encoder ---------------------------------------------------- */
/* Coverts a Unicode object holding a decimal value to an ASCII string // Coverts a Unicode object holding a decimal value to an ASCII string
for using in int, float and complex parsers. // for using in int, float and complex parsers.
Transforms code points that have decimal digit property to the // Transforms code points that have decimal digit property to the
corresponding ASCII digit code points. Transforms spaces to ASCII. // corresponding ASCII digit code points. Transforms spaces to ASCII.
Transforms code points starting from the first non-ASCII code point that // Transforms code points starting from the first non-ASCII code point that
is neither a decimal digit nor a space to the end into '?'. */ // is neither a decimal digit nor a space to the end into '?'.
//
// Export for '_testinternalcapi' shared extension.
PyAPI_FUNC(PyObject*) _PyUnicode_TransformDecimalAndSpaceToASCII( PyAPI_FUNC(PyObject*) _PyUnicode_TransformDecimalAndSpaceToASCII(
PyObject *unicode); /* Unicode object */ PyObject *unicode); /* Unicode object */
@ -323,9 +330,10 @@ extern int _PyUnicode_EqualToASCIIId(
_Py_Identifier *right /* Right identifier */ _Py_Identifier *right /* Right identifier */
); );
/* Test whether a unicode is equal to ASCII string. Return 1 if true, // Test whether a unicode is equal to ASCII string. Return 1 if true,
0 otherwise. The right argument must be ASCII-encoded string. // 0 otherwise. The right argument must be ASCII-encoded string.
Any error occurs inside will be cleared before return. */ // Any error occurs inside will be cleared before return.
// Export for '_ctypes' shared extension
PyAPI_FUNC(int) _PyUnicode_EqualToASCIIString( PyAPI_FUNC(int) _PyUnicode_EqualToASCIIString(
PyObject *left, PyObject *left,
const char *right /* ASCII-encoded string */ const char *right /* ASCII-encoded string */
@ -357,14 +365,17 @@ extern Py_ssize_t _PyUnicode_InsertThousandsGrouping(
extern PyObject* _PyUnicode_FormatLong(PyObject *, int, int, int); extern PyObject* _PyUnicode_FormatLong(PyObject *, int, int, int);
/* Return an interned Unicode object for an Identifier; may fail if there is no memory.*/ // Return an interned Unicode object for an Identifier; may fail if there is no
// memory.
// Export for '_testembed' program.
PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*); PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*);
/* Fast equality check when the inputs are known to be exact unicode types /* Fast equality check when the inputs are known to be exact unicode types
and where the hash values are equal (i.e. a very probable match) */ and where the hash values are equal (i.e. a very probable match) */
extern int _PyUnicode_EQ(PyObject *, PyObject *); extern int _PyUnicode_EQ(PyObject *, PyObject *);
/* Equality check. */ // Equality check.
// Export for '_pickle' shared extension.
PyAPI_FUNC(int) _PyUnicode_Equal(PyObject *, PyObject *); PyAPI_FUNC(int) _PyUnicode_Equal(PyObject *, PyObject *);
extern int _PyUnicode_WideCharString_Converter(PyObject *, void *); extern int _PyUnicode_WideCharString_Converter(PyObject *, void *);

View File

@ -14,9 +14,9 @@
#include "pycore_bitutils.h" // _Py_bswap32() #include "pycore_bitutils.h" // _Py_bswap32()
#include "pycore_bytesobject.h" // _PyBytes_Find() #include "pycore_bytesobject.h" // _PyBytes_Find()
#include "pycore_compile.h" // _PyCompile_CodeGen, _PyCompile_OptimizeCfg, _PyCompile_Assemble, _PyCompile_CleanDoc #include "pycore_compile.h" // _PyCompile_CodeGen, _PyCompile_OptimizeCfg, _PyCompile_Assemble, _PyCompile_CleanDoc
#include "pycore_ceval.h" // _PyEval_AddPendingCall #include "pycore_ceval.h" // _PyEval_AddPendingCall()
#include "pycore_dict.h" // _PyDictOrValues_GetValues() #include "pycore_dict.h" // _PyDictOrValues_GetValues()
#include "pycore_fileutils.h" // _Py_normpath #include "pycore_fileutils.h" // _Py_normpath()
#include "pycore_frame.h" // _PyInterpreterFrame #include "pycore_frame.h" // _PyInterpreterFrame
#include "pycore_gc.h" // PyGC_Head #include "pycore_gc.h" // PyGC_Head
#include "pycore_hashtable.h" // _Py_hashtable_new() #include "pycore_hashtable.h" // _Py_hashtable_new()

View File

@ -50,7 +50,7 @@ def update_file(file, content):
token_h_template = f"""\ token_h_template = f"""\
/* {AUTO_GENERATED_BY_SCRIPT} */ // {AUTO_GENERATED_BY_SCRIPT}
""" """
token_h_template += """\ token_h_template += """\
@ -84,7 +84,7 @@ extern "C" {
(x) == FSTRING_MIDDLE) (x) == FSTRING_MIDDLE)
// Symbols exported for test_peg_generator // Export these 4 symbols for 'test_peg_generator'
PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */ PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */
PyAPI_FUNC(int) _PyToken_OneChar(int); PyAPI_FUNC(int) _PyToken_OneChar(int);
PyAPI_FUNC(int) _PyToken_TwoChars(int, int); PyAPI_FUNC(int) _PyToken_TwoChars(int, int);