Skip to content

Commit 6eec7d8

Browse files
authored
Merge pull request #1 from unicorn-engine/mode-try-from-fix
fix mode enum
2 parents 2e7216c + 9af609d commit 6eec7d8

File tree

1 file changed

+30
-28
lines changed

1 file changed

+30
-28
lines changed

crates/unicorn-sys/src/lib.rs

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -64,35 +64,37 @@ impl TryFrom<i32> for Mode {
6464

6565
#[allow(clippy::cognitive_complexity)]
6666
fn try_from(v: i32) -> Result<Self, Self::Error> {
67-
match v {
68-
x if x == Self::LITTLE_ENDIAN.0 as i32 => Ok(Self::LITTLE_ENDIAN),
69-
x if x == Self::BIG_ENDIAN.0 as i32 => Ok(Self::BIG_ENDIAN),
70-
x if x == Self::ARM.0 as i32 => Ok(Self::ARM),
71-
x if x == Self::THUMB.0 as i32 => Ok(Self::THUMB),
72-
x if x == Self::MCLASS.0 as i32 => Ok(Self::MCLASS),
73-
x if x == Self::V8.0 as i32 => Ok(Self::V8),
74-
x if x == Self::ARMBE8.0 as i32 => Ok(Self::ARMBE8),
75-
x if x == Self::ARM926.0 as i32 => Ok(Self::ARM926),
76-
x if x == Self::ARM946.0 as i32 => Ok(Self::ARM946),
77-
x if x == Self::ARM1176.0 as i32 => Ok(Self::ARM1176),
78-
x if x == Self::MICRO.0 as i32 => Ok(Self::MICRO),
79-
x if x == Self::MIPS3.0 as i32 => Ok(Self::MIPS3),
80-
x if x == Self::MIPS32R6.0 as i32 => Ok(Self::MIPS32R6),
81-
x if x == Self::MIPS32.0 as i32 => Ok(Self::MIPS32),
82-
x if x == Self::MIPS64.0 as i32 => Ok(Self::MIPS64),
83-
x if x == Self::MODE_16.0 as i32 => Ok(Self::MODE_16),
84-
x if x == Self::MODE_32.0 as i32 => Ok(Self::MODE_32),
85-
x if x == Self::MODE_64.0 as i32 => Ok(Self::MODE_64),
86-
x if x == Self::PPC32.0 as i32 => Ok(Self::PPC32),
87-
x if x == Self::PPC64.0 as i32 => Ok(Self::PPC64),
88-
x if x == Self::QPX.0 as i32 => Ok(Self::QPX),
89-
x if x == Self::SPARC32.0 as i32 => Ok(Self::SPARC32),
90-
x if x == Self::SPARC64.0 as i32 => Ok(Self::SPARC64),
91-
x if x == Self::V9.0 as i32 => Ok(Self::V9),
92-
x if x == Self::RISCV32.0 as i32 => Ok(Self::RISCV32),
93-
x if x == Self::RISCV64.0 as i32 => Ok(Self::RISCV64),
94-
_ => Err(uc_error::MODE),
67+
const VALID_MODES: i32 = (Mode::LITTLE_ENDIAN.0
68+
| Mode::BIG_ENDIAN.0
69+
| Mode::ARM.0
70+
| Mode::THUMB.0
71+
| Mode::MCLASS.0
72+
| Mode::V8.0
73+
| Mode::ARMBE8.0
74+
| Mode::ARM926.0
75+
| Mode::ARM946.0
76+
| Mode::ARM1176.0
77+
| Mode::MICRO.0
78+
| Mode::MIPS3.0
79+
| Mode::MIPS32R6.0
80+
| Mode::MIPS32.0
81+
| Mode::MIPS64.0
82+
| Mode::MODE_16.0
83+
| Mode::MODE_32.0
84+
| Mode::MODE_64.0
85+
| Mode::PPC32.0
86+
| Mode::PPC64.0
87+
| Mode::QPX.0
88+
| Mode::SPARC32.0
89+
| Mode::SPARC64.0
90+
| Mode::V9.0
91+
| Mode::RISCV32.0
92+
| Mode::RISCV64.0) as i32;
93+
94+
if (v & !VALID_MODES) != 0 {
95+
return Err(uc_error::MODE);
9596
}
97+
Ok(Self(v as u32))
9698
}
9799
}
98100

0 commit comments

Comments
 (0)