Host completeness for the ring stack (ring-app)

Gaps surfaced loading ring-core / hiccup / config / tools.logging on Chez:

- clojure.java.io/resource — resolve a named resource against the loader's
  source roots (no classpath), returning a slurp-able File.
- (Object.) constructor — a fresh distinct value (lock / unique sentinel).
- *out* / *err* as dynamic vars over a port-writer, so (binding [*out* *err*] …)
  and #'*out* compile and run (tools.logging, selmer).
- :refer :all now registers a refer-all relation, so an unqualified var from a
  (require '[ns :refer :all]) resolves at compile time — including #'var.
- java.lang.Character interop ((.toString \+) etc.).
- StringReader accepts a char[] ((StringReader. (char-array s))), not just a
  String.
- the \p{L} translation stops just below the UTF-16 surrogate gap (\x{D7FF})
  instead of \x{10FFFF} — a range across the surrogates made irregex's char-set
  construction call integer->char on a surrogate and crash.
This commit is contained in:
Yogthos 2026-06-22 03:20:31 -04:00
parent 5e916433b8
commit 10e3a00777
5 changed files with 59 additions and 8 deletions

View file

@ -266,6 +266,15 @@
(let ((v (jolt-first s))) (jiterator-cur-set! obj (jolt-rest s)) v))))
(else (error #f (string-append "No method " method-name " on Iterator")))))
((string=? method-name "iterator") (make-jiterator (jolt-seq obj)))
;; java.lang.Character interop: (.toString \+) -> "+", etc.
((char? obj)
(cond ((string=? method-name "toString") (string obj))
((string=? method-name "charValue") obj)
((string=? method-name "hashCode") (char->integer obj))
((string=? method-name "equals") (and (pair? rest) (char? (car rest)) (char=? obj (car rest))))
((string=? method-name "compareTo")
(let ((o (car rest))) (cond ((char<? obj o) -1) ((char>? obj o) 1) (else 0))))
(else (error #f (string-append "No method " method-name " on char")))))
(else (error #f (string-append "No method " method-name " for value: "
(jolt-pr-str obj)))))))