Skip to content

Commit 7ad499a

Browse files
committed
fixup: riscv: use result for CSR enum conversion
Uses the crate result type for converting a CSR enum type from a `usize`.
1 parent 158db4f commit 7ad499a

File tree

4 files changed

+18
-39
lines changed

4 files changed

+18
-39
lines changed

riscv/src/register/macros.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -666,10 +666,10 @@ macro_rules! csr_field_enum {
666666
}
667667

668668
/// Attempts to convert a [`usize`] into a valid variant.
669-
pub const fn from_usize(val: usize) -> Option<Self> {
669+
pub const fn from_usize(val: usize) -> $crate::result::Result<Self> {
670670
match val {
671-
$($value => Some(Self::$variant),)+
672-
_ => None,
671+
$($value => Ok(Self::$variant),)+
672+
_ => Err($crate::result::Error::InvalidVariant(val)),
673673
}
674674
}
675675

@@ -1036,10 +1036,7 @@ macro_rules! read_only_csr_field {
10361036
$field_end - $field_start + 1,
10371037
);
10381038

1039-
$field_ty::from_usize(value).ok_or($crate::result::Error::InvalidFieldVariant {
1040-
field: stringify!($field),
1041-
value,
1042-
})
1039+
$field_ty::from_usize(value)
10431040
} else {
10441041
Err($crate::result::Error::IndexOutOfBounds {
10451042
index: $field_start,

riscv/src/register/tests/read_only_csr.rs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -114,13 +114,7 @@ fn test_mtest_read_only() {
114114
assert_eq!(mtest.multi_field(), 0x0);
115115
assert_eq!(mtest.try_multi_field(), Ok(0x0));
116116

117-
assert_eq!(
118-
mtest.try_field_enum(),
119-
Err(Error::InvalidFieldVariant {
120-
field: "field_enum",
121-
value: 0,
122-
})
123-
);
117+
assert_eq!(mtest.try_field_enum(), Err(Error::InvalidVariant(0)),);
124118

125119
[
126120
MtestFieldEnum::Field1,
@@ -137,11 +131,5 @@ fn test_mtest_read_only() {
137131

138132
// check that setting an invalid variant returns `None`
139133
mtest = Mtest::from_bits(0xbad << 7);
140-
assert_eq!(
141-
mtest.try_field_enum(),
142-
Err(Error::InvalidFieldVariant {
143-
field: "field_enum",
144-
value: 13,
145-
})
146-
);
134+
assert_eq!(mtest.try_field_enum(), Err(Error::InvalidVariant(13)),);
147135
}

riscv/src/register/tests/read_write_csr.rs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,7 @@ fn test_mtest_read_write() {
135135
assert_eq!(mtest.multi_field(), 0x0);
136136
assert_eq!(mtest.try_multi_field(), Ok(0x0));
137137

138-
assert_eq!(
139-
mtest.try_field_enum(),
140-
Err(Error::InvalidFieldVariant {
141-
field: "field_enum",
142-
value: 0,
143-
})
144-
);
138+
assert_eq!(mtest.try_field_enum(), Err(Error::InvalidVariant(0)),);
145139

146140
[
147141
MtestFieldEnum::Field1,
@@ -158,11 +152,5 @@ fn test_mtest_read_write() {
158152

159153
// check that setting an invalid variant returns `None`
160154
mtest = Mtest::from_bits(0xbad << 7);
161-
assert_eq!(
162-
mtest.try_field_enum(),
163-
Err(Error::InvalidFieldVariant {
164-
field: "field_enum",
165-
value: 13,
166-
})
167-
);
155+
assert_eq!(mtest.try_field_enum(), Err(Error::InvalidVariant(13)),);
168156
}

riscv/src/register/tests/write_only_csr.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::result::Result;
1+
use crate::result::{Error, Result};
22

33
write_only_csr! {
44
/// test CSR register type
@@ -100,7 +100,10 @@ fn test_mtest_write_only() {
100100

101101
mtest = Mtest::from_bits(0);
102102

103-
assert_eq!(MtestFieldEnum::from_usize(mtest.bits() >> 8), None);
103+
assert_eq!(
104+
MtestFieldEnum::from_usize(mtest.bits() >> 8),
105+
Err(Error::InvalidVariant(0))
106+
);
104107

105108
[
106109
MtestFieldEnum::Field1,
@@ -116,10 +119,13 @@ fn test_mtest_write_only() {
116119
"field value: {variant:?}"
117120
);
118121
mtest.set_field_enum(variant);
119-
assert_eq!(MtestFieldEnum::from_usize(mtest.bits() >> 8), Some(variant));
122+
assert_eq!(MtestFieldEnum::from_usize(mtest.bits() >> 8), Ok(variant));
120123
});
121124

122125
// check that setting an invalid variant returns `None`
123126
mtest = Mtest::from_bits(0xbad << 8);
124-
assert_eq!(MtestFieldEnum::from_usize(mtest.bits() >> 8), None);
127+
assert_eq!(
128+
MtestFieldEnum::from_usize(mtest.bits() >> 8),
129+
Err(Error::InvalidVariant(13))
130+
);
125131
}

0 commit comments

Comments
 (0)