Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

gh-126835: Rename AST optimization related stuff after moving const folding to the peephole optimizier #131830

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
May 4, 2025
Prev Previous commit
Next Next commit
_PyASTOptimizeState -> _PyASTProcessState
  • Loading branch information
WolframAlph committed May 4, 2025
commit e080e27a69993e0444350b8a3322660b84094888
73 changes: 36 additions & 37 deletions 73 Python/ast_process.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/* AST Optimizer */
#include "Python.h"
#include "pycore_ast.h" // _PyAST_GetDocString()
#include "pycore_c_array.h" // _Py_CArray_EnsureCapacity()
Expand All @@ -22,7 +21,7 @@ typedef struct {

_Py_c_array_t cf_finally; /* context for PEP 765 check */
int cf_finally_used;
} _PyASTOptimizeState;
} _PyASTProcessState;

#define ENTER_RECURSIVE() \
if (Py_EnterRecursiveCall(" during compilation")) { \
Expand All @@ -32,14 +31,14 @@ if (Py_EnterRecursiveCall(" during compilation")) { \
#define LEAVE_RECURSIVE() Py_LeaveRecursiveCall();

static ControlFlowInFinallyContext*
get_cf_finally_top(_PyASTOptimizeState *state)
get_cf_finally_top(_PyASTProcessState *state)
{
int idx = state->cf_finally_used;
return ((ControlFlowInFinallyContext*)state->cf_finally.array) + idx;
}

static int
push_cf_context(_PyASTOptimizeState *state, stmt_ty node, bool finally, bool funcdef, bool loop)
push_cf_context(_PyASTProcessState *state, stmt_ty node, bool finally, bool funcdef, bool loop)
{
if (_Py_CArray_EnsureCapacity(&state->cf_finally, state->cf_finally_used+1) < 0) {
return 0;
Expand All @@ -55,14 +54,14 @@ push_cf_context(_PyASTOptimizeState *state, stmt_ty node, bool finally, bool fun
}

static void
pop_cf_context(_PyASTOptimizeState *state)
pop_cf_context(_PyASTProcessState *state)
{
assert(state->cf_finally_used > 0);
state->cf_finally_used--;
}

static int
control_flow_in_finally_warning(const char *kw, stmt_ty n, _PyASTOptimizeState *state)
control_flow_in_finally_warning(const char *kw, stmt_ty n, _PyASTProcessState *state)
{
PyObject *msg = PyUnicode_FromFormat("'%s' in a 'finally' block", kw);
if (msg == NULL) {
Expand All @@ -76,7 +75,7 @@ control_flow_in_finally_warning(const char *kw, stmt_ty n, _PyASTOptimizeState *
}

static int
before_return(_PyASTOptimizeState *state, stmt_ty node_)
before_return(_PyASTProcessState *state, stmt_ty node_)
{
if (state->cf_finally_used > 0) {
ControlFlowInFinallyContext *ctx = get_cf_finally_top(state);
Expand All @@ -90,7 +89,7 @@ before_return(_PyASTOptimizeState *state, stmt_ty node_)
}

static int
before_loop_exit(_PyASTOptimizeState *state, stmt_ty node_, const char *kw)
before_loop_exit(_PyASTProcessState *state, stmt_ty node_, const char *kw)
{
if (state->cf_finally_used > 0) {
ControlFlowInFinallyContext *ctx = get_cf_finally_top(state);
Expand Down Expand Up @@ -365,7 +364,7 @@ optimize_format(expr_ty node, PyObject *fmt, asdl_expr_seq *elts, PyArena *arena
}

static int
fold_binop(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
fold_binop(expr_ty node, PyArena *arena, _PyASTProcessState *state)
{
if (state->syntax_check_only) {
return 1;
Expand All @@ -389,18 +388,18 @@ fold_binop(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
return 1;
}

static int astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_match_case(match_case_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_pattern(pattern_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_type_param(type_param_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
static int astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_match_case(match_case_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_pattern(pattern_ty node_, PyArena *ctx_, _PyASTProcessState *state);
static int astfold_type_param(type_param_ty node_, PyArena *ctx_, _PyASTProcessState *state);

#define CALL(FUNC, TYPE, ARG) \
if (!FUNC((ARG), ctx_, state)) \
Expand Down Expand Up @@ -436,7 +435,7 @@ stmt_seq_remove_item(asdl_stmt_seq *stmts, Py_ssize_t idx)
}

static int
astfold_body(asdl_stmt_seq *stmts, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_body(asdl_stmt_seq *stmts, PyArena *ctx_, _PyASTProcessState *state)
{
int docstring = _PyAST_GetDocString(stmts) != NULL;
if (docstring && (state->optimize >= 2)) {
Expand Down Expand Up @@ -466,7 +465,7 @@ astfold_body(asdl_stmt_seq *stmts, PyArena *ctx_, _PyASTOptimizeState *state)
}

static int
astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
switch (node_->kind) {
case Module_kind:
Expand All @@ -488,7 +487,7 @@ astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
}

static int
astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
ENTER_RECURSIVE();
switch (node_->kind) {
Expand Down Expand Up @@ -613,14 +612,14 @@ astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
}

static int
astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
CALL(astfold_expr, expr_ty, node_->value);
return 1;
}

static int
astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
CALL(astfold_expr, expr_ty, node_->target);
CALL(astfold_expr, expr_ty, node_->iter);
Expand All @@ -629,7 +628,7 @@ astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState
}

static int
astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
CALL_SEQ(astfold_arg, arg, node_->posonlyargs);
CALL_SEQ(astfold_arg, arg, node_->args);
Expand All @@ -642,7 +641,7 @@ astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
}

static int
astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
CALL_OPT(astfold_expr, expr_ty, node_->annotation);
Expand All @@ -651,7 +650,7 @@ astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
}

static int
astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
ENTER_RECURSIVE();
switch (node_->kind) {
Expand Down Expand Up @@ -806,7 +805,7 @@ astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
}

static int
astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
switch (node_->kind) {
case ExceptHandler_kind:
Expand All @@ -820,15 +819,15 @@ astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState
}

static int
astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
CALL(astfold_expr, expr_ty, node_->context_expr);
CALL_OPT(astfold_expr, expr_ty, node_->optional_vars);
return 1;
}

static int
fold_const_match_patterns(expr_ty node, PyArena *ctx_, _PyASTOptimizeState *state)
fold_const_match_patterns(expr_ty node, PyArena *ctx_, _PyASTProcessState *state)
{
if (state->syntax_check_only) {
return 1;
Expand Down Expand Up @@ -869,7 +868,7 @@ fold_const_match_patterns(expr_ty node, PyArena *ctx_, _PyASTOptimizeState *stat
}

static int
astfold_pattern(pattern_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_pattern(pattern_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
// Currently, this is really only used to form complex/negative numeric
// constants in MatchValue and MatchMapping nodes
Expand Down Expand Up @@ -911,7 +910,7 @@ astfold_pattern(pattern_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
}

static int
astfold_match_case(match_case_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_match_case(match_case_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
CALL(astfold_pattern, expr_ty, node_->pattern);
CALL_OPT(astfold_expr, expr_ty, node_->guard);
Expand All @@ -920,7 +919,7 @@ astfold_match_case(match_case_ty node_, PyArena *ctx_, _PyASTOptimizeState *stat
}

static int
astfold_type_param(type_param_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
astfold_type_param(type_param_ty node_, PyArena *ctx_, _PyASTProcessState *state)
{
switch (node_->kind) {
case TypeVar_kind:
Expand All @@ -945,8 +944,8 @@ int
_PyAST_Optimize(mod_ty mod, PyArena *arena, PyObject *filename, int optimize,
int ff_features, int syntax_check_only)
{
_PyASTOptimizeState state;
memset(&state, 0, sizeof(_PyASTOptimizeState));
_PyASTProcessState state;
memset(&state, 0, sizeof(_PyASTProcessState));
state.filename = filename;
state.optimize = optimize;
state.ff_features = ff_features;
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.