From 252d15ba9f96c94cc5f9978a59f1035057624861 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 20 Aug 2026 04:37:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(gen):=20=E6=A8=A1=E5=9D=97=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E8=AE=BF=E9=97=AE=E6=94=AF=E6=8C=81=E5=88=AB=E5=90=8D?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=EF=BC=88import=20X=20as=20Y=20=E2=86=92=20Y.?= =?UTF-8?q?=5Fattr=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 直接写 GenGenerator._g_gen = gen(别名模块属性)此前不可用: _resolve_module_attribute_global 未解析别名,_lookup_module_sha1 ("GenGenerator") 查不到(Sha1Store 用原始模块名)→ 退化裸名 → 全局带 SHA1 前缀后 undefined symbol。 修复:查目标模块 SHA1 前经 from_imports 解析别名(lookup_from_import 返回原始模块名 lib.core.Gen.Generator)。别名属性写与 setter 调用等价 (写同一 @<模块sha1>._g_gen),且更高效(无函数调用/链接依赖)。 --- App/lib/core/Gen/ExprGenAttr.vp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/App/lib/core/Gen/ExprGenAttr.vp b/App/lib/core/Gen/ExprGenAttr.vp index 81f01ac..7d9b8d8 100644 --- a/App/lib/core/Gen/ExprGenAttr.vp +++ b/App/lib/core/Gen/ExprGenAttr.vp @@ -237,6 +237,15 @@ class ExprGenAttr(ExprGenBase.ExprGenBase): mod_path_w: str = self._attr_module_path_str(pool, at.value) if mod_path_w is None: return None + # 别名解析:import lib.core.Gen.Generator as GenGenerator → 查 from_imports + # 得原始模块名。否则 _lookup_module_sha1("GenGenerator") 查不到(Sha1Store + # 用原始模块名)→ 退化裸名 → 全局带 SHA1 前缀后 undefined symbol。 + # 别名属性访问(GenGenerator._g_gen = gen)依赖此解析才能命中目标模块定义。 + if trans._from_imports is not None: + orig_mw: str = HandlesImports.lookup_from_import( + trans._from_imports, mod_path_w, 0) + if orig_mw is not None: + mod_path_w = orig_mw # 检查是否是已导入模块 if HandlesImports.is_module_imported(trans._imported_modules, mod_path_w) == 0: return None