diff --git a/lib/core/Handles/HandlesExprCall.py b/lib/core/Handles/HandlesExprCall.py index efa2429..508596c 100644 --- a/lib/core/Handles/HandlesExprCall.py +++ b/lib/core/Handles/HandlesExprCall.py @@ -3007,11 +3007,13 @@ class ExprCallHandle(BaseHandle): """ # 仅对特化名(含 '[' 且以 ']' 结尾)触发 if '[' not in ClassName or not ClassName.endswith(']'): + Gen._generic_spec_error = f'非特化名: {ClassName}' return # 反推模板类名(如 ndarray[double] → ndarray) base_name: str = ClassName.split('[')[0] # 检查是否是已注册的泛型模板 if not (hasattr(self.Trans.ClassHandler, '_generic_class_templates') and base_name in self.Trans.ClassHandler._generic_class_templates): + Gen._generic_spec_error = f'模板未注册: {base_name}' return # 构造 spec_key(与 _specialize_generic_class 一致:ClassName) spec_key: str = base_name + '<' + ','.join(ClassName[len(base_name) + 1:-1].split('][')) + '>' @@ -3032,6 +3034,7 @@ class ExprCallHandle(BaseHandle): was_declare_only: bool = cached[1] # 仅当缓存是 declare_only 版本时才需要补发 if not was_declare_only: + Gen._generic_spec_error = f'特化标记为完整但方法缺失: {cached_name}.{MethodName}' return # 检查方法是否已有 define(blocks 非空表示已编译方法体) struct_sha1_map = getattr(Gen, '_struct_sha1_map', {}) @@ -3041,10 +3044,12 @@ class ExprCallHandle(BaseHandle): if existing_func is not None: existing_blocks = getattr(existing_func, 'blocks', []) if existing_blocks: + Gen._generic_spec_error = f'方法已存在但查找名不一致: {full_method_name}' return # 方法体已编译 # 从缓存获取 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 cached_type_args, cached_type_names = type_info # 不预先标记:_specialize_generic_class 内部缓存逻辑会检测