Implemented index references

This commit is contained in:
Connor Wood
2017-07-17 13:22:06 +01:00
parent c01a04148b
commit 258cab878c
2 changed files with 6 additions and 4 deletions

View File

@@ -28,7 +28,8 @@ pub enum ObjectReference {
ArgObj(u8),
LocalObj(u8),
NamedObj(String),
Object(Box<AmlValue>)
Object(Box<AmlValue>),
Index(Box<AmlValue>, Box<AmlValue>)
}
#[derive(Debug, Clone)]

View File

@@ -353,16 +353,17 @@ fn parse_def_index(data: &[u8],
})
}
// TODO: Store the result, if appropriate
// TODO: Perform computation
parser_opcode!(data, 0x88);
let obj = parse_term_arg(&data[1..], ctx)?;
let idx = parse_term_arg(&data[1 + obj.len..], ctx)?;
let target = parse_target(&data[1 + obj.len + idx.len..], ctx)?;
let reference = AmlValue::ObjectReference(ObjectReference::Index(Box::new(obj.val), Box::new(idx.val)));
ctx.modify(target.val, reference.clone());
Ok(AmlParseType {
val: AmlValue::Uninitialized,
val: reference,
len: 1 + obj.len + idx.len + target.len
})
}