summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2018-11-11 23:56:19 (GMT)
committerGitHub <noreply@github.com>2018-11-11 23:56:19 (GMT)
commit5f2df88b63e50d23914e97ec778861a52abdeaad (patch)
tree23a720832fb9de901538ca03819946df679ff2cd
parentfd3a91cbf93dd7bd97f01add9c90075d63cd7316 (diff)
downloadcpython-5f2df88b63e50d23914e97ec778861a52abdeaad.zip
cpython-5f2df88b63e50d23914e97ec778861a52abdeaad.tar.gz
cpython-5f2df88b63e50d23914e97ec778861a52abdeaad.tar.bz2
bpo-35177: Add dependencies between header files (GH-10361)
* ast.h now includes Python-ast.h and node.h * parsetok.h now includes node.h and grammar.h * symtable.h now includes Python-ast.h * Modify asdl_c.py to enhance Python-ast.h: * Add #ifndef/#define Py_PYTHON_AST_H to be able to include the header twice * Add "extern { ... }" for C++ * Undefine "Yield" macro conflicting with winbase.h * Remove "#undef Yield" from C files, it's now done in Python-ast.h * Remove now useless includes in C files
-rw-r--r--Include/Python-ast.h13
-rw-r--r--Include/ast.h3
-rw-r--r--Include/parsetok.h5
-rw-r--r--Include/symtable.h5
-rw-r--r--Modules/parsermodule.c5
-rw-r--r--Parser/asdl_c.py16
-rw-r--r--Python/ast_opt.c1
-rw-r--r--Python/bltinmodule.c11
-rw-r--r--Python/compile.c1
-rw-r--r--Python/import.c1
-rw-r--r--Python/pylifecycle.c1
-rw-r--r--Python/pythonrun.c1
-rw-r--r--Python/symtable.c5
13 files changed, 42 insertions, 26 deletions
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index 2913d1d..1b7d9b1 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -1,7 +1,15 @@
/* File automatically generated by Parser/asdl_c.py. */
+#ifndef Py_PYTHON_AST_H
+#define Py_PYTHON_AST_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#include "asdl.h"
+#undef Yield /* undefine macro conflicting with winbase.h */
+
typedef struct _mod *mod_ty;
typedef struct _stmt *stmt_ty;
@@ -607,3 +615,8 @@ withitem_ty _Py_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena
PyObject* PyAST_mod2obj(mod_ty t);
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);
int PyAST_Check(PyObject* obj);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_PYTHON_AST_H */
diff --git a/Include/ast.h b/Include/ast.h
index c824554..f1d7348 100644
--- a/Include/ast.h
+++ b/Include/ast.h
@@ -4,6 +4,9 @@
extern "C" {
#endif
+#include "Python-ast.h" /* mod_ty */
+#include "node.h" /* node */
+
PyAPI_FUNC(int) PyAST_Validate(mod_ty);
PyAPI_FUNC(mod_ty) PyAST_FromNode(
const node *n,
diff --git a/Include/parsetok.h b/Include/parsetok.h
index c9407a3..1217c46 100644
--- a/Include/parsetok.h
+++ b/Include/parsetok.h
@@ -1,5 +1,5 @@
-
/* Parser-tokenizer link interface */
+
#ifndef Py_LIMITED_API
#ifndef Py_PARSETOK_H
#define Py_PARSETOK_H
@@ -7,6 +7,9 @@
extern "C" {
#endif
+#include "grammar.h" /* grammar */
+#include "node.h" /* node */
+
typedef struct {
int error;
#ifndef PGEN
diff --git a/Include/symtable.h b/Include/symtable.h
index 007f88d..949022b 100644
--- a/Include/symtable.h
+++ b/Include/symtable.h
@@ -1,11 +1,12 @@
#ifndef Py_LIMITED_API
#ifndef Py_SYMTABLE_H
#define Py_SYMTABLE_H
-
#ifdef __cplusplus
extern "C" {
#endif
+#include "Python-ast.h" /* mod_ty */
+
/* XXX(ncoghlan): This is a weird mix of public names and interpreter internal
* names.
*/
@@ -115,4 +116,4 @@ PyAPI_FUNC(void) PySymtable_Free(struct symtable *);
}
#endif
#endif /* !Py_SYMTABLE_H */
-#endif /* Py_LIMITED_API */
+#endif /* !Py_LIMITED_API */
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 38e5f75..df239d6 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -32,15 +32,14 @@
#include "Python.h" /* general Python API */
#include "Python-ast.h" /* mod_ty */
+#include "ast.h"
#include "graminit.h" /* symbols defined in the grammar */
#include "node.h" /* internal parser structure */
#include "errcode.h" /* error codes for PyNode_*() */
#include "token.h" /* token definitions */
+ /* ISTERMINAL() / ISNONTERMINAL() */
#include "grammar.h"
#include "parsetok.h"
- /* ISTERMINAL() / ISNONTERMINAL() */
-#undef Yield
-#include "ast.h"
extern grammar _PyParser_Grammar; /* From graminit.c */
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index 4c280a9..6a8262c 100644
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -1239,7 +1239,16 @@ def main(srcfile, dump_module=False):
if H_FILE:
with open(H_FILE, "w") as f:
f.write(auto_gen_msg)
- f.write('#include "asdl.h"\n\n')
+ f.write('#ifndef Py_PYTHON_AST_H\n')
+ f.write('#define Py_PYTHON_AST_H\n')
+ f.write('#ifdef __cplusplus\n')
+ f.write('extern "C" {\n')
+ f.write('#endif\n')
+ f.write('\n')
+ f.write('#include "asdl.h"\n')
+ f.write('\n')
+ f.write('#undef Yield /* undefine macro conflicting with winbase.h */\n')
+ f.write('\n')
c = ChainOfVisitors(TypeDefVisitor(f),
StructVisitor(f),
PrototypeVisitor(f),
@@ -1248,6 +1257,11 @@ def main(srcfile, dump_module=False):
f.write("PyObject* PyAST_mod2obj(mod_ty t);\n")
f.write("mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);\n")
f.write("int PyAST_Check(PyObject* obj);\n")
+ f.write('\n')
+ f.write('#ifdef __cplusplus\n')
+ f.write('}\n')
+ f.write('#endif\n')
+ f.write('#endif /* !Py_PYTHON_AST_H */\n')
if C_FILE:
with open(C_FILE, "w") as f:
diff --git a/Python/ast_opt.c b/Python/ast_opt.c
index 1f9cb77..6f72a7f 100644
--- a/Python/ast_opt.c
+++ b/Python/ast_opt.c
@@ -1,7 +1,6 @@
/* AST Optimizer */
#include "Python.h"
#include "Python-ast.h"
-#include "node.h"
#include "ast.h"
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 6c8672a..6781589 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -1,16 +1,9 @@
/* Built-in functions */
#include "Python.h"
-#include "Python-ast.h"
-#include "pycore_state.h"
-
-#include "node.h"
-#include "code.h"
-
-#include "asdl.h"
-#include "ast.h"
-
#include <ctype.h>
+#include "ast.h"
+#include "pycore_state.h"
_Py_IDENTIFIER(__builtins__);
_Py_IDENTIFIER(__dict__);
diff --git a/Python/compile.c b/Python/compile.c
index 45a8c57..beceeea 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -24,7 +24,6 @@
#include "Python.h"
#include "Python-ast.h"
-#include "node.h"
#include "ast.h"
#include "code.h"
#include "symtable.h"
diff --git a/Python/import.c b/Python/import.c
index c0ea968..fcd8851 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -3,7 +3,6 @@
#include "Python.h"
#include "Python-ast.h"
-#undef Yield /* undefine macro conflicting with winbase.h */
#include "pycore_hash.h"
#include "pycore_lifecycle.h"
#include "pycore_mem.h"
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 4c5cb53..318d7cb 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -3,7 +3,6 @@
#include "Python.h"
#include "Python-ast.h"
-#undef Yield /* undefine macro conflicting with winbase.h */
#include "pycore_context.h"
#include "pycore_hamt.h"
#include "pycore_lifecycle.h"
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 2f61aab..2b9f4f0 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -11,7 +11,6 @@
#include "Python.h"
#include "Python-ast.h"
-#undef Yield /* undefine macro conflicting with winbase.h */
#include "pycore_state.h"
#include "grammar.h"
#include "node.h"
diff --git a/Python/symtable.c b/Python/symtable.c
index 48e1515..40f9178 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -1,10 +1,5 @@
#include "Python.h"
#include "pycore_state.h"
-#ifdef Yield
-#undef Yield /* undefine conflicting macro from winbase.h */
-#endif
-#include "Python-ast.h"
-#include "code.h"
#include "symtable.h"
#include "structmember.h"