进行了优化,减少了上帝结构体的符号表占用
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user