cleanup: drop dead form-char? refer, document an-invoke :wild rule (jolt-xkbo)

analyzer.clj referred jolt.host/form-char? but never called it (form-char? stays
live — backend_scheme.clj uses it). Promote numeric.clj an-invoke's :wild operand
rule (an integer literal is valid in either fl/fx kind) from an inline comment to the
function docstring. Both output-neutral: the seed re-mints byte-identical, gate green.
This commit is contained in:
Yogthos 2026-06-24 00:03:34 -04:00
parent 43a0da4dd0
commit 9b4769f2e5
2 changed files with 8 additions and 2 deletions

View file

@ -18,7 +18,7 @@
def-node let-node fn-node vector-node map-node set-node
quote-node throw-node host-static host-new]]
[jolt.host :refer [form-sym? form-sym-name form-sym-ns form-list?
form-vec? form-map? form-set? form-char?
form-vec? form-map? form-set?
form-literal? form-keyword? form-elements form-vec-items
form-map-pairs form-set-items form-special? compile-ns
form-regex? form-regex-source

View file

@ -127,7 +127,13 @@
pe (reduce (fn [e p] (assoc e p (get nh p))) tenv (get a :params))]
(if (get a :rest) (assoc pe (get a :rest) nil) pe)))
(defn- an-invoke [node tenv]
(defn- an-invoke
"Annotate an :invoke with its numeric kind. An arithmetic core op specializes to
the Chez fl*/fx* op only when every operand is the same kind (:double or :long),
except an integer literal is :wild valid in either so (+ ^double x 2) stays
double. A call to a ^double/^long-returning var yields that kind without lowering
the call (its body already coerces the return)."
[node tenv]
(let [fnode (get node :fn)
nm (when (and (= :var (get fnode :op)) (= "clojure.core" (get fnode :ns)))
(get fnode :name))