fix(type): CDefine 编译期常量表达式补齐二元运算符

zdef.vp 中 ZDEFLATE_WINDOW_SIZE = (1 << ZDEFLATE_WINDOW_BITS) 是
LShift 表达式,extract_cdefine_int_value 的 BinOp 分支原先只支持
|/&/+/-,被 fail-fast 误杀。对齐 TPC ConstEvaluator 补齐
BitXor/LShift/RShift/Mult/FloorDiv/Mod
This commit is contained in:
TermiNexus committed 2026-08-13 03:01:02 +08:00
1 parent 64195f183e
commit a56fc6badc
1 file changed
+13 -1
+13 -1
View File
@@ -88,7 +88,7 @@ class AssignGenMixin:
HandlesType.fatal_error(val_node, "CDefine 值提取失败:无法从表达式解析编译期常量", "TypeError")
return cn.int_val
# Case 2: BinOp — 如 FOREGROUND_RED | FOREGROUND_GREEN
# Case 2: BinOp — 如 FOREGROUND_RED | FOREGROUND_GREEN、(1 << ZDEFLATE_WINDOW_BITS)
if k == ast.ASTKind.BinOp:
bop: ast.BinOp | t.CPtr = (ast.BinOp | t.CPtr)(val_node)
left_val: int = self.extract_cdefine_int_value(bop.left)
@@ -97,10 +97,22 @@ class AssignGenMixin:
return left_val | right_val
if bop.op == ast.OpKind.BitAnd:
return left_val & right_val
if bop.op == ast.OpKind.BitXor:
return left_val ^ right_val
if bop.op == ast.OpKind.LShift:
return left_val << right_val
if bop.op == ast.OpKind.RShift:
return left_val >> right_val
if bop.op == ast.OpKind.Add:
return left_val + right_val
if bop.op == ast.OpKind.Sub:
return left_val - right_val
if bop.op == ast.OpKind.Mult:
return left_val * right_val
if bop.op == ast.OpKind.FloorDiv:
return left_val // right_val
if bop.op == ast.OpKind.Mod:
return left_val % right_val
# 未知 BinOp 运算符:直接报错终止(fail-fast)
HandlesType.fatal_error(val_node, "CDefine 值提取失败:无法从表达式解析编译期常量", "TypeError")