From cc17a8f8db8c60899f4ddc57abc192142754c176 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sat, 12 Sep 2026 10:23:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor(tpv):=20=E5=8E=BB=E6=8E=89=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=86=85=E6=87=92=E5=AF=BC=E5=85=A5=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E7=94=A8=E9=A1=B6=E5=B1=82=20import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Viper 的 import 是编译期的,懒导入在编译型语义下毫无作用,模块环不需要也不应该用它规避。 TypeSpec 顶层 import GenApi(GenApi→GenTypes→TypeSpec 成环但编译期无碍);CallGenLib 的既有懒导入(VpiReader)一并改顶层(VpiReader 不反向依赖 Call 层,无环)。 --- App/lib/core/Gen/Call/CallGenLib.vp | 3 +-- App/lib/core/Gen/Type/TypeSpec.vp | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/App/lib/core/Gen/Call/CallGenLib.vp b/App/lib/core/Gen/Call/CallGenLib.vp index f880ff9..b3fedd4 100644 --- a/App/lib/core/Gen/Call/CallGenLib.vp +++ b/App/lib/core/Gen/Call/CallGenLib.vp @@ -6,6 +6,7 @@ import memhub import string import stdlib import lib.core.Gen.Translator as HT +import lib.Stub.StubGen.VpiReader as VpiReader from . import CallGenBase @@ -216,8 +217,6 @@ class CallGenLib(CallGenBase.CallGenBase): """把跨模块调用实参 coerce 到 vpi 定义侧形参类型,返回重建的实参链""" if pool is None or builder is None or call_name is None or head is None: return head - # 函数内懒 import:与 _lookup_method_ret_ty_via_vpi 同源,规避顶层循环依赖 - import lib.Stub.StubGen.VpiReader as VpiReader if self._is_sha1_mangled_call(call_name) == 0: return head # 拆 {sha1}.{rest}:rest 含 '.' 则为 {cls}.{method},否则为 {func} diff --git a/App/lib/core/Gen/Type/TypeSpec.vp b/App/lib/core/Gen/Type/TypeSpec.vp index 3151b48..cac8e3b 100644 --- a/App/lib/core/Gen/Type/TypeSpec.vp +++ b/App/lib/core/Gen/Type/TypeSpec.vp @@ -5,6 +5,7 @@ import memhub import string import viperlib import lib.core.CompilerFactory as CompilerFactory +import lib.core.Gen.GenApi as GenApi # ============================================================ @@ -845,10 +846,7 @@ def InternSpec(arena: TypeSpecArena | t.CPtr, # 不能返回 None —— 调用链会把 None 一路传到 entry.Spec,条目**静默失去类型信息** # (如 _entry_spec_unsigned 恒返回 0 ⇒ zext/sext 方向取错),属静默数据损坏, # 与「不兜底 / fail-fast」原则直接冲突(原注释声称 fail-fast,实现却只返回 None)。 - # 破环:TypeSpec 与 GenApi 互为依赖(GenApi→GenTypes→TypeSpec),故**函数内懒 import** - # (同 CallGenLib.vp:220「函数内懒 import 规避顶层循环依赖」的既有模式)。 if arena.Count >= arena.Cap: - import lib.core.Gen.GenApi as GenApi GenApi.fatal_error( None, f"TypeSpec 驻留表已满(上限 {arena.Cap} 条),无法登记新类型",