@@ -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
865865static  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
875876static  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
894894static  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