Commit Graph
40 Commits
Author SHA1 Message Date
TermiNexus 15b416b527 fix(type): 统一注入期类归属与导入上下文记账,修占位表爆与属性标记误解析
- StubMergerStore 新增共享导入上下文记账(AppendImportedModule / AppendFromImport /
  ImportCtx / AllocImportCtx / NotePlainImport),ImportsGenMixin 与 VpiReader 共用同一份
  口径;顺带移除 add_from_import 的 256 缓冲静默截断,VpiReader 删除两份私有副本

- 注入窗口按「名字归属」判据解析(is_module_class + CurDefModuleSha1):
  _forward_declare_ptr_from_node 的 Name 分支、resolve_annotation_type 的 Name/Attribute
  分支均补齐,使同一 stub 内先声明/先引用的类产出**具名占位**而不是 Ptr(i8),并新增
  _is_tattr_marker 让 t.attr.* 属性标记不参与类型联合竞争

- VpiReader._inject_class_struct_declare:命中前向声明占位时不再早退,改为「占位 Ty
  原地写入」(对齐 ClassGenDef.fill_fwd),修 StructTable 爆表(table full, cannot
  register Translator)

- 清除全部一次性探针:[DBG-GEN](VpiReader / StructGenMixin / ClassGenDef)、
  [DBG-ATTR](ExprGenAttr)、[MODSHA1](CallGenMixin)

根因记录:vpi 注入期漏记 `import X as Y -> from_imports "Y:X"`,使 GenTypes.VarEntry.Spec
(TSpec.TypeSpec | t.CPtr)取不到模块 SHA1、退化为 i8* 并被永久冻结
(CallGenCtor.vp:897 .PtrLevel 属性访问失败)。
2026-10-02 17:29:38 +08:00
TermiNexus aa52cf157d revert(transpyv): 回滚跨模块链表 Next 改访问器(改由编译器沿继承链解析字段名)
回滚 13080f6 的 110 处访问器调用,恢复裸字段访问 `x.Next`。

理由:该批访问器是把访问移到定义模块内执行,**绕开**了"继承字段名解析",
属于规避而非修复;缺陷本体在 TPC 侧(导入侧继承展平把泛型基类的继承字段
记成 __inherited_N 占位名,名字丢失)。TPC 已按语义修正:
  · e6451a07 继承展平沿继承链取真实字段名(泛型特化回退模板名),
    展平表直接落 `[("Next", <槽位类型>), ...]`,属性访问是普通表命中;
  · 3ca46c01 顺带修掉 _get_or_create_struct 里"同名枚举成员遮蔽类定义"的 i32 出口。
因此源码侧恢复为唯一写法(裸字段访问),由编译器负责解析。

注:本 commit 只回滚访问器;13080f6 里夹带的 CallGenProp.vp 续行合并(非访问器改动)
已在工作区保留(未提交)。
2026-09-28 21:48:53 +08:00
TermiNexus 13080f646f fix(transpyv): 跨模块链表 Next 字段改用访问器(消除 __inherited_N 占位名 fail-fast)
c 源码违规:llvmlite 的 Value/ParamNode/Function/Param/GlobalVariable/PhiIncoming/
SwitchCase 的 Next 继承自泛型基类 GSListNode[T],而其泛型特化体不在任何 .vpi 中
⇒ 导入侧 class_members 只有 __inherited_N 占位名;严格属性解析(回退已移除)下
裸写 `x.Next` fail-fast。现场:CallGenCall.vp `cur_fb = cur_fb.Next` 报
"[fast-fail] 属性 Next 在类 ParamNode 中找不到(class_members=[__inherited_0, Ty])"。

按仓库既有约定(_Type.md:链表遍历用 paramnode_get_next/paramnode_set_next;
VarGenMixin/TypeSpec/StructGenMixin/VpiReader 等已如此书写)统一改为访问器:
  value_get_next/value_set_next、paramnode_get_next/paramnode_set_next、
  function_get_next、param_get_next、globalvariable_get_next、
  phiincoming_set_next、switchcase_set_next
