fix(type): 前向声明补 import-as 别名反查(LookupModNameByAlias)

_forward_declare_ptr_from_node 的 Attribute 分支此前仅走
ImportsGen.lookup_from_import 反查别名;对 `import X as Y`(from_imports 里存
"Y:X")补一道 StubMergerStore.LookupModNameByAlias 专用反查,避免别名解析不到
→ 拿不到模块 sha1 → 无法前向声明而退回 Ptr(i8)。现场候选:GenTypes.vp 的
`import lib.core.Gen.Type.TypeSpec as TSpec`,字段 `Spec: TSpec.TypeSpec*`
(ve_i.Spec.PtrLevel 属性访问失败)。
This commit is contained in:
TermiNexus committed 2026-10-02 11:48:31 +08:00
1 parent 4958fd2c14
commit 2c33effee1
1 file changed
+9
+9
View File
@@ -1985,6 +1985,15 @@ novirtual class TypeGenResolve(TypeGenBase.TypeGenBase):
orig_mod: str = self.Gen.ImportsGen.lookup_from_import(from_imports, mod_buf, 0)
if orig_mod is not None:
sha1 = self.Gen.CallGenBase._lookup_sha1_from_modname_raw(pool, orig_mod)
# 4a'. `import X as Y`(同模块的 from_imports 里存 "Y:X")单独反查——
# 与 extract_class_name_from_annotation 的别名还原同源(现场:
# GenTypes.vp 的 `import lib.core.Gen.Type.TypeSpec as TSpec`,
# 字段 `Spec: TSpec.TypeSpec*` 依赖此路径求 sha1 做前向声明)。
if sha1 is None and from_imports is not None:
alias_mod: str = StubMergerStore.LookupModNameByAlias(from_imports, mod_buf)
if alias_mod is not None:
sha1 = self.Gen.CallGenBase._lookup_sha1_from_modname_raw(pool, alias_mod)
stdlib.free(alias_mod)
# 4b. mod 本身是完整模块路径(无别名 import)
if sha1 is None:
sha1 = self.Gen.CallGenBase._lookup_sha1_from_modname_raw(pool, mod_buf)