summaryrefslogtreecommitdiff
path: root/rust/src
diff options
context:
space:
mode:
authorRyan Snyder <ryan@vector35.com>2024-05-01 08:32:05 -0400
committerRyan Snyder <ryan@vector35.com>2024-05-01 08:32:05 -0400
commit0e1e0d995f99b64e4282b546cbb6d9fdbc1b8f1a (patch)
tree3df16b75af2af5f103f83bd08226952292bdbca0 /rust/src
parent62eaff47182657ca692d02e73f0aa5828dd74f4c (diff)
parentc54ccd257a0c517b7ba429aa155f600878a6067a (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.rs21
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) };
}
}
}