#include "Python.h"
#include "pycore_ast.h"
#include "pycore_format.h"
#include "pycore_long.h"
#include "pycore_pystate.h"
#include "pycore_setobject.h"
_PyASTOptimizeState;
#define ENTER_RECURSIVE(ST) …
#define LEAVE_RECURSIVE(ST) …
static int
make_const(expr_ty node, PyObject *val, PyArena *arena)
{ … }
#define COPY_NODE(TO, FROM) …
static int
has_starred(asdl_expr_seq *elts)
{ … }
static PyObject*
unary_not(PyObject *v)
{ … }
static int
fold_unaryop(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
{ … }
static Py_ssize_t
check_complexity(PyObject *obj, Py_ssize_t limit)
{ … }
#define MAX_INT_SIZE …
#define MAX_COLLECTION_SIZE …
#define MAX_STR_SIZE …
#define MAX_TOTAL_ITEMS …
static PyObject *
safe_multiply(PyObject *v, PyObject *w)
{ … }
static PyObject *
safe_power(PyObject *v, PyObject *w)
{ … }
static PyObject *
safe_lshift(PyObject *v, PyObject *w)
{ … }
static PyObject *
safe_mod(PyObject *v, PyObject *w)
{ … }
static expr_ty
parse_literal(PyObject *fmt, Py_ssize_t *ppos, PyArena *arena)
{ … }
#define MAXDIGITS …
static int
simple_format_arg_parse(PyObject *fmt, Py_ssize_t *ppos,
int *spec, int *flags, int *width, int *prec)
{ … }
static expr_ty
parse_format(PyObject *fmt, Py_ssize_t *ppos, expr_ty arg, PyArena *arena)
{ … }
static int
optimize_format(expr_ty node, PyObject *fmt, asdl_expr_seq *elts, PyArena *arena)
{ … }
static int
fold_binop(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
{ … }
static PyObject*
make_const_tuple(asdl_expr_seq *elts)
{ … }
static int
fold_tuple(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
{ … }
static int
fold_subscr(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
{ … }
static int
fold_iter(expr_ty arg, PyArena *arena, _PyASTOptimizeState *state)
{ … }
static int
fold_compare(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
{ … }
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);
#define CALL …
#define CALL_OPT …
#define CALL_SEQ …
static int
astfold_body(asdl_stmt_seq *stmts, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_pattern(pattern_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_match_case(match_case_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
static int
astfold_type_param(type_param_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{ … }
#undef CALL
#undef CALL_OPT
#undef CALL_SEQ
int
_PyAST_Optimize(mod_ty mod, PyArena *arena, int optimize, int ff_features)
{ … }