diff options
| author | Ryan Snyder <ryan@vector35.com> | 2024-05-01 08:32:05 -0400 |
|---|---|---|
| committer | Ryan Snyder <ryan@vector35.com> | 2024-05-01 08:32:05 -0400 |
| commit | 0e1e0d995f99b64e4282b546cbb6d9fdbc1b8f1a (patch) | |
| tree | 3df16b75af2af5f103f83bd08226952292bdbca0 /rust/src | |
| parent | 62eaff47182657ca692d02e73f0aa5828dd74f4c (diff) | |
| parent | c54ccd257a0c517b7ba429aa155f600878a6067a (diff) | |
Merge branch 'remove-shrink_to_fit' of github.com:rbran/binaryninja-api into dev
Diffstat (limited to 'rust/src')
| -rw-r--r-- | rust/src/disassembly.rs | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/rust/src/disassembly.rs b/rust/src/disassembly.rs index f213fa0e..8b3a4cb5 100644 --- a/rust/src/disassembly.rs +++ b/rust/src/disassembly.rs @@ -307,10 +307,9 @@ impl std::fmt::Display for DisassemblyTextLine { } impl From<Vec<InstructionTextToken>> for DisassemblyTextLine { - fn from(mut tokens: Vec<InstructionTextToken>) -> Self { - tokens.shrink_to_fit(); + fn from(tokens: Vec<InstructionTextToken>) -> Self { + let mut tokens: Box<[_]> = tokens.into(); - assert!(tokens.len() == tokens.capacity()); // TODO: let (tokens_pointer, tokens_len, _) = unsafe { tokens.into_raw_parts() }; // Can't use for now...still a rust nightly feature let tokens_pointer = tokens.as_mut_ptr(); let tokens_len = tokens.len(); @@ -345,14 +344,11 @@ impl From<Vec<InstructionTextToken>> for DisassemblyTextLine { impl From<&Vec<&str>> for DisassemblyTextLine { fn from(string_tokens: &Vec<&str>) -> Self { - let mut tokens: Vec<BNInstructionTextToken> = Vec::with_capacity(string_tokens.len()); - tokens.extend( - string_tokens.iter().map(|&token| { - InstructionTextToken::new(token, InstructionTextTokenContents::Text).0 - }), - ); + let mut tokens: Box<[BNInstructionTextToken]> = string_tokens + .iter() + .map(|&token| InstructionTextToken::new(token, InstructionTextTokenContents::Text).0) + .collect(); - assert!(tokens.len() == tokens.capacity()); // let (tokens_pointer, tokens_len, _) = unsafe { tokens.into_raw_parts() }; // Can't use for now...still a rust nighly feature let tokens_pointer = tokens.as_mut_ptr(); let tokens_len = tokens.len(); @@ -416,8 +412,9 @@ impl Default for DisassemblyTextLine { impl Drop for DisassemblyTextLine { fn drop(&mut self) { - unsafe { - Vec::from_raw_parts(self.0.tokens, self.0.count, self.0.count); + if !self.0.tokens.is_null() { + let ptr = core::ptr::slice_from_raw_parts_mut(self.0.tokens, self.0.count); + let _ = unsafe { Box::from_raw(ptr) }; } } } |
