将 EnumName/value/IsSigned 加入 FIELD_ROUTES,消除所有冗余 hasattr/getattr
This commit is contained in:
@@ -92,7 +92,7 @@ class ExprAttrHandle(BaseHandle):
|
||||
PossibleKeys.append(key)
|
||||
for lookup_key in PossibleKeys:
|
||||
SymInfo = self.Trans.SymbolTable.get(lookup_key)
|
||||
if SymInfo and getattr(SymInfo, 'IsDefine', None) and getattr(SymInfo, 'DefineValue', None) is not None:
|
||||
if SymInfo and SymInfo.IsDefine and SymInfo.DefineValue is not None:
|
||||
return self._make_define_constant(Gen, SymInfo.DefineValue)
|
||||
# 也检查 _define_constants
|
||||
define_constants = getattr(Gen, '_define_constants', {})
|
||||
@@ -202,7 +202,7 @@ class ExprAttrHandle(BaseHandle):
|
||||
# 检查 property getter
|
||||
PropKey = f'{ClassName}.{Node.attr}'
|
||||
PropInfo = self.Trans.SymbolTable.get(PropKey)
|
||||
if PropInfo and hasattr(PropInfo, 'MetaList') and FuncMeta.PROPERTY_GETTER in PropInfo.MetaList:
|
||||
if PropInfo and PropInfo.MetaList and FuncMeta.PROPERTY_GETTER in PropInfo.MetaList:
|
||||
SelfVar = Gen._get_var_ptr('self')
|
||||
if SelfVar:
|
||||
SelfPtr = Gen._load(SelfVar, name="self")
|
||||
@@ -234,16 +234,16 @@ class ExprAttrHandle(BaseHandle):
|
||||
def _handle_attr_enum(self, Node, VarName):
|
||||
"""处理枚举成员访问 (VarName 是枚举类型名)"""
|
||||
SymInfo = self.Trans.SymbolTable.get(VarName)
|
||||
if not SymInfo or not getattr(SymInfo, 'IsEnum', None):
|
||||
if not SymInfo or not SymInfo.IsEnum:
|
||||
return None
|
||||
if Node.attr in self.Trans.SymbolTable:
|
||||
MemberInfo = self.Trans.SymbolTable[Node.attr]
|
||||
if getattr(MemberInfo, 'IsEnumMember', None) and getattr(MemberInfo, 'EnumName', None) == VarName:
|
||||
if isinstance(getattr(MemberInfo, 'value', None), int):
|
||||
if MemberInfo.IsEnumMember and MemberInfo.EnumName == VarName:
|
||||
if isinstance(MemberInfo.value, int):
|
||||
return ir.Constant(ir.IntType(32), MemberInfo.value)
|
||||
for key, info in self.Trans.SymbolTable.items():
|
||||
if getattr(info, 'IsEnumMember', None) and getattr(info, 'EnumName', None) == VarName and key == Node.attr:
|
||||
if isinstance(getattr(info, 'value', None), int):
|
||||
if info.IsEnumMember and info.EnumName == VarName and key == Node.attr:
|
||||
if isinstance(info.value, int):
|
||||
return ir.Constant(ir.IntType(32), info.value)
|
||||
return None
|
||||
|
||||
@@ -285,7 +285,7 @@ class ExprAttrHandle(BaseHandle):
|
||||
# 检查 property getter
|
||||
PropKey = f'{ClassName}.{AttrName}'
|
||||
PropInfo = self.Trans.SymbolTable.get(PropKey)
|
||||
if PropInfo and hasattr(PropInfo, 'MetaList') and FuncMeta.PROPERTY_GETTER in PropInfo.MetaList:
|
||||
if PropInfo and PropInfo.MetaList and FuncMeta.PROPERTY_GETTER in PropInfo.MetaList:
|
||||
ObjVal = self.HandleExprLlvm(Node.value)
|
||||
GetterFunc = Gen._get_function(PropKey)
|
||||
if GetterFunc and ObjVal:
|
||||
@@ -297,7 +297,7 @@ class ExprAttrHandle(BaseHandle):
|
||||
TypeInfo = self.Trans.SymbolTable.get(ClassName)
|
||||
IsUnion = TypeInfo.IsUnion if TypeInfo else False
|
||||
IsCenum = TypeInfo.IsEnum if TypeInfo else False
|
||||
IsRenum = getattr(TypeInfo, 'IsRenum', False) if TypeInfo else False
|
||||
IsRenum = TypeInfo.IsRenum if TypeInfo else False
|
||||
|
||||
# REnum 处理
|
||||
if IsRenum:
|
||||
@@ -322,12 +322,12 @@ class ExprAttrHandle(BaseHandle):
|
||||
for qname in (f"{ClassName}.{AttrName}", f"{ClassName}_{AttrName}"):
|
||||
if qname in self.Trans.SymbolTable:
|
||||
info = self.Trans.SymbolTable[qname]
|
||||
if getattr(info, 'IsEnumMember', None) and isinstance(getattr(info, 'value', None), int):
|
||||
if info.IsEnumMember and isinstance(info.value, int):
|
||||
return ir.Constant(ir.IntType(32), info.value)
|
||||
for key, info in self.Trans.SymbolTable.items():
|
||||
if key == AttrName:
|
||||
if getattr(info, 'IsEnumMember', None) and getattr(info, 'EnumName', None) == ClassName:
|
||||
if isinstance(getattr(info, 'value', None), int):
|
||||
if info.IsEnumMember and info.EnumName == ClassName:
|
||||
if isinstance(info.value, int):
|
||||
return ir.Constant(ir.IntType(32), info.value)
|
||||
break
|
||||
|
||||
@@ -1062,7 +1062,7 @@ class ExprAttrHandle(BaseHandle):
|
||||
possible_keys.append(key)
|
||||
for lookup_key in possible_keys:
|
||||
SymInfo = self.Trans.SymbolTable.get(lookup_key)
|
||||
if SymInfo and getattr(SymInfo, 'IsDefine', None) and getattr(SymInfo, 'DefineValue', None) is not None:
|
||||
if SymInfo and SymInfo.IsDefine and SymInfo.DefineValue is not None:
|
||||
val = SymInfo.DefineValue
|
||||
if isinstance(val, int):
|
||||
if val > 0x7FFFFFFF or val < -0x80000000:
|
||||
@@ -1085,21 +1085,21 @@ class ExprAttrHandle(BaseHandle):
|
||||
for enum_key in enum_keys:
|
||||
if enum_key in self.Trans.SymbolTable:
|
||||
SymInfo = self.Trans.SymbolTable[enum_key]
|
||||
if getattr(SymInfo, 'IsEnum', None):
|
||||
if SymInfo.IsEnum:
|
||||
for qname in (f"{enum_key}.{member_name}", f"{enum_key}_{member_name}"):
|
||||
if qname in self.Trans.SymbolTable:
|
||||
info = self.Trans.SymbolTable[qname]
|
||||
if getattr(info, 'IsEnumMember', None) and isinstance(getattr(info, 'value', None), int):
|
||||
if info.IsEnumMember and isinstance(info.value, int):
|
||||
return ir.Constant(ir.IntType(32), info.value)
|
||||
for key, info in self.Trans.SymbolTable.items():
|
||||
if getattr(info, 'IsEnumMember', None) and getattr(info, 'EnumName', None) == enum_key and key == member_name:
|
||||
if isinstance(getattr(info, 'value', None), int):
|
||||
if info.IsEnumMember and info.EnumName == enum_key and key == member_name:
|
||||
if isinstance(info.value, int):
|
||||
return ir.Constant(ir.IntType(32), info.value)
|
||||
for key, info in self.Trans.SymbolTable.items():
|
||||
if getattr(info, 'IsEnumMember', None) and key == member_name:
|
||||
if isinstance(getattr(info, 'value', None), int):
|
||||
if info.IsEnumMember and key == member_name:
|
||||
if isinstance(info.value, int):
|
||||
for enum_key in enum_keys:
|
||||
if getattr(info, 'EnumName', None) == enum_key:
|
||||
if info.EnumName == enum_key:
|
||||
return ir.Constant(ir.IntType(32), info.value)
|
||||
return None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user