Unbox ^double record field reads (#231)
A record field tagged ^double now reads back as a flonum and feeds the numeric pass, so hintless arithmetic over those fields lowers to fl-ops — the leaf-numeric analog of the ^Vec3 nested-field hints. Combined with the whole-program :double param inference, a vec3-dot over a ^double-fielded record unboxes end to end with no per-fn hints. records.ss: a ^double field tag passes through resolution, and the ctor (and a mutable-field set!) coerce a ^double field to a flonum — JVM primitive-field parity (jolt returned an exact 1, not 1.0, before), and what makes reading the field back as :double sound for an fl-op. types.clj: field-type-from-tag maps "double" -> :double, and a keyword/get lookup whose result is :double annotates the node :num-read :double. numeric.clj reads that annotation and classifies the field read as a :double operand, so the enclosing arithmetic specializes — the read itself keeps its jrec-field-at/jolt-get emit. run-fieldnum.ss gate: ctor coercion (int field -> flonum), field-field arithmetic emitting fl*/fl+, and an untagged field staying generic. make test / shakesmoke green, selfhost holds, 0 new divergences. Co-authored-by: Yogthos <yogthos@gmail.com>
This commit is contained in:
parent
8ae45057d6
commit
4671e1b67e
6 changed files with 292 additions and 180 deletions
10
Makefile
10
Makefile
|
|
@ -4,7 +4,7 @@
|
|||
# build step. `make test` is the full gate. `make remint` rebuilds the seed after a
|
||||
# source change.
|
||||
|
||||
.PHONY: test ci values corpus unit smoke buildsmoke selfhost sci certify ffi transient infer wp devirt fieldread numwp directlink numeric inline shakesmoke remint
|
||||
.PHONY: test ci values corpus unit smoke buildsmoke selfhost sci certify ffi transient infer wp devirt fieldread numwp fieldnum directlink numeric inline shakesmoke remint
|
||||
|
||||
# Full gate (dev machine). Includes the self-host byte-fixpoint, which only holds
|
||||
# on the same Chez that minted the seed.
|
||||
|
|
@ -15,7 +15,7 @@ test: selfhost ci
|
|||
# lockfile) — it RUNS correctly on any Chez, but `selfhost` rebuilds it and a
|
||||
# different Chez version may emit byte-different (gensym/order) output, so the
|
||||
# byte-fixpoint is a dev-machine check, not a CI one (jolt-8479).
|
||||
ci: values corpus unit smoke buildsmoke sci ffi transient infer wp devirt fieldread numwp directlink numeric inline certify
|
||||
ci: values corpus unit smoke buildsmoke sci ffi transient infer wp devirt fieldread numwp fieldnum directlink numeric inline certify
|
||||
@echo "OK: CI gates passed"
|
||||
|
||||
# Self-host fixpoint: bootstrap.ss rebuild == checked-in seed.
|
||||
|
|
@ -86,6 +86,12 @@ fieldread:
|
|||
numwp:
|
||||
@chez --script host/chez/run-numwp.ss
|
||||
|
||||
# Double record fields: a ^double-tagged field reads back as a flonum (coerced at
|
||||
# construction and set!), so hintless arithmetic over those fields unboxes to fl-ops;
|
||||
# an untagged field stays generic.
|
||||
fieldnum:
|
||||
@chez --script host/chez/run-fieldnum.ss
|
||||
|
||||
# Direct-linking emission: a closed-world build binds top-level app defs to jv$
|
||||
# Scheme bindings and routes app->app calls/refs to them, skipping var-deref +
|
||||
# jolt-invoke; ^:dynamic/^:redef and nested defs opt out.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue