进行了优化,减少了上帝结构体的符号表占用
This commit is contained in:
@@ -328,7 +328,7 @@ class PythonParserMixin:
|
||||
EnumNode.Name = ClassName
|
||||
EnumNode.IsEnum = True
|
||||
EnumNode.set('file', '<stdin>')
|
||||
self.SymbolTable[ClassName] = EnumNode
|
||||
self.SymbolTable.insert(ClassName, EnumNode)
|
||||
|
||||
# 注册 enum 成员
|
||||
for item in node.body:
|
||||
@@ -341,9 +341,9 @@ class PythonParserMixin:
|
||||
MemberNode.EnumName = ClassName
|
||||
MemberNode.library_name = None
|
||||
MemberNode.IsEnumMember = True
|
||||
self.SymbolTable[MemberName] = MemberNode
|
||||
self.SymbolTable[f"{ClassName}.{MemberName}"] = MemberNode
|
||||
self.SymbolTable[f"{ClassName}_{MemberName}"] = MemberNode
|
||||
self.SymbolTable.insert(MemberName, MemberNode)
|
||||
self.SymbolTable.insert(f"{ClassName}.{MemberName}", MemberNode)
|
||||
self.SymbolTable.insert(f"{ClassName}_{MemberName}", MemberNode)
|
||||
|
||||
continue
|
||||
|
||||
@@ -397,14 +397,14 @@ class PythonParserMixin:
|
||||
StructNode.set('file', '<stdin>')
|
||||
StructNode.set('IsAnonymous', IsAnonymous)
|
||||
StructNode.set('IsCpythonObject', IsCpythonObject)
|
||||
self.SymbolTable[ClassName] = StructNode
|
||||
self.SymbolTable.insert(ClassName, StructNode)
|
||||
elif isinstance(node, ast.FunctionDef):
|
||||
FuncName = node.name
|
||||
FuncNode = CTypeInfo()
|
||||
FuncNode.Name = FuncName
|
||||
FuncNode.IsFunction = True
|
||||
FuncNode.set('file', '<stdin>')
|
||||
self.SymbolTable[FuncName] = FuncNode
|
||||
self.SymbolTable.insert(FuncName, FuncNode)
|
||||
elif isinstance(node, ast.AnnAssign):
|
||||
if isinstance(node.target, ast.Name):
|
||||
VarName = node.target.id
|
||||
@@ -443,7 +443,7 @@ class PythonParserMixin:
|
||||
var_node.IsVariable = True
|
||||
var_node.set('IsPtr', IsPtr)
|
||||
var_node.set('file', '<stdin>')
|
||||
self.SymbolTable[VarName] = var_node
|
||||
self.SymbolTable.insert(VarName, var_node)
|
||||
except Exception as e:
|
||||
print(f'Warning: Failed to parse Python file {FilePath}: {e}')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user