[Python-checkins] gh-105148: make _PyASTOptimizeState internal to ast_opt.c (#105149)
iritkatriel
webhook-mailer at python.org
Wed May 31 15:21:53 EDT 2023
https://github.com/python/cpython/commit/f990bb8b2d8ee900fe4b0775399f6ef4ca61bb3f
commit: f990bb8b2d8ee900fe4b0775399f6ef4ca61bb3f
branch: main
author: Irit Katriel <1055913+iritkatriel at users.noreply.github.com>
committer: iritkatriel <1055913+iritkatriel at users.noreply.github.com>
date: 2023年05月31日T20:21:46+01:00
summary:
gh-105148: make _PyASTOptimizeState internal to ast_opt.c (#105149)
files:
A Misc/NEWS.d/next/Core and Builtins/2023-05-31-16-22-29.gh-issue-105148.MOlb1d.rst
M Include/internal/pycore_compile.h
M Python/ast_opt.c
M Python/compile.c
M Python/traceback.c
diff --git a/Include/internal/pycore_compile.h b/Include/internal/pycore_compile.h
index 80a637e5bf9a..e6481734a675 100644
--- a/Include/internal/pycore_compile.h
+++ b/Include/internal/pycore_compile.h
@@ -21,18 +21,11 @@ PyAPI_FUNC(PyCodeObject*) _PyAST_Compile(
static const _PyCompilerSrcLocation NO_LOCATION = {-1, -1, -1, -1};
-typedef struct {
- int optimize;
- int ff_features;
-
- int recursion_depth; /* current recursion depth */
- int recursion_limit; /* recursion limit */
-} _PyASTOptimizeState;
-
extern int _PyAST_Optimize(
struct _mod *,
struct _arena *arena,
- _PyASTOptimizeState *state);
+ int optimize,
+ int ff_features);
typedef struct {
int h_offset;
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-05-31-16-22-29.gh-issue-105148.MOlb1d.rst b/Misc/NEWS.d/next/Core and Builtins/2023-05-31-16-22-29.gh-issue-105148.MOlb1d.rst
new file mode 100644
index 000000000000..4dcdcdfd4287
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2023-05-31-16-22-29.gh-issue-105148.MOlb1d.rst
@@ -0,0 +1,3 @@
+Make ``_PyASTOptimizeState`` internal to ast_opt.c. Make ``_PyAST_Optimize``
+take two integers instead of a pointer to this struct. This avoids the need
+to include pycore_compile.h in ast_opt.c.
diff --git a/Python/ast_opt.c b/Python/ast_opt.c
index 274bd134e143..276e910089a2 100644
--- a/Python/ast_opt.c
+++ b/Python/ast_opt.c
@@ -1,12 +1,20 @@
/* AST Optimizer */
#include "Python.h"
#include "pycore_ast.h" // _PyAST_GetDocString()
-#include "pycore_compile.h" // _PyASTOptimizeState
#include "pycore_long.h" // _PyLong
#include "pycore_pystate.h" // _PyThreadState_GET()
#include "pycore_format.h" // F_LJUST
+typedef struct {
+ int optimize;
+ int ff_features;
+
+ int recursion_depth; /* current recursion depth */
+ int recursion_limit; /* recursion limit */
+} _PyASTOptimizeState;
+
+
static int
make_const(expr_ty node, PyObject *val, PyArena *arena)
{
@@ -1106,11 +1114,15 @@ astfold_type_param(type_param_ty node_, PyArena *ctx_, _PyASTOptimizeState *stat
#define COMPILER_STACK_FRAME_SCALE 3
int
-_PyAST_Optimize(mod_ty mod, PyArena *arena, _PyASTOptimizeState *state)
+_PyAST_Optimize(mod_ty mod, PyArena *arena, int optimize, int ff_features)
{
PyThreadState *tstate;
int starting_recursion_depth;
+ _PyASTOptimizeState state;
+ state.optimize = optimize;
+ state.ff_features = ff_features;
+
/* Setup recursion depth check counters */
tstate = _PyThreadState_GET();
if (!tstate) {
@@ -1119,17 +1131,17 @@ _PyAST_Optimize(mod_ty mod, PyArena *arena, _PyASTOptimizeState *state)
/* Be careful here to prevent overflow. */
int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining;
starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE;
- state->recursion_depth = starting_recursion_depth;
- state->recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE;
+ state.recursion_depth = starting_recursion_depth;
+ state.recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE;
- int ret = astfold_mod(mod, arena, state);
+ int ret = astfold_mod(mod, arena, &state);
assert(ret || PyErr_Occurred());
/* Check that the recursion depth counting balanced correctly */
- if (ret && state->recursion_depth != starting_recursion_depth) {
+ if (ret && state.recursion_depth != starting_recursion_depth) {
PyErr_Format(PyExc_SystemError,
"AST optimizer recursion depth mismatch (before=%d, after=%d)",
- starting_recursion_depth, state->recursion_depth);
+ starting_recursion_depth, state.recursion_depth);
return 0;
}
diff --git a/Python/compile.c b/Python/compile.c
index f2314ae11c41..8f20e39315fb 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -534,11 +534,7 @@ compiler_setup(struct compiler *c, mod_ty mod, PyObject *filename,
c->c_optimize = (optimize == -1) ? _Py_GetConfig()->optimization_level : optimize;
c->c_nestlevel = 0;
- _PyASTOptimizeState state;
- state.optimize = c->c_optimize;
- state.ff_features = merged;
-
- if (!_PyAST_Optimize(mod, arena, &state)) {
+ if (!_PyAST_Optimize(mod, arena, c->c_optimize, merged)) {
return ERROR;
}
c->c_st = _PySymtable_Build(mod, filename, &c->c_future);
diff --git a/Python/traceback.c b/Python/traceback.c
index b24795420473..a58df04b3460 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -675,16 +675,12 @@ extract_anchors_from_line(PyObject *filename, PyObject *line,
PyCompilerFlags flags = _PyCompilerFlags_INIT;
- _PyASTOptimizeState state;
- state.optimize = _Py_GetConfig()->optimization_level;
- state.ff_features = 0;
-
mod_ty module = _PyParser_ASTFromString(segment_str, filename, Py_file_input,
&flags, arena);
if (!module) {
goto done;
}
- if (!_PyAST_Optimize(module, arena, &state)) {
+ if (!_PyAST_Optimize(module, arena, _Py_GetConfig()->optimization_level, 0)) {
goto done;
}
More information about the Python-checkins
mailing list