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")