@@ -543,34 +543,37 @@ expr *simplifyFrac(expr *f, expr *sym) {
543543 return frac (numer , denom );
544544}
545545
546- expr * simplifyAdd (expr * f , expr * sym ) {
547- expr * left = simplify (f -> left , sym );
548- expr * right = simplify (f -> right , sym );
549- if (eq (left , zero )) { release (left ); return right ; }
550- if (eq (right , zero )) { release (right ); return left ; }
551- if (is (left , EXPR_NUM ) && is (right , EXPR_NUM )) {
552- double res = left -> num + right -> num ;
553- release (left ); release (right );
546+ expr * removeAddTerm (expr * * left , expr * * right , expr * sym ) {
547+ * left = simplify (* left , sym );
548+ * right = simplify (* right , sym );
549+
550+ if (eq (* left , zero )) {
551+ release (* left ); return * right ;
552+ } else if (eq (* right , zero )) {
553+ release (* right ); return * left ;
554+ } else if (is (* left , EXPR_NUM ) && is (* right , EXPR_NUM )) {
555+ double res = (* left )-> num + (* right )-> num ;
556+ release (* left ); release (* right );
554557 return num (res );
555- }
556- if (eq (left , right )) {
557- release (left );
558- return mul (two , right );
559- }
560- if (is (right , EXPR_NEG )) {
561- expr * tmp = retain (right -> unary );
562- release (right );
563- return simplify (sub (left , tmp ), sym );
558+ } else if (eq (* left , * right )) {
559+ release (* right );
560+ return mul (two , * left );
564561 }
565562
566- if ((contains (left , sym ) && !contains (right , sym )) ||
567- (grade (left ) < grade (right ))) {
568- expr * tmp = left ;
563+ if ((contains (* left , sym ) && !contains (* right , sym )) ||
564+ (grade (* left ) < grade (* right ))) {
565+ expr * * tmp = left ;
569566 left = right ;
570567 right = tmp ;
571568 }
572569
573- return add (left , right );
570+ return add (* left , * right );
571+ }
572+
573+ expr * simplifyAdd (expr * f , expr * sym ) {
574+ expr * left = f -> left ;
575+ expr * right = f -> right ;
576+ return removeAddTerm (& left , & right , sym );
574577}
575578
576579expr * simplifySub (expr * f , expr * sym ) {
0 commit comments