From 1f074671ce19170c30b58d31619efceb686ba9af Mon Sep 17 00:00:00 2001 From: Michael Camilleri Date: Mon, 29 Jul 2024 16:16:41 +0900 Subject: [PATCH] Fix polymorphic support in compare --- src/boot/boot.janet | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/boot/boot.janet b/src/boot/boot.janet index 16d4f536..5e9e7f35 100644 --- a/src/boot/boot.janet +++ b/src/boot/boot.janet @@ -819,11 +819,17 @@ (defmacro- do-compare [x y] - ~(if (def f (get ,x :compare)) - (f ,x ,y) - (if (def f (get ,y :compare)) - (- (f ,y ,x)) - (cmp ,x ,y)))) + ~(do + (def f (get ,x :compare)) + (def f-res (if f (f ,x ,y))) + (if f-res + f-res + (do + (def g (get ,y :compare)) + (def g-res (if g (- (g ,y ,x)))) + (if g-res + g-res + (cmp ,x ,y)))))) (defn compare ``Polymorphic compare. Returns -1, 0, 1 for x < y, x = y, x > y respectively.