Files
BFM-decomp/docs/readability.md
T

4.0 KiB

Readability of the matched C — the Gen3 series

Generated by tools/readability_progress.py --snapshot; never typed (R75). Companion to docs/levers.md, which counts the compiler-forcing levers. This one counts the two things that are wrong with the source even where no lever remains: call declarations that are FALSE, and memory read through raw pointer casts where the original had a struct. From Phase 37 the row carries the type census's columns (tools/type_census.py): all four dereference forms, the typed cast-member intermediate, the definitions and the map.

date label commit lying declarations of which () of which (void) in a pinned body raw cast derefs (one form, raw text) struct member reads raw derefs, four forms typed cast-member struct defs (canonical / in .c) layouts duplicate classes / names map types (% sites) K&R sites (marked, apart) cross-binary (apart)
2026-09-10 P36 S102 — after the 16,759 free declaration repairs 51028a78d 94001 86701 7300 461 414148 173286 — — — — — — — —
2026-09-11 P36 close 7a7f78e25 98648 91357 7291 33 411850 177902 — — — — — — — —
2026-09-11 P37 T1 — the type census (four forms, definitions, the map) 23fc5d215 98648 91357 7291 33 411850 177902 503016 36681 7261 (1179 / 5995) 525 206 / 2789 18760 (99.2 %) — —
2026-09-12 P37 T2 — the census after the audit's parser fixes (attributes, dead guards) da26c05d6 98648 91357 7291 33 411850 177902 503016 36681 7255 (1179 / 5989) 527 206 / 2823 18760 (99.2 %) — —
2026-09-12 t4 274223396 8830 2997 5833 13 411848 177902 503013 36681 7255 (1179 / 5989) 527 206 / 2823 18741 (99.2 %) 5002 —
2026-09-12 t4-close bd7d32ec2 1796 1373 423 1 411820 177902 502985 36681 7255 (1179 / 5989) 527 206 / 2823 18213 (99.2 %) 5262 418
2026-09-30 P38 close c82a24899 229 216 13 0 411816 176269 502983 36853 1650 (1021 / 600) 523 53 / 496 19122 (99.2 %) 5293 418
2026-10-02 P3.39 T5: forms I/M closed 240775039 229 216 13 0 260306 320402 336219 173103 1650 (1021 / 600) 523 53 / 496 17965 (98.8 %) 5293 418
2026-10-02 P3.39 T11: chart catch-up e7203a358 229 216 13 0 260306 320402 336219 173103 1650 (1021 / 600) 523 53 / 496 17965 (98.8 %) 5293 418
2026-10-02 P3.39 T6: lying declarations ledgered (229 -> 11 ledgered) 9aa588736 11 2 9 0 260306 320402 336219 173103 1650 (1021 / 600) 523 53 / 496 17830 (98.8 %) 5293 418
2026-10-02 P3.39 T7.1: GTE to one spelling (direct GTE 492 -> 0, per-TU gte defs 150 -> 0) 72e4c48c8 11 2 9 0 260306 320402 336219 173103 1650 (1021 / 600) 523 53 / 496 17878 (98.8 %) 5293 418
2026-10-02 P3.39 T8: lever residue TSV (2433 rows, reading A) 21f3aee1b 11 2 9 0 260312 320402 336225 173103 1650 (1021 / 600) 523 53 / 496 17677 (98.8 %) 5293 418
2026-10-02 P3.39 close: cast campaign, reading A 3a9377c92 11 2 9 0 260312 320402 336225 173103 1650 (1021 / 600) 523 53 / 496 17968 (98.8 %) 5293 418

How to read it. A lying declaration is a call site whose in-scope declaration names fewer parameters than the callee's own definition. It is not a style problem: on this processor an argument travels in a register, so a dropped argument removes an instruction, and Phase 36 found register pins inserted to fake exactly that instruction. Raw cast derefs is the struct debt — a struct cannot be recovered from the binary, only inferred from consistent base+offset+width evidence, so this figure falls as that work lands.