From 648f6b9de6f1109b8379eb371fed24b2c6923fd7 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Wed, 29 May 2024 21:36:30 +0900 Subject: [PATCH] Fix error reporting for complex inequality comparisons. Closes #934. --- bignum.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/bignum.c b/bignum.c index f721d2d0..70bd7107 100644 --- a/bignum.c +++ b/bignum.c @@ -1867,16 +1867,16 @@ sexp sexp_compare (sexp ctx, sexp a, sexp b) { sexp_gc_preserve1(ctx, tmp); if (at > bt) { r = sexp_compare(ctx, b, a); - sexp_negate(r); + if (!sexp_exceptionp(r)) { sexp_negate(r); } } else { switch ((at * SEXP_NUM_NUMBER_TYPES) + bt) { case SEXP_NUM_NOT_NOT: case SEXP_NUM_NOT_FIX: case SEXP_NUM_NOT_FLO: case SEXP_NUM_NOT_BIG: #if SEXP_USE_COMPLEX - case SEXP_NUM_CPX_CPX: case SEXP_NUM_CPX_FIX: - case SEXP_NUM_CPX_FLO: case SEXP_NUM_CPX_BIG: + case SEXP_NUM_CPX_CPX: case SEXP_NUM_FIX_CPX: + case SEXP_NUM_FLO_CPX: case SEXP_NUM_BIG_CPX: #if SEXP_USE_RATIOS - case SEXP_NUM_CPX_RAT: + case SEXP_NUM_RAT_CPX: #endif #endif r = sexp_type_exception(ctx, NULL, SEXP_NUMBER, a); @@ -1944,6 +1944,9 @@ sexp sexp_compare (sexp ctx, sexp a, sexp b) { r = sexp_ratio_compare(ctx, a, b); break; #endif + default: + r = sexp_xtype_exception(ctx, NULL, "unknown comparison", a); + break; } } sexp_gc_release1(ctx);