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")