覆盖 24 个文件共 110 处(含 CallGenProp.vp:122 的嵌套读 cur_arg_pc.Next)。

访问器在 includes 侧为定义模块内直通实现(None 守卫 + x.Next),语义等价、零行为
变化。已全量扫描 core\Gen 全 47 文件与 Stub/Phase/core/main:App 侧已无裸继承字段
访问(剩余 .Next 命中全部在注释里)。
2026-09-28 21:20:58 +08:00
TermiNexus 12bd7b7a16 fix(gen): 收敛 static 跨模块拦截为独立方法,消除类型推断污染
新增五个独立方法承载 static 检查与登记:_CheckStaticCrossModule(mod.name 取值)、_CheckStaticCallCrossModule(mod.fn 调用)、_CheckStaticFromImport(from-import)、_RegisterStaticModuleVar(模块级变量登记)、_RegisterStaticFunc(函数登记)。调用点只保留一行调用——内联新增分支会改变超大函数的类型推断,曾导致 translate_attribute 后续 match obj_ptr.Ty 报指针隐式转整数已禁止。

删除 _resolve_module_attribute_global 内与入口检查重复的 static 拦截(其两个调用点均在 _CheckStaticCrossModule 之后)。
2026-09-27 13:12:22 +08:00
TermiNexus dd56580855 feat(gen,static): static 符号禁止跨模块使用(定义侧登记 + 引用侧三处拦截)
语义 = C 的 internal linkage:static 符号(函数/变量)只在定义模块内可见,任何跨模块引用一律 fail-fast(NameError)。

- 登记表:CallGenBase 新增 StaticSha1Arr/StaticNameArr/StaticCount(PermPool 定长槽,与 CexportSha1Arr 同款)+ RegisterStaticSymbol/IsStaticSymbol(按 (符号名, 模块 SHA1) 精确配对,避免跨模块同名误判)。

- 定义侧登记:FuncGenDef 识别注解形态(-> t.CVoid | t.CStatic)与装饰器形态(@t.CStatic;裸 static def 已由解析层归一为装饰器)→ 登记函数名;TranslatorGenMixin.handle_module_level_var 识别注解形态(static x: int 已归一为 t.CStatic | int)→ 登记变量名。

- 引用侧拦截(三处,覆盖全部跨模块形态):ExprGenAttr.translate_attribute 入口统一拦截 mod.name(含 import 别名还原);CallGenMixin.translate_call 入口拦截 mod.fn(...) 调用(按 AST 形态一次覆盖 found_func/vpi/裸名兜底各分支);ImportsGenMixin.translate_import_from_names 拦截 from mod import name。

- 性能:三处检查均以 StaticCount > 0 快速短路——项目中无 static 符号时零开销(不触碰逐条线性扫描与 sha1 解析)。

- 同模块自引用(sha1 相同)与非模块基座(self.method / obj.field / Class.static_method)一律放行。
2026-09-27 12:58:51 +08:00
TermiNexus 424dbd7379 chore(gen): 加 [MODSHA1] 临时诊断定位 string.split 模块名解析失败(定位后删除)
在 translate_call 的模块限定分支加两条探针:

- [MODSHA1]:mod_ret_sha1 为 None 时打印 mod_path_ret / func_name / exact / suffix / ctrl_stdint(对照模块,必在 includes)——可区分 store 整体为空 与 store 有内容但缺该模块。

- [MODSHA1-D]:裸名兜底分支里,若 cl.func 仍是 Attribute(模块限定却解析不出模块的异常组合)则打印 mod_path_ret 与 func_name——覆盖 mod_path_ret 为 None 的情形。

同时把 mod_path_ret 的声明从 if 块内移到 if 外(与 mod_ret_sha1 一致),避免下游分支读未声明局部取到栈垃圾。

证据链:报错来自本函数 861 行(全仓唯一 fatal_if_unknown=1 的调用点),条件恒为 _resolve_module_sha1 对 string 返回 None;但 _sha1_map.txt 有 includes/string.vp、其 vpi 有 def split -> int、Phase1Main:390 是唯一写 map 处 ⇒ 静态无法解释,需运行时诊断。
2026-09-27 12:52:03 +08:00
TermiNexus cf815b17de feat(gen): volatile 构造写入落 LLVM volatile(逐字段 store + 构造三方法屏障)
值位置 volatile 前缀(a: int = volatile f() / a: S = volatile S(...))此前只在调用点无落点。LLVM 的 call 指令没有 volatile 限定符,故语义只能落在内存存取上:

