修正了一些错误
This commit is contained in:
@@ -356,9 +356,21 @@ class ImportHandle(BaseHandle):
|
||||
if not hasattr(self.Trans.ClassHandler, '_generic_class_templates'):
|
||||
self.Trans.ClassHandler._generic_class_templates = {}
|
||||
type_params = [tp.name for tp in node.type_params]
|
||||
# 保留 prescan 阶段已注册的 sha1;若无则从 _ModuleSha1Map 查找,
|
||||
# 避免覆盖带 sha1 的注册导致特化时 SHA1 前缀丢失
|
||||
existing = self.Trans.ClassHandler._generic_class_templates.get(node.name)
|
||||
template_sha1 = existing.get('sha1') if existing else None
|
||||
if template_sha1 is None:
|
||||
msm = getattr(self.Trans, '_ModuleSha1Map', None)
|
||||
if msm:
|
||||
for lookup_name in (file_module_name, module_name, actual_module_name):
|
||||
if lookup_name and lookup_name in msm:
|
||||
template_sha1 = msm[lookup_name]
|
||||
break
|
||||
self.Trans.ClassHandler._generic_class_templates[node.name] = {
|
||||
'node': node,
|
||||
'type_params': type_params,
|
||||
'sha1': template_sha1,
|
||||
}
|
||||
# 治本修复:使用 file_module_name(源模块名)而非 module_name(可能是别名/类名)。
|
||||
# 这样 _EmitExternalClassDeclLlvm 内的 ModuleSha1Map 查找才能命中,
|
||||
@@ -647,9 +659,18 @@ class ImportHandle(BaseHandle):
|
||||
if not hasattr(self.Trans.ClassHandler, '_generic_class_templates'):
|
||||
self.Trans.ClassHandler._generic_class_templates = {}
|
||||
type_params = [tp.name for tp in node.type_params]
|
||||
# 保留 prescan 阶段已注册的 sha1;若无则从 _ModuleSha1Map 查找,
|
||||
# 避免覆盖带 sha1 的注册导致特化时 SHA1 前缀丢失
|
||||
existing = self.Trans.ClassHandler._generic_class_templates.get(node.name)
|
||||
template_sha1 = existing.get('sha1') if existing else None
|
||||
if template_sha1 is None:
|
||||
msm = getattr(self.Trans, '_ModuleSha1Map', None)
|
||||
if msm and module_name in msm:
|
||||
template_sha1 = msm[module_name]
|
||||
self.Trans.ClassHandler._generic_class_templates[node.name] = {
|
||||
'node': node,
|
||||
'type_params': type_params,
|
||||
'sha1': template_sha1,
|
||||
}
|
||||
self._EmitExternalClassDeclLlvm(node, Gen, module_name=module_name)
|
||||
has_functions_or_classes = True
|
||||
|
||||
Reference in New Issue
Block a user