进行了优化,减少了上帝结构体的符号表占用

This commit is contained in:
2026-06-18 22:12:14 +08:00
parent d7b98cc9c5
commit 19f2787db0
32 changed files with 1245 additions and 1083 deletions

View File

@@ -51,7 +51,7 @@ class ClassHandle(BaseHandle):
ExcTypeInfo.Name = ClassName
ExcTypeInfo.IsExceptionClass = True
ExcTypeInfo.value = code
self.Trans.SymbolTable[ClassName] = ExcTypeInfo
self.Trans.SymbolTable.insert(ClassName, ExcTypeInfo)
def _is_generic_class(self, Node):
if hasattr(Node, 'type_params') and Node.type_params:
@@ -660,7 +660,7 @@ class ClassHandle(BaseHandle):
UnionNode = CTypeInfo()
UnionNode.Name = ClassName
UnionNode.IsUnion = True
self.Trans.SymbolTable[ClassName] = UnionNode
self.Trans.SymbolTable.insert(ClassName, UnionNode)
def _EmitREnumLlvm(self, Node, Gen):
ClassName = Node.name
@@ -767,14 +767,14 @@ class ClassHandle(BaseHandle):
MemberNode.EnumName = ClassName
MemberNode.Lineno = lineno
MemberNode.IsEnumMember = True
self.Trans.SymbolTable[VariantName] = MemberNode
self.Trans.SymbolTable.insert(VariantName, MemberNode)
RenumTypeInfo = CTypeInfo()
RenumTypeInfo.Name = ClassName
RenumTypeInfo.BaseType = t.REnum(ClassName)
RenumTypeInfo.IsRenum = True
RenumTypeInfo.IsEnum = True
RenumTypeInfo.RenumVariants = variant_names
self.Trans.SymbolTable[ClassName] = RenumTypeInfo
self.Trans.SymbolTable.insert(ClassName, RenumTypeInfo)
def _RegisterEnumMembers(self, Node):
ClassName = Node.name
@@ -782,7 +782,7 @@ class ClassHandle(BaseHandle):
EnumTypeInfo.Name = ClassName
EnumTypeInfo.BaseType = t.CEnum(ClassName)
EnumTypeInfo.IsEnum = True
self.Trans.SymbolTable[ClassName] = EnumTypeInfo
self.Trans.SymbolTable.insert(ClassName, EnumTypeInfo)
from lib.core.Exportable import EnumMember as ExportEnumMember
enum_export = self.Trans.Exportable.add_enum(
name=ClassName,
@@ -806,7 +806,7 @@ class ClassHandle(BaseHandle):
next_enum_value = value + 1
elif isinstance(item.value, ast.Name):
value = item.value.id
if value in self.Trans.SymbolTable:
if self.Trans.SymbolTable.has(value):
ref_info = self.Trans.SymbolTable[value]
if ref_info.value is not None and isinstance(ref_info.value, int):
next_enum_value = ref_info.value + 1
@@ -820,7 +820,7 @@ class ClassHandle(BaseHandle):
MemberNode.EnumName = ClassName
MemberNode.Lineno = item.lineno
MemberNode.IsEnumMember = True
self.Trans.SymbolTable[VarName] = MemberNode
self.Trans.SymbolTable.insert(VarName, MemberNode)
enum_export.members.append(ExportEnumMember(
name=VarName,
value=value,
@@ -840,7 +840,7 @@ class ClassHandle(BaseHandle):
next_enum_value = value + 1
elif isinstance(item.value, ast.Name):
value = item.value.id
if value in self.Trans.SymbolTable:
if self.Trans.SymbolTable.has(value):
ref_info = self.Trans.SymbolTable[value]
if ref_info.value is not None and isinstance(ref_info.value, int):
next_enum_value = ref_info.value + 1
@@ -854,7 +854,7 @@ class ClassHandle(BaseHandle):
MemberNode.EnumName = ClassName
MemberNode.Lineno = item.lineno
MemberNode.IsEnumMember = True
self.Trans.SymbolTable[VarName] = MemberNode
self.Trans.SymbolTable.insert(VarName, MemberNode)
enum_export.members.append(ExportEnumMember(
name=VarName,
value=value,