@@ -495,43 +495,24 @@ fn register_block(registers: &[Register], defs: &Defaults) -> Result<Tokens> {
495
495
) ,
496
496
Register :: Array ( ref info, ref array_info) => {
497
497
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
- } ;
522
498
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 > > ( ) )
530
511
} else {
531
512
false
532
513
} ;
533
514
534
- let array_convertible = index_convertible && sequential_adresses;
515
+ let array_convertible = sequential_indexes && numeral_indexes && sequential_adresses;
535
516
536
517
if array_convertible {
537
518
registers_expanded. push (
0 commit comments