jolt/jolt-core/clojure/core
Yogthos d584369dda core: java.time + java.io shims — Selmer renders end to end (jolt-ea7)
Selmer now loads and renders templates on jolt: variables, filters
(upper, date with JVM patterns), if/for tags, nested lookups, HTML
escaping, and render-file with its last-modified template cache.

New src/jolt/javatime.janet provides the java.time surface Selmer's
date filters use (DateTimeFormatter/Instant/ZoneId/LocalDateTime/
FormatStyle/Locale, epoch-ms backed, host-local timezone) plus the
java.io/java.lang/java.net shims its template reader needs
(StringReader, StringBuilder, URL, File/separator, Class/forName).
Everything registers through three new evaluator registries
(class-statics, tagged-methods, class-ctors), so the module is data
plus an install call.

Fixes shaken out along the way, each load-bearing for Selmer and
correct on their own:
- :refer :all silently referred nothing (it iterated the :all keyword)
- ns :import ignored vector specs and didn't share deftype ctor vars
- dot calls on deftype/reify instances never consulted the protocol
  registry, so (.render-node node ctx) failed where (render-node ...)
  worked
- instance? rejected expression type args like (Class/forName "[C")
- char-array didn't accept a string
- io/resource now searches the loader's source roots (the classpath
  analog); io/reader handles char arrays, URLs, readers, and returns
  an in-memory reader with :read-line-fn for file paths
- String .split (regex, JVM trailing-empty semantics), file-path
  methods (.toURI/.toURL/.getPath/.lastModified/.exists)
- System/getProperty (os.name & co), the janet/* bridge now works
  inside env-less fibers, and qualified class names that syntax-quote
  mangles (selmer.util/StringBuilder) fall back to the ctor registry

Spec rows cover the shim surface; test/integration/selmer-test.janet
runs the real Selmer from ~/src/selmer (skips cleanly when absent).
2026-06-10 22:29:53 -04:00
..
00-kernel.clj Compiler research (#10) 2026-06-09 07:30:25 +08:00
00-syntax.clj core: staged recompile for early defns; keys/vals/empty? leave the seed (jolt-4j3) 2026-06-10 16:16:23 -04:00
10-seq.clj Compiler research (#10) 2026-06-09 07:30:25 +08:00
20-coll.clj core: three bug fixes — ifn?, prefer-method dispatch, reader comments in map values 2026-06-10 21:03:14 -04:00
25-sorted.clj core: staged recompile for early defns; keys/vals/empty? leave the seed (jolt-4j3) 2026-06-10 16:16:23 -04:00
30-macros.clj core: java.time + java.io shims — Selmer renders end to end (jolt-ea7) 2026-06-10 22:29:53 -04:00
40-lazy.clj core: lazy realization is shared across walks (once-only effects); pmap family 2026-06-10 19:14:49 -04:00
50-io.clj core: the last seven missing-portable vars — coverage gap closed (jolt-brh) 2026-06-10 17:22:28 -04:00