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?)
|
||||
(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
|
||||
|
||||
Reference in New Issue
Block a user