Skip to content

Commit 65482c2

Browse files
authored
Merge pull request #168 from kevinmehall/dimindex
Handle missing dimIndex on registers
2 parents a138d24 + 3676d23 commit 65482c2

File tree

1 file changed

+8
-23
lines changed

1 file changed

+8
-23
lines changed

src/generate.rs

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -564,32 +564,17 @@ fn register_block(registers: &[Register], defs: &Defaults) -> Result<Tokens> {
564564
size: register_size,
565565
}),
566566
Register::Array(ref info, ref array_info) => {
567-
let sequential_adresses = register_size == array_info.dim_increment * BITS_PER_BYTE;
568-
569-
let numeral_indexes = array_info
570-
.dim_index
571-
.clone()
572-
.ok_or_else(|| {
573-
format!("Register {} has no `dim_index` field", register.name)
574-
})?
575-
.iter()
576-
.all(|element| element.parse::<usize>().is_ok());
567+
let sequential_addresses = register_size == array_info.dim_increment * BITS_PER_BYTE;
577568

578-
let sequential_indexes = if numeral_indexes && sequential_adresses {
579-
array_info
580-
.dim_index
581-
.clone()
582-
.unwrap()
569+
// if dimIndex exists, test if it is a sequence of numbers from 0 to dim
570+
let sequential_indexes = array_info.dim_index.as_ref().map_or(true, |dim_index| {
571+
dim_index
583572
.iter()
584-
.map(|element| element.parse::<u32>().unwrap())
585-
.collect::<Vec<u32>>()
586-
.eq(&(0..array_info.dim).collect::<Vec<u32>>())
587-
} else {
588-
false
589-
};
573+
.map(|element| element.parse::<u32>())
574+
.eq((0..array_info.dim).map(Ok))
575+
});
590576

591-
let array_convertible =
592-
sequential_indexes && numeral_indexes && sequential_adresses;
577+
let array_convertible = sequential_indexes && sequential_addresses;
593578

594579
if array_convertible {
595580
registers_expanded.push(RegisterBlockField {

0 commit comments

Comments
 (0)