Skip to content

Commit 3d3cd94

Browse files
committed
Cleaned up conditions that find out if register should be expanded or not
1 parent d3c0632 commit 3d3cd94

File tree

1 file changed

+13
-32
lines changed

1 file changed

+13
-32
lines changed

src/generate.rs

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -495,43 +495,24 @@ fn register_block(registers: &[Register], defs: &Defaults) -> Result<Tokens> {
495495
),
496496
Register::Array(ref info, ref array_info) => {
497497
let sequential_adresses = register_size == array_info.dim_increment*BITS_PER_BYTE;
498-
499-
let index_convertible = if let Some(ref indexes) = array_info.dim_index {
500-
let mut index_iter = indexes.iter();
501-
let mut previous = 0;
502-
503-
let get_number_option = |element_option: Option<&String>| -> Option<usize> {element_option
504-
.and_then(|element| match element.parse::<usize>() {
505-
Ok(i) => Some(i),
506-
_ => None,
507-
})
508-
};
509-
510-
let mut index_convertible_temp = match get_number_option(index_iter.next()) {
511-
Some(0) => true,
512-
_ => false,
513-
};
514-
515-
for element in index_iter {
516-
if !index_convertible_temp { break; }
517-
518-
index_convertible_temp = match get_number_option(Some(element)) {
519-
Some(i) => i == previous+1,
520-
_ => false,
521-
};
522498

523-
previous = match get_number_option(Some(element)) {
524-
Some(i) => i,
525-
_ => {break;},
526-
};
527-
}
528-
529-
index_convertible_temp
499+
let numeral_indexes = array_info.dim_index.clone()
500+
.ok_or_else( || format!("Register {} has no `dim_index` field", register.name))?
501+
.iter()
502+
.all(|element| element.parse::<usize>().is_ok());
503+
504+
let sequential_indexes = if numeral_indexes && sequential_adresses {
505+
array_info.dim_index.clone()
506+
.unwrap()
507+
.iter()
508+
.map(|element| element.parse::<u32>().unwrap())
509+
.collect::<Vec<u32>>()
510+
.eq(&(0..array_info.dim).collect::<Vec<u32>>())
530511
} else {
531512
false
532513
};
533514

534-
let array_convertible = index_convertible && sequential_adresses;
515+
let array_convertible = sequential_indexes && numeral_indexes && sequential_adresses;
535516

536517
if array_convertible {
537518
registers_expanded.push(

0 commit comments

Comments
 (0)