Convert dScMgTrampoline2_c's last four bodies to real members - #2115
Conversation
The 79-body batch left these four behind. Nothing was wrong with them -- they simply were not in the applied set -- and their siblings on dScMgTrampoline_c are already real members, so the class was split across two spellings. OnYoshiTryEat(int) slot 18 .cpp already, definition rewritten OnKicked() slot 24 .c -> .cpp OnPushed() slot 23 .c -> .cpp Virtual88(int,int,int,int) slot 34 .c -> .cpp OnYoshiTryEat's body took no arguments beyond `this`; the class declares `void OnYoshiTryEat(int)`, measured from the ROM's vtables during the slots-18-35 campaign, so the header wins and the unread parameter is now spelled. It costs no instruction, which is exactly why the body could disagree for so long without anything noticing. Three delinks keys repointed in config/arm9/overlays/ov006/delinks.txt. Missing that step does not fail the compile -- the function falls back to ROM bytes and only layout-check notices. Three file-scope declaration runs needed extern "C" wrapping. decl_common.h is already guarded with `#ifdef __cplusplus`, so only the file-local ones were exposed: data_020a0dbc, data_0209d45c, data_ov006_02142f78, and Virtual88's five function declarations. VERIFIED: python tools/rombuild.py -j 16 --no-rom 11,088 / 11,088 functions reproducing, 0 mismatching 106/106 modules exact, 100.000000% of compared bytes Nine static gates green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QhhAeJwXBnfPp7B5DNjCwh
✅ PR validation — PassedCommitted merge introduces no reconstruction or attribution regression. Full merge validation
Byte-verified means the range carries Per-file link-check detailAll 4 changed file(s) compile to the ROM byte-for-byte with correct relocation targets.
The private worker commits a test merge, builds the stock ROM profile, compares every executable module, measures matched and source-built code, checks contributor lineage, and verifies affected relocations. The mod profile is opt-in and is not part of this merge gate. |
Tail of the 79-body batch in #2114. These four were not refused by the converter — they simply were not in the applied set, which left
dScMgTrampoline2_csplit across two spellings while its siblingdScMgTrampoline_cwas fully converted.OnYoshiTryEat(int).cpp; definition rewrittenOnKicked().c→.cppOnPushed().c→.cppVirtual88(int,int,int,int).c→.cppOnYoshiTryEat's body took no argument beyondthis. The class declaresvoid OnYoshiTryEat(int)— measured from the ROM's vtables during the slots-18-35 campaign — so the header wins and the unread parameter is now spelled. It costs no instruction, which is why the body could disagree indefinitely without anything noticing.Three
delinks.txtkeys repointed.decl_common.his already#ifdef __cplusplus-guarded, so only the file-local declarations neededextern "C"wrapping:data_020a0dbc,data_0209d45c,data_ov006_02142f78, andVirtual88's five function declarations.Verified:
rombuild.py -j 16 --no-rom→ 11,088/11,088 reproducing, 0 mismatching, 106/106 exact, 100.000000%. Nine static gates green. Re-run after line-ending normalization, not before.Stacked on #2114.
attribution-overrideper the standing instruction.