进行了优化,减少了上帝结构体的符号表占用
This commit is contained in:
@@ -171,7 +171,7 @@ class BaseGenMixin:
|
||||
return existing
|
||||
if clean_name in {'typedef', 'CType', 'CVolatile', 'CEnum', 'CUnion', 'CStruct', 'enum', 'REnum', 'renum', 'Void', 'void'}:
|
||||
return ir.IntType(8)
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and clean_name in self.SymbolTable:
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and self.SymbolTable.has(clean_name):
|
||||
Entry = self.SymbolTable[clean_name]
|
||||
if Entry.IsTypedef:
|
||||
resolved_str = self._resolve_typedef(clean_name)
|
||||
@@ -235,7 +235,7 @@ class BaseGenMixin:
|
||||
return int(llvm_str[1:])
|
||||
|
||||
# 2. 再查 SymbolTable(用户定义的 typedef)
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and name in self.SymbolTable:
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and self.SymbolTable.has(name):
|
||||
Entry = self.SymbolTable[name]
|
||||
if Entry.IsTypedef:
|
||||
if Entry.BaseType:
|
||||
|
||||
@@ -205,7 +205,7 @@ class StructGenMixin:
|
||||
all_classes = set(self.class_methods.keys()) | set(self.class_members.keys())
|
||||
for ClassName in all_classes:
|
||||
is_packed = ClassName in self.class_packed
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and ClassName in self.SymbolTable:
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and self.SymbolTable.has(ClassName):
|
||||
Entry = self.SymbolTable[ClassName]
|
||||
if Entry.IsExceptionClass:
|
||||
continue
|
||||
@@ -302,7 +302,7 @@ class StructGenMixin:
|
||||
|
||||
# Step 4: 创建最终的 structs 并设置正确的成员类型
|
||||
for ClassName in all_classes:
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and ClassName in self.SymbolTable:
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and self.SymbolTable.has(ClassName):
|
||||
Entry = self.SymbolTable[ClassName]
|
||||
if Entry.IsExceptionClass:
|
||||
continue
|
||||
|
||||
@@ -58,7 +58,7 @@ class TypeConvertMixin:
|
||||
if not name or not hasattr(self, 'SymbolTable') or not self.SymbolTable:
|
||||
return None
|
||||
|
||||
entry = self.SymbolTable.get(name)
|
||||
entry = self.SymbolTable.lookup(name)
|
||||
if not entry or not isinstance(entry, _CTypeInfo):
|
||||
return None
|
||||
|
||||
@@ -129,7 +129,7 @@ class TypeConvertMixin:
|
||||
typedef_name = getattr(BaseType, 'value', '') or (type_info.Name if type_info else '')
|
||||
if typedef_name and hasattr(self, 'SymbolTable') and self.SymbolTable:
|
||||
from lib.core.Handles.HandlesBase import CTypeInfo as _CTypeInfo
|
||||
entry = self.SymbolTable.get(typedef_name)
|
||||
entry = self.SymbolTable.lookup(typedef_name)
|
||||
if entry and isinstance(entry, _CTypeInfo) and entry.BaseType:
|
||||
if not isinstance(entry.BaseType, _t._CTypedef) or entry.PtrCount > 0:
|
||||
return self._base_ctype_to_llvm(entry.BaseType, entry)
|
||||
@@ -173,7 +173,7 @@ class TypeConvertMixin:
|
||||
current = type_name
|
||||
while current not in visited:
|
||||
visited.add(current)
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and current in self.SymbolTable:
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and self.SymbolTable.has(current):
|
||||
Entry = self.SymbolTable[current]
|
||||
if isinstance(Entry, dict) and Entry.get('type') == 'typedef':
|
||||
OriginalType = Entry.get('OriginalType', '')
|
||||
@@ -394,7 +394,7 @@ class TypeConvertMixin:
|
||||
if IsPtr and not isinstance(basic_stripped, ir.VoidType):
|
||||
return ir.PointerType(basic_stripped)
|
||||
return basic_stripped
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and type_str in self.SymbolTable:
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and self.SymbolTable.has(type_str):
|
||||
_Entry = self.SymbolTable[type_str]
|
||||
if _Entry.IsTypedef:
|
||||
resolved_str = self._resolve_typedef(type_str)
|
||||
@@ -429,7 +429,7 @@ class TypeConvertMixin:
|
||||
if IsPtr and not isinstance(basic_last, ir.VoidType):
|
||||
return ir.PointerType(basic_last)
|
||||
return basic_last
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and LastPart in self.SymbolTable:
|
||||
if hasattr(self, 'SymbolTable') and self.SymbolTable and self.SymbolTable.has(LastPart):
|
||||
_Entry = self.SymbolTable[LastPart]
|
||||
if _Entry.IsTypedef:
|
||||
resolved_str = self._resolve_typedef(LastPart)
|
||||
|
||||
Reference in New Issue
Block a user