From f21c54097a4e3482819f891d807d29d62b4d2e69 Mon Sep 17 00:00:00 2001 From: Angie Date: Wed, 7 Aug 2024 19:49:27 -0400 Subject: [PATCH] more reference fixing --- src/rs/file.rs | 31 +++++++++++++++---------------- src/rs/segment.rs | 10 +++------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/rs/file.rs b/src/rs/file.rs index 6989cf2..49a3fd5 100644 --- a/src/rs/file.rs +++ b/src/rs/file.rs @@ -58,27 +58,22 @@ impl File { utils::is_noload_section(&self.section_type) } - pub fn find_symbol_by_name(&self, sym_name: &str) -> Option { - for sym in &self.symbols { - if sym.name == sym_name { - return Some(sym.clone()); - } - } - None + pub fn find_symbol_by_name(&self, sym_name: &str) -> Option<&symbol::Symbol> { + self.symbols.iter().find(|&sym| sym.name == sym_name) } - pub fn find_symbol_by_vram_or_vrom(&self, address: u64) -> Option<(symbol::Symbol, i64)> { + pub fn find_symbol_by_vram_or_vrom(&self, address: u64) -> Option<(&symbol::Symbol, i64)> { let mut prev_sym: Option<&symbol::Symbol> = None; let is_vram = address >= 0x1000000; for sym in &self.symbols { if sym.vram == address { - return Some((sym.clone(), 0)); + return Some((sym, 0)); } if let Some(sym_vrom_temp) = sym.vrom { if sym_vrom_temp == address { - return Some((sym.clone(), 0)); + return Some((sym, 0)); } } @@ -90,7 +85,7 @@ impl File { if offset < 0 { return None; } - return Some((prev_sym_temp.clone(), offset)); + return Some((prev_sym_temp, offset)); } } } @@ -99,7 +94,7 @@ impl File { if offset < 0 { return None; } - return Some((prev_sym_temp.clone(), offset)); + return Some((prev_sym_temp, offset)); } } @@ -114,7 +109,7 @@ impl File { if offset < 0 { return None; } - return Some((prev_sym_temp.clone(), offset)); + return Some((prev_sym_temp, offset)); } } @@ -123,7 +118,7 @@ impl File { if offset < 0 { return None; } - return Some((prev_sym_temp.clone(), offset)); + return Some((prev_sym_temp, offset)); } } } @@ -391,11 +386,15 @@ pub(crate) mod python_bindings { } pub fn findSymbolByName(&self, sym_name: &str) -> Option { - self.find_symbol_by_name(sym_name) + self.find_symbol_by_name(sym_name).cloned() } pub fn findSymbolByVramOrVrom(&self, address: u64) -> Option<(symbol::Symbol, i64)> { - self.find_symbol_by_vram_or_vrom(address) + if let Some((sym, offset)) = self.find_symbol_by_vram_or_vrom(address) { + Some((sym.clone(), offset)) + } else { + None + } } #[staticmethod] diff --git a/src/rs/segment.rs b/src/rs/segment.rs index 78950f2..ef3e6ea 100644 --- a/src/rs/segment.rs +++ b/src/rs/segment.rs @@ -77,7 +77,7 @@ impl Segment { if let Some(sym) = file.find_symbol_by_name(sym_name) { return Some(found_symbol_info::FoundSymbolInfo::new_default( file.clone(), - sym, + sym.clone(), )); } } @@ -89,13 +89,10 @@ impl Segment { address: u64, ) -> Option { for file in &self.files_list { - if let Some(pair) = file.find_symbol_by_vram_or_vrom(address) { - let sym = pair.0; - let offset = pair.1; - + if let Some((sym, offset)) = file.find_symbol_by_vram_or_vrom(address) { return Some(found_symbol_info::FoundSymbolInfo::new( file.clone(), - sym, + sym.clone(), offset, )); } @@ -106,7 +103,6 @@ impl Segment { pub fn mix_folders(&self) -> Self { let mut new_segment = self.clone_no_filelist(); - // > let mut aux_dict = HashMap::new(); // Put files in the same folder together