Skip to content

Commit 24f654e

Browse files
committed
Move the non-limited C API of include/compile.h into include/cpython.
1 parent eec8e61 commit 24f654e

File tree

7 files changed

+109
-86
lines changed

7 files changed

+109
-86
lines changed

Include/compile.h

Lines changed: 1 addition & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,18 @@
11
#ifndef Py_COMPILE_H
22
#define Py_COMPILE_H
33

4-
#ifndef Py_LIMITED_API
5-
64
#ifdef __cplusplus
75
extern "C" {
86
#endif
97

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-
298
#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}
9+
# include "cpython/compile.h"
3710
#endif
3811

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-
9412
#ifdef __cplusplus
9513
}
9614
#endif
9715

98-
#endif /* !Py_LIMITED_API */
99-
10016
/* These definitions must match corresponding definitions in graminit.h. */
10117
#define Py_single_input 256
10218
#define Py_file_input 257

Include/cpython/compile.h

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#ifndef Py_CPYTHON_COMPILE_H
2+
#define Py_CPYTHON_COMPILE_H
3+
4+
#ifndef Py_LIMITED_API
5+
6+
#ifdef __cplusplus
7+
extern "C" {
8+
#endif
9+
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+
#endif /* !Py_CPYTHON_COMPILE_H */

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 \
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Move the non-limited C API of include/compile.h into the include/cpython
2+
directory. They must not be included directly, as they are already included by
3+
Python.h: :ref:`Include Files <api-includes>`.

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)