From 5a1981bb0cd3982e3bd9f9d816f2c23b24c81699 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Tue, 6 Sep 2011 00:26:52 +0900 Subject: [PATCH] fixing = for complex numbers, which otherwise can't be ordered --- vm.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/vm.c b/vm.c index c6232f8b..e881d55c 100644 --- a/vm.c +++ b/vm.c @@ -1617,6 +1617,17 @@ sexp sexp_apply (sexp ctx, sexp proc, sexp args) { i = tmp1 == tmp2; #if SEXP_USE_BIGNUMS _ARG1 = sexp_make_boolean(i); +#if SEXP_USE_COMPLEX + } else if (sexp_complexp(tmp1)) { + if (!sexp_complexp(tmp2)) { + _ARG1 = SEXP_FALSE; + } else { + i = (sexp_complex_real(tmp1) == sexp_complex_real(tmp2) + || (sexp_flonump(tmp1) && (sexp_flonum_value(tmp1) == (sexp_flonump(tmp2) ? sexp_flonum_value(tmp2) : sexp_unbox_fixnum(tmp2)))) + || (sexp_flonump(tmp2) && (sexp_flonum_value(tmp2) == sexp_unbox_fixnum(tmp2)))); + _ARG1 = sexp_make_boolean(i); + } +#endif } else { _ARG1 = sexp_compare(ctx, tmp1, tmp2); sexp_check_exception();