- AssignGenMixin:赋值目标的结果槽按 volatile 存取(本次 store 立即带 volatile,并登记 VarEntry.IsVolatile 使后续 load/store 亦带);对已存在的 global/nonlocal/mod_glob 条目在分支前统一登记。

- CallGenCtor:_translate_struct_ctor / _translate_struct_ctor_kw / _translate_renum_construct / _apply_struct_defaults 增加 is_volatile 参数,清零、tag、默认值、逐字段 store 全部带 volatile;_translate_generic_ctor_call 直接从 cl.IsVolatile 取。

- CallGenCall._call_method_on_ptr 增加 is_volatile 参数:__new__/__before_init__/__init__ 的写入发生在被调函数内部,调用点无法逐条附加 volatile,故在调用后对该 self 指针追加一次 i8 volatile load 作为内存屏障,使构造写入不被优化器消除或跨越重排。

- CallGenMixin / CallGenDispatch:结构体、关键字、泛型、REnum 构造调用点统一透传 cl.IsVolatile。
2026-09-27 12:01:22 +08:00
TermiNexus 951b89be36 修正了部分代码的表达方式,最后可用版本,正在为 mlirlite 做准备 2026-09-23 16:09:32 +08:00
TermiNexus a5ceb3d4eb 增加 JIT REPL 2026-09-21 16:17:19 +08:00
TermiNexus 9910e05760 修复了一些错误,更改了一点语法 2026-09-18 20:00:40 +08:00
TermiNexus 9e2ccbfab7 将部分 | t.CPtr 修正为 rawptr[T] 2026-09-18 17:56:24 +08:00
TermiNexus cb0836de8a 清理了 t.CVoid 2026-09-16 16:06:48 +08:00
TermiNexus 9a191daa8d 错拼 rowptr 改为 rawptr 2026-09-16 11:42:28 +08:00
TermiNexus 7cba4cbc95 chore: 清理超长历史注释,并一并提交并行会话的代码改动
注释清理(65 文件 / 约 -2578 行 / 约 516 处):删除/压缩叙述式历史注释——多行根因叙事、工作代号段(D25/D30/N11/B5/S4/阶段E 等)、改前改后与先例叙述、逐条推导块,压成一行讲清作用信息;契约类注释(用途、参数与返回、关键约束与不变量、IR 结构说明)与被注释掉的代码一律保留

存疑 标记 6 处一字未动:StubMergerStore.vp、VpiReader.vp、VLogger.vp、AssignGenMixin.vp、CallGenLib.vp、CallGenLeafKit.vp

本次一并带入并行会话的代码改动(同批文件,按文件粒度无法拆分):fileio.File -> rowptr[fileio.File] 等

已知副作用/残留:① CallGenDispatch.vp 有 2 行非注释行的行尾被 LF->CRLF 规范化(纯字节变化,无文本改动);② core/Gen 区约 24 处压缩因并行会话整文件覆写被写回原样,尚未生效(StmtGenCifMixin/ClassGenVTable/FuncGenDef/ClassGenEnum/StructGenMixin/TypeSpec 等)

清单与复跑判据见 Debugger/comment_cleanup_summary.md(该目录不受版本控制)
2026-09-16 11:27:05 +08:00
TermiNexus a83d183abb fix(gen/call): 跨模块调用 SSA 整型实参按定义侧形参扩宽
declare 由调用点实参链建立,而 _coerce_arg_value_to_ty 对非常量(SSA)整型此前原样返回,导致 declare/call 停在调用点窄宽度(string.strncpy 第三参 i32),与定义侧(vpi 注解 n: t.CSizeT => i64)不一致,并经 .stub.ll 传播到未调用该函数的消费方模块

