From 631622aa485e7d947501623247d913ea9bd14324 Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Wed, 31 Jul 2024 11:19:44 -0500 Subject: [PATCH] Use gensym in do-compare macro. Improve hygiene of macro in case later changes introduce subtle bugs. --- src/boot/boot.janet | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/boot/boot.janet b/src/boot/boot.janet index bfa51b56..b19ca5ef 100644 --- a/src/boot/boot.janet +++ b/src/boot/boot.janet @@ -832,17 +832,21 @@ (defmacro- do-compare [x y] + (def f (gensym)) + (def f-res (gensym)) + (def g (gensym)) + (def g-res (gensym)) ~(do - (def f (get ,x :compare)) - (def f-res (if f (f ,x ,y))) - (if f-res - f-res + (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)))))) + (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.