进行了优化,减少了上帝结构体的符号表占用
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user