fix(编译期名称解析): 修 StructGen 缺 _vlog 导入与 HandlesImports 的 node/Node 误用

两处均为 a(编译器缺陷),且都被 HandlesImports.py:1055 的
`except Exception -> WARN 忽略异常` 吞掉,表现为模块声明静默退化
(本次现场:VpiReader.vp 阶段 WARN + 结构体声明路径中断)。非源码违规、
非机制漏豁免。

1) lib/core/LLVMCG/StructGen.py
   - `_generate_structs` 的「成员表含重名条目、body 已是权威布局」提示调用
     `_vlog().warning(...)`,但本文件从未定义/导入 `_vlog` ⇒ NameError。
     该分支一旦命中(astaux.ExceptHandler 一类),`_generate_structs` 整体中断。
   - 补 `from lib.core.VLogger import get_logger as _vlog`,与同目录
     FuncGen.py / TypeConvert.py 同口径。

2) lib/core/Handles/HandlesImports.py:1317
   - `_EmitExternalGlobalDeclLlvm` 形参名为 `Node`,该 elif 分支误写成小写 `node`
     ⇒ 只要传入的是**非带注解**的跨模块全局量(`ast.Assign`)就恒抛 NameError,
     分支整体不可达:外部全局变量从未声明 external,消费侧表现为
     unknown global / 类型占位。
   - 判据改回 `isinstance(Node, ast.Assign)`。

静态核验:对 TransPyC 全部 .py 做 symtable 未定义名扫描,结果 0 条;
`python -m py_compile` 通过。
This commit is contained in:
TermiNexus committed 2026-09-30 14:55:40 +08:00
1 parent e5f044dd03
commit 3efe83f1ea
2 files changed
+2 -1

No files matched your search

+1 -1
View File
@@ -1314,7 +1314,7 @@ class ImportHandle(BaseHandle):
gv = ir.GlobalVariable(Gen.module, var_type, name=VarName)
# 外部全局变量声明:只声明不定义(external linkage),避免多重定义
gv.linkage = 'external'
elif isinstance(node, ast.Assign) and Node.targets and isinstance(Node.targets[0], ast.Name):
elif isinstance(Node, ast.Assign) and Node.targets and isinstance(Node.targets[0], ast.Name):
VarName = Node.targets[0].id
if VarName.startswith('_'):
return
+1
View File
@@ -5,6 +5,7 @@ import vast as ast
import llvmlite.ir as ir
from llvmlite.ir.values import _Undefined
from lib.includes import t as _t
from lib.core.VLogger import get_logger as _vlog
# vtable 槽类型 `i8*` 的共享实例:llvmlite 的类型是不可变值语义(`_TypedPointerType`
# 的 `__eq__` 按结构比较、打印结果只取决于结构),同一实例可在任意多少量复用。