Revert compile-list to cond dispatch, keep compile-match for user code
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) <noreply@anthropic.com>
This commit is contained in:
@@ -187,39 +187,68 @@
|
|||||||
(compile-call em head args scope tail?)
|
(compile-call em head args scope tail?)
|
||||||
(let
|
(let
|
||||||
((name (symbol-name head)))
|
((name (symbol-name head)))
|
||||||
(match
|
(cond
|
||||||
name
|
(= name "if")
|
||||||
("if" (compile-if em args scope tail?))
|
(compile-if em args scope tail?)
|
||||||
("when" (compile-when em args scope tail?))
|
(= name "when")
|
||||||
("and" (compile-and em args scope tail?))
|
(compile-when em args scope tail?)
|
||||||
("or" (compile-or em args scope tail?))
|
(= name "and")
|
||||||
("let" (compile-let em args scope tail?))
|
(compile-and em args scope tail?)
|
||||||
("let*" (compile-let em args scope tail?))
|
(= name "or")
|
||||||
("begin" (compile-begin em args scope tail?))
|
(compile-or em args scope tail?)
|
||||||
("do" (compile-begin em args scope tail?))
|
(= name "let")
|
||||||
("lambda" (compile-lambda em args scope))
|
(compile-let em args scope tail?)
|
||||||
("fn" (compile-lambda em args scope))
|
(= name "let*")
|
||||||
("define" (compile-define em args scope))
|
(compile-let em args scope tail?)
|
||||||
("set!" (compile-set em args scope))
|
(= name "begin")
|
||||||
("quote" (compile-quote em args))
|
(compile-begin em args scope tail?)
|
||||||
("cond" (compile-cond em args scope tail?))
|
(= name "do")
|
||||||
("case" (compile-case em args scope tail?))
|
(compile-begin em args scope tail?)
|
||||||
("match" (compile-match em args scope tail?))
|
(= name "lambda")
|
||||||
("->" (compile-thread em args scope tail?))
|
(compile-lambda em args scope)
|
||||||
("defcomp" (compile-defcomp em args scope))
|
(= name "fn")
|
||||||
("defisland" (compile-defcomp em args scope))
|
(compile-lambda em args scope)
|
||||||
("defmacro" (compile-defmacro em args scope))
|
(= name "define")
|
||||||
("defstyle" (emit-op em 2))
|
(compile-define em args scope)
|
||||||
("defhandler" (emit-op em 2))
|
(= name "set!")
|
||||||
("defpage" (emit-op em 2))
|
(compile-set em args scope)
|
||||||
("defquery" (emit-op em 2))
|
(= name "quote")
|
||||||
("defaction" (emit-op em 2))
|
(compile-quote em args)
|
||||||
("defrelation" (emit-op em 2))
|
(= name "cond")
|
||||||
("deftype" (emit-op em 2))
|
(compile-cond em args scope tail?)
|
||||||
("defeffect" (emit-op em 2))
|
(= name "case")
|
||||||
("quasiquote" (compile-quasiquote em (first args) scope))
|
(compile-case em args scope tail?)
|
||||||
("letrec" (compile-letrec em args scope tail?))
|
(= name "match")
|
||||||
(_ (compile-call em head args scope tail?))))))))
|
(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
|
(define
|
||||||
compile-if
|
compile-if
|
||||||
|
|||||||
Reference in New Issue
Block a user