Merge pull request #26 from jolt-lang/stage2-freeze-punt-set
Freeze the punt set: fallback-zero asserts the exhaustive fallback surface
This commit is contained in:
commit
c14c129627
1 changed files with 24 additions and 4 deletions
|
|
@ -72,12 +72,32 @@
|
||||||
"(defonce fz-once 1)" "(read-string \"[1 2]\")"
|
"(defonce fz-once 1)" "(read-string \"[1 2]\")"
|
||||||
"(macroexpand-1 (quote (when true 1)))"])
|
"(macroexpand-1 (quote (when true 1)))"])
|
||||||
|
|
||||||
# --- Intentional fallback (sanity sample): these SHOULD punt to the interpreter.
|
# --- THE FROZEN PUNT SET (Stage 2 complete) ---------------------------------
|
||||||
# The remaining frozen/uncompiled set keeps the harness honest in the punt
|
# These are the ONLY heads that may reach the interpreter, exhaustively:
|
||||||
# direction: defmacro + set! (frozen host-coupled), and letfn (needs letrec IR).
|
# defmacro — definitional host seam (the EXPANDERS are compiled;
|
||||||
|
# see backend/recompile-macros!)
|
||||||
|
# set! — host var-cell mutation special
|
||||||
|
# letfn — needs letrec IR (sequential let* can't express mutual
|
||||||
|
# recursion); permanent-interpret unless the IR gains it
|
||||||
|
# eval — compile-and-run entry (also loader stateful-head?)
|
||||||
|
# . / new / Foo. / — thin host-interop heads the back end doesn't model
|
||||||
|
# .method
|
||||||
|
# gen-class, monitor-enter, monitor-exit — JVM-compat stubs
|
||||||
|
# Growing this list is a REGRESSION: a new punt means the compiler lost
|
||||||
|
# coverage. Shrinking it (e.g. letfn via letrec IR) is progress — move the
|
||||||
|
# form to must-compile.
|
||||||
(def must-punt
|
(def must-punt
|
||||||
["(defmacro m [x] x)"
|
["(defmacro m [x] x)"
|
||||||
"(set! *warn-on-reflection* true)" "(letfn [(f [n] (g n)) (g [n] (f n))] (f 1))"])
|
"(set! *warn-on-reflection* true)"
|
||||||
|
"(letfn [(f [n] (g n)) (g [n] (f n))] (f 1))"
|
||||||
|
"(eval (quote (+ 1 2)))"
|
||||||
|
"(.method obj)"
|
||||||
|
"(.-field obj)"
|
||||||
|
"(new Foo 1)"
|
||||||
|
"(Foo. 1)"
|
||||||
|
"(gen-class :name X)"
|
||||||
|
"(monitor-enter x)"
|
||||||
|
"(monitor-exit x)"])
|
||||||
|
|
||||||
(var fails @[])
|
(var fails @[])
|
||||||
(each s must-compile
|
(each s must-compile
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue