diff options
Diffstat (limited to 'src/object/read.rs')
-rw-r--r-- | src/object/read.rs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/object/read.rs b/src/object/read.rs index 641bdcc..c41163a 100644 --- a/src/object/read.rs +++ b/src/object/read.rs @@ -7,7 +7,12 @@ use std::io::Seek; use std::{collections::BTreeMap, io::Read}; impl Value { - pub fn read(ty: &TypeTreeNode, e: Endianness, data: &mut (impl Read + Seek)) -> Result<Value> { + pub fn read( + ty: &TypeTreeNode, + e: Endianness, + file: usize, + data: &mut (impl Read + Seek), + ) -> Result<Value> { let mut align = false; let pos_before = data.stream_position()?; let r = match ty.type_string.as_str() { @@ -36,7 +41,7 @@ impl Value { Ok(Value::F64(data.read_f64(e)?)) } "string" => { - let Value::Array(arr) = Value::read(&ty.children[0], e, data)? else { + let Value::Array(arr) = Value::read(&ty.children[0], e, file, data)? else { unreachable!() }; let bytes = arr @@ -51,13 +56,13 @@ impl Value { "Array" => { align |= ty.children[0].post_align(); assert_eq!(ty.byte_size, -1); - let Value::I32(size) = Value::read(&ty.children[0], e, data)? else { + let Value::I32(size) = Value::read(&ty.children[0], e, file, data)? else { unreachable!() }; trace!("array of size {size}"); let mut elems = Vec::new(); for _ in 0..size { - elems.push(Value::read(&ty.children[1], e, data)?); + elems.push(Value::read(&ty.children[1], e, file, data)?); } Ok(Value::Array(elems)) } @@ -73,10 +78,11 @@ impl Value { } let mut fields = BTreeMap::new(); for c in &ty.children { - fields.insert(c.name_string.clone(), Value::read(&c, e, data)?); + fields.insert(c.name_string.clone(), Value::read(&c, e, file, data)?); } Ok(Value::Object { fields, + file, class: ty.type_string.clone(), }) } |