@@ -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