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
This commit is contained in:
Victor Stinner 2018-11-12 00:56:19 +01:00 • committed by GitHub
parent fd3a91cbf9
commit 5f2df88b63
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 42 additions and 26 deletions

13
Include/Python-ast.h generated
View file

@ -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 */

View file

@ -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,

View file

@ -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

View file

@ -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 */