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

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

@@ -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:

View File

@@ -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

View File

@@ -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)