From 8fb4c4f49dd795aff2185b5c13ebc4e15a776fea Mon Sep 17 00:00:00 2001 From: Pietro Cerutti Date: Fri, 28 Aug 2026 18:36:01 +0000 Subject: [PATCH] Simplify and reduce diffs with master --- src/boot/boot.janet | 45 ++++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/src/boot/boot.janet b/src/boot/boot.janet index 1b5fff70..d96a0e92 100644 --- a/src/boot/boot.janet +++ b/src/boot/boot.janet @@ -451,38 +451,33 @@ the `fal` form. Bindings have the same syntax as the `let` macro, are initially bound to `nil`, and are in scope in both branches.`` [bindings tru &opt fal] - (def len (/ (length bindings) 2)) + (def len (length bindings)) (if (= 0 len) (error "expected at least 1 binding")) - (if-not (int? len) (error "expected an even number of bindings")) + (if (odd? len) (error "expected an even number of bindings")) (def fal2 (if macexvar (macexvar fal) fal)) - (def syms (array/new len)) - (defn fill-syms [i] - (when (< i len) - (let [bl (in bindings (* i 2)) - sym (if (symbol? bl) bl (gensym))] - (put syms i sym)) - (fill-syms (+ 1 i)))) - (defn aux [i] + (def syms (array/new (/ len 2))) + (defn make-ifs [i] (if (>= i len) tru (do - (def bl (in bindings (* 2 i))) - (def br (in bindings (+ 1 (* 2 i)))) + (def bl (in bindings i)) + (def br (in bindings (+ 1 i))) (if (symbol? bl) - ~(if (def ,bl ,br) ,(aux (+ 1 i)) ,fal2) - (do - (def sym (in syms i)) - ~(do (def ,sym ,br) (if (def ,bl ,sym) ,(aux (+ 1 i)) ,fal2))))))) - - (defn wrap [i] - (if (>= i len) - (aux 0) - ~(do - (def ,(in syms i) ,nil) - ,(wrap (+ 1 i))))) + ~(if (def ,bl ,br) ,(make-ifs (+ 2 i)) ,fal2) + ~(if (def ,(def sym (in syms (/ i 2))) ,br) + (do (def ,bl ,sym) ,(make-ifs (+ 2 i))) + ,fal2))))) - (fill-syms 0) - (wrap 0)) + (defn make-defs [i] + (if (>= i len) + (make-ifs 0) + ~(do + ,(let [bl (in bindings i) sym (if (symbol? bl) bl (gensym))] + (put syms (/ i 2) sym) + ~(def ,sym ,nil)) + ,(make-defs (+ 2 i))))) + + (make-defs 0)) (defmacro when-with ``Similar to with, but if binding is false or nil, returns