embed a namespace value spliced into a form (~*ns*)
A macro like (defmacro cur-ns [] `(str ~*ns*)) splices the live *ns* value into its expansion, leaving an opaque jns object as a list element. The analyzer had no way to carry a runtime value and threw uncompilable — the last remaining corpus crash. Recognize a jns via the host contract (form-ns-value?) and emit a :the-ns leaf that reconstructs it by name (intern-ns!) at the call site, the same IR-leaf pattern as regex/inst/uuid. Closes unquote-*ns*-in- template; corpus crash count -> 0. A namespace fast path rather than a general constant pool: it's the only embedded-value case in the corpus and the common real-world one (libs splice ~*ns*). A general pool can come later if other value types appear.
This commit is contained in:
parent
ccc76fd69f
commit
8ce00d29fd
5 changed files with 17 additions and 4 deletions
|
|
@ -62,6 +62,11 @@
|
|||
(define (hc-regex? x) (hc-tagged-of x hc-kw-regex))
|
||||
(define (hc-inst? x) (hc-tagged-of x hc-kw-inst))
|
||||
(define (hc-uuid? x) (hc-tagged-of x hc-kw-uuid))
|
||||
;; A live namespace value spliced into a form (e.g. `(str ~*ns*) in a macro):
|
||||
;; the analyzer can't carry an opaque runtime value, so recognize a jns and
|
||||
;; reconstruct it by name at the call site (jolt-8sha).
|
||||
(define (hc-ns-value? x) (jns? x))
|
||||
(define (hc-ns-value-name x) (jns-name x))
|
||||
|
||||
;; --- form accessors ---------------------------------------------------------
|
||||
(define (hc-char-code x) (char->integer x)) ; native Chez char -> codepoint
|
||||
|
|
@ -292,6 +297,8 @@
|
|||
(def-var! "jolt.host" "form-regex?" hc-regex?)
|
||||
(def-var! "jolt.host" "form-inst?" hc-inst?)
|
||||
(def-var! "jolt.host" "form-uuid?" hc-uuid?)
|
||||
(def-var! "jolt.host" "form-ns-value?" hc-ns-value?)
|
||||
(def-var! "jolt.host" "form-ns-value-name" hc-ns-value-name)
|
||||
(def-var! "jolt.host" "form-elements" hc-elements)
|
||||
(def-var! "jolt.host" "form-vec-items" hc-vec-items)
|
||||
(def-var! "jolt.host" "form-set-items" hc-set-items)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue