From a56fc6badc0aa0c1076d9bf66b3037ee87512d61 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 13 Aug 2026 03:01:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(type):=20CDefine=20=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E6=9C=9F=E5=B8=B8=E9=87=8F=E8=A1=A8=E8=BE=BE=E5=BC=8F=E8=A1=A5?= =?UTF-8?q?=E9=BD=90=E4=BA=8C=E5=85=83=E8=BF=90=E7=AE=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- App/lib/core/Gen/AssignGenMixin.vp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/App/lib/core/Gen/AssignGenMixin.vp b/App/lib/core/Gen/AssignGenMixin.vp index d44ff08..7ea0b1b 100644 --- a/App/lib/core/Gen/AssignGenMixin.vp +++ b/App/lib/core/Gen/AssignGenMixin.vp @@ -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")