现按源符号性 zext/sext 扩宽(真源 ExprGenBase._zext_or_sext_val,先例 CallGenCtor._translate_t_type_cast),实参 AST/trans 下传;self_off 模块级 0、方法 1

效果: WebTest 危险级签名不一致 1 => 0
2026-09-15 23:58:40 +08:00
TermiNexus 5a59432733 fix(gen): 泛型裸名构造补齐注解上下文与关键字实参两条推断来源
- 赋值目标/返回注解上下文作为最后一级类型实参来源(s: Stack[int] = Stack()、-> Stack[int] 里 return Stack()),注解解析复用 _extract_type_args_from_slice,以 CurAssignNode/CurRetNode identity 限定直接值避免嵌套误用

- 仅关键字实参构造按 __init__ 形参名定位槽位(Box(v=42)、Pair(b=string, a=1) 乱序),泛型构造码生成不再静默丢弃 cl.keywords(此前会生成少一个实参的错误调用);形参名查无/槽位空洞 fail-fast

- 抽取共用 __init__ 形参遍历(_get_ctor_init_params),位置对齐语义保持不变
2026-09-15 21:52:41 +08:00
TermiNexus 6394ea30e2 fix(call): 泛型类裸名构造按 __init__ 签名对齐类型实参并禁止静默默认 int
- 删除按序号消费「过滤纯 int 的 hint 列表」的压缩逻辑(整型实参被剔除后 hint 下标与形参序号错位,Pair(1,字符串) 被误判为 Pair<str,str>),改为取 __init__ 中注解为该类型形参的形参位次所对应的位置实参推断(Vector[T].__init__(self,pool,capacity,_hint:T) => T 对齐第 3 个实参)

- _infer_generic_ctor_type_arg 对 Name/Attribute 实参改取真实类型(变量注解类名/字段注解类名),取不到即 fail-fast,不再回退 int
2026-09-15 21:33:54 +08:00
TermiNexus eef84657a1 fix(tpv): 修正 REnum 表按名查找与 match 分派,恢复 str() 指针强转
str() 对整数(sizet/i64)走 snprintf 十进制格式化(Python 语义),不是 i8* 强转;用它读 sizet|t.CPtr 联合表元素再 strcmp 永不相等 => _is_renum_class_name 恒 0、变体名查不到(__types.vp:407 bits / :159 Void 根因)。IR 实证 output/a8891afb66d3eda4.text.ll L5551-5558。

- ClassGenEnum: RenumClassNames/RenumVariantNames 读侧统一改 (str)(t.CVoid(x, t.CPtr));新增 _is_renum_by_entry 与 RenumTableDump;REnum 注册静默早退改 fail-fast

- MatchGenMixin/CallGenMixin: match 分派 2a/2b 与变体构造入口并上 by_entry 判据

- TypeGenResolve: 泛型下标 Phase B 解析不出特化时 fail-fast

- CallGenProp: 泛型特化名末段按括号外点切分

- CompilerFactory/ClassGenBase: REnum 注册表改挂编译期单例

- ClassGenDef: CEnum/REnum 分派歧义 fail-fast
2026-09-12 23:14:23 +08:00
TermiNexus ea2abba574 refactor(tpv): 删除 _deps_pending 置位面与 Phase A pending 多遍收敛机制
69 个工程成功编译且 _phaseA_pending.log 恒 0 字节,证实 14 个置位点全部零命中。删除 14 个 _MarkDepsPending 调用点(原「依赖未就绪」分支保留默认类型或原报错路径);删除 _MarkDepsPending 与 _AppendPhaseAPending 及 _phaseA_pending.log 读写;删除 Phase A 出口「pending 则不写盘、回滚 MethodsEmitted、continue」整段;删除 _deps_pending 与 _pf_dbg_pend_flagged 字段及全部读取分支;清理遗留探针 [PF-DBG] 与 [METHDBG]。16 files changed, +37 / -558
2026-09-12 19:24:52 +08:00
TermiNexus b206e7d9c1 fix(tpv): 泛型类型实参禁止静默默认 int(D25 fail-fast 两处)
- CallGenMixin: 裸名泛型构造推断不出类型实参时不再默认 int,改 fatal(与 _infer_generic_ctor_type_arg 注释「绝不默认 int」对齐)

