17db96d56Sopenharmony_ci#ifndef Py_INTERNAL_UNICODEOBJECT_H
27db96d56Sopenharmony_ci#define Py_INTERNAL_UNICODEOBJECT_H
37db96d56Sopenharmony_ci#ifdef __cplusplus
47db96d56Sopenharmony_ciextern "C" {
57db96d56Sopenharmony_ci#endif
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci#ifndef Py_BUILD_CORE
87db96d56Sopenharmony_ci#  error "this header requires Py_BUILD_CORE define"
97db96d56Sopenharmony_ci#endif
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci#include "pycore_fileutils.h"     // _Py_error_handler
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_civoid _PyUnicode_ExactDealloc(PyObject *op);
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci/* runtime lifecycle */
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ciextern void _PyUnicode_InitState(PyInterpreterState *);
187db96d56Sopenharmony_ciextern PyStatus _PyUnicode_InitGlobalObjects(PyInterpreterState *);
197db96d56Sopenharmony_ciextern PyStatus _PyUnicode_InitTypes(PyInterpreterState *);
207db96d56Sopenharmony_ciextern void _PyUnicode_Fini(PyInterpreterState *);
217db96d56Sopenharmony_ciextern void _PyUnicode_FiniTypes(PyInterpreterState *);
227db96d56Sopenharmony_ciextern void _PyStaticUnicode_Dealloc(PyObject *);
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ciextern PyTypeObject _PyUnicodeASCIIIter_Type;
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci/* other API */
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_cistruct _Py_unicode_runtime_ids {
297db96d56Sopenharmony_ci    PyThread_type_lock lock;
307db96d56Sopenharmony_ci    // next_index value must be preserved when Py_Initialize()/Py_Finalize()
317db96d56Sopenharmony_ci    // is called multiple times: see _PyUnicode_FromId() implementation.
327db96d56Sopenharmony_ci    Py_ssize_t next_index;
337db96d56Sopenharmony_ci};
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci/* fs_codec.encoding is initialized to NULL.
367db96d56Sopenharmony_ci   Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */
377db96d56Sopenharmony_cistruct _Py_unicode_fs_codec {
387db96d56Sopenharmony_ci    char *encoding;   // Filesystem encoding (encoded to UTF-8)
397db96d56Sopenharmony_ci    int utf8;         // encoding=="utf-8"?
407db96d56Sopenharmony_ci    char *errors;     // Filesystem errors (encoded to UTF-8)
417db96d56Sopenharmony_ci    _Py_error_handler error_handler;
427db96d56Sopenharmony_ci};
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_cistruct _Py_unicode_ids {
457db96d56Sopenharmony_ci    Py_ssize_t size;
467db96d56Sopenharmony_ci    PyObject **array;
477db96d56Sopenharmony_ci};
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_cistruct _Py_unicode_state {
507db96d56Sopenharmony_ci    struct _Py_unicode_fs_codec fs_codec;
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci    // Unicode identifiers (_Py_Identifier): see _PyUnicode_FromId()
537db96d56Sopenharmony_ci    struct _Py_unicode_ids ids;
547db96d56Sopenharmony_ci};
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ciextern void _PyUnicode_ClearInterned(PyInterpreterState *interp);
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci#ifdef __cplusplus
607db96d56Sopenharmony_ci}
617db96d56Sopenharmony_ci#endif
627db96d56Sopenharmony_ci#endif /* !Py_INTERNAL_UNICODEOBJECT_H */
63