From 4ab8e17d9bfdd910d532557991d2957fc47d751b Mon Sep 17 00:00:00 2001 From: giles Date: Sun, 29 Mar 2026 19:48:22 +0000 Subject: [PATCH] Revert compile-list to cond dispatch, keep compile-match for user code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The compiler's own match dispatch caused cascading JIT failures — when compile-list is pre-compiled, the match bytecode is embedded in it, and any subtle issue propagates to ALL subsequent compilations. compile-list reverts to cond (battle-tested with JIT). compile-match remains available for user code that uses match expressions. 1166 passed, 0 failed. Co-Authored-By: Claude Opus 4.6 (1M context) --- lib/compiler.sx | 95 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 62 insertions(+), 33 deletions(-) diff --git a/lib/compiler.sx b/lib/compiler.sx index bfab1905..c385871d 100644 --- a/lib/compiler.sx +++ b/lib/compiler.sx @@ -187,39 +187,68 @@ (compile-call em head args scope tail?) (let ((name (symbol-name head))) - (match - name - ("if" (compile-if em args scope tail?)) - ("when" (compile-when em args scope tail?)) - ("and" (compile-and em args scope tail?)) - ("or" (compile-or em args scope tail?)) - ("let" (compile-let em args scope tail?)) - ("let*" (compile-let em args scope tail?)) - ("begin" (compile-begin em args scope tail?)) - ("do" (compile-begin em args scope tail?)) - ("lambda" (compile-lambda em args scope)) - ("fn" (compile-lambda em args scope)) - ("define" (compile-define em args scope)) - ("set!" (compile-set em args scope)) - ("quote" (compile-quote em args)) - ("cond" (compile-cond em args scope tail?)) - ("case" (compile-case em args scope tail?)) - ("match" (compile-match em args scope tail?)) - ("->" (compile-thread em args scope tail?)) - ("defcomp" (compile-defcomp em args scope)) - ("defisland" (compile-defcomp em args scope)) - ("defmacro" (compile-defmacro em args scope)) - ("defstyle" (emit-op em 2)) - ("defhandler" (emit-op em 2)) - ("defpage" (emit-op em 2)) - ("defquery" (emit-op em 2)) - ("defaction" (emit-op em 2)) - ("defrelation" (emit-op em 2)) - ("deftype" (emit-op em 2)) - ("defeffect" (emit-op em 2)) - ("quasiquote" (compile-quasiquote em (first args) scope)) - ("letrec" (compile-letrec em args scope tail?)) - (_ (compile-call em head args scope tail?)))))))) + (cond + (= name "if") + (compile-if em args scope tail?) + (= name "when") + (compile-when em args scope tail?) + (= name "and") + (compile-and em args scope tail?) + (= name "or") + (compile-or em args scope tail?) + (= name "let") + (compile-let em args scope tail?) + (= name "let*") + (compile-let em args scope tail?) + (= name "begin") + (compile-begin em args scope tail?) + (= name "do") + (compile-begin em args scope tail?) + (= name "lambda") + (compile-lambda em args scope) + (= name "fn") + (compile-lambda em args scope) + (= name "define") + (compile-define em args scope) + (= name "set!") + (compile-set em args scope) + (= name "quote") + (compile-quote em args) + (= name "cond") + (compile-cond em args scope tail?) + (= name "case") + (compile-case em args scope tail?) + (= name "match") + (compile-match em args scope tail?) + (= name "->") + (compile-thread em args scope tail?) + (= name "defcomp") + (compile-defcomp em args scope) + (= name "defisland") + (compile-defcomp em args scope) + (= name "defmacro") + (compile-defmacro em args scope) + (= name "defstyle") + (emit-op em 2) + (= name "defhandler") + (emit-op em 2) + (= name "defpage") + (emit-op em 2) + (= name "defquery") + (emit-op em 2) + (= name "defaction") + (emit-op em 2) + (= name "defrelation") + (emit-op em 2) + (= name "deftype") + (emit-op em 2) + (= name "defeffect") + (emit-op em 2) + (= name "quasiquote") + (compile-quasiquote em (first args) scope) + (= name "letrec") + (compile-letrec em args scope tail?) + :else (compile-call em head args scope tail?))))))) (define compile-if