diff --git a/crates/oxide_fold/src/fold_table.rs b/crates/oxide_fold/src/fold_table.rs index e5d7d0b5..e7bdf417 100644 --- a/crates/oxide_fold/src/fold_table.rs +++ b/crates/oxide_fold/src/fold_table.rs @@ -27,8 +27,7 @@ use oxide_bytecode::module::Constant; use oxide_bytecode::opcode::OpCode; use oxide_runtime_api::{ - abstract_eq_primitives, relational_compare, strict_equality, to_boolean, to_int32, to_number, - to_uint32, + abstract_eq_primitives, relational_compare, strict_equality, to_boolean, to_int32, to_number, to_uint32, }; use oxide_types::string_forge::encode_key; use oxide_types::value::JsValue; diff --git a/crates/oxide_fold/src/propagate.rs b/crates/oxide_fold/src/propagate.rs index d72e6e45..c7530b74 100644 --- a/crates/oxide_fold/src/propagate.rs +++ b/crates/oxide_fold/src/propagate.rs @@ -116,9 +116,20 @@ pub fn fold_function(f: &mut IRFunction) -> bool { } // C 组位运算与比较:两操作数须为已知寄存器且均在四变体域 // (BigInt/String/Undefined 操作数由表内守卫不折)。 - OpCode::BIT_AND | OpCode::BIT_OR | OpCode::BIT_XOR | OpCode::SHL | OpCode::SHR - | OpCode::USHR | OpCode::LT | OpCode::GT | OpCode::LTE | OpCode::GTE | OpCode::EQ - | OpCode::NEQ | OpCode::STRICT_EQ | OpCode::STRICT_NEQ => match (inst.a, inst.b) { + OpCode::BIT_AND + | OpCode::BIT_OR + | OpCode::BIT_XOR + | OpCode::SHL + | OpCode::SHR + | OpCode::USHR + | OpCode::LT + | OpCode::GT + | OpCode::LTE + | OpCode::GTE + | OpCode::EQ + | OpCode::NEQ + | OpCode::STRICT_EQ + | OpCode::STRICT_NEQ => match (inst.a, inst.b) { (Operand::Reg(x), Operand::Reg(y)) => match ( known.get(x as usize).and_then(|c| c.as_ref()), known.get(y as usize).and_then(|c| c.as_ref()),