sorted-map entries are real map-entries (jolt-jk23)

sorted-map seq/first/entries built plain [k v] vectors, so map-entry? was false
and key/val threw. Build them via a new jolt.host/map-entry seam (entry-flagged
pvec), matching a regular map's entries. Re-minted.
This commit is contained in:
Yogthos 2026-06-21 16:43:05 -04:00
parent 9ca30a236d
commit 76f8274603
3 changed files with 353 additions and 348 deletions

View file

@ -44,6 +44,9 @@
(def-var! "jolt.host" "tagged-table" jolt-tagged-table) (def-var! "jolt.host" "tagged-table" jolt-tagged-table)
(def-var! "jolt.host" "ref-put!" jolt-ref-put!) (def-var! "jolt.host" "ref-put!" jolt-ref-put!)
(def-var! "jolt.host" "ref-get" jolt-ref-get) (def-var! "jolt.host" "ref-get" jolt-ref-get)
;; map-entry constructor: a 2-elem entry-flagged pvec (map-entry? true, vector?
;; false), so sorted-map seq/first produce real map entries that key/val accept.
(def-var! "jolt.host" "map-entry" make-map-entry)
;; --- sorted-coll recognition + ops access ------------------------------------ ;; --- sorted-coll recognition + ops access ------------------------------------
(define kw-jtype (keyword "jolt" "type")) (define kw-jtype (keyword "jolt" "type"))

File diff suppressed because one or more lines are too long

View file

@ -221,7 +221,9 @@
(tree-collect (sfield sc :tree) proj [])) (tree-collect (sfield sc :tree) proj []))
;; --- sorted-map ops --------------------------------------------------------- ;; --- sorted-map ops ---------------------------------------------------------
(defn- map-entry [t] [(nd-key t) (nd-val t)]) ;; a real map-entry (map-entry? true), so key/val/seq destructuring work like a
;; regular map's entries.
(defn- map-entry [t] (jolt.host/map-entry (nd-key t) (nd-val t)))
(defn- sm-get [sm k not-found] (defn- sm-get [sm k not-found]
(let [n (tree-lookup (sfield sm :tree) (the-cmp sm) k)] (let [n (tree-lookup (sfield sm :tree) (the-cmp sm) k)]