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

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

@@ -188,7 +188,7 @@ class FunctionHandle(BaseHandle):
elif isinstance(val.func, ast.Attribute):
callee_name = getattr(val.func, 'attr', None)
if callee_name:
sym = self.Trans.SymbolTable.get(callee_name)
sym = self.Trans.SymbolTable.lookup(callee_name)
if sym and isinstance(sym, dict):
ret_type_str = sym.get('return_type', '')
if ret_type_str and ret_type_str != 'int':
@@ -203,7 +203,7 @@ class FunctionHandle(BaseHandle):
var_name = val.id
if var_name in local_var_types:
return local_var_types[var_name]
var_info = self.Trans.SymbolTable.get(var_name)
var_info = self.Trans.SymbolTable.lookup(var_name)
if var_info and isinstance(var_info, dict):
var_type = var_info.get('type', '')
if var_type and var_type != 'int':
@@ -259,7 +259,7 @@ class FunctionHandle(BaseHandle):
break
if isinstance(val.value, ast.Name):
var_name = val.value.id
var_info = self.Trans.SymbolTable.get(var_name)
var_info = self.Trans.SymbolTable.lookup(var_name)
if var_info and isinstance(var_info, dict):
var_type = var_info.get('type', '')
if var_type.startswith('list[') or var_type.startswith('List['):
@@ -1386,7 +1386,7 @@ class FunctionHandle(BaseHandle):
if self.Trans.VarScopes:
self.Trans.VarScopes.pop()
self.Trans.FunctionReturnTypes[FuncName] = ReturnTypeInfo
if FuncName not in self.Trans.SymbolTable:
if not self.Trans.SymbolTable.has(FuncName):
FuncInfo = CTypeInfo()
FuncInfo.Name = FuncName
FuncInfo.IsFunction = True
@@ -1395,7 +1395,7 @@ class FunctionHandle(BaseHandle):
FuncInfo.IsInline = True
FuncInfo.InlineBody = Node.body
FuncInfo.InlineParams = [arg.arg for arg in Node.args.args]
self.Trans.SymbolTable[FuncName] = FuncInfo
self.Trans.SymbolTable.insert(FuncName, FuncInfo)
else:
existing = self.Trans.SymbolTable[FuncName]
if existing.MetaList == FuncMeta.NONE and func_meta != FuncMeta.NONE:
@@ -1407,7 +1407,7 @@ class FunctionHandle(BaseHandle):
# property setter/deleter: 在原始 PropKey不带后缀下注册 MetaList
if FuncMeta.PROPERTY_SETTER in func_meta or FuncMeta.PROPERTY_DELETER in func_meta:
BasePropKey = f"{ClassName}.{RawFuncName}" if ClassName else RawFuncName
if BasePropKey in self.Trans.SymbolTable:
if self.Trans.SymbolTable.has(BasePropKey):
base_existing = self.Trans.SymbolTable[BasePropKey]
if func_meta != FuncMeta.NONE:
base_existing.MetaList = base_existing.MetaList | func_meta
@@ -1416,5 +1416,5 @@ class FunctionHandle(BaseHandle):
PropInfo.Name = BasePropKey
PropInfo.IsFunction = True
PropInfo.MetaList = func_meta
self.Trans.SymbolTable[BasePropKey] = PropInfo
self.Trans.SymbolTable.insert(BasePropKey, PropInfo)
return func