gh-130740: Move some `stdbool.h` includes after `Python.h` (#130738)
Move some `#include <stdbool.h>` after `#include "Python.h"` when `pyconfig.h` is not
included first and when we are in a platform-agnostic context. This is to avoid having
features defined by `stdbool.h` before those decided by `Python.h` (this caused some
build failures when compiling CPython with `zig cc`).
(cherry-picked from commit
214562ed4ddc248b007f718ed92ebcc0c3669611)
---------
Co-authored-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
--- /dev/null
+Ensure that ``Python.h`` is included before ``stdbool.h`` unless ``pyconfig.h``
+is included before or in some platform-specific contexts.
-#include <stdbool.h>
-
#include "Python.h"
#include "opcode.h"
#include "structmember.h" // PyMemberDef
#include "pycore_tuple.h" // _PyTuple_ITEMS()
#include "clinic/codeobject.c.h"
+#include <stdbool.h>
+
static PyObject* code_repr(PyCodeObject *co);
static const char *
-#include <stdbool.h>
-
#include <Python.h>
#include "tokenizer.h"
#include "pegen.h"
#include "string_parser.h"
+#include <stdbool.h>
+
//// STRING HANDLING FUNCTIONS ////
static int
-#include <stdbool.h>
-
#include "Python.h"
#include "pycore_code.h" // write_location_entry_start()
#include "pycore_compile.h"
#include "pycore_opcode.h" // _PyOpcode_Caches[] and opcode category macros
#include "pycore_pymem.h" // _PyMem_IsPtrFreed()
+#include <stdbool.h>
#define DEFAULT_CODE_SIZE 128
#define DEFAULT_LNOTAB_SIZE 16
* objects.
*/
-#include <stdbool.h>
-
#include "Python.h"
#include "pycore_ast.h" // _PyAST_GetDocString()
#define NEED_OPCODE_TABLES
#include "opcode_metadata.h" // _PyOpcode_opcode_metadata, _PyOpcode_num_popped/pushed
+#include <stdbool.h>
+
#define DEFAULT_CODE_SIZE 128
#define DEFAULT_LNOTAB_SIZE 16
#define DEFAULT_CNOTAB_SIZE 32
-
-#include <stdbool.h>
-
#include "Python.h"
#include "pycore_flowgraph.h"
#include "pycore_compile.h"
#include "opcode_metadata.h" // _PyOpcode_opcode_metadata, _PyOpcode_num_popped/pushed
#undef NEED_OPCODE_METADATA
+#include <stdbool.h>
+
#undef SUCCESS
#undef ERROR
// Python/bytecodes.c
// Do not edit!
+#include <stdbool.h>
+
#ifndef NEED_OPCODE_METADATA
extern int _PyOpcode_num_popped(int opcode, int oparg, bool jump);
#else
/* TODO: Cull includes following phase split */
-#include <stdbool.h>
-
#include "Python.h"
#include "pycore_ast.h" // PyAST_mod2obj
#include "errcode.h" // E_EOF
#include "marshal.h" // PyMarshal_ReadLongFromFile()
+#include <stdbool.h>
+
#ifdef MS_WINDOWS
# include "malloc.h" // alloca()
#endif
self.out.write_raw(self.from_source_files())
self.out.write_raw(f"// Do not edit!\n")
+ self.out.write_raw("\n")
+ self.out.write_raw("#include <stdbool.h>")
+ self.out.write_raw("\n")
self.write_stack_effect_functions()