From 41c190c3232613fd064a4dd5fd8fa81ae150f40f Mon Sep 17 00:00:00 2001 From: Martin Hughes Date: Tue, 24 Mar 2026 10:26:08 +0000 Subject: [PATCH] Unwrap reference in `do_size_of` --- src/aml/mod.rs | 2 +- tests/package_sizeof.asl | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 tests/package_sizeof.asl diff --git a/src/aml/mod.rs b/src/aml/mod.rs index 05e69ca7..5ce13767 100644 --- a/src/aml/mod.rs +++ b/src/aml/mod.rs @@ -2293,7 +2293,7 @@ where fn do_size_of(&self, context: &mut MethodContext, op: OpInFlight) -> Result<(), AmlError> { extract_args!(op => [Argument::Object(object)]); - let object = object.clone().unwrap_transparent_reference(); + let object = object.clone().unwrap_reference(); let result = match *object { Object::Buffer(ref buffer) => buffer.len(), diff --git a/tests/package_sizeof.asl b/tests/package_sizeof.asl new file mode 100644 index 00000000..652f0809 --- /dev/null +++ b/tests/package_sizeof.asl @@ -0,0 +1,22 @@ +DefinitionBlock("", "DSDT", 1, "RSACPI", "PACKGE", 1) { + // Checks fix for issue 282 - SizeOf on a reference to a package doesn't work. + Name(FOO, Package (3) { + Package (0x01) { + 0x1, + }, + + Package (0x01) { + 0x02, + }, + + Package (0x01) { + 0x03, + } + }) + + Method (MAIN, 0, NotSerialized) { + Local0 = Sizeof (FOO) + Local1 = Sizeof (FOO[0]) // This was what failed in issue 282. + Return ((Local0 != 3) || (Local1 != 1)) + } +}