- CallGenCall._translate_method_call: 泛型模板基类(剥 sha1 前缀后不含 '[')上的非 list 内建方法调用改 fatal —— 此前静默按默认 list[int] 特化,元素按 i32 处理 → 方法返回 i32 → inttoptr 截断指针 → 读垃圾 AST 节点(D21/D25 崩溃族)

- list 内建方法仍走内联路径(运行时 __elem_size__),不受影响
2026-09-12 14:52:23 +08:00
TermiNexus 967095df5b refactor(tpv): _deps_pending 置位收敛到唯一入口 _MarkDepsPending(S4 第一步)
- CallGenBase 新增 _MarkDepsPending(trans,kind,cls,method,dep,extra):一处实现「置标志 + 统一格式 [DEPDBG] + 持久化 _phaseA_pending.log」三连

- 14 处置位点(D7-1 清单:attr_read/attr_write/method_ret/mro_ret/mro_anc/special_ret/prop_ret/dispatch_ret/dispatch_sp/func_ret/func_mangled/global_stub/class_parent/class_field_ty)全部改经该入口

- 行为不变;DEPDBG 行格式统一为 pending(<kind>): mod=.. cls=.. method=.. dep=.. extra=..,供下一步按 kind 统计命中数、删除死点
2026-09-12 13:53:20 +08:00
TermiNexus 7e68e76ec4 refactor(tpv): SHA1 前缀判定收敛到 GenApi 唯一真源(C10/D3 收尾)
- CallGenCall: list 泛型前缀剥离(719) 与类型名提 sha1(907/1190) 改 GenApi.sha1_prefix_len,不再盲取前 16 字节当 sha1

- CallGenCBuiltin._asm_name_is_mangled / CallGenLib._is_sha1_mangled_call: 改真源(去大写 A-F、去扫描任意位置 '.')

- CallGenFd: 类型名提 sha1 加前缀格式校验(裸名不再误取前 16 字节)

- CallGenMixin: CExport declare 前缀判定改真源

- StructGenMixin / TypeGenResolve: 类型名、模块段判定改真源;StructGenMixin 补漏掉的 GenApi import(L596/L943 引用原会 fail-fast)
2026-09-12 12:59:01 +08:00
TermiNexus 82eea2719f refactor(tpv): rowptr[T] 迁移 + D 表定长缓冲改精确分配 + SHA1 前缀判定收敛(D1/D3/D4/D5/D6/D7/C10) 2026-09-12 11:09:35 +08:00
TermiNexus 1039969f69 refactor(tpv): CPtr 标记语义定为注解基名精确比较(第 5 处收敛)
CallGenMixin 闭包 vs 函数指针分派:原 strstr(注解名, CPtr) 子串匹配改为 SpecTypeNameBaseIs(fp_annot, CPtr)。

语义:CPtr 标记 = 注解基名精确等于 CPtr(裸 t.CPtr / from t import CPtr)。不能改用 Spec 判定——t.Callable[[A], R] 解析结果同样是 Ptr(i8)(TypeGenResolve.vp:2525-2531),与 t.CPtr 完全同型,类型层无区分度,故标记只能由注解名承载,不新增 Spec 字段。副作用:含 CPtr 子串的类名(如 CPtrHolder)不再被误判为闭包指针。已知局限(与改造前一致):Foo | t.CPtr 的 SourceName 只留 Foo,该形态判为非标记。
2026-09-12 10:12:01 +08:00
TermiNexus 9e461d21cb refactor(tpv): 删除 AnnotClassName 字段,注解类名统一承载于 Spec.SourceName
- GenTypes 删 VarEntry.AnnotClassName / FieldEntry.AnnotClassName
- set_var_annot_class_name / add_field 改为写入 Spec(Spec 为 None 时建 TS_UNKNOWN 承载,
  不表态具体类型,等价原 Spec 缺失);删 1b 的 AnnotClassName 专属深拷贝
