Skip to content

Commit 20c5f96

Browse files
authored
gh-131238: Remove more includes from pycore_interp.h (#131480)
1 parent 63b5aed commit 20c5f96

31 files changed

+92
-57
lines changed

Include/internal/pycore_ceval.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ extern "C" {
88
# error "this header requires Py_BUILD_CORE define"
99
#endif
1010

11-
#include "dynamic_annotations.h" // _Py_ANNOTATE_RWLOCK_CREATE
11+
#include "dynamic_annotations.h" // _Py_ANNOTATE_RWLOCK_CREATE
1212

13+
#include "pycore_code.h" // _PyCode_GetTLBCFast()
1314
#include "pycore_interp.h" // PyInterpreterState.eval_frame
1415
#include "pycore_pystate.h" // _PyThreadState_GET()
16+
#include "pycore_stats.h" // EVAL_CALL_STAT_INC()
1517
#include "pycore_typedefs.h" // _PyInterpreterFrame
1618

1719

Include/internal/pycore_interp.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,7 @@ extern "C" {
1111
#include <stdbool.h> // bool
1212

1313
#include "pycore_runtime_structs.h"
14-
#include "pycore_code.h" // struct callable_cache
15-
#include "pycore_floatobject.h" // struct _Py_float_state
16-
#include "pycore_gc.h" // struct _gc_runtime_state
1714
#include "pycore_genobject.h" // _PyGen_FetchStopIterationValue
18-
#include "pycore_import.h" // struct _import_state
19-
#include "pycore_optimizer.h" // _PyExecutorObject
20-
#include "pycore_typeobject.h" // struct types_state
21-
#include "pycore_unicodeobject.h" // struct _Py_unicode_state
22-
#include "pycore_warnings.h" // struct _warnings_runtime_state
2315

2416

2517
/* interpreter state */

Include/internal/pycore_runtime_init.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ extern "C" {
1616
#include "pycore_floatobject.h" // _py_float_format_unknown
1717
#include "pycore_function.h"
1818
#include "pycore_hamt.h" // _PyHamt_BitmapNode_Type
19+
#include "pycore_import.h" // IMPORTS_INIT
1920
#include "pycore_object.h" // _PyObject_HEAD_INIT
2021
#include "pycore_obmalloc_init.h" // _obmalloc_global_state_INIT
2122
#include "pycore_parser.h" // _parser_runtime_state_INIT

Modules/_ctypes/_ctypes.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ bytes(cdata)
108108

109109
#include "pycore_call.h" // _PyObject_CallNoArgs()
110110
#include "pycore_ceval.h" // _Py_EnterRecursiveCall()
111+
#include "pycore_unicodeobject.h" // _PyUnicode_EqualToASCIIString()
111112
#ifdef MS_WIN32
112113
# include "pycore_modsupport.h" // _PyArg_NoKeywords()
113114
#endif

Modules/_io/textio.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
*/
88

99
#include "Python.h"
10-
#include "pycore_call.h" // _PyObject_CallMethod()
11-
#include "pycore_codecs.h" // _PyCodecInfo_GetIncrementalDecoder()
12-
#include "pycore_fileutils.h" // _Py_GetLocaleEncoding()
13-
#include "pycore_interp.h" // PyInterpreterState.fs_codec
14-
#include "pycore_long.h" // _PyLong_GetZero()
15-
#include "pycore_object.h" // _PyObject_GC_UNTRACK()
16-
#include "pycore_pyerrors.h" // _PyErr_ChainExceptions1()
17-
#include "pycore_pystate.h" // _PyInterpreterState_GET()
10+
#include "pycore_call.h" // _PyObject_CallMethod()
11+
#include "pycore_codecs.h" // _PyCodecInfo_GetIncrementalDecoder()
12+
#include "pycore_fileutils.h" // _Py_GetLocaleEncoding()
13+
#include "pycore_interp.h" // PyInterpreterState.fs_codec
14+
#include "pycore_long.h" // _PyLong_GetZero()
15+
#include "pycore_object.h" // _PyObject_GC_UNTRACK()
16+
#include "pycore_pyerrors.h" // _PyErr_ChainExceptions1()
17+
#include "pycore_pystate.h" // _PyInterpreterState_GET()
18+
#include "pycore_unicodeobject.h" // _PyUnicode_AsASCIIString()
1819

1920
#include "_iomodule.h"
2021

Modules/_json.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
#endif
1010

1111
#include "Python.h"
12-
#include "pycore_ceval.h" // _Py_EnterRecursiveCall()
13-
#include "pycore_runtime.h" // _PyRuntime
14-
#include "pycore_pyerrors.h" // _PyErr_FormatNote
12+
#include "pycore_ceval.h" // _Py_EnterRecursiveCall()
13+
#include "pycore_global_strings.h" // _Py_ID()
14+
#include "pycore_pyerrors.h" // _PyErr_FormatNote
15+
#include "pycore_runtime.h" // _PyRuntime
16+
#include "pycore_unicodeobject.h" // _PyUnicode_CheckConsistency()
1517

16-
#include "pycore_global_strings.h" // _Py_ID()
17-
#include <stdbool.h> // bool
18+
#include <stdbool.h> // bool
1819

1920

2021
typedef struct _PyScannerObject {

Modules/_lsprof.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "pycore_ceval.h" // _PyEval_SetProfile()
88
#include "pycore_pystate.h" // _PyThreadState_GET()
99
#include "pycore_time.h" // _PyTime_FromLong()
10+
#include "pycore_unicodeobject.h" // _PyUnicode_EqualToASCIIString()
1011

1112
#include "rotatingtree.h"
1213

Modules/_pickle.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,18 @@
99
#endif
1010

1111
#include "Python.h"
12-
#include "pycore_bytesobject.h" // _PyBytesWriter
13-
#include "pycore_ceval.h" // _Py_EnterRecursiveCall()
14-
#include "pycore_critical_section.h" // Py_BEGIN_CRITICAL_SECTION()
15-
#include "pycore_long.h" // _PyLong_AsByteArray()
16-
#include "pycore_moduleobject.h" // _PyModule_GetState()
17-
#include "pycore_object.h" // _PyNone_Type
18-
#include "pycore_pyerrors.h" // _PyErr_FormatNote
19-
#include "pycore_pystate.h" // _PyThreadState_GET()
20-
#include "pycore_runtime.h" // _Py_ID()
21-
#include "pycore_setobject.h" // _PySet_NextEntry()
22-
#include "pycore_sysmodule.h" // _PySys_GetSizeOf()
12+
#include "pycore_bytesobject.h" // _PyBytesWriter
13+
#include "pycore_ceval.h" // _Py_EnterRecursiveCall()
14+
#include "pycore_critical_section.h" // Py_BEGIN_CRITICAL_SECTION()
15+
#include "pycore_long.h" // _PyLong_AsByteArray()
16+
#include "pycore_moduleobject.h" // _PyModule_GetState()
17+
#include "pycore_object.h" // _PyNone_Type
18+
#include "pycore_pyerrors.h" // _PyErr_FormatNote
19+
#include "pycore_pystate.h" // _PyThreadState_GET()
20+
#include "pycore_runtime.h" // _Py_ID()
21+
#include "pycore_setobject.h" // _PySet_NextEntry()
22+
#include "pycore_sysmodule.h" // _PySys_GetSizeOf()
23+
#include "pycore_unicodeobject.h" // _PyUnicode_EqualToASCIIString()
2324

2425
#include <stdlib.h> // strtol()
2526

Modules/_posixsubprocess.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#endif
55

66
#include "Python.h"
7+
#include "pycore_fileutils.h" // _Py_set_inheritable_async_safe()
78
#include "pycore_interp.h" // _PyInterpreterState_GetFinalizing()
89
#include "pycore_pystate.h" // _PyInterpreterState_GET()
910
#include "pycore_signal.h" // _Py_RestoreSignals()

Modules/_testinternalcapi.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "pycore_frame.h" // _PyInterpreterFrame
2424
#include "pycore_gc.h" // PyGC_Head
2525
#include "pycore_hashtable.h" // _Py_hashtable_new()
26+
#include "pycore_import.h" // _PyImport_ClearExtension()
2627
#include "pycore_initconfig.h" // _Py_GetConfigsAsDict()
2728
#include "pycore_instruction_sequence.h" // _PyInstructionSequence_New()
2829
#include "pycore_object.h" // _PyObject_IsFreed()
@@ -31,6 +32,7 @@
3132
#include "pycore_pyerrors.h" // _PyErr_ChainExceptions1()
3233
#include "pycore_pylifecycle.h" // _PyInterpreterConfig_AsDict()
3334
#include "pycore_pystate.h" // _PyThreadState_GET()
35+
#include "pycore_unicodeobject.h" // _PyUnicode_TransformDecimalAndSpaceToASCII()
3436

3537
#include "clinic/_testinternalcapi.c.h"
3638

Modules/main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include "Python.h"
44
#include "pycore_call.h" // _PyObject_CallNoArgs()
5+
#include "pycore_fileutils.h" // struct _Py_stat_struct
6+
#include "pycore_import.h" // _PyImport_Fini2()
57
#include "pycore_initconfig.h" // _PyArgv
68
#include "pycore_interp.h" // _PyInterpreterState.sysdict
79
#include "pycore_long.h" // _PyLong_GetOne()

Modules/posixmodule.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "pycore_call.h" // _PyObject_CallNoArgs()
1919
#include "pycore_ceval.h" // _PyEval_ReInitThreads()
2020
#include "pycore_fileutils.h" // _Py_closerange()
21+
#include "pycore_import.h" // _PyImport_AcquireLock()
2122
#include "pycore_initconfig.h" // _PyStatus_EXCEPTION()
2223
#include "pycore_long.h" // _PyLong_IsNegative()
2324
#include "pycore_moduleobject.h" // _PyModule_GetState()

Objects/bytesobject.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "pycore_object.h" // _PyObject_GC_TRACK
1414
#include "pycore_pymem.h" // PYMEM_CLEANBYTE
1515
#include "pycore_strhex.h" // _Py_strhex_with_sep()
16+
#include "pycore_unicodeobject.h" // _PyUnicode_FormatLong()
1617

1718
#include <stddef.h>
1819

Objects/codeobject.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
#include "pycore_pystate.h" // _PyInterpreterState_GET()
1616
#include "pycore_setobject.h" // _PySet_NextEntry()
1717
#include "pycore_tuple.h" // _PyTuple_ITEMS()
18+
#include "pycore_unicodeobject.h" // _PyUnicode_InternImmortal()
1819
#include "pycore_uniqueid.h" // _PyObject_AssignUniqueId()
19-
#include "clinic/codeobject.c.h"
2020

21+
#include "clinic/codeobject.c.h"
2122
#include <stdbool.h>
2223

24+
2325
#define INITIAL_SPECIALIZED_CODE_SIZE 16
2426

2527
static const char *

Objects/dictobject.c

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -116,23 +116,25 @@ As a consequence of this, split keys have a maximum size of 16.
116116
#define PyDict_MINSIZE 8
117117

118118
#include "Python.h"
119-
#include "pycore_bitutils.h" // _Py_bit_length
120-
#include "pycore_call.h" // _PyObject_CallNoArgs()
121-
#include "pycore_ceval.h" // _PyEval_GetBuiltin()
122-
#include "pycore_code.h" // stats
123-
#include "pycore_critical_section.h" // Py_BEGIN_CRITICAL_SECTION, Py_END_CRITICAL_SECTION
124-
#include "pycore_dict.h" // export _PyDict_SizeOf()
125-
#include "pycore_freelist.h" // _PyFreeListState_GET()
126-
#include "pycore_gc.h" // _PyObject_GC_IS_TRACKED()
127-
#include "pycore_object.h" // _PyObject_GC_TRACK(), _PyDebugAllocatorStats()
119+
#include "pycore_bitutils.h" // _Py_bit_length
120+
#include "pycore_call.h" // _PyObject_CallNoArgs()
121+
#include "pycore_ceval.h" // _PyEval_GetBuiltin()
122+
#include "pycore_code.h" // stats
123+
#include "pycore_critical_section.h" // Py_BEGIN_CRITICAL_SECTION, Py_END_CRITICAL_SECTION
124+
#include "pycore_dict.h" // export _PyDict_SizeOf()
125+
#include "pycore_freelist.h" // _PyFreeListState_GET()
126+
#include "pycore_gc.h" // _PyObject_GC_IS_TRACKED()
127+
#include "pycore_object.h" // _PyObject_GC_TRACK(), _PyDebugAllocatorStats()
128128
#include "pycore_pyatomic_ft_wrappers.h" // FT_ATOMIC_LOAD_SSIZE_RELAXED
129-
#include "pycore_pyerrors.h" // _PyErr_GetRaisedException()
130-
#include "pycore_pystate.h" // _PyThreadState_GET()
131-
#include "pycore_setobject.h" // _PySet_NextEntry()
132-
#include "stringlib/eq.h" // unicode_eq()
129+
#include "pycore_pyerrors.h" // _PyErr_GetRaisedException()
130+
#include "pycore_pystate.h" // _PyThreadState_GET()
131+
#include "pycore_setobject.h" // _PySet_NextEntry()
132+
#include "pycore_unicodeobject.h" // _PyUnicode_InternImmortal()
133133

134+
#include "stringlib/eq.h" // unicode_eq()
134135
#include <stdbool.h>
135136

137+
136138
/*[clinic input]
137139
class dict "PyDictObject *" "&PyDict_Type"
138140
[clinic start generated code]*/

Objects/frameobject.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
#include "pycore_function.h" // _PyFunction_FromConstructor()
88
#include "pycore_genobject.h" // _PyGen_GetGeneratorFromFrame()
99
#include "pycore_moduleobject.h" // _PyModule_GetDict()
10+
#include "pycore_cell.h" // PyCell_GetRef() PyCell_SetTakeRef()
1011
#include "pycore_modsupport.h" // _PyArg_CheckPositional()
1112
#include "pycore_object.h" // _PyObject_GC_UNTRACK()
12-
#include "pycore_cell.h" // PyCell_GetRef() PyCell_SetTakeRef()
1313
#include "pycore_opcode_metadata.h" // _PyOpcode_Deopt, _PyOpcode_Caches
14+
#include "pycore_optimizer.h" // _Py_Executors_InvalidateDependency()
15+
#include "pycore_unicodeobject.h" // _PyUnicode_Equal()
1416

1517

1618
#include "frameobject.h" // PyFrameObject

Objects/genericaliasobject.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "pycore_modsupport.h" // _PyArg_NoKeywords()
66
#include "pycore_object.h"
77
#include "pycore_typevarobject.h" // _Py_typing_type_repr
8+
#include "pycore_unicodeobject.h" // _PyUnicode_EqualToASCIIString()
89
#include "pycore_unionobject.h" // _Py_union_type_or, _PyGenericAlias_Check
910

1011

Objects/genobject.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "pycore_pyatomic_ft_wrappers.h" // FT_ATOMIC_*
1717
#include "pycore_pyerrors.h" // _PyErr_ClearExcState()
1818
#include "pycore_pystate.h" // _PyThreadState_GET()
19+
#include "pycore_warnings.h" // _PyErr_WarnUnawaitedCoroutine()
1920

2021
// Forward declarations
2122
static PyObject* gen_close(PyObject *, PyObject *);

Objects/moduleobject.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "pycore_call.h" // _PyObject_CallNoArgs()
66
#include "pycore_dict.h" // _PyDict_EnablePerThreadRefcounting()
77
#include "pycore_fileutils.h" // _Py_wgetcwd
8+
#include "pycore_import.h" // _PyImport_GetNextModuleIndex()
89
#include "pycore_interp.h" // PyInterpreterState.importlib
910
#include "pycore_long.h" // _PyLong_GetOne()
1011
#include "pycore_modsupport.h" // _PyModule_CreateInitialized()
@@ -13,6 +14,7 @@
1314
#include "pycore_pyerrors.h" // _PyErr_FormatFromCause()
1415
#include "pycore_pystate.h" // _PyInterpreterState_GET()
1516
#include "pycore_sysmodule.h" // _PySys_GetOptionalAttrString()
17+
#include "pycore_unicodeobject.h" // _PyUnicode_EqualToASCIIString()
1618

1719
#include "osdefs.h" // MAXPATHLEN
1820

Python/_warnings.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
#include "Python.h"
22
#include "pycore_critical_section.h" // Py_BEGIN_CRITICAL_SECTION_MUT()
33
#include "pycore_frame.h" // PyFrameObject members
4+
#include "pycore_import.h" // _PyImport_GetModules()
45
#include "pycore_interp.h" // PyInterpreterState.warnings
56
#include "pycore_long.h" // _PyLong_GetZero()
67
#include "pycore_pyerrors.h" // _PyErr_Occurred()
78
#include "pycore_pylifecycle.h" // _Py_IsInterpreterFinalizing()
89
#include "pycore_pystate.h" // _PyThreadState_GET()
910
#include "pycore_sysmodule.h" // _PySys_GetOptionalAttr()
1011
#include "pycore_traceback.h" // _Py_DisplaySourceLine()
12+
#include "pycore_unicodeobject.h" // _PyUnicode_EqualToASCIIString()
1113

1214
#include <stdbool.h>
13-
1415
#include "clinic/_warnings.c.h"
1516

17+
1618
#define MODULE_NAME "_warnings"
1719

1820
PyDoc_STRVAR(warnings__doc__,

Python/bltinmodule.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "pycore_ceval.h" // _PyEval_Vector()
77
#include "pycore_compile.h" // _PyAST_Compile()
88
#include "pycore_fileutils.h" // _PyFile_Flush
9+
#include "pycore_floatobject.h" // _PyFloat_ExactDealloc()
910
#include "pycore_interp.h" // _PyInterpreterState_GetConfig()
1011
#include "pycore_long.h" // _PyLong_CompactValue
1112
#include "pycore_modsupport.h" // _PyArg_NoKwnames()

Python/ceval.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
#include "pycore_ceval.h"
1212
#include "pycore_code.h"
1313
#include "pycore_emscripten_signal.h" // _Py_CHECK_EMSCRIPTEN_SIGNALS
14+
#include "pycore_floatobject.h" // _PyFloat_ExactDealloc()
1415
#include "pycore_function.h"
16+
#include "pycore_import.h" // _PyImport_IsDefaultImportFunc()
1517
#include "pycore_instruments.h"
1618
#include "pycore_intrinsics.h"
1719
#include "pycore_jit.h"

Python/ceval_gil.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
#include "pycore_ceval.h" // _PyEval_SignalReceived()
44
#include "pycore_initconfig.h" // _PyStatus_OK()
55
#include "pycore_interp.h" // _Py_RunGC()
6+
#include "pycore_optimizer.h" // _Py_Executors_InvalidateCold()
67
#include "pycore_pyerrors.h" // _PyErr_GetRaisedException()
78
#include "pycore_pylifecycle.h" // _PyErr_Print()
89
#include "pycore_pymem.h" // _PyMem_IsPtrFreed()
910
#include "pycore_pystate.h" // PyThread_hang_thread()
1011
#include "pycore_pystats.h" // _Py_PrintSpecializationStats()
1112

13+
1214
/*
1315
Notes about the implementation:
1416

Python/codecs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Copyright (c) Corporation for National Research Initiatives.
1515
#include "pycore_pystate.h" // _PyInterpreterState_GET()
1616
#include "pycore_runtime.h" // _Py_ID()
1717
#include "pycore_ucnhash.h" // _PyUnicode_Name_CAPI
18+
#include "pycore_unicodeobject.h" // _PyUnicode_InternMortal()
1819

1920

2021
static const char *codecs_builtin_error_handlers[] = {

Python/dynload_shlib.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
/* Support for dynamic loading of extension modules */
33

44
#include "Python.h"
5-
#include "pycore_interp.h" // _PyInterpreterState.dlopenflags
6-
#include "pycore_pystate.h" // _PyInterpreterState_GET()
5+
#include "pycore_fileutils.h" // struct _Py_stat_struct
6+
#include "pycore_import.h" // _PyImport_GetDLOpenFlags()
77
#include "pycore_importdl.h"
8+
#include "pycore_interp.h" // _PyInterpreterState.dlopenflags
9+
#include "pycore_pystate.h" // _PyInterpreterState_GET()
810

911
#include <sys/types.h>
1012
#include <sys/stat.h>

Python/import.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "pycore_pystate.h" // _PyInterpreterState_GET()
1919
#include "pycore_sysmodule.h" // _PySys_ClearAttrString()
2020
#include "pycore_time.h" // _PyTime_AsMicroseconds()
21+
#include "pycore_unicodeobject.h" // _PyUnicode_AsUTF8NoNUL()
2122
#include "pycore_weakref.h" // _PyWeakref_GET_REF()
2223

2324
#include "marshal.h" // PyMarshal_ReadObjectFromString()

Python/instrumentation.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "pycore_object.h"
1313
#include "pycore_opcode_metadata.h" // IS_VALID_OPCODE, _PyOpcode_Caches
1414
#include "pycore_opcode_utils.h" // IS_CONDITIONAL_JUMP_OPCODE
15+
#include "pycore_optimizer.h" // _PyExecutorObject
1516
#include "pycore_pyatomic_ft_wrappers.h" // FT_ATOMIC_STORE_UINTPTR_RELEASE
1617
#include "pycore_pyerrors.h"
1718
#include "pycore_pystate.h" // _PyInterpreterState_GET()

0 commit comments

Comments
 (0)