From 8cdef178a5cbc3896f1a8077816cf28c9f0cac7c Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sun, 18 Oct 2026 19:09:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(generic):=20=E7=BC=BA=E5=B0=91=E7=89=B9?= =?UTF-8?q?=E5=8C=96=E7=B1=BB=E5=9E=8B=E4=BF=A1=E6=81=AF=E6=97=B6=E4=BB=8E?= =?UTF-8?q?=E7=89=B9=E5=8C=96=E5=90=8D=E6=B4=BE=E7=94=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _generic_class_spec_type_info 无写入点,改为从 ClassName 解析 type_args/type_names 后继续补发方法体。 --- lib/core/Handles/HandlesExprCall.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/core/Handles/HandlesExprCall.py b/lib/core/Handles/HandlesExprCall.py index 508596c..540ccfb 100644 --- a/lib/core/Handles/HandlesExprCall.py +++ b/lib/core/Handles/HandlesExprCall.py @@ -3046,11 +3046,12 @@ class ExprCallHandle(BaseHandle): if existing_blocks: Gen._generic_spec_error = f'方法已存在但查找名不一致: {full_method_name}' return # 方法体已编译 - # 从缓存获取 type_args/type_names + # 从缓存获取 type_args/type_names;缓存缺失时直接从特化名派生 type_info = getattr(Gen, '_generic_class_spec_type_info', {}).get(spec_key) if type_info is None: - Gen._generic_spec_error = f'缺少特化类型信息: {spec_key}' - return + _DerivedArgs: list[str] = ClassName[len(base_name) + 1:-1].split('][') + _DerivedNames: list[str] = [a.rsplit('.', 1)[-1] for a in _DerivedArgs] + type_info = (_DerivedArgs, _DerivedNames) cached_type_args, cached_type_names = type_info # 不预先标记:_specialize_generic_class 内部缓存逻辑会检测 # cached_declare_only=True 且 declare_only=False,自动补发方法体