- var_annot_class_name / get_field_annot_class_name 去旧字段回退分支
- 剩余 7 处直读(StmtGenCifMixin list/dict 5 处、CallGenMixin CPtr 2 处)改走封装
2026-09-11 22:06:00 +08:00
TermiNexus b8470c1cae fix(tpv): 拓宽方向统一为单一真源,并修 TypeStr 变参与 should_zext_widen 缺参
三项独立缺陷(均来自类型系统盘点 _Type.md D7):

1) should_zext_widen 签名缺 trans 形参,函数体内的 trans 退化为隐式全局(恒
   None),而 translate_binop 两处调用早已在传第 5 实参(被静默丢弃)⇒ 注释所
   述「源无符号 → zext」补救从未生效:Name/Subscript 形态的无符号源(uint16/
   uint32 变量、数组元素)在比较/二元路径恒被 sext 扩展(ide.vp/timer.vp 根因)。
   修:should_zext_widen 补 trans 形参并明确为拓宽方向的单一真源;
   translate_compare 两处补传 trans;ExprGenBase._zext_or_sext_val 改为委托
   should_zext_widen(wide_val=None 使「宽侧常量」启发式自然失效)。

2) _translate_t_type_cast 原以「目标类型名符号性」决策整数拓宽,且 target_name
   未知时默认 zext,与 coerce_to_type / should_zext_widen 的默认 sext 极性相反。
   修:统一由源的符号性决定(与 coerce 同源),并删除已无使用点的 target_name
   形参(1 处签名 + 7 处调用点)。

3) TypeStr 生成(FuncEntry.TypeStr 的唯一生产者)与其现算现用副本
   (ClassGenVTable._format_func_type_str)都未打印变参后缀 ...,而 FuncGenDef
   对 *args 会设 IsVarArg=1,且继承方法强制走 TypeStr 回退 ⇒ vtable 中的函数
   指针类型与真实签名不符。修:按 llvmlite IR 打印规则补齐(有参 ", ...",
   无参 "...")。
2026-09-11 19:57:18 +08:00
TermiNexus cfb92e5da5 初步清理 t. 类型异味 2026-09-11 18:36:32 +08:00
TermiNexus d3690f9143 fix(tpv): 依赖注入期默认参数按定义模块 SHA1 登记,消除跨模块同名函数串味
N17:VpiReader 注入函数/方法 declare 时显式传入 src_sha1(被依赖模块自身
sha1),add_func_to_table 透传至 _register_global_defaults;调用点默认值查找
改用 find_func_entry_in_table_owned 按 "{owner_sha1}." 前缀限定。修复
usb.uhci.init 误命中 mm.init 的 5 形参/2 默认值而凭空补 2 个 i32 0 的 ABI
错位(IR 实证:call @...init(i16 %4, i32 0, i32 0) → (i16 %4))。

同轮并入的其他编译器侧改动:
- N11 Converter.vp:无 -> 但带 @c.CReturn 时合成 tuple 返回注解,与 define 对齐
- N12 VpiReader.vp:union 指针(T | t.CPtr)stub 解析与定义侧收敛到 i8*
- N14 ExprGenFstr.vp:f-string 32 位整型不再写 l 修饰符
- N2 撤回 ExprGenOps.vp:删除在 _node_type_unsigned 热点查/填 vpi 缓存的
  _call_ret_annot_unsigned(有副作用,触发 fat32_diskio.vp match 路径崩溃)
2026-09-11 17:39:21 +08:00
TermiNexus e66d9e3adb fix(tpv): 修 N 系列 codegen 缺陷(常量位宽/无符号判定/实参扩宽/结构体取址)
- N1 ExprGenConst/CallGenDispatch: CONST_INT 按 target_ty 位宽物化, 修 uint64(0xFFFFFFFFFFFFFFFF) 被降 i32 再 zext

- N2 ExprGenOps: 新增 _call_ret_annot_unsigned 查被调方 vpi 返回注解, 修 uint32 返回值 >> 生成 ashr

- N3 TypeGenResolve: 联合注解提取跳过存储类限定宏, 修模块级全局 uint32 比较生成 sge/slt

