From f410f5c48b48dd1409b0acd5acb0a213b6348bef Mon Sep 17 00:00:00 2001 From: Yogthos Date: Tue, 2 Jun 2026 22:00:08 -0400 Subject: [PATCH] Phase 6 followup: fix #? reader conditional :default fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - reader.janet: read-reader-conditional now falls back to :default when :clj branch is not matched (iterates clauses a second time) - test/phase6-test.janet: restore :default tests for #? and #?@ (#? :default fallback, #?@ :default fallback) — all 6 assertions pass --- src/jolt/reader.janet | 9 +++++++++ test/phase6-test.janet | 3 +++ 2 files changed, 12 insertions(+) diff --git a/src/jolt/reader.janet b/src/jolt/reader.janet index 9ee0ef9..52178c2 100644 --- a/src/jolt/reader.janet +++ b/src/jolt/reader.janet @@ -299,6 +299,15 @@ (set result (in form (+ i 1))) (set i (length form))) (++ i))) + # Fallback to :default if :clj not matched + (when (nil? result) + (set i 0) + (while (< i (length form)) + (if (= (in form i) :default) + (do + (set result (in form (+ i 1))) + (set i (length form))) + (++ i)))) (if splice? # #?@ splicing: resolve :clj branch, wrap for splice (let [items (if (nil? result) diff --git a/test/phase6-test.janet b/test/phase6-test.janet index 6510dd7..b84ca36 100644 --- a/test/phase6-test.janet +++ b/test/phase6-test.janet @@ -19,6 +19,7 @@ (print "30: #? reader conditionals...") (let [ctx (init)] (assert (= :yes (ct-eval ctx "#?(:clj :yes :cljs :no)")) "#? selects :clj") + (assert (= :yes (ct-eval ctx "#?(:cljs :no :default :yes)")) "#? :default fallback") (assert (= nil (ct-eval ctx "#?(:cljs :no)")) "#? nil on no match")) (print " passed") @@ -26,6 +27,8 @@ (let [ctx (init)] (assert (= [1 2 3] (ct-eval ctx "[#?@(:clj [1 2 3] :cljs [4 5 6])]")) "#?@ splices :clj") + (assert (= [99] (ct-eval ctx "[#?@(:cljs [1] :default [99])]")) + "#?@ :default fallback") (assert (= [] (ct-eval ctx "[#?@(:cljs [1 2])]")) "#?@ nothing on no match")) (print " passed")