From 67628eb7550f3f61a405a14f2a53ecff1ff10051 Mon Sep 17 00:00:00 2001 From: Daniel Wyatt Date: Sun, 13 Sep 2026 18:17:21 -0400 Subject: [PATCH] Add BufferField support for Increment/Decrement. --- src/aml/mod.rs | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/aml/mod.rs b/src/aml/mod.rs index cb3af956..0b184111 100644 --- a/src/aml/mod.rs +++ b/src/aml/mod.rs @@ -497,24 +497,37 @@ where self.do_unary_maths(&mut context, op)?; } Opcode::Increment | Opcode::Decrement => { - let [Argument::Object(operand)] = &op.arguments[..] else { panic!() }; + extract_args!(op => [Argument::Object(operand)]); let operand = operand.clone().unwrap_transparent_reference(); let token = self.object_token.lock(); - let Object::Integer(operand) = (unsafe { operand.gain_mut(&token) }) else { - Err(AmlError::ObjectNotOfExpectedType { - expected: ObjectType::Integer, - got: operand.typ(), - })? + let operand = unsafe {operand.gain_mut(&token)}; + let value = match operand { + Object::Integer(operand) => { + *operand + } + Object::BufferField{..} => { + operand.to_integer(self.integer_size)? + } + _ => Err(AmlError::ObjectNotOfExpectedType { expected: ObjectType::Integer, got: operand.typ() })? }; let new_value = match op.op { - Opcode::Increment => operand.wrapping_add(1), - Opcode::Decrement => operand.wrapping_sub(1), + Opcode::Increment => value.wrapping_add(1), + Opcode::Decrement => value.wrapping_sub(1), _ => unreachable!(), }; - *operand = new_value; + match operand { + Object::Integer(operand) => { + *operand = new_value; + } + Object::BufferField{..} => { + operand.write_buffer_field(&new_value.to_le_bytes(), &token)?; + } + _ => unreachable!() + } + context.contribute_arg(Argument::Object(Object::Integer(new_value).wrap())); context.retire_op(op); }