The raylib half of the sweep, and the let the note named

This commit is contained in:
Joseph Ferano 2026-09-20 18:44:37 +07:00
parent 3b91afd47b
commit b34a7bbf11
2 changed files with 12 additions and 0 deletions

View File

@ -2629,6 +2629,12 @@ what was true when they were written.
pure addition: widening.flan's own rows. Not one existing program's pure addition: widening.flan's own rows. Not one existing program's
diagnostics, output or exit status moved. diagnostics, output or exit status moved.
The thirteen test programs that import ~vendor:raylib~ were not run either,
for the same reason, and got the same treatment as examples/ below:
~check~'s diagnostics are identical on both sides, LLVM ~emit~ is
byte-identical, and the x86 difference is the prelude-line strings and
nothing else.
examples/ were *not run*. They link raylib and every one of them opens a examples/ were *not run*. They link raylib and every one of them opens a
real window on the author's desktop, so the comparison there is ~check~'s real window on the author's desktop, so the comparison there is ~check~'s
exit status and diagnostics plus a byte-diff of ~emit~ and ~emit --x86~. exit status and diagnostics plus a byte-diff of ~emit~ and ~emit --x86~.

View File

@ -1003,6 +1003,12 @@ let () =
arithmetic at u64 rather than defaulting the 1 to an i32. *) arithmetic at u64 rather than defaulting the 1 to an i32. *)
accepts "a literal still takes the other operand's type" accepts "a literal still takes the other operand's type"
"(defconst fnv u64 14695981039346656037) (defn f [] u64 (+ fnv 1))"; "(defconst fnv u64 14695981039346656037) (defn f [] u64 (+ fnv 1))";
(* The form DISCUSS.org's note named: an unannotated let of a u64 constant.
It binds a u64 and nothing about widening reaches it a let with no type
has no expectation to widen against, and the constant is what it says. *)
accepts "an unannotated let of a u64 constant still binds a u64"
"(defconst fnv u64 14695981039346656037) \
(defn f [] u64 (let [h fnv] (* h 2)))";
(* Shifts are the carve-out: the value's type decides and the count widens (* Shifts are the carve-out: the value's type decides and the count widens
to it, never the reverse, because the result's width and the poison check to it, never the reverse, because the result's width and the poison check
both belong to the value. *) both belong to the value. *)