*unchecked-math* on macro-emitted arithmetic + local shadowing a bare native op
Two general fixes shaken out by clojure.test.check's own suite (its splittable PRNG mixes 64-bit longs and binds locals named min/max). - *unchecked-math* now wraps arithmetic a macro emits. The analyzer rewrote a bare (+/-/*) to its wrapping unchecked-* under *unchecked-math*, but a macro's syntax-quote produces clojure.core/* (qualified), which was skipped — so e.g. test.check's mix-64 multiply grew to a bignum instead of a 64-bit long. The rewrite now also fires on the clojure.core-qualified form. - A local binding named like a bare-emitted native op no longer shadows it. ops where native-ops maps the name to itself (+ - * / < > min max …) emit as the bare Scheme name; a local `max` emitted the same token, so (fn [max] (clojure.core/max …)) called the param. munge-name now prefixes such locals, like reserved words (derived from native-ops so they can't drift). make test green (+1 corpus row, 0 new divergences), shakesmoke byte-identical. One re-mint (analyzer + backend).
This commit is contained in:
parent
75652de1ad
commit
992fc0af34
5 changed files with 131 additions and 114 deletions
File diff suppressed because one or more lines are too long
|
|
@ -485,9 +485,9 @@
|
|||
(guard (e (#t #f))
|
||||
(def-var! "clojure.core" "trampoline" (letrec ((trampoline (case-lambda ((f) (let fnrec4577 ((f f)) (let* ((ret (jolt-invoke f))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "fn?") ret)) (trampoline ret) ret)))) ((f . args) (let fnrec4578 ((f f) (args (list->cseq args))) (trampoline (lambda () (let fnrec4579 () (jolt-apply f args))))))))) trampoline)))
|
||||
(guard (e (#t #f))
|
||||
(def-var! "clojure.core" "max" (letrec ((max (case-lambda ((x) (let fnrec4580 ((x x)) x)) ((x y) (let fnrec4581 ((x x) (y y)) (if (> x y) x y))) ((x y . more) (let fnrec4582 ((x x) (y y) (more (list->cseq more))) (jolt-reduce max (max x y) more)))))) max)))
|
||||
(def-var! "clojure.core" "max" (letrec ((_max (case-lambda ((x) (let fnrec4580 ((x x)) x)) ((x y) (let fnrec4581 ((x x) (y y)) (if (> x y) x y))) ((x y . more) (let fnrec4582 ((x x) (y y) (more (list->cseq more))) (jolt-reduce _max (_max x y) more)))))) _max)))
|
||||
(guard (e (#t #f))
|
||||
(def-var! "clojure.core" "min" (letrec ((min (case-lambda ((x) (let fnrec4583 ((x x)) x)) ((x y) (let fnrec4584 ((x x) (y y)) (if (< x y) x y))) ((x y . more) (let fnrec4585 ((x x) (y y) (more (list->cseq more))) (jolt-reduce min (min x y) more)))))) min)))
|
||||
(def-var! "clojure.core" "min" (letrec ((_min (case-lambda ((x) (let fnrec4583 ((x x)) x)) ((x y) (let fnrec4584 ((x x) (y y)) (if (< x y) x y))) ((x y . more) (let fnrec4585 ((x x) (y y) (more (list->cseq more))) (jolt-reduce _min (_min x y) more)))))) _min)))
|
||||
(guard (e (#t #f))
|
||||
(def-var! "clojure.core" "reverse" (letrec ((reverse (lambda (coll) (let fnrec4586 ((coll coll)) (jolt-reduce jolt-conj (jolt-list ) coll))))) reverse)))
|
||||
(guard (e (#t #f))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue