A loop var with an integer-literal init now types :long (fx ops) when every recur arg in its slot is an increment-style step — the var unchanged, inc/dec, or (+/- var <int-literal>). So (loop [i 0] (recur (inc i))) gets fx1+/fx<? without a hint, matching how Clojure treats a primitive-long loop counter. Soundness: only increment steps qualify. A multiplicative or large-growth accumulator like (recur (* acc 2)) is never seeded, so it stays generic and keeps arbitrary precision — a bignum-producing loop (e.g. a factorial) is unaffected. counter-step? gates this; the existing fixpoint demotes anything inconsistent. test/chez/numeric-test.ss 44/44 (incl. a factorial loop staying bignum-exact while its counter is fx); full make test green, 0 new corpus divergences. |
||
|---|---|---|
| .. | ||
| chez | ||
| conformance | ||