1#ifndef Py_INTERNAL_UNICODEOBJECT_H 2#define Py_INTERNAL_UNICODEOBJECT_H 3#ifdef __cplusplus 4extern "C" { 5#endif 6 7#ifndef Py_BUILD_CORE 8# error "this header requires Py_BUILD_CORE define" 9#endif 10 11#include "pycore_fileutils.h" // _Py_error_handler 12 13void _PyUnicode_ExactDealloc(PyObject *op); 14 15/* runtime lifecycle */ 16 17extern void _PyUnicode_InitState(PyInterpreterState *); 18extern PyStatus _PyUnicode_InitGlobalObjects(PyInterpreterState *); 19extern PyStatus _PyUnicode_InitTypes(PyInterpreterState *); 20extern void _PyUnicode_Fini(PyInterpreterState *); 21extern void _PyUnicode_FiniTypes(PyInterpreterState *); 22extern void _PyStaticUnicode_Dealloc(PyObject *); 23 24extern PyTypeObject _PyUnicodeASCIIIter_Type; 25 26/* other API */ 27 28struct _Py_unicode_runtime_ids { 29 PyThread_type_lock lock; 30 // next_index value must be preserved when Py_Initialize()/Py_Finalize() 31 // is called multiple times: see _PyUnicode_FromId() implementation. 32 Py_ssize_t next_index; 33}; 34 35/* fs_codec.encoding is initialized to NULL. 36 Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */ 37struct _Py_unicode_fs_codec { 38 char *encoding; // Filesystem encoding (encoded to UTF-8) 39 int utf8; // encoding=="utf-8"? 40 char *errors; // Filesystem errors (encoded to UTF-8) 41 _Py_error_handler error_handler; 42}; 43 44struct _Py_unicode_ids { 45 Py_ssize_t size; 46 PyObject **array; 47}; 48 49struct _Py_unicode_state { 50 struct _Py_unicode_fs_codec fs_codec; 51 52 // Unicode identifiers (_Py_Identifier): see _PyUnicode_FromId() 53 struct _Py_unicode_ids ids; 54}; 55 56extern void _PyUnicode_ClearInterned(PyInterpreterState *interp); 57 58 59#ifdef __cplusplus 60} 61#endif 62#endif /* !Py_INTERNAL_UNICODEOBJECT_H */ 63