- N5 CallGenLib: 常量实参按形参扩宽 + _coerce_args_to_def_params 支持 3 段方法调用

- N17 CallGenLeafKit/CallGenMixin: 默认值表按定义模块 sha1 限定 + 收紧交叉校验守卫

- N18 ExprGenBase/CallGenLib: rvalue 结构体实参落栈取址
2026-09-11 15:50:09 +08:00
TermiNexus e20a6f3d11 fix(tpv): 修 VKernel 暴露的 codegen 缺陷(浮点 CDefine/__sizeof__ packed/CONST_STR/alloca/无符号/ABI)
- 浮点 t.CDefine 初值序列化与源恢复(gfx PI 编成 0.0)

- __sizeof__ 按 packed 计算(cpu _tss memset 越界写 4B)

- 数组初始化器支持 CONST_STR 单字符;模块级别名不再产出 global i32 0 假全局

- 临时缓冲/构造临时量 alloca 提升至入口块(B6 未覆盖路径)

- 无符号判定补 CSizeT/小写别名/结构体字段 + udiv/urem + range 位宽与符号 + zext 扩展

- 跨模块 declare 形参按 vpi 定义侧收敛(修 _vpi_method_param_annot 拒绝 cls_name=None 导致 coerce 恒失效)
2026-09-11 14:26:54 +08:00
TermiNexus ab814f55e6 fix(tpv-call): 裸名调用同模块函数优先(owner_sha1),修复跨模块同名 stub 抢占致 _advance 误绑 2026-09-08 20:47:54 +08:00
TermiNexus bcedb15b23 fix(generic,rowptr): SlotsBugTest 编译修复——T.__sizeof__ 特化与 rowptr[sha1.Class] 注解解析
1) CallGenDispatch __sizeof__:指针包装判断(X|t.CPtr 联合与 rowptr[X])移到 dot-strip 之前。类型实参规范化名如 rowptr[7565e081d88517ac.AST] 内嵌 '.',strrchr('.') 会把括号内 .AST 剥成 'AST]',rowptr[ 前缀判断失配 → 落回把接收者 Name(T) 当实例翻译 → NameError 'T'(list[rowptr[AST]] 特化 list.__init__ 根因)。2) TypeGenResolve:a) 注解 Name 分支支持 '{16hex}.Class'(_norm_type_arg_name 产物,模块段即 SHA1)经 find_struct_by_module 直解;b) _parse_type_string 下标内层以数字开头(sha1 前缀类名)且单实参无嵌套/无逗号时手工拆 base+slice 递归解析——完整 lexer 会把 7565e081d88517ac 当数值误扫 → slice 变 Constant 占位 → 特化方法 append 参数 'item' 类型解析失败。3) CallGenMixin:泛型类模板缺失分支补内建下标 cast:(rowptr[list[int]])(x)/(t.CPtr[T])(x)/(t.CArray[i8,N])(x) 按 resolve_annotation_type 出类型后单参 _translate_t_type_cast,替代误报 '泛型类 rowptr 未找到模板'(ast/base.vp L392 根因)。
2026-09-07 19:36:57 +08:00
TermiNexus 6b368b46a7 feat(tpv): App 与 TPVAppBK 新代版本对齐(rowptr 配套实现全套)
把 TransPyV/App 覆盖为 TPVAppBK 内容(39 文件):6 参注册式 _BuildReachableSha1Set 全套(StubMergerBuild/Store/Collect/__init__/IncludesScanner/Phase1Scan 等)、CallGen 与 TypeGenResolve 等新代实现。配套根 includes 为 rowptr 工作区(另有 includes_rowptr_bk 备份)。
2026-09-05 14:13:03 +08:00
TermiNexus 75db09e18a fix(call): 跨模块返回类型解析兜底修复——star import 候选验证失败时先验证原模块(stdlib.malloc extern def 不再误归 stdint);包模块 vpi 未命中时经 reexport 定位定义模块查返回注解(fltk.Fl_Input_value 返回 str 不再退化 i32) 2026-09-01 21:23:12 +08:00
TermiNexus c7c37e1007 fix(call): star import 再导出改为多候选验证定义模块
- _lookup_reexport_from_vpi:from X import * 累积全部候选(空格分隔),不遇首个星行即返回

- CallGenMixin:按候选逐个验证 is_cexport_func/_is_state_func_from_vpi 确认定义模块(Fl_init_all→_cfl)

- 修复 fltk/__init__ 依次 from _types/_enums/_cfl import * 时定位到首个模块(_types)的误判
2026-09-01 20:39:19 +08:00
TermiNexus 58d61badcb fix(tpv): 跨模块调用返回类型解析支持 import 别名(GenApi.translate_printf_call)
模块限定调用 GenApi.translate_printf_call 的 mod_ret_sha1 用 LookupSha1ByModName(别名) 查不到 → None → 误走裸名外部函数路径 fatal_if_unknown=1 fail-fast 误杀。改经 _resolve_module_sha1(LookupModNameByAlias 别名还原 → 精确/后缀)解析,与 L620-629 模块归属校验的既有模式一致。
2026-08-29 10:14:32 +08:00
TermiNexus 4748915472 fix(tpv): 外部函数返回类型不可收敛时 fail-fast,豁免 from-import 与多层模块限定调用
- _infer_external_func_ret_ty 白名单未命中改为 fatal_error(Python 风格
  traceback),移除默认 i32 的 WARN 输出
- 裸名调用 fail-fast 前查 from_imports 可解析性:from-import 函数走
  mangled 精确解析收敛(SSAValue 场景),纯外部 C 函数才 fail-fast
- mod_ret_sha1 解析支持多层模块路径(w32.win32file.CreatePipe 场景),
  避免嵌套模块限定调用被误判为裸名外部函数
- 移除 FuncGenBase/StructGenMixin 遗留调试输出
2026-08-29 05:46:25 +08:00
TermiNexus 85e7011b6c refactor(tpv): INTPTR/UINTPTR 去硬编码,依赖 stdint.vp CTypedef 声明
- map_t_type 删除 INTPTR/UINTPTR = Ptr(i32) 硬编码(与 stdint.vp L10/L14 声明重复)

- INTPTR = t.CInt|t.CPtr、UINTPTR = UINT|t.CPtr 由 CTypedef 动态查表解析(L1377 先于 map_t_type 兜底)

- stdint.vp 成为单一事实源;语义不变(INTPTR 是 int* 历史命名,非 C 标准 intptr_t 整数)
2026-08-28 15:33:45 +08:00
TermiNexus 24ae2dc966 refactor(tpv): 删除 Handles 目录,核心逻辑合并进 Gen
- 新建 Gen/Translator.vp:Translator 类 + Mixin + 常量 + _mbuddy 自 HandlesTranslator 迁入(删 7 个委托壳与 _g_gen)

- GenApi 下沉 7 个 global/nonlocal 管理委托(add/is_global_name、add/is_nonlocal_name、get_nonlocal_type/index、clear_scope_names)+ update_global_func_typestr

- CallGenLeafKit 并入 ExprCallHandle 类,NewExprCallHandle 改本地引用

- 删除 Handles/HandlesExpr/ExprCallTable/HandlesBase(60+ 委托零消费者/纯委托壳)与 Handles 目录整体

- 全 App 56 文件 import 改指 lib.core.Gen.*,清理死 import,委托调用改 GenApi,main/BuildPipeline _g_gen 注入删除
2026-08-28 14:29:25 +08:00
TermiNexus d99b6268de refactor(tpv): Gen 目录按前缀分组迁移子目录 + REnum.kind() 编译期转 __tag
- Gen/*.vp 按前缀分组迁入 Call/Class/Expr/Func/Stmt/Type 子目录,import 同步更新(BuildPipeline/Generator/StructGenMixin 等)

- CallGenDispatch: REnum.kind() 前置拦截 → bitcast i32* + load(读 __tag),杜绝方法查找兜底误绑 AST.kind(this 偏移语义错误)

- 留根:Assign/Async/Base/Imports/Match/Struct/Translator/Var 单文件前缀 + GenApi/GenTypes/Generator/__init__
2026-08-28 14:16:03 +08:00