The two declares inherit the sin/cos caveat in full and not the sqrt one: IEEE-754 requires nothing of atan2f or powf either, so they are the third and fourth places in the prelude where native and wasm32 may differ in the last bit. Every case in math2.flan is therefore a value that is exact in binary -- a quadrant boundary, a power of two, a perfect square -- rather than one that would pin a particular libm and then fail on wasi. clamp is the interesting one. The prelude already argued against wrapping (min hi (max lo x)) in a function, and that argument gets stronger rather than weaker: min and max are builtins at every numeric type and there are no generics, so a clamp *function* is one copy per type. A macro is type-agnostic for free and emits nothing at all. The test calls the same three words at i32, i64, u8 and f32 to show it, and counts evaluations to show that each argument appears once -- the shape that names x twice reads identically and calls it twice. lo above hi answers hi and is not checked. A macro has no error facility, so the only diagnostic available would be a run-time one, in the construct whose whole point is that it costs nothing at run time.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%