TermiNexus
05f4adb233
fix(tpc): 符号表加载改两阶段,消除模块加载顺序依赖
a 类(编译器缺陷/机制漏豁免):签名解析要通过符号表查其它模块的类型名
(from X import * 的裸名如 posix 的 INT;跨模块类如 rawptr[Constant]),而加载器
按 os.listdir 字典序逐个「提取→解析→插入」⇒ posix 排在 stdint 之前时 INT 查不到。
旧口径静默降级 i32 掩盖了它,fail-fast 后暴露。
修法:加载拆两趟 —— ① StageModuleSymbols:提取 + 只解析/插入声明
(类/枚举/typedef/匿名类型)② CommitModuleSymbols:解析签名 + 插入函数/define +
命名空间重导出。批量加载器(Phase2Translator._build_shared_symbol_data)先收集全部
模块、跑完所有①再统一跑② ⇒ 任一模块的签名都能看到全部声明,与顺序无关。
单模块 LoadModuleSymbols 语义不变(①紧接②)。
验证(探针,posix 先 stage、stdint 后 stage 的“坏顺序”):
posix.open ret=i32 params=[i8*,i32](INT=stdint 的 typedef);read ret=i64 params=[i32,i8*,i64];
同样顺序走旧的单模块路径则 RAISE(对照组)。
2026-09-28 18:14:45 +08:00
..
2026-09-28 16:52:03 +08:00
2026-09-28 16:48:58 +08:00
2026-09-28 13:57:04 +08:00
2026-07-18 19:25:40 +08:00
2026-08-17 09:36:38 +08:00
2026-07-18 19:25:40 +08:00
2026-07-18 19:25:40 +08:00
2026-07-18 19:25:40 +08:00
2026-07-18 19:25:40 +08:00
2026-09-28 18:11:14 +08:00
2026-07-30 16:33:56 +08:00
2026-09-26 19:27:22 +08:00
2026-09-26 19:27:22 +08:00
2026-09-28 18:14:45 +08:00
2026-07-18 19:25:40 +08:00
2026-09-26 19:27:22 +08:00
2026-09-28 18:14:45 +08:00
2026-09-28 18:14:45 +08:00
2026-09-28 13:49:28 +08:00
2026-07-18 19:25:40 +08:00
2026-09-26 19:27:22 +08:00
2026-07-18 19:25:40 +08:00
2026-07-22 21:55:36 +08:00