8000 bpo-35134: Add include/cpython/compile.h (GH-24922) · python/cpython@56f031e · GitHub
[go: up one dir, main page]

Skip to content

Commit 56f031e

Browse files
authored
bpo-35134: Add include/cpython/compile.h (GH-24922)
Move C API excluded from the limited C API from Include/compile.h to a new Include/cpython/compile.h header file.
1 parent 690aca7 commit 56f031e

File tree

6 files changed

+100
-94
lines changed

6 files changed

+100
-94
lines changed

Include/compile.h

Lines changed: 9 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,9 @@
11
#ifndef Py_COMPILE_H
22
#define Py_COMPILE_H
3-
4-
#ifndef Py_LIMITED_API
5-
63
#ifdef __cplusplus
74
extern "C" {
85
#endif
96

10-
/* Public interface */
11-
#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \
12-
CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \
13-
CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \
14-
CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)
15-
#define PyCF_MASK_OBSOLETE (CO_NESTED)
16-
17-
/* bpo-39562: CO_FUTURE_ and PyCF_ constants must be kept unique.
18-
PyCF_ constants can use bits from 0x0100 to 0x10000.
19-
CO_FUTURE_ constants use bits starting at 0x20000. */
20-
#define PyCF_SOURCE_IS_UTF8 0x0100
21-
#define PyCF_DONT_IMPLY_DEDENT 0x0200
22-
#define PyCF_ONLY_AST 0x0400
23-
#define PyCF_IGNORE_COOKIE 0x0800
24-
#define PyCF_TYPE_COMMENTS 0x1000
25-
#define PyCF_ALLOW_TOP_LEVEL_AWAIT 0x2000
26-
#define PyCF_COMPILE_MASK (PyCF_ONLY_AST | PyCF_ALLOW_TOP_LEVEL_AWAIT | \
27-
PyCF_TYPE_COMMENTS | PyCF_DONT_IMPLY_DEDENT)
28-
29-
#ifndef Py_LIMITED_API
30-
typedef struct {
31-
int cf_flags; /* bitmask of CO_xxx flags relevant to future */
32-
int cf_feature_version; /* minor Python version (PyCF_ONLY_AST) */
33-
} PyCompilerFlags;
34-
35-
#define _PyCompilerFlags_INIT \
36-
(PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
37-
#endif
38-
39-
/* Future feature support */
40-
41-
typedef struct {
42-
int ff_features; /* flags set by future statements */
43-
int ff_lineno; /* line number of last future statement */
44-
} PyFutureFeatures;
45-
46-
#define FUTURE_NESTED_SCOPES "nested_scopes"
47-
#define FUTURE_GENERATORS "generators"
48-
#define FUTURE_DIVISION "division"
49-
#define FUTURE_ABSOLUTE_IMPORT "absolute_import"
50-
#define FUTURE_WITH_STATEMENT "with_statement"
51-
#define FUTURE_PRINT_FUNCTION "print_function"
52-
#define FUTURE_UNICODE_LITERALS "unicode_literals"
53-
#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL"
54-
#define FUTURE_GENERATOR_STOP "generator_stop"
55-
#define FUTURE_ANNOTATIONS "annotations"
56-
57-
struct _mod; /* Declare the existence of this type */
58-
#define PyAST_Compile(mod, s, f, ar) PyAST_CompileEx(mod, s, f, -1, ar)
59-
PyAPI_FUNC(PyCodeObject *) PyAST_CompileEx(
60-
struct _mod *mod,
61-
const char *filename, /* decoded from the filesystem encoding */
62-
PyCompilerFlags *flags,
63-
int optimize,
64-
PyArena *arena);
65-
PyAPI_FUNC(PyCodeObject *) PyAST_CompileObject(
66-
struct _mod *mod,
67-
PyObject *filename,
68-
PyCompilerFlags *flags,
69-
int optimize,
70-
PyArena *arena);
71-
PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(
72-
struct _mod * mod,
73-
const char *filename /* decoded from the filesystem encoding */
74-
);
75-
PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromASTObject(
76-
struct _mod * mod,
77-
PyObject *filename
78-
);
79-
80-
/* _Py_Mangle is defined in compile.c */
81-
PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name);
82-
83-
#define PY_INVALID_STACK_EFFECT INT_MAX
84-
PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg);
85-
PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump);
86-
87-
typedef struct {
88-
int optimize;
89-
int ff_features;
90-
} _PyASTOptimizeState;
91-
92-
PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, _PyASTOptimizeState *state);
93-
94-
#ifdef __cplusplus
95-
}
96-
#endif
97-
98-
#endif /* !Py_LIMITED_API */
99-
1007
/* These definitions must match corresponding definitions in graminit.h. */
1018
#define Py_single_input 256
1029
#define Py_file_input 257
@@ -106,4 +13,13 @@ PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, _PyASTOptimizeSta
10613
/* This doesn't need to match anything */
10714
#define Py_fstring_input 800
10815

16+
#ifndef Py_LIMITED_API
17+
# define Py_CPYTHON_COMPILE_H
18+
# include "cpython/compile.h"
19+
# undef Py_CPYTHON_COMPILE_H
20+
#endif
21+
22+
#ifdef __cplusplus
23+
}
24+
#endif
10925
#endif /* !Py_COMPILE_H */

