diff --git a/docs/struct-map.md b/docs/struct-map.md index 717c5ed784..b1884ad0ef 100644 --- a/docs/struct-map.md +++ b/docs/struct-map.md @@ -1,6 +1,6 @@ # The struct map — the types the fleet's cast sites need (Phase 37 T1) -> **Generated by `tools/type_census.py` at `7a54682a25` (2026-09-30T22:44:05Z); never typed (R75).** Every raw pointer-cast dereference in `src/` was assigned to a base (a parameter, a local, a global by value or by address, an absolute address) and the bases were clustered by EVIDENCE only — the same global symbol, an argument passed to a callee's parameter, an assignment or return, a pointer field read, a shared body's fleet-wide identity — never by a similar offset signature. Each cluster is one type the tree needs. Names are placeholders (`Unkstruct_`: the lowest global instance's address, else the lowest member function's); fields are placeholders (`unk`) until Phase 38 cites evidence. +> **Generated by `tools/type_census.py` at `594ea80c8d` (2026-09-30T23:11:17Z); never typed (R75).** Every raw pointer-cast dereference in `src/` was assigned to a base (a parameter, a local, a global by value or by address, an absolute address) and the bases were clustered by EVIDENCE only — the same global symbol, an argument passed to a callee's parameter, an assignment or return, a pointer field read, a shared body's fleet-wide identity — never by a similar offset signature. Each cluster is one type the tree needs. Names are placeholders (`Unkstruct_`: the lowest global instance's address, else the lowest member function's); fields are placeholders (`unk`) until Phase 38 cites evidence. **19124 types explain 498868 of 502988 dereference sites (99.2 %); 4120 sites have a base the census could not classify; 857 types carry a width conflict.** Merges by evidence: param 38876, assign 16781, arg 10825, field 9896, ret-of 4335, return 1524, assign& 1184, arg& 270. diff --git a/docs/struct-twins.md b/docs/struct-twins.md index 7a3c616f5c..e4ef97c3eb 100644 --- a/docs/struct-twins.md +++ b/docs/struct-twins.md @@ -481,15 +481,6 @@ cause: 6 names (12 B, all members placeholders) bound to 11 distinct objects, no - `Elm12`: 1 obj — 0x80064D49 - `Rsc12`: 1 obj — 0x80064D4A -### 6ef8724a7464 -names: F20T, Obj20_80178D40, S801593E4, Sub_80155800_80155800, Sub_8015CD20 -cause: 5 names (20 B, all members placeholders); 3 bound to no object (UNBOUND), used only by: type Actor_80178D40 (0x80126B58, ov_MAIN_012/0x80178D40:Cmd_80178D40, ov_MAIN_012/0x80178D40:arg0 …), type Ent_80155800_80155800 (shared/ov/0x80155800:arg0), type P10 (0x80126B58, shared/ov/0x80144B9C:p10); the other 2 bound to 3 distinct objects, none bound to two names: ov_MAIN_012/0x8015CD20:sp, ov_SC07_010/0x80181204:v1, shared/ov/0x801593E4:v1; full list: tools/struct_twins.py --show 6ef8724a7464 -- `F20T`: 0 obj — used by type P10 (0x80126B58, shared/ov/0x80144B9C:p10) -- `Obj20_80178D40`: 0 obj — used by type Actor_80178D40 (0x80126B58, ov_MAIN_012/0x80178D40:Cmd_80178D40, ov_MAIN_012/0x80178D40:arg0 …) -- `S801593E4`: 2 obj — ov_SC07_010/0x80181204:v1, shared/ov/0x801593E4:v1 -- `Sub_80155800_80155800`: 0 obj — used by type Ent_80155800_80155800 (shared/ov/0x80155800:arg0) -- `Sub_8015CD20`: 1 obj — ov_MAIN_012/0x8015CD20:sp - ### 313fe9a920e0 names: A098Rec, Struct800D2E20, Struct800D2E6C, Struct800D3104 cause: 4 names (26 B, all members placeholders); 1 bound to no object (UNBOUND), used only by: type A098Ctx (0x8003A098(arg0)); the other 3 bound to 3 distinct objects, none bound to two names: 0x800D2E20(arg0), 0x800D2E6C(arg0), 0x800D3104(arg0); full list: tools/struct_twins.py --show 313fe9a920e0 @@ -498,6 +489,14 @@ cause: 4 names (26 B, all members placeholders); 1 bound to no object (UNBOUND), - `Struct800D2E6C`: 1 obj — 0x800D2E6C(arg0) - `Struct800D3104`: 1 obj — 0x800D3104(arg0) +### 6ef8724a7464 +names: Obj20_80178D40, S801593E4, Sub_80155800_80155800, Sub_8015CD20 +cause: 4 names (20 B, all members placeholders); 2 bound to no object (UNBOUND), used only by: type Actor_80178D40 (0x80126B58, ov_MAIN_012/0x80178D40:Cmd_80178D40, ov_MAIN_012/0x80178D40:arg0 …), type Ent_80155800_80155800 (shared/ov/0x80155800:arg0); the other 2 bound to 3 distinct objects, none bound to two names: ov_MAIN_012/0x8015CD20:sp, ov_SC07_010/0x80181204:v1, shared/ov/0x801593E4:v1; full list: tools/struct_twins.py --show 6ef8724a7464 +- `Obj20_80178D40`: 0 obj — used by type Actor_80178D40 (0x80126B58, ov_MAIN_012/0x80178D40:Cmd_80178D40, ov_MAIN_012/0x80178D40:arg0 …), type F20T +- `S801593E4`: 2 obj — ov_SC07_010/0x80181204:v1, shared/ov/0x801593E4:v1 +- `Sub_80155800_80155800`: 0 obj — used by type Ent_80155800_80155800 (shared/ov/0x80155800:arg0) +- `Sub_8015CD20`: 1 obj — ov_MAIN_012/0x8015CD20:sp + ### 9865e09a793d names: Blk3_8017D730, Blk3_801E40A8, Blk3_801E95E8, Blk3_801EF448 cause: 4 names (3 B, all members placeholders) bound to 8 distinct objects, none bound to two names: 0x80183F30, 0x801E26C0, 0x801E7C00, 0x801EDA60, md_SC03_135/0x801E40A8:arr, md_SC04_027/0x801E95E8:arr, md_SC05_026/0x801EF448:arr, ov_MAIN_012/0x8017D730:arr; full list: tools/struct_twins.py --show 9865e09a793d @@ -673,12 +672,6 @@ cause: 2 names (56 B, all members placeholders) bound to 4 distinct objects, non - `PRIM_8018FE20`: 2 obj — ov_SC04_011/0x8018FE20:pp, ov_SC04_011/0x8018FE20:prim - `Prim_8017DAC4`: 2 obj — shared/ov/0x8017DAC4:prim, shared/ov/0x8017DAC4:q -### 9dec8574d64e -names: Actor4C, actor4c -cause: 2 names (428 B, all members placeholders); 1 bound to no object (UNBOUND), used only by: type Actor4C (0x80126748, 0x80126848, shared/ov/0x8015444C:arg0 …); the other 1 bound to 5 distinct objects, none bound to two names: 0x80126748, 0x80126848, shared/ov/0x8015444C:arg0, shared/ov/0x8015444C:op, shared/ov/0x8015444C:p; full list: tools/struct_twins.py --show 9dec8574d64e -- `Actor4C`: 5 obj — 0x80126748, 0x80126848, shared/ov/0x8015444C:arg0, shared/ov/0x8015444C:op, shared/ov/0x8015444C:p -- `actor4c`: 0 obj — used by type Actor4C (0x80126748, 0x80126848, shared/ov/0x8015444C:arg0 …) - ### a3d1be6495e4 names: Rec027, Rec_8017C738 cause: 2 names (12 B, all members placeholders); 1 bound to no object (UNBOUND), used only by: type Blk027 (0x801D3148, 0x801D9F40, ov_SC02_027/0x8017BFEC:dst …); the other 1 bound to 4 distinct objects, none bound to two names: 0x801D3148, ov_SC02_027/0x8017C738:a0, ov_SC02_027/0x8017C738:p, ov_SC02_027/0x8017C738:q; full list: tools/struct_twins.py --show a3d1be6495e4