diff options
Diffstat (limited to 'src/object/read.rs')
-rw-r--r-- | src/object/read.rs | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/object/read.rs b/src/object/read.rs index c41163a..013874c 100644 --- a/src/object/read.rs +++ b/src/object/read.rs @@ -1,16 +1,17 @@ use super::Value; use crate::helper::{AlignExt, Endianness, ReadExt}; -use crate::serialized_file::TypeTreeNode; +use crate::serialized_file::{ExternalsContext, TypeTreeNode}; use anyhow::{Result, bail}; use log::trace; use std::io::Seek; +use std::sync::Arc; use std::{collections::BTreeMap, io::Read}; impl Value { pub fn read( ty: &TypeTreeNode, e: Endianness, - file: usize, + ecx: &Arc<ExternalsContext>, data: &mut (impl Read + Seek), ) -> Result<Value> { let mut align = false; @@ -41,7 +42,7 @@ impl Value { Ok(Value::F64(data.read_f64(e)?)) } "string" => { - let Value::Array(arr) = Value::read(&ty.children[0], e, file, data)? else { + let Value::Array(arr) = Value::read(&ty.children[0], e, ecx, data)? else { unreachable!() }; let bytes = arr @@ -56,13 +57,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, file, data)? else { + let Value::I32(size) = Value::read(&ty.children[0], e, ecx, 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, file, data)?); + elems.push(Value::read(&ty.children[1], e, ecx, data)?); } Ok(Value::Array(elems)) } @@ -78,11 +79,11 @@ impl Value { } let mut fields = BTreeMap::new(); for c in &ty.children { - fields.insert(c.name_string.clone(), Value::read(&c, e, file, data)?); + fields.insert(c.name_string.clone(), Value::read(&c, e, ecx, data)?); } Ok(Value::Object { fields, - file, + ecx: ecx.to_owned(), class: ty.type_string.clone(), }) } |