修正了一些错误
This commit is contained in:
@@ -205,6 +205,15 @@ class ClassHandle(BaseHandle):
|
||||
saved_block: ir.Block | None = None
|
||||
if Gen.builder and Gen.builder.block and not Gen.builder.block.is_terminated:
|
||||
saved_block = Gen.builder.block
|
||||
# 切换 module_sha1 为泛型模板定义模块的 SHA1,
|
||||
# 使结构体类型名和方法定义名都用定义模块的 SHA1 前缀,
|
||||
# 与调用端 _struct_sha1_map 查到的 SHA1 一致。
|
||||
template_sha1: str | None = template.get('sha1')
|
||||
saved_gen_sha1: str | None = getattr(Gen, 'module_sha1', None)
|
||||
saved_trans_sha1: str | None = getattr(self.Trans, '_module_sha1', None)
|
||||
if template_sha1:
|
||||
Gen.module_sha1 = template_sha1
|
||||
self.Trans._module_sha1 = template_sha1
|
||||
try:
|
||||
self._EmitClassLlvm(SpecNode, Gen, declare_only=declare_only)
|
||||
finally:
|
||||
@@ -219,6 +228,9 @@ class ClassHandle(BaseHandle):
|
||||
Gen.var_signedness = saved_var_signedness
|
||||
Gen.global_vars = saved_global_vars
|
||||
self.Trans.VarScopes = saved_var_scopes
|
||||
# 恢复原始 module_sha1
|
||||
Gen.module_sha1 = saved_gen_sha1
|
||||
self.Trans._module_sha1 = saved_trans_sha1
|
||||
Gen._generic_class_specializations[spec_key] = (spec_name, declare_only)
|
||||
# 缓存 type_args/type_names,供后续 declare_only=False 完整特化补发方法体使用
|
||||
# (如 _HandleMethodCallLlvm 中发现方法未定义时触发)
|
||||
@@ -228,7 +240,10 @@ class ClassHandle(BaseHandle):
|
||||
if not hasattr(self.Trans, '_generic_class_specializations'):
|
||||
self.Trans._generic_class_specializations = {}
|
||||
self.Trans._generic_class_specializations[spec_key] = spec_name
|
||||
if hasattr(self.Trans, '_module_sha1') and self.Trans._module_sha1:
|
||||
# 用模板定义模块的 SHA1 注册到 _struct_sha1_map,与方法定义端一致
|
||||
if template_sha1:
|
||||
Gen._struct_sha1_map[spec_name] = template_sha1
|
||||
elif hasattr(self.Trans, '_module_sha1') and self.Trans._module_sha1:
|
||||
Gen._struct_sha1_map[spec_name] = self.Trans._module_sha1
|
||||
return spec_name
|
||||
|
||||
@@ -460,9 +475,12 @@ class ClassHandle(BaseHandle):
|
||||
if not hasattr(self, '_generic_class_templates'):
|
||||
self._generic_class_templates = {}
|
||||
type_params: list[str] = [tp.name for tp in Node.type_params]
|
||||
# 记录泛型模板定义模块的 SHA1,用于特化时统一命名空间
|
||||
template_sha1: str | None = getattr(self.Trans, '_module_sha1', None)
|
||||
self._generic_class_templates[ClassName] = {
|
||||
'node': Node,
|
||||
'type_params': type_params,
|
||||
'sha1': template_sha1,
|
||||
}
|
||||
return
|
||||
if self._is_exception_class(Node):
|
||||
|
||||
Reference in New Issue
Block a user