Include/cpython/compile.h

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#ifndef Py_CPYTHON_COMPILE_H
2+
# error "this header file must not be included directly"
3+
#endif
4+
5+
/* Public interface */
6+
#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \
7+
CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \
8+
CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \
9+
CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)
10+
#define PyCF_MASK_OBSOLETE (CO_NESTED)
11+
12+
/* bpo-39562: CO_FUTURE_ and PyCF_ constants must be kept unique.
13+
PyCF_ constants can use bits from 0x0100 to 0x10000.
14+
CO_FUTURE_ constants use bits starting at 0x20000. */
15+
#define PyCF_SOURCE_IS_UTF8 0x0100
16+
#define PyCF_DONT_IMPLY_DEDENT 0x0200
17+
#define PyCF_ONLY_AST 0x0400
18+
#define PyCF_IGNORE_COOKIE 0x0800
19+
#define PyCF_TYPE_COMMENTS 0x1000
20+
#define PyCF_ALLOW_TOP_LEVEL_AWAIT 0x2000
21+
#define PyCF_COMPILE_MASK (PyCF_ONLY_AST | PyCF_ALLOW_TOP_LEVEL_AWAIT | \
22+
PyCF_TYPE_COMMENTS | PyCF_DONT_IMPLY_DEDENT)
23+
24+
typedef struct {
25+
int cf_flags; /* bitmask of CO_xxx flags relevant to future */
26+
int cf_feature_version; /* minor Python version (PyCF_ONLY_AST) */
27+
} PyCompilerFlags;
28+
29+
#define _PyCompilerFlags_INIT \
30+
(PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
31+
32+
/* Future feature support */
33+
34+
typedef struct {
35+
int ff_features; /* flags set by future statements */
36+
int ff_lineno; /* line number of last future statement */
37+
} PyFutureFeatures;
38+
39+
#define FUTURE_NESTED_SCOPES "nested_scopes"
40+
#define FUTURE_GENERATORS "generators"
41+
#define FUTURE_DIVISION "division"
42+
#define FUTURE_ABSOLUTE_IMPORT "absolute_import"
43+
#define FUTURE_WITH_STATEMENT "with_statement"
44+
#define FUTURE_PRINT_FUNCTION "print_function"
45+
#define FUTURE_UNICODE_LITERALS "unicode_literals"
46+
#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL"
47+
#define FUTURE_GENERATOR_STOP "generator_stop"
48+
#define FUTURE_ANNOTATIONS "annotations"
49+
50+
struct _mod; /* Declare the existence of this type */
51+
#define PyAST_Compile(mod, s, f, ar) PyAST_CompileEx(mod, s, f, -1, ar)
52+
PyAPI_FUNC(PyCodeObject *) PyAST_CompileEx(
53+
struct _mod *mod,
54+
const char *filename, /* decoded from the filesystem encoding */
55+
PyCompilerFlags *flags,
56+
int optimize,
57+
PyArena *arena);
58+
PyAPI_FUNC(PyCodeObject *) PyAST_CompileObject(
59+
struct _mod *mod,
60+
PyObject *filename,
61+
PyCompilerFlags *flags,
62+
int optimize,
63+
PyArena *arena);
64+
PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(
65+
struct _mod * mod,
66+
const char *filename /* decoded from the filesystem encoding */
67+
);
< 8000 /td>
68+
PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromASTObject(
69+
struct _mod * mod,
70+
PyObject *filename
71+
);
72+
73+
/* _Py_Mangle is defined in compile.c */
74+
PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name);
75+
76+
#define PY_INVALID_STACK_EFFECT INT_MAX
77+
PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg);
78+
PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump);
79+
80+
typedef struct {
81+
int optimize;
82+
int ff_features;
83+
} _PyASTOptimizeState;
84+
85+
PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, _PyASTOptimizeState *state);

Lib/__future__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
argument to the builtin function compile() to enable the feature in
4343
dynamically compiled code. This flag is stored in the .compiler_flag
4444
attribute on _Future instances. These values must match the appropriate
45-
#defines of CO_xxx flags in Include/compile.h.
45+
#defines of CO_xxx flags in Include/cpython/compile.h.
4646
4747
No feature line is ever to be deleted from this file.
4848
"""

Makefile.pre.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,6 +1105,7 @@ PYTHON_HEADERS= \
11051105
$(srcdir)/Include/cpython/bytesobject.h \
11061106
$(srcdir)/Include/cpython/ceval.h \
11071107
$(srcdir)/Include/cpython/code.h \
1108+
$(srcdir)/Include/cpython/compile.h \
11081109
$(srcdir)/Include/cpython/dictobject.h \
11091110
$(srcdir)/Include/cpython/fileobject.h \
11101111
$(srcdir)/Include/cpython/fileutils.h \

PCbuild/pythoncore.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@
131131
<ClInclude Include="..\Include\cpython\bytesobject.h" />
132132
<ClInclude Include="..\Include\cpython\ceval.h" />
133133
<ClInclude Include="..\Include\cpython\code.h" />
134+
<ClInclude Include="..\Include\cpython\compile.h" />
134135
<ClInclude Include="..\Include\cpython\dictobject.h" />
135136
<ClInclude Include="..\Include\cpython\fileobject.h" />
136137
<ClInclude Include="..\Include\cpython\fileutils.h" />

PCbuild/pythoncore.vcxproj.filters

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,9 @@
393393
<ClInclude Include="..\Include\cpython\code.h">
394394
<Filter>Include\cpython</Filter>
395395
</ClInclude>
396+
<ClInclude Include="..\Include\cpython\compile.h">
397+
<Filter>Include</Filter>
398+
</ClInclude>
396399
<ClInclude Include="..\Include\cpython\dictobject.h">
397400
<Filter>Include\cpython</Filter>
398401
</ClInclude>

0 commit comments

Comments
 (0)
0