@@ -5,8 +5,8 @@ use std::collections::HashMap;
5
5
use std:: fmt;
6
6
use std:: mem:: take;
7
7
use svd_rs:: {
8
- array:: names, cluster, field, peripheral, register, BitRange , Cluster , ClusterInfo , DeriveFrom ,
9
- Device , EnumeratedValues , Field , Peripheral , Register , RegisterCluster , RegisterProperties ,
8
+ array:: names, cluster, field, peripheral, register, Cluster , ClusterInfo , DeriveFrom , Device ,
9
+ EnumeratedValues , Field , Peripheral , Register , RegisterCluster , RegisterProperties ,
10
10
} ;
11
11
12
12
/// Path to `peripheral` or `cluster` element
@@ -319,15 +319,7 @@ fn expand_cluster_array(
319
319
match c {
320
320
Cluster :: Single ( c) => expand_cluster ( regs, c) ,
321
321
Cluster :: Array ( info, dim) => {
322
- for c in names ( & info, & dim)
323
- . zip ( cluster:: address_offsets ( & info, & dim) )
324
- . map ( |( name, address_offset) | {
325
- let mut info = info. clone ( ) ;
326
- info. name = name;
327
- info. address_offset = address_offset;
328
- info
329
- } )
330
- {
322
+ for c in cluster:: expand ( & info, & dim) {
331
323
expand_cluster ( regs, c) ;
332
324
}
333
325
}
@@ -435,7 +427,7 @@ fn expand_cluster(regs: &mut Vec<RegisterCluster>, c: ClusterInfo) {
435
427
RegisterCluster :: Register ( mut r) => {
436
428
r. name = format ! ( "{}_{}" , c. name, r. name) ;
437
429
r. address_offset += c. address_offset ;
438
- regs. push ( RegisterCluster :: Register ( r ) ) ;
430
+ regs. push ( r . into ( ) ) ;
439
431
}
440
432
}
441
433
}
@@ -462,20 +454,10 @@ fn expand_register_array(
462
454
463
455
match r {
464
456
Register :: Single ( _) => {
465
- regs. push ( RegisterCluster :: Register ( r ) ) ;
457
+ regs. push ( r . into ( ) ) ;
466
458
}
467
459
Register :: Array ( info, dim) => {
468
- for rx in names ( & info, & dim)
469
- . zip ( register:: address_offsets ( & info, & dim) )
470
- . map ( |( name, address_offset) | {
471
- let mut info = info. clone ( ) ;
472
- info. name = name;
473
- info. address_offset = address_offset;
474
- Register :: Single ( info)
475
- } )
476
- {
477
- regs. push ( RegisterCluster :: Register ( rx) ) ;
478
- }
460
+ regs. extend ( register:: expand ( & info, & dim) . map ( |r| r. single ( ) . into ( ) ) ) ;
479
461
}
480
462
}
481
463
Ok ( ( ) )
@@ -506,18 +488,7 @@ fn expand_field(
506
488
fields. push ( f) ;
507
489
}
508
490
Field :: Array ( info, dim) => {
509
- for fx in
510
- names ( & info, & dim)
511
- . zip ( field:: bit_offsets ( & info, & dim) )
512
- . map ( |( name, bit_offset) | {
513
- let mut info = info. clone ( ) ;
514
- info. name = name;
515
- info. bit_range = BitRange :: from_offset_width ( bit_offset, info. bit_width ( ) ) ;
516
- Field :: Single ( info)
517
- } )
518
- {
519
- fields. push ( fx) ;
520
- }
491
+ fields. extend ( field:: expand ( & info, & dim) . map ( Field :: Single ) ) ;
521
492
}
522
493
}
523
494
@@ -630,17 +601,9 @@ pub fn expand(indevice: &Device) -> Result<Device> {
630
601
device. peripherals . push ( p) ;
631
602
}
632
603
Peripheral :: Array ( info, dim) => {
633
- for px in names ( & info, & dim)
634
- . zip ( peripheral:: base_addresses ( & info, & dim) )
635
- . map ( |( name, base_address) | {
636
- let mut info = info. clone ( ) ;
637
- info. name = name;
638
- info. base_address = base_address;
639
- Peripheral :: Single ( info)
640
- } )
641
- {
642
- device. peripherals . push ( px) ;
643
- }
604
+ device
605
+ . peripherals
606
+ . extend ( peripheral:: expand ( & info, & dim) . map ( Peripheral :: Single ) ) ;
644
607
}
645
608
}
646
609
}
0 commit comments