Skip to content

Commit 35963da

Browse files
authored
gh-106320: Create pycore_modsupport.h header file (#106355)
Remove the following functions from the C API, move them to the internal C API: add a new pycore_modsupport.h internal header file: * PyModule_CreateInitialized() * _PyArg_NoKwnames() * _Py_VaBuildStack() No longer export these functions.
1 parent 5ccbbe5 commit 35963da

20 files changed

+56
-18
lines changed

Include/cpython/modsupport.h

-12
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,9 @@ PyAPI_FUNC(int) _PyArg_UnpackStack(
1111
...);
1212

1313
PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kwargs);
14-
PyAPI_FUNC(int) _PyArg_NoKwnames(const char *funcname, PyObject *kwnames);
1514
PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args);
1615
#define _PyArg_NoKeywords(funcname, kwargs) \
1716
((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
18-
#define _PyArg_NoKwnames(funcname, kwnames) \
19-
((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
2017
#define _PyArg_NoPositional(funcname, args) \
2118
((args) == NULL || _PyArg_NoPositional((funcname), (args)))
2219

@@ -29,13 +26,6 @@ PyAPI_FUNC(int) _PyArg_CheckPositional(const char *, Py_ssize_t,
2926
((!_Py_ANY_VARARGS(max) && (min) <= (nargs) && (nargs) <= (max)) \
3027
|| _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
3128

32-
PyAPI_FUNC(PyObject **) _Py_VaBuildStack(
33-
PyObject **small_stack,
34-
Py_ssize_t small_stack_len,
35-
const char *format,
36-
va_list va,
37-
Py_ssize_t *p_nargs);
38-
3929
typedef struct _PyArg_Parser {
4030
int initialized;
4131
const char *format;
@@ -83,5 +73,3 @@ PyAPI_FUNC(PyObject * const *) _PyArg_UnpackKeywordsWithVararg(
8373
(minpos) <= (nargs) && (nargs) <= (maxpos) && (args) != NULL) ? (args) : \
8474
_PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
8575
(minpos), (maxpos), (minkw), (buf)))
86-
87-
PyAPI_FUNC(PyObject *) _PyModule_CreateInitialized(PyModuleDef*, int apiver);

Include/internal/pycore_modsupport.h

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#ifndef Py_INTERNAL_MODSUPPORT_H
2+
#define Py_INTERNAL_MODSUPPORT_H
3+
#ifdef __cplusplus
4+
extern "C" {
5+
#endif
6+
7+
#ifndef Py_BUILD_CORE
8+
# error "this header requires Py_BUILD_CORE define"
9+
#endif
10+
11+
12+
extern int _PyArg_NoKwnames(const char *funcname, PyObject *kwnames);
13+
#define _PyArg_NoKwnames(funcname, kwnames) \
14+
((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
15+
16+
extern PyObject ** _Py_VaBuildStack(
17+
PyObject **small_stack,
18+
Py_ssize_t small_stack_len,
19+
const char *format,
20+
va_list va,
21+
Py_ssize_t *p_nargs);
22+
23+
extern PyObject* _PyModule_CreateInitialized(PyModuleDef*, int apiver);
24+
25+
#ifdef __cplusplus
26+
}
27+
#endif
28+
#endif // !Py_INTERNAL_MODSUPPORT_H
29+

Makefile.pre.in

+1
Original file line numberDiff line numberDiff line change
@@ -1761,6 +1761,7 @@ PYTHON_HEADERS= \
17611761
$(srcdir)/Include/internal/pycore_intrinsics.h \
17621762
$(srcdir)/Include/internal/pycore_list.h \
17631763
$(srcdir)/Include/internal/pycore_long.h \
1764+
$(srcdir)/Include/internal/pycore_modsupport.h \
17641765
$(srcdir)/Include/internal/pycore_moduleobject.h \
17651766
$(srcdir)/Include/internal/pycore_namespace.h \
17661767
$(srcdir)/Include/internal/pycore_object.h \

Modules/_operator.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
#include "Python.h"
2+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
23
#include "pycore_moduleobject.h" // _PyModule_GetState()
3-
#include "structmember.h" // PyMemberDef
44
#include "pycore_runtime.h" // _Py_ID()
5+
6+
#include "structmember.h" // PyMemberDef
57
#include "clinic/_operator.c.h"
68

79
typedef struct {

Objects/boolobject.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
/* Boolean type, a subtype of int */
22

33
#include "Python.h"
4-
#include "pycore_object.h" // _Py_FatalRefcountError()
5-
#include "pycore_long.h" // FALSE_TAG TRUE_TAG
4+
#include "pycore_long.h" // FALSE_TAG TRUE_TAG
5+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
6+
#include "pycore_object.h" // _Py_FatalRefcountError()
67
#include "pycore_runtime.h" // _Py_ID()
78

89
#include <stddef.h>

Objects/call.c

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "pycore_call.h" // _PyObject_CallNoArgsTstate()
33
#include "pycore_ceval.h" // _Py_EnterRecursiveCallTstate()
44
#include "pycore_dict.h" // _PyDict_FromItems()
5+
#include "pycore_modsupport.h" // _Py_VaBuildStack()
56
#include "pycore_object.h" // _PyCFunctionWithKeywords_TrampolineCall()
67
#include "pycore_pyerrors.h" // _PyErr_Occurred()
78
#include "pycore_pystate.h" // _PyThreadState_GET()

Objects/enumobject.c

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "Python.h"
44
#include "pycore_call.h" // _PyObject_CallNoArgs()
55
#include "pycore_long.h" // _PyLong_GetOne()
6+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
67
#include "pycore_object.h" // _PyObject_GC_TRACK()
78

89
#include "clinic/enumobject.c.h"

Objects/floatobject.c

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "pycore_initconfig.h" // _PyStatus_OK()
1010
#include "pycore_interp.h" // _PyInterpreterState.float_state
1111
#include "pycore_long.h" // _PyLong_GetOne()
12+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
1213
#include "pycore_object.h" // _PyObject_Init()
1314
#include "pycore_pymath.h" // _PY_SHORT_FLOAT_REPR
1415
#include "pycore_pystate.h" // _PyInterpreterState_GET()

Objects/listobject.c

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "pycore_interp.h" // PyInterpreterState.list
66
#include "pycore_list.h" // struct _Py_list_state, _PyListIterObject
77
#include "pycore_long.h" // _PyLong_DigitCount
8+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
89
#include "pycore_object.h" // _PyObject_GC_TRACK()
910
#include "pycore_tuple.h" // _PyTuple_FromArray()
1011
#include <stddef.h>

Objects/moduleobject.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
#include "pycore_call.h" // _PyObject_CallNoArgs()
66
#include "pycore_interp.h" // PyInterpreterState.importlib
77
#include "pycore_object.h" // _PyType_AllocNoTrack
8-
#include "pycore_pystate.h" // _PyInterpreterState_GET()
98
#include "pycore_moduleobject.h" // _PyModule_GetDef()
9+
#include "pycore_modsupport.h" // _PyModule_CreateInitialized()
10+
#include "pycore_pystate.h" // _PyInterpreterState_GET()
1011
#include "structmember.h" // PyMemberDef
1112

1213

Objects/rangeobject.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
#include "Python.h"
44
#include "pycore_abstract.h" // _PyIndex_Check()
5-
#include "pycore_range.h"
65
#include "pycore_long.h" // _PyLong_GetZero()
6+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
7+
#include "pycore_range.h"
78
#include "pycore_tuple.h" // _PyTuple_ITEMS()
89
#include "structmember.h" // PyMemberDef
910

Objects/setobject.c

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
*/
3333

3434
#include "Python.h"
35+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
3536
#include "pycore_object.h" // _PyObject_GC_UNTRACK()
3637
#include <stddef.h> // offsetof()
3738

Objects/tupleobject.c

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "pycore_abstract.h" // _PyIndex_Check()
66
#include "pycore_gc.h" // _PyObject_GC_IS_TRACKED()
77
#include "pycore_initconfig.h" // _PyStatus_OK()
8+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
89
#include "pycore_object.h" // _PyObject_GC_TRACK(), _Py_FatalRefcountError()
910

1011
/*[clinic input]

Objects/typeobject.c

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "pycore_frame.h" // _PyInterpreterFrame
99
#include "pycore_long.h" // _PyLong_IsNegative()
1010
#include "pycore_memoryobject.h" // _PyMemoryView_FromBufferProc()
11+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
1112
#include "pycore_moduleobject.h" // _PyModule_GetDef()
1213
#include "pycore_object.h" // _PyType_HasFeature()
1314
#include "pycore_pyerrors.h" // _PyErr_Occurred()

Objects/weakrefobject.c

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "Python.h"
2+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
23
#include "pycore_object.h" // _PyObject_GET_WEAKREFS_LISTPTR()
34
#include "pycore_weakref.h" // _PyWeakref_GET_REF()
45
#include "structmember.h" // PyMemberDef

PCbuild/pythoncore.vcxproj

+1
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@
241241
<ClInclude Include="..\Include\internal\pycore_intrinsics.h" />
242242
<ClInclude Include="..\Include\internal\pycore_list.h" />
243243
<ClInclude Include="..\Include\internal\pycore_long.h" />
244+
<ClInclude Include="..\Include\internal\pycore_modsupport.h" />
244245
<ClInclude Include="..\Include\internal\pycore_moduleobject.h" />
245246
<ClInclude Include="..\Include\internal\pycore_namespace.h" />
246247
<ClInclude Include="..\Include\internal\pycore_object.h" />

PCbuild/pythoncore.vcxproj.filters

+3
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,9 @@
627627
<ClInclude Include="..\Include\internal\pycore_long.h">
628628
<Filter>Include\internal</Filter>
629629
</ClInclude>
630+
<ClInclude Include="..\Include\internal\pycore_modsupport.h">
631+
<Filter>Include\internal</Filter>
632+
</ClInclude>
630633
<ClInclude Include="..\Include\internal\pycore_moduleobject.h">
631634
<Filter>Include\internal</Filter>
632635
</ClInclude>

Python/bltinmodule.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44
#include <ctype.h>
55
#include "pycore_ast.h" // _PyAST_Validate()
66
#include "pycore_call.h" // _PyObject_CallNoArgs()
7+
#include "pycore_ceval.h" // _PyEval_Vector()
78
#include "pycore_compile.h" // _PyAST_Compile()
89
#include "pycore_long.h" // _PyLong_CompactValue
10+
#include "pycore_modsupport.h" // _PyArg_NoKwnames()
911
#include "pycore_object.h" // _Py_AddToAllObjects()
1012
#include "pycore_pyerrors.h" // _PyErr_NoMemory()
1113
#include "pycore_pystate.h" // _PyThreadState_GET()
1214
#include "pycore_tuple.h" // _PyTuple_FromArray()
13-
#include "pycore_ceval.h" // _PyEval_Vector()
1415

1516
#include "clinic/bltinmodule.c.h"
1617

Python/instrumentation.c

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "pycore_frame.h"
44
#include "pycore_interp.h"
55
#include "pycore_long.h"
6+
#include "pycore_modsupport.h" // _PyModule_CreateInitialized()
67
#include "pycore_namespace.h"
78
#include "pycore_object.h"
89
#include "pycore_opcode.h"

Python/sysmodule.c

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ Data members:
2020
#include "pycore_frame.h" // _PyInterpreterFrame
2121
#include "pycore_initconfig.h" // _PyStatus_EXCEPTION()
2222
#include "pycore_long.h" // _PY_LONG_MAX_STR_DIGITS_THRESHOLD
23+
#include "pycore_modsupport.h" // _PyModule_CreateInitialized()
2324
#include "pycore_namespace.h" // _PyNamespace_New()
2425
#include "pycore_object.h" // _PyObject_IS_GC()
2526
#include "pycore_pathconfig.h" // _PyPathConfig_ComputeSysPath0()

0 commit comments

Comments
 (0)