Skip to content

Commit c3efed1

Browse files
committed
aml: implement DerefOf
1 parent 15b608d commit c3efed1

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

aml/src/lib.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,22 @@ where
392392
};
393393
context.contribute_arg(Argument::Object(Arc::new(result)));
394394
}
395+
Opcode::DerefOf => {
396+
let [Argument::Object(object)] = &op.arguments[..] else { panic!() };
397+
let result = if object.typ() == ObjectType::Reference {
398+
object.clone().unwrap_reference()
399+
} else if object.typ() == ObjectType::String {
400+
let path = AmlName::from_str(&object.as_string().unwrap())?
401+
.resolve(&context.current_scope)?;
402+
self.namespace.lock().get(path)?.clone()
403+
} else {
404+
return Err(AmlError::ObjectNotOfExpectedType {
405+
expected: ObjectType::Reference,
406+
got: object.typ(),
407+
});
408+
};
409+
context.contribute_arg(Argument::Object(result));
410+
}
395411
Opcode::Sleep => {
396412
let [Argument::Object(msec)] = &op.arguments[..] else { panic!() };
397413
self.handler.sleep(msec.as_integer()?);

0 commit comments

Comments
 (0)