Skip to content

Commit d3df8c8

Browse files
committed
polish ast code
1 parent 27b1a09 commit d3df8c8

File tree

1 file changed

+27
-25
lines changed

1 file changed

+27
-25
lines changed

Python/ast_opt.c

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -824,10 +824,10 @@ astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
824824
#define IS_UNARY_SUB_EXPR(N) \
825825
(IS_UNARY_EXPR(N) && UNARY_EXPR_OP(N) == USub)
826826

827-
#define IS_NUMERIC_UNARY_CONST_EXPR(N) \
827+
#define IS_MATCH_NUMERIC_UNARY_CONST_EXPR(N) \
828828
(IS_UNARY_SUB_EXPR(N) && IS_NUMERIC_CONST_EXPR(UNARY_EXPR_OPERAND(N)))
829829

830-
#define IS_COMPLEX_UNARY_CONST_EXPR(N) \
830+
#define IS_MATCH_COMPLEX_UNARY_CONST_EXPR(N) \
831831
(IS_UNARY_SUB_EXPR(N) && IS_COMPLEX_CONST_EXPR(UNARY_EXPR_OPERAND(N)))
832832

833833
#define BINARY_EXPR(N) \
@@ -852,54 +852,56 @@ astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
852852
(IS_BINARY_EXPR(N) && BINARY_EXPR_OP(N) == Sub)
853853

854854
#define IS_MATCH_NUMERIC_OR_COMPLEX_UNARY_CONST_EXPR(N) \
855-
(IS_NUMERIC_UNARY_CONST_EXPR(N) || IS_COMPLEX_UNARY_CONST_EXPR(N))
855+
(IS_MATCH_NUMERIC_UNARY_CONST_EXPR(N) || IS_MATCH_COMPLEX_UNARY_CONST_EXPR(N))
856856

857857
#define IS_MATCH_COMPLEX_BINARY_CONST_EXPR(N) \
858858
( \
859859
(IS_BINARY_ADD_EXPR(N) || IS_BINARY_SUB_EXPR(N)) \
860-
&& (IS_NUMERIC_UNARY_CONST_EXPR(BINARY_EXPR_LEFT(N)) || IS_CONST_EXPR(BINARY_EXPR_LEFT(N))) \
860+
&& (IS_MATCH_NUMERIC_UNARY_CONST_EXPR(BINARY_EXPR_LEFT(N)) || IS_CONST_EXPR(BINARY_EXPR_LEFT(N))) \
861861
&& IS_COMPLEX_CONST_EXPR(BINARY_EXPR_RIGHT(N)) \
862862
)
863863

864864

865865
static int
866-
fold_const_unary_or_complex_expr(expr_ty e, PyArena *arena)
866+
fold_const_unary_or_complex_expr(expr_ty node, PyArena *ctx_,
867+
_PyASTOptimizeState * Py_UNUSED(state))
867868
{
868-
assert(IS_MATCH_NUMERIC_OR_COMPLEX_UNARY_CONST_EXPR(e));
869-
PyObject *constant = UNARY_EXPR_OPERAND_CONST_VALUE(e);
870-
assert(UNARY_EXPR_OP(e) == USub);
869+
assert(IS_MATCH_NUMERIC_OR_COMPLEX_UNARY_CONST_EXPR(node));
870+
PyObject *constant = UNARY_EXPR_OPERAND_CONST_VALUE(node);
871+
assert(UNARY_EXPR_OP(node) == USub);
871872
PyObject* folded = PyNumber_Negative(constant);
872-
return make_const(e, folded, arena);
873+
return make_const(node, folded, ctx_);
873874
}
874875

875876
static int
876-
fold_const_binary_complex_expr(expr_ty e, PyArena *arena)
877+
fold_const_binary_complex_expr(expr_ty node, PyArena *ctx_, _PyASTOptimizeState *state)
877878
{
878-
assert(IS_MATCH_COMPLEX_BINARY_CONST_EXPR(e));
879-
expr_ty left_expr = BINARY_EXPR_LEFT(e);
880-
if (IS_NUMERIC_UNARY_CONST_EXPR(left_expr)) {
881-
if (!fold_const_unary_or_complex_expr(left_expr, arena)) {
882-
return 0;
883-
}
884-
}
885-
assert(IS_CONST_EXPR(BINARY_EXPR_LEFT(e)));
886-
operator_ty op = BINARY_EXPR_OP(e);
887-
PyObject *left = CONST_EXPR_VALUE(BINARY_EXPR_LEFT(e));
888-
PyObject *right = CONST_EXPR_VALUE(BINARY_EXPR_RIGHT(e));
879+
assert(IS_MATCH_COMPLEX_BINARY_CONST_EXPR(node));
880+
expr_ty left_expr = BINARY_EXPR_LEFT(node);
881+
if (IS_MATCH_NUMERIC_UNARY_CONST_EXPR(left_expr)) {
882+
CALL(fold_const_unary_or_complex_expr, expr_ty, left_expr);
883+
}
884+
/* must have folded if left was IS_MATCH_NUMERIC_UNARY_CONST_EXPR */
885+
assert(IS_CONST_EXPR(BINARY_EXPR_LEFT(node)));
886+
operator_ty op = BINARY_EXPR_OP(node);
887+
PyObject *left = CONST_EXPR_VALUE(BINARY_EXPR_LEFT(node));
888+
PyObject *right = CONST_EXPR_VALUE(BINARY_EXPR_RIGHT(node));
889889
assert(op == Add || op == Sub);
890890
PyObject *folded = op == Add ? PyNumber_Add(left, right) : PyNumber_Subtract(left, right);
891-
return make_const(e, folded, arena);
891+
return make_const(node, folded, ctx_);
892892
}
893893

894894
static int
895-
fold_pattern_match_value(expr_ty node, PyArena *arena, _PyASTOptimizeState *Py_UNUSED(state))
895+
fold_pattern_match_value(expr_ty node, PyArena *ctx_, _PyASTOptimizeState *state)
896896
{
897897
switch (node->kind)
898898
{
899899
case UnaryOp_kind:
900-
return fold_const_unary_or_complex_expr(node, arena);
900+
CALL(fold_const_unary_or_complex_expr, expr_ty, node);
901+
break;
901902
case BinOp_kind:
902-
return fold_const_binary_complex_expr(node, arena);
903+
CALL(fold_const_binary_complex_expr, expr_ty, node);
904+
break;
903905
default:
904906
break;
905907
}

0 commit comments

Comments
 (0)