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:
1 parent
4958fd2c14
commit
2c33effee1
1 file changed
+9
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user