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