jolt/host/chez
Yogthos 6ab65a30e3 Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run
Shaking the ring-app example's real library stack out against jolt surfaced a
batch of divergences from JVM Clojure, the biggest being evaluation order.

backend_scheme: call and recur arguments were emitted as bare Scheme operands,
so Chez's unspecified (right-to-left) order won out. Clojure evaluates left to
right, which selmer's reader loop relies on: (recur (add-node ... rdr) (read-char
rdr)) consumed a char early and dropped the first chars of every {{tag}}. Bind
operands to fresh temps in a let* (only when two or more can have side effects,
so hot calls over locals/consts stay un-wrapped). emit-ordered already did this
for collection literals; generalize it.

host-contract: syntax-quote now resolves the alias part of a qualified symbol
(impl/foo -> clojure.tools.logging.impl/foo) instead of leaving it bare, which
limped along via short-name matching until two loaded namespaces (reitit.impl,
clojure.tools.logging.impl) shared the short name and it broke.

collections: key-hash masks with bitwise-and, not fxand — jolt-hash is set!-
decorated per type (records return their own hash) and Chez's equal-hash can be a
bignum, so a key's hash isn't always a fixnum.

seq: even?/odd? handle bignums (JVM accepts any integer; the fxand crashed).

records: Keyword/Symbol .sym/.getName/.toString (honeysql's :clj branch reads
(.sym k)); Throwable .getMessage/.toString over a Chez condition.

host-static: __register-class-ctor!/__register-class-statics! so a host shim
(reitit.trie-jolt) can mirror a Java class.

natives-str: String.intern returns the string.

sqlite: jdbc.core fetch/fetch-one kebab-case column keys (the jolt-lang/db
convention; created_at -> :created-at).

io: a relative io/file path resolves against JOLT_PWD (the user's cwd), not the
repo root the launcher cd'd to — matches JVM cwd semantics, so config.edn loads.

cli: render an uncaught jolt throw (ex-info message + ex-data, or a condition)
instead of Chez's opaque "non-condition value" dump.
2026-06-22 05:26:09 -04:00
..
seed Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
async.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
atoms.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
bigdec.ss real BigDecimal type (bigdec, M literals) 2026-06-22 00:01:01 -04:00
bootstrap.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
cli.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
collections.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
compile-eval.ss macroexpand-first analyzer order; one macro path; defmacro/letfn fixes 2026-06-22 00:54:16 -04:00
concurrency.ss Chez parity: delay / force / realized? (jolt-cf1q.7) 2026-06-20 17:02:42 -04:00
converters.ss Bind clojure.core/float (= double on Chez) 2026-06-21 15:39:21 -04:00
dot-forms.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
dyn-binding.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
dynamic-vars.ss compile (set! *var* val) 2026-06-22 00:40:46 -04:00
emit-image.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
host-class.ss resolve ^Type hint to canonical class name in var :tag 2026-06-21 23:52:47 -04:00
host-contract.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
host-static.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
host-table.ss sorted-map entries are real map-entries (jolt-jk23) 2026-06-21 16:43:05 -04:00
http-client.ss jolt.http-client (curl-backed) + format width/justify flags 2026-06-22 02:44:29 -04:00
http-server.ss Native SQLite + an HTTP server over FFI (ring-app foundation) 2026-06-22 02:50:53 -04:00
inst-time.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
io.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
lazy-bridge.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
loader.ss More library-compat fixes from porting the examples (markdown, malli) 2026-06-22 02:25:11 -04:00
math.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
multimethods.ss defmethod auto-create copies clojure.core dispatch (fix SCI regression) 2026-06-21 20:04:13 -04:00
natives-array.ss real chunked seqs for vector seqs 2026-06-22 00:21:05 -04:00
natives-coll.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
natives-meta.ss (type record) returns its class-name string, not a symbol 2026-06-22 00:05:08 -04:00
natives-misc.ss jolt.http-client (curl-backed) + format width/justify flags 2026-06-22 02:44:29 -04:00
natives-num.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
natives-parity.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
natives-seq.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
natives-str.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
natives-xform.ss Chez Phase 2 (inc H): volatiles + sequence/transduce 2026-06-18 14:47:03 -04:00
ns.ss Host completeness for the ring stack (ring-app) 2026-06-22 03:20:31 -04:00
png.ss jolt.png: a built-in PNG writer (ray-tracer-multi) 2026-06-22 02:33:27 -04:00
post-prelude.ss real chunked seqs for vector seqs 2026-06-22 00:21:05 -04:00
predicates.ss Host interop fixes: ==/time/subvec/defonce + corpus cleanup 2026-06-21 15:36:41 -04:00
printing.ss JVM parity: unchecked-char -> char, pr of infinities -> ##Inf 2026-06-21 17:55:05 -04:00
reader.ss More library-compat fixes from porting the examples (markdown, malli) 2026-06-22 02:25:11 -04:00
records.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
regex.ss Host completeness for the ring stack (ring-app) 2026-06-22 03:20:31 -04:00
remint.sh Pure-Chez test gates (no Janet) 2026-06-21 11:22:32 -04:00
rt.ss real BigDecimal type (bigdec, M literals) 2026-06-22 00:01:01 -04:00
run-corpus.ss More library-compat fixes from porting the examples (markdown, malli) 2026-06-22 02:25:11 -04:00
run-sci.ss mutable deftype fields: (set! field val) in a method 2026-06-22 01:19:03 -04:00
run-unit.ss Cross-ns def/require/use/defmethod through the spine (jolt-c2l1) 2026-06-21 16:56:46 -04:00
selfcheck.sh Pure-Chez test gates (no Janet) 2026-06-21 11:22:32 -04:00
seq.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
smoke.sh Pure-Chez test gates (no Janet) 2026-06-21 11:22:32 -04:00
sqlite.ss Fix arg evaluation order + host interop gaps so reitit/selmer/honeysql run 2026-06-22 05:26:09 -04:00
syntax-quote.ss Scrub dangling Janet references; drop dead Janet-coupled files 2026-06-21 12:01:04 -04:00
transients.ss assoc! fills nil for a trailing lone key (JVM parity) 2026-06-21 17:03:10 -04:00
values.ss Chez Phase 1 (increment 3b): seq tier + dynamic IFn dispatch on the Chez RT 2026-06-17 15:19:18 -04:00
vars.ss Chez Phase 2 (inc I+J): first-class vars + scalar natives 2026-06-18 15:44:10 -04:00