diff --git a/crates/oxide_fold/src/propagate.rs b/crates/oxide_fold/src/propagate.rs index 9f435727..b48a6e12 100644 --- a/crates/oxide_fold/src/propagate.rs +++ b/crates/oxide_fold/src/propagate.rs @@ -86,15 +86,13 @@ pub fn fold_function(f: &mut IRFunction) -> bool { // VOID 无操作数,恒折 Undefined。 OpCode::VOID => Some(Constant::Undefined), // 其余一元:操作数须为已知寄存器。 - OpCode::NOT | OpCode::TYPEOF | OpCode::NEG | OpCode::UNARY_PLUS | OpCode::BIT_NOT => { - match inst.a { - Operand::Reg(x) => known - .get(x as usize) - .and_then(|c| c.as_ref()) - .and_then(|c| fold_table::fold_unary(inst.op, c)), - _ => None, - } - } + OpCode::NOT | OpCode::TYPEOF | OpCode::NEG | OpCode::UNARY_PLUS | OpCode::BIT_NOT => match inst.a { + Operand::Reg(x) => known + .get(x as usize) + .and_then(|c| c.as_ref()) + .and_then(|c| fold_table::fold_unary(inst.op, c)), + _ => None, + }, // 二元算术:两操作数须为已知寄存器。 OpCode::ADD | OpCode::SUB | OpCode::MUL | OpCode::DIV | OpCode::MOD | OpCode::EXP => { match (inst.a, inst.b) { diff --git a/crates/oxide_fold/tests/fold_tests.rs b/crates/oxide_fold/tests/fold_tests.rs index 7ee45fb1..24587dbf 100644 --- a/crates/oxide_fold/tests/fold_tests.rs +++ b/crates/oxide_fold/tests/fold_tests.rs @@ -328,10 +328,7 @@ fn fold_add_bigint() { #[test] fn fold_add_bigint_mixed_not_folded() { // 1n + 1 BigInt 混合 → 不折(运行期抛 TypeError)。 - let (a, b) = ( - Constant::BigInt(num_bigint::BigInt::from(1)), - Constant::Int(1), - ); + let (a, b) = (Constant::BigInt(num_bigint::BigInt::from(1)), Constant::Int(1)); let mut f = func( &[a, b], vec![