Chez Phase 2 (inc H): volatiles + sequence/transduce
sequence and transduce were seed natives nil on the prelude; the stateful transducer arities (take-nth/map-indexed/partition-by, overlay) drive a volatile via volatile!/vswap!/vreset!/deref, also unshimmed — so the whole (sequence xform coll) / (transduce xform f coll) surface crashed. natives-xform.ss: native volatiles (a jvol record + volatile!/vreset!/ vswap!/volatile? + a deref arm); transduce/sequence built on the existing into-xform / reduce-seq. The overlay vreset!/vswap!/volatile? drive a volatile through ref-put!/:jolt/type (tagged-table only), so they're overridden natively in post-prelude.ss. driver.janet: drain each chez pipe to EOF instead of a single ev/read. A program with a stdout side effect (newline) flushes in two writes and a lone ev/read sometimes caught only the first chunk, dropping the trailing value — an intermittent gate divergence. Now reads until the pipe closes. Prelude parity 1886 -> 1898, 0 new divergences. Floor raised to 1898.
This commit is contained in:
parent
e434a7d352
commit
6581df2d17
5 changed files with 83 additions and 7 deletions
|
|
@ -13,3 +13,9 @@
|
|||
;; override.)
|
||||
(def-var! "clojure.core" "char?" jolt-char-pred?)
|
||||
(def-var! "clojure.core" "atom?" jolt-atom?)
|
||||
;; volatiles: a Chez volatile is a jvol record, but the overlay vreset!/vswap!/
|
||||
;; volatile? drive it via jolt.host/ref-put!+get / :jolt/type (tagged-table only).
|
||||
;; Override with the native versions (defined in natives-xform.ss).
|
||||
(def-var! "clojure.core" "vreset!" jolt-vreset!)
|
||||
(def-var! "clojure.core" "vswap!" jolt-vswap!)
|
||||
(def-var! "clojure.core" "volatile?" jolt-volatile-pred?)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue