TermiNexus
bc500d060f
feat(vipeye-internal): 放行 virtual class 方法槽位赋值(vtable)
ViperOS devfs.vp 的 `serial0_file.open = serial0_open` 原先误报
「无法为类"devfs_file"的属性"open"赋值 / 参数名称不匹配 /
额外参数 "flags"」。
根因:devfs_file 是 virtual class,open/close/read/write/ioctl 是虚方法
(vtable 槽)。该赋值写的是 vtable 槽;编译器只把 RHS 函数 bitcast i8*
后 store,不校验签名与 self。而 LSP 走普通成员赋值路径,比较的是
**绑定方法类型**(self 已剥掉),于是 RHS 显式写的 self: rawptr 成了多余参数。
修法:typeEvaluator 的 usage.method === 'set' 分支里,assignType 之前加
isViperVtableMethodSlotAssignment 命中即视为兼容、跳过报错与收窄。判据:
- 类是 virtual class(ClassNode.d.viperClassModifier === 'virtual'
或 @t.CVTable 装饰器);注意传入的 classType 是**实例**形态,必须先转
可实例化形态(第一版没生效的原因)
- 成员在类里声明为方法(FunctionType)
- RHS 的 self 为泛指针(rawptr / t.CPtr / void*)或该类本身/父类的指针
- 其余非变参参数逐个 name + isTypeSame 相同,返回类型 isTypeSame 相同
(*args / **kwargs 不参与比较)
未放行:非 virtual class、self 非指针、参数名/类型/个数不符、返回类型不符。
- 新增 viperVtableMethodAssign.test.ts(3 用例)
- .gitignore:新增 3 个 __viper_vtable_assign_* 产物目录
- CHANGELOG:1.1.426 追加 1 条
2026-09-28 15:35:47 +08:00
..
2026-09-27 12:49:25 +08:00
2026-09-27 12:50:02 +08:00
2026-09-28 15:35:47 +08:00
2026-08-07 03:33:29 +08:00
2026-09-28 15:35:47 +08:00