fix(generic): 缺少特化类型信息时从特化名派生
_generic_class_spec_type_info 无写入点,改为从 ClassName 解析 type_args/type_names 后继续补发方法体。
This commit is contained in:
1 parent
62e38c4367
commit
8cdef178a5
1 file changed
+4
-3
@@ -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,自动补发方法体
|
||||
|
||||
Reference in new issue
Block a user