@@ -144,19 +144,23 @@ impl BranchInfo {
144144 }
145145}
146146
147- impl From < BranchInfo > for BNBranchType {
147+ impl From < BranchInfo > for BNBranchInfo {
148148 fn from ( value : BranchInfo ) -> Self {
149- match value. kind {
150- BranchKind :: Unresolved => BNBranchType :: UnresolvedBranch ,
151- BranchKind :: Unconditional ( _) => BNBranchType :: UnconditionalBranch ,
152- BranchKind :: False ( _) => BNBranchType :: FalseBranch ,
153- BranchKind :: True ( _) => BNBranchType :: TrueBranch ,
154- BranchKind :: Call ( _) => BNBranchType :: CallDestination ,
155- BranchKind :: FunctionReturn => BNBranchType :: FunctionReturn ,
156- BranchKind :: SystemCall => BNBranchType :: SystemCall ,
157- BranchKind :: Indirect => BNBranchType :: IndirectBranch ,
158- BranchKind :: Exception => BNBranchType :: ExceptionBranch ,
159- BranchKind :: UserDefined => BNBranchType :: UserDefinedBranch ,
149+ Self {
150+ branchType : match value. kind {
151+ BranchKind :: Unresolved => BNBranchType :: UnresolvedBranch ,
152+ BranchKind :: Unconditional ( _) => BNBranchType :: UnconditionalBranch ,
153+ BranchKind :: False ( _) => BNBranchType :: FalseBranch ,
154+ BranchKind :: True ( _) => BNBranchType :: TrueBranch ,
155+ BranchKind :: Call ( _) => BNBranchType :: CallDestination ,
156+ BranchKind :: FunctionReturn => BNBranchType :: FunctionReturn ,
157+ BranchKind :: SystemCall => BNBranchType :: SystemCall ,
158+ BranchKind :: Indirect => BNBranchType :: IndirectBranch ,
159+ BranchKind :: Exception => BNBranchType :: ExceptionBranch ,
160+ BranchKind :: UserDefined => BNBranchType :: UserDefinedBranch ,
161+ } ,
162+ branchTarget : value. target ( ) . unwrap_or_default ( ) ,
163+ branchArch : value. arch . map ( |a| a. handle ) . unwrap_or ( std:: ptr:: null_mut ( ) ) ,
160164 }
161165 }
162166}
@@ -207,13 +211,16 @@ impl InstructionInfo {
207211
208212impl From < BNInstructionInfo > for InstructionInfo {
209213 fn from ( value : BNInstructionInfo ) -> Self {
210- // TODO: This is quite ugly, but we destructure the branch info so this will have to do.
211214 let mut branch_info = [ None ; NUM_BRANCH_INFO ] ;
212- #[ allow( clippy:: needless_range_loop) ]
213- for i in 0 ..value. branchCount . min ( NUM_BRANCH_INFO ) {
214- let branch_target = value. branchTarget [ i] ;
215+ for ( i, info) in value
216+ . branchInfo
217+ . iter ( )
218+ . take ( value. branchCount . min ( NUM_BRANCH_INFO ) )
219+ . enumerate ( )
220+ {
221+ let branch_target = info. branchTarget ;
215222 branch_info[ i] = Some ( BranchInfo {
216- kind : match value . branchType [ i ] {
223+ kind : match info . branchType {
217224 BNBranchType :: UnconditionalBranch => BranchKind :: Unconditional ( branch_target) ,
218225 BNBranchType :: FalseBranch => BranchKind :: False ( branch_target) ,
219226 BNBranchType :: TrueBranch => BranchKind :: True ( branch_target) ,
@@ -225,10 +232,10 @@ impl From<BNInstructionInfo> for InstructionInfo {
225232 BNBranchType :: UnresolvedBranch => BranchKind :: Unresolved ,
226233 BNBranchType :: UserDefinedBranch => BranchKind :: UserDefined ,
227234 } ,
228- arch : if value . branchArch [ i ] . is_null ( ) {
235+ arch : if info . branchArch . is_null ( ) {
229236 None
230237 } else {
231- Some ( unsafe { CoreArchitecture :: from_raw ( value . branchArch [ i ] ) } )
238+ Some ( unsafe { CoreArchitecture :: from_raw ( info . branchArch ) } )
232239 } ,
233240 } ) ;
234241 }
@@ -244,38 +251,15 @@ impl From<BNInstructionInfo> for InstructionInfo {
244251impl From < InstructionInfo > for BNInstructionInfo {
245252 fn from ( value : InstructionInfo ) -> Self {
246253 let branch_count = value. branches . into_iter ( ) . filter ( Option :: is_some) . count ( ) ;
247- // TODO: This is quite ugly, but we destructure the branch info so this will have to do.
248- let branch_info_0 = value. branches [ 0 ] . unwrap_or_default ( ) ;
249- let branch_info_1 = value. branches [ 1 ] . unwrap_or_default ( ) ;
250- let branch_info_2 = value. branches [ 2 ] . unwrap_or_default ( ) ;
251254 Self {
252255 length : value. length ,
253256 branchCount : branch_count,
254257 archTransitionByTargetAddr : value. arch_transition_by_target_addr ,
255258 delaySlots : value. delay_slots ,
256- branchType : [
257- branch_info_0. into ( ) ,
258- branch_info_1. into ( ) ,
259- branch_info_2. into ( ) ,
260- ] ,
261- branchTarget : [
262- branch_info_0. target ( ) . unwrap_or_default ( ) ,
263- branch_info_1. target ( ) . unwrap_or_default ( ) ,
264- branch_info_2. target ( ) . unwrap_or_default ( ) ,
265- ] ,
266- branchArch : [
267- branch_info_0
268- . arch
269- . map ( |a| a. handle )
270- . unwrap_or ( std:: ptr:: null_mut ( ) ) ,
271- branch_info_1
272- . arch
273- . map ( |a| a. handle )
274- . unwrap_or ( std:: ptr:: null_mut ( ) ) ,
275- branch_info_2
276- . arch
277- . map ( |a| a. handle )
278- . unwrap_or ( std:: ptr:: null_mut ( ) ) ,
259+ branchInfo : [
260+ value. branches [ 0 ] . unwrap_or_default ( ) . into ( ) ,
261+ value. branches [ 1 ] . unwrap_or_default ( ) . into ( ) ,
262+ value. branches [ 2 ] . unwrap_or_default ( ) . into ( ) ,
279263 ] ,
280264 }
281265 }
0 commit comments