summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2023-09-01 19:03:20 (GMT)
committerGitHub <noreply@github.com>2023-09-01 19:03:20 (GMT)
commit45b9e6a61f4cd61c08b2b02d257b52635ab37a25 (patch)
tree17bd561901193b09c5847404d51c765b7e8b9545
parent0e01fac315dfa705ac8a6954485546f28cf4c87d (diff)
downloadcpython-45b9e6a61f4cd61c08b2b02d257b52635ab37a25.zip
cpython-45b9e6a61f4cd61c08b2b02d257b52635ab37a25.tar.gz
cpython-45b9e6a61f4cd61c08b2b02d257b52635ab37a25.tar.bz2
gh-108765: Move standard includes to Python.h (#108769)
* Move <ctype.h>, <limits.h> and <stdarg.h> standard includes to Python.h. * Move "pystats.h" include from object.h to Python.h. * Remove redundant "pymem.h" include in objimpl.h and "pyport.h" include in pymem.h; Python.h already includes them earlier. * Remove redundant <wchar.h> include in unicodeobject.h; Python.h already includes it. * Move _SGI_MP_SOURCE define from Python.h to pyport.h. * pycore_condvar.h includes explicitly <unistd.h> for the _POSIX_THREADS macro.
-rw-r--r--Include/Python.h40
-rw-r--r--Include/bytesobject.h5
-rw-r--r--Include/internal/pycore_condvar.h4
-rw-r--r--Include/modsupport.h5
-rw-r--r--Include/object.h2
-rw-r--r--Include/objimpl.h10
-rw-r--r--Include/pyerrors.h6
-rw-r--r--Include/pymem.h11
-rw-r--r--Include/pyport.h11
-rw-r--r--Include/unicodeobject.h8
10 files changed, 43 insertions, 59 deletions
diff --git a/Include/Python.h b/Include/Python.h
index 07f6c20..44f0fd3 100644
--- a/Include/Python.h
+++ b/Include/Python.h
@@ -5,42 +5,50 @@
#ifndef Py_PYTHON_H
#define Py_PYTHON_H
-// Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" {
+// Since this is a "meta-include" file, "#ifdef __cplusplus / extern "C" {"
+// is not needed.
+
// Include Python header files
#include "patchlevel.h"
#include "pyconfig.h"
#include "pymacconfig.h"
-#if defined(__sgi) && !defined(_SGI_MP_SOURCE)
-# define _SGI_MP_SOURCE
+
+// Include standard header files
+#include <assert.h> // assert()
+#include <ctype.h> // tolower()
+#include <inttypes.h> // uintptr_t
+#include <limits.h> // INT_MAX
+#include <stdarg.h> // va_list
+#include <wchar.h> // wchar_t
+#ifdef HAVE_STDDEF_H
+# include <stddef.h> // size_t
+#endif
+#ifndef MS_WINDOWS
+# include <unistd.h> // sysconf()
#endif
-// stdlib.h, stdio.h, errno.h and string.h headers are not used by Python
-// headers, but kept for backward compatibility. They are excluded from the
-// limited C API of Python 3.11.
+// errno.h, stdio.h, stdlib.h and string.h headers are no longer used by Python
+// headers, but kept for backward compatibility (no introduce new compiler
+// warnings). They are not included by the limited C API version 3.11 and
+// above.
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# include <stdlib.h>
-# include <stdio.h> // FILE*
# include <errno.h> // errno
+# include <stdio.h> // FILE*
+# include <stdlib.h> // getenv()
# include <string.h> // memcpy()
#endif
-#ifndef MS_WINDOWS
-# include <unistd.h>
-#endif
-#ifdef HAVE_STDDEF_H
-# include <stddef.h> // size_t
-#endif
-#include <assert.h> // assert()
-#include <wchar.h> // wchar_t
+// Include Python header files
#include "pyport.h"
#include "pymacro.h"
#include "pymath.h"
#include "pymem.h"
#include "pytypedefs.h"
#include "pybuffer.h"
+#include "pystats.h"
#include "object.h"
#include "objimpl.h"
#include "typeslots.h"
diff --git a/Include/bytesobject.h b/Include/bytesobject.h
index ee448cd..c5a2419 100644
--- a/Include/bytesobject.h
+++ b/Include/bytesobject.h
@@ -1,5 +1,4 @@
-
-/* Bytes object interface */
+// Bytes object interface
#ifndef Py_BYTESOBJECT_H
#define Py_BYTESOBJECT_H
@@ -7,8 +6,6 @@
extern "C" {
#endif
-#include <stdarg.h> // va_list
-
/*
Type PyBytesObject represents a byte string. An extra zero byte is
reserved at the end to ensure it is zero-terminated, but a size is
diff --git a/Include/internal/pycore_condvar.h b/Include/internal/pycore_condvar.h
index db8682a..489e67d 100644
--- a/Include/internal/pycore_condvar.h
+++ b/Include/internal/pycore_condvar.h
@@ -5,6 +5,10 @@
# error "this header requires Py_BUILD_CORE define"
#endif
+#ifndef MS_WINDOWS
+# include <unistd.h> // _POSIX_THREADS
+#endif
+
#ifndef _POSIX_THREADS
/* This means pthreads are not implemented in libc headers, hence the macro
not present in unistd.h. But they still can be implemented as an external
diff --git a/Include/modsupport.h b/Include/modsupport.h
index 7c15ab5..6efe9dfa 100644
--- a/Include/modsupport.h
+++ b/Include/modsupport.h
@@ -1,3 +1,4 @@
+// Module support interface
#ifndef Py_MODSUPPORT_H
#define Py_MODSUPPORT_H
@@ -5,10 +6,6 @@
extern "C" {
#endif
-/* Module support interface */
-
-#include <stdarg.h> // va_list
-
PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...);
PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...);
PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
diff --git a/Include/object.h b/Include/object.h
index de2a1ce..b94b290 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -51,8 +51,6 @@ A standard interface exists for objects that contain an array of items
whose size is determined when the object is allocated.
*/
-#include "pystats.h"
-
/* Py_DEBUG implies Py_REF_DEBUG. */
#if defined(Py_DEBUG) && !defined(Py_REF_DEBUG)
# define Py_REF_DEBUG
diff --git a/Include/objimpl.h b/Include/objimpl.h
index ef871c5..967e277 100644
--- a/Include/objimpl.h
+++ b/Include/objimpl.h
@@ -1,12 +1,8 @@
-/* The PyObject_ memory family: high-level object memory interfaces.
- See pymem.h for the low-level PyMem_ family.
-*/
+// The PyObject_ memory family: high-level object memory interfaces.
+// See pymem.h for the low-level PyMem_ family.
#ifndef Py_OBJIMPL_H
#define Py_OBJIMPL_H
-
-#include "pymem.h"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -231,4 +227,4 @@ PyAPI_FUNC(int) PyObject_GC_IsFinalized(PyObject *);
#ifdef __cplusplus
}
#endif
-#endif /* !Py_OBJIMPL_H */
+#endif // !Py_OBJIMPL_H
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
index d089fa7..5d0028c 100644
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -1,13 +1,11 @@
+// Error handling definitions
+
#ifndef Py_ERRORS_H
#define Py_ERRORS_H
#ifdef __cplusplus
extern "C" {
#endif
-#include <stdarg.h> // va_list
-
-/* Error handling definitions */
-
PyAPI_FUNC(void) PyErr_SetNone(PyObject *);
PyAPI_FUNC(void) PyErr_SetObject(PyObject *, PyObject *);
PyAPI_FUNC(void) PyErr_SetString(
diff --git a/Include/pymem.h b/Include/pymem.h
index e882645..68e33f9 100644
--- a/Include/pymem.h
+++ b/Include/pymem.h
@@ -1,12 +1,8 @@
-/* The PyMem_ family: low-level memory allocation interfaces.
- See objimpl.h for the PyObject_ memory family.
-*/
+// The PyMem_ family: low-level memory allocation interfaces.
+// See objimpl.h for the PyObject_ memory family.
#ifndef Py_PYMEM_H
#define Py_PYMEM_H
-
-#include "pyport.h"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -100,5 +96,4 @@ PyAPI_FUNC(void) PyMem_Free(void *ptr);
#ifdef __cplusplus
}
#endif
-
-#endif /* !Py_PYMEM_H */
+#endif // !Py_PYMEM_H
diff --git a/Include/pyport.h b/Include/pyport.h
index 115b54f..511c3fd 100644
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -1,13 +1,8 @@
#ifndef Py_PYPORT_H
#define Py_PYPORT_H
-#include "pyconfig.h" /* include for defines */
-
-#include <inttypes.h>
-
-#include <limits.h>
#ifndef UCHAR_MAX
-# error "limits.h must define UCHAR_MAX"
+# error "<limits.h> header must define UCHAR_MAX"
#endif
#if UCHAR_MAX != 255
# error "Python's source code assumes C's unsigned char is an 8-bit type"
@@ -771,4 +766,8 @@ extern char * _getpty(int *, int, mode_t, int);
# define ALIGNOF_MAX_ALIGN_T _Alignof(long double)
#endif
+#if defined(__sgi) && !defined(_SGI_MP_SOURCE)
+# define _SGI_MP_SOURCE
+#endif
+
#endif /* Py_PYPORT_H */
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
index 5839c74..f002777 100644
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -1,8 +1,6 @@
#ifndef Py_UNICODEOBJECT_H
#define Py_UNICODEOBJECT_H
-#include <stdarg.h> // va_list
-
/*
Unicode implementation based on original code by Fredrik Lundh,
@@ -55,8 +53,6 @@ Copyright (c) Corporation for National Research Initiatives.
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* -------------------------------------------------------------------- */
-#include <ctype.h>
-
/* === Internal API ======================================================= */
/* --- Internal Unicode Format -------------------------------------------- */
@@ -93,10 +89,6 @@ Copyright (c) Corporation for National Research Initiatives.
# endif
#endif
-#ifdef HAVE_WCHAR_H
-# include <wchar.h>
-#endif
-
/* Py_UCS4 and Py_UCS2 are typedefs for the respective
unicode representations. */
typedef uint32_t Py_UCS4;