@@ -5,8 +5,8 @@ use std::collections::HashMap;
55use std:: fmt;
66use std:: mem:: take;
77use 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 ,
1010} ;
1111
1212/// Path to `peripheral` or `cluster` element
@@ -319,15 +319,7 @@ fn expand_cluster_array(
319319 match c {
320320 Cluster :: Single ( c) => expand_cluster ( regs, c) ,
321321 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) {
331323 expand_cluster ( regs, c) ;
332324 }
333325 }
@@ -435,7 +427,7 @@ fn expand_cluster(regs: &mut Vec<RegisterCluster>, c: ClusterInfo) {
435427 RegisterCluster :: Register ( mut r) => {
436428 r. name = format ! ( "{}_{}" , c. name, r. name) ;
437429 r. address_offset += c. address_offset ;
438- regs. push ( RegisterCluster :: Register ( r ) ) ;
430+ regs. push ( r . into ( ) ) ;
439431 }
440432 }
441433 }
@@ -462,20 +454,10 @@ fn expand_register_array(
462454
463455 match r {
464456 Register :: Single ( _) => {
465- regs. push ( RegisterCluster :: Register ( r ) ) ;
457+ regs. push ( r . into ( ) ) ;
466458 }
467459 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 ( ) ) ) ;
479461 }
480462 }
481463 Ok ( ( ) )
@@ -506,18 +488,7 @@ fn expand_field(
506488 fields. push ( f) ;
507489 }
508490 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 ) ) ;
521492 }
522493 }
523494
@@ -630,17 +601,9 @@ pub fn expand(indevice: &Device) -> Result<Device> {
630601 device. peripherals . push ( p) ;
631602 }
632603 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 ) ) ;
644607 }
645608 }
646609 }
0 commit comments