Migrate list?/ratio?/rational? to the overlay; narrow jolt.host exposure
list?, ratio?, and rational? are the predicate-web members that are genuinely safe to migrate: not extended at runtime, not on the compiler emit/inference path, not reached by the kernel tier. They now live in the overlay (clojure/core/20-coll.clj) built on the jolt.host tower/rep tests, lowering to the same code the native shims did. Removed their native definitions (predicates.ss) and, for ratio?/rational?, the now-redundant post-prelude re-assertions. Also dropped the dead all-flonum overlay ratio?/rational?/decimal? stubs. The rest of the web stays native and is documented as such: map?/set?/ seq?/coll? are extended with sorted/record/lazy arms, decimal? is extended by the optional bigdec module, integer?/float? are on the emit/inference path, vector? is reached by the kernel-tier peek. jolt.host exposure is therefore narrowed to just the tests these three consume (exact?, rational-type?, cseq?, cseq-list?, empty-list?). Numeric probe is byte-identical to pre-migration; list? correct across list/vector/lazy/empty/cons/rest cases. Selfhost fixpoint holds, values/ unit/smoke/corpus green, bench flat within noise.
This commit is contained in:
parent
12058d2dcf
commit
bbca8bc0de
5 changed files with 43 additions and 47 deletions
|
|
@ -177,13 +177,21 @@
|
|||
|
||||
(defn simple-ident? [x] (or (simple-symbol? x) (simple-keyword? x)))
|
||||
|
||||
;; Jolt has no ratio or bigdecimal types, so these are constants / reduce to int?.
|
||||
(defn ratio? [x] false)
|
||||
(defn decimal? [x] false)
|
||||
;; No first-class Class objects either: class names are symbols the evaluator
|
||||
;; handles in instance?/new positions, never values — so nothing is a class.
|
||||
;; Numeric-tower predicates over the Chez tower (jolt has exact ints, ratios, and
|
||||
;; flonums). ratio? = exact non-integer; rational? = exact (int or ratio). Built on
|
||||
;; the jolt.host tower tests so they lower to the same code the native shims did.
|
||||
;; decimal?/integer?/float?/int?/double? stay native (bigdec-extended or on the
|
||||
;; compiler emit/inference path) — see predicates.ss.
|
||||
(defn ratio? [x]
|
||||
(and (number? x) (jolt.host/exact? x) (jolt.host/rational-type? x) (not (integer? x))))
|
||||
(defn rational? [x] (and (number? x) (jolt.host/exact? x)))
|
||||
;; No first-class Class objects: class names are symbols the evaluator handles in
|
||||
;; instance?/new positions, never values — so nothing is a class.
|
||||
(defn class? [x] false)
|
||||
(defn rational? [x] (int? x))
|
||||
;; list?: a list-marked cseq node or the empty list (). A lazy/vector-backed seq,
|
||||
;; (rest list), (seq coll), (map …) are seqs but not lists. Not extended like
|
||||
;; map?/set?/seq?, so it migrates cleanly.
|
||||
(defn list? [x] (or (and (jolt.host/cseq? x) (jolt.host/cseq-list? x)) (jolt.host/empty-list? x)))
|
||||
(defn nat-int? [x] (and (int? x) (>= x 0)))
|
||||
(defn neg-int? [x] (and (int? x) (neg? x)))
|
||||
(defn pos-int? [x] (and (int? x) (pos? x)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue