vendor/raylib has no C in it any more: shim.c is deleted and its 84 wrappers are emitted from declare-c, which names the library's function in the library's own signature. The reason the shim exists is unchanged - a small struct's calling convention is a per-target classification and clang reproduces it for free - but writing it by hand has stopped. declare-c is a second form rather than a change to declare, because the two make opposite claims about the same shape: (declare start-raw [path string] ...) says the symbol takes ptr+len, and (declare-c init-window [... title string] ...) says it takes a NUL-terminated char*. No structural rule separates them, so the author says which. The merge needed two fixes that neither lane could have found alone. Load's uses-walker matches decl_kind exhaustively and did not know DeclareC, so the reachability work and the generator did not compile together. And the generated C is now emitted in parts keyed by the wrapper's own C symbol, not as one translation unit. Reach.link drops the bindings nothing reachable calls; a single TU holding every wrapper referenced every raylib symbol, so sand-headless - which deliberately links no libraylib, and is the reason Reach exists - failed at the link with undefined references to GetTime and its neighbours. The first attempt keyed the parts by Flan name and broke the other way, dropping a wrapper that was called: the flattened declaration is named foo-c when a Flan wrapper is generated over it and foo when none is needed, so the Flan name is not one thing. The wrapper's C symbol is what the declaration binds in both branches. Worth recording how close that came to passing: the acceptance suite died with an exception rather than printing FAIL, so a grep for failures counted zero and the suite looked green. Only the count of reporting suites - ten where there had been eleven - showed it.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%