diff --git a/lib/core/Handles/HandlesExprAttr.py b/lib/core/Handles/HandlesExprAttr.py index b19db18..615f926 100644 --- a/lib/core/Handles/HandlesExprAttr.py +++ b/lib/core/Handles/HandlesExprAttr.py @@ -2227,9 +2227,9 @@ class ExprAttrHandle(BaseHandle): if SymInfo and SymInfo.IsDefine and SymInfo.DefineValue is not None: val: Any = SymInfo.DefineValue if isinstance(val, int): - if val > 0x7FFFFFFF or val < -0x80000000: - return ir.Constant(ir.IntType(64), val & 0xFFFFFFFFFFFFFFFF) - return ir.Constant(ir.IntType(32), val) + # 复用 _make_define_constant:带声明类型按声明位宽,否则按值推断 + # (含无符号 32 位高半区),与本文件其它 CDefine 解析点同口径。 + return self._make_define_constant(Gen, val, attr_name) elif isinstance(val, float): return ir.Constant(ir.FloatType(), val) # 回退:检查 Gen._define_constants(LlvmGenerator 预扫描阶段填充) @@ -2238,9 +2238,9 @@ class ExprAttrHandle(BaseHandle): if key in define_constants: val: Any = define_constants[key] if isinstance(val, int): - if val > 0x7FFFFFFF or val < -0x80000000: - return ir.Constant(ir.IntType(64), val & 0xFFFFFFFFFFFFFFFF) - return ir.Constant(ir.IntType(32), val) + # 复用 _make_define_constant:带声明类型按声明位宽,否则按值推断 + # (含无符号 32 位高半区),与本文件其它 CDefine 解析点同口径。 + return self._make_define_constant(Gen, val, attr_name) elif isinstance(val, float): return ir.Constant(ir.FloatType(), val) # 回退:_all_define_constants(Phase2Translator 从所有 .pyi 预提取的跨模块 CDefine, @@ -2256,9 +2256,7 @@ class ExprAttrHandle(BaseHandle): if key2 in all_dc: val2: Any = all_dc[key2] if isinstance(val2, int): - if val2 > 0x7FFFFFFF or val2 < -0x80000000: - return ir.Constant(ir.IntType(64), val2 & 0xFFFFFFFFFFFFFFFF) - return ir.Constant(ir.IntType(32), val2) + return self._make_define_constant(Gen, val2, attr_name) elif isinstance(val2, float): return ir.Constant(ir.FloatType(), val2) return None