进行了优化,减少了上帝结构体的符号表占用
This commit is contained in:
@@ -139,10 +139,9 @@ class AssignHandle:
|
||||
StructType = Gen.structs[ClassName]
|
||||
|
||||
IsUnion = False
|
||||
if ClassName in self.Trans.SymbolTable:
|
||||
TypeInfo = self.Trans.SymbolTable[ClassName]
|
||||
if TypeInfo.IsUnion:
|
||||
IsUnion = True
|
||||
TypeInfo = self.Trans.SymbolTable.lookup(ClassName)
|
||||
if TypeInfo and TypeInfo.IsUnion:
|
||||
IsUnion = True
|
||||
|
||||
if IsUnion:
|
||||
Value = self.HandleExprLlvm(Node.value)
|
||||
@@ -435,10 +434,10 @@ class AssignHandle:
|
||||
CReturnTypes = [None] * len(ret_type.elements)
|
||||
if not CReturnTypes:
|
||||
sym_key = FuncName
|
||||
if sym_key not in self.Trans.SymbolTable:
|
||||
if not self.Trans.SymbolTable.has(sym_key):
|
||||
if ModulePath:
|
||||
sym_key = f"{ModulePath}.{FuncName}"
|
||||
sym_info = self.Trans.SymbolTable.get(sym_key)
|
||||
sym_info = self.Trans.SymbolTable.lookup(sym_key)
|
||||
if sym_info and sym_info.IsFunction:
|
||||
ret_type_info = sym_info.FuncPtrReturn
|
||||
param_type_infos = [pt for _, pt in (sym_info.FuncPtrParams or [])]
|
||||
@@ -615,7 +614,7 @@ class AssignHandle:
|
||||
ClassName = self.Trans._CurrentCpythonObjectClass
|
||||
if ClassName and ClassName in Gen.structs:
|
||||
PropKey = f'{ClassName}.{AttrName}'
|
||||
PropInfo = self.Trans.SymbolTable.get(PropKey)
|
||||
PropInfo = self.Trans.SymbolTable.lookup(PropKey)
|
||||
if PropInfo and PropInfo.MetaList and FuncMeta.PROPERTY_SETTER in PropInfo.MetaList:
|
||||
SelfVar = Gen._get_var_ptr('self')
|
||||
if SelfVar:
|
||||
@@ -726,14 +725,13 @@ class AssignHandle:
|
||||
ClassName = CN
|
||||
|
||||
IsUnion = False
|
||||
if ClassName and ClassName in self.Trans.SymbolTable:
|
||||
TypeInfo = self.Trans.SymbolTable[ClassName]
|
||||
if TypeInfo.IsUnion:
|
||||
IsUnion = True
|
||||
TypeInfo = self.Trans.SymbolTable.lookup(ClassName)
|
||||
if TypeInfo and TypeInfo.IsUnion:
|
||||
IsUnion = True
|
||||
|
||||
if ClassName and ClassName in Gen.structs:
|
||||
PropKey = f'{ClassName}.{AttrName}'
|
||||
PropInfo = self.Trans.SymbolTable.get(PropKey)
|
||||
PropInfo = self.Trans.SymbolTable.lookup(PropKey)
|
||||
if PropInfo and PropInfo.MetaList and FuncMeta.PROPERTY_SETTER in PropInfo.MetaList:
|
||||
ObjVal = self.Trans.ExprHandler.HandleExprLlvm(Target.value)
|
||||
SetterFunc = Gen._get_function(PropKey + '$set')
|
||||
@@ -856,8 +854,7 @@ class AssignHandle:
|
||||
self._StoreWithCoerce(Value, MemberPtr)
|
||||
if not ClassName:
|
||||
imported_modules = getattr(self.Trans, '_ImportedModules', None)
|
||||
import_aliases = getattr(self.Trans, '_ImportAliases', {})
|
||||
resolved_mod = import_aliases.get(VarName, VarName)
|
||||
resolved_mod = self.Trans.SymbolTable.resolve_alias(VarName)
|
||||
if imported_modules and (VarName in imported_modules or resolved_mod in imported_modules):
|
||||
PossibleKeys = [f"{VarName}.{AttrName}", AttrName]
|
||||
for mod_name in imported_modules:
|
||||
@@ -1185,7 +1182,7 @@ class AssignHandle:
|
||||
if isinstance(Node.target, ast.Name):
|
||||
VarName = Node.target.id
|
||||
EffectiveAnnotation = Node.annotation
|
||||
if VarName in self.Trans.SymbolTable:
|
||||
if self.Trans.SymbolTable.has(VarName):
|
||||
Info = self.Trans.SymbolTable[VarName]
|
||||
if Info.get('type') == 'typedef':
|
||||
return
|
||||
@@ -1200,7 +1197,7 @@ class AssignHandle:
|
||||
elem_type_node = slice_node.elts[0]
|
||||
count_node = slice_node.elts[1]
|
||||
if isinstance(elem_type_node, ast.Name) and elem_type_node.id in Gen.structs:
|
||||
SymEntry = self.Trans.SymbolTable.get(elem_type_node.id)
|
||||
SymEntry = self.Trans.SymbolTable.lookup(elem_type_node.id)
|
||||
if SymEntry and isinstance(SymEntry, CTypeInfo) and SymEntry.IsFuncPtr:
|
||||
ElemType = ir.IntType(8).as_pointer()
|
||||
else:
|
||||
@@ -1220,7 +1217,7 @@ class AssignHandle:
|
||||
if isinstance(count_node, ast.Constant) and isinstance(count_node.value, int):
|
||||
ArrayCount = count_node.value
|
||||
elif isinstance(count_node, ast.Name):
|
||||
if count_node.id in self.Trans.SymbolTable:
|
||||
if self.Trans.SymbolTable.has(count_node.id):
|
||||
SymInfo = self.Trans.SymbolTable[count_node.id]
|
||||
if isinstance(SymInfo.value, int):
|
||||
ArrayCount = SymInfo.value
|
||||
@@ -1324,7 +1321,7 @@ class AssignHandle:
|
||||
if TTypeInfo:
|
||||
TTypeInfo.IsTypedef = True
|
||||
TTypeInfo.Name = VarName
|
||||
self.Trans.SymbolTable[VarName] = TTypeInfo
|
||||
self.Trans.SymbolTable.insert(VarName, TTypeInfo)
|
||||
if IsCDefine:
|
||||
if Node.value:
|
||||
define_constants = vars(Gen).setdefault('_define_constants', {})
|
||||
@@ -1494,12 +1491,12 @@ class AssignHandle:
|
||||
enum_class_name = parts[-2]
|
||||
member_name = parts[-1]
|
||||
qualified_name = f"{enum_class_name}.{member_name}"
|
||||
if qualified_name in self.Trans.SymbolTable:
|
||||
if self.Trans.SymbolTable.has(qualified_name):
|
||||
info = self.Trans.SymbolTable[qualified_name]
|
||||
if info.IsEnumMember and info.EnumName:
|
||||
return info.EnumName
|
||||
under_name = f"{enum_class_name}_{member_name}"
|
||||
if under_name in self.Trans.SymbolTable:
|
||||
if self.Trans.SymbolTable.has(under_name):
|
||||
info = self.Trans.SymbolTable[under_name]
|
||||
if info.IsEnumMember and info.EnumName:
|
||||
return info.EnumName
|
||||
@@ -1529,7 +1526,7 @@ class AssignHandle:
|
||||
FuncName = Node.value.func.id
|
||||
if FuncName in Gen.structs:
|
||||
IsUnion = False
|
||||
if FuncName in self.Trans.SymbolTable:
|
||||
if self.Trans.SymbolTable.has(FuncName):
|
||||
TypeInfo = self.Trans.SymbolTable[FuncName]
|
||||
if TypeInfo.IsUnion:
|
||||
IsUnion = True
|
||||
|
||||
Reference in New Issue
Block a user