From 2c33effee1dbf8539878e0906ead297f8e3c3a44 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Fri, 2 Oct 2026 11:48:31 +0800 Subject: [PATCH] =?UTF-8?q?fix(type):=20=E5=89=8D=E5=90=91=E5=A3=B0?= =?UTF-8?q?=E6=98=8E=E8=A1=A5=20import-as=20=E5=88=AB=E5=90=8D=E5=8F=8D?= =?UTF-8?q?=E6=9F=A5=EF=BC=88LookupModNameByAlias=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _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 属性访问失败)。 --- App/lib/core/Gen/Type/TypeGenResolve.vp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/App/lib/core/Gen/Type/TypeGenResolve.vp b/App/lib/core/Gen/Type/TypeGenResolve.vp index 7416ec6..b1dcbd0 100644 --- a/App/lib/core/Gen/Type/TypeGenResolve.vp +++ b/App/lib/core/Gen/Type/TypeGenResolve.vp @@ -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)