@@ -2,12 +2,12 @@ use std::borrow::Cow;
22use std:: cmp:: Ordering ;
33use std:: collections:: HashMap ;
44
5- use quote:: ToTokens ;
5+ use crate :: svd:: { Cluster , ClusterInfo , Peripheral , Register , RegisterCluster , RegisterProperties } ;
6+ use log:: warn;
67use proc_macro2:: TokenStream ;
7- use crate :: svd:: { Cluster , ClusterInfo , RegisterProperties , Peripheral , Register , RegisterCluster } ;
8+ use proc_macro2:: { Ident , Punct , Spacing , Span } ;
9+ use quote:: ToTokens ;
810use svd_parser:: derive_from:: DeriveFrom ;
9- use proc_macro2:: { Ident , Span , Punct , Spacing } ;
10- use log:: warn;
1111use syn:: { parse_str, Token } ;
1212
1313use crate :: errors:: * ;
@@ -23,16 +23,20 @@ pub fn render(
2323) -> Result < TokenStream > {
2424 let mut out = TokenStream :: new ( ) ;
2525
26- let p_derivedfrom = p_original. derived_from . as_ref ( ) . and_then ( |s| {
27- all_peripherals. iter ( ) . find ( |x| x. name == * s)
28- } ) ;
26+ let p_derivedfrom = p_original
27+ . derived_from
28+ . as_ref ( )
29+ . and_then ( |s| all_peripherals. iter ( ) . find ( |x| x. name == * s) ) ;
2930
3031 let p_merged = p_derivedfrom. map ( |ancestor| p_original. derive_from ( ancestor) ) ;
3132 let p = p_merged. as_ref ( ) . unwrap_or ( p_original) ;
3233
3334 if p_original. derived_from . is_some ( ) && p_derivedfrom. is_none ( ) {
34- eprintln ! ( "Couldn't find derivedFrom original: {} for {}, skipping" ,
35- p_original. derived_from. as_ref( ) . unwrap( ) , p_original. name) ;
35+ eprintln ! (
36+ "Couldn't find derivedFrom original: {} for {}, skipping" ,
37+ p_original. derived_from. as_ref( ) . unwrap( ) ,
38+ p_original. name
39+ ) ;
3640 return Ok ( out) ;
3741 }
3842
@@ -93,35 +97,37 @@ pub fn render(
9397 // Build a map so that we can look up registers within this peripheral
9498 let mut reg_map = HashMap :: new ( ) ;
9599 for r in registers {
96- reg_map. insert ( & r. name , r . clone ( ) ) ;
100+ reg_map. insert ( & r. name , svd_parser :: svd :: register :: Register :: clone ( r ) ) ;
97101 }
98102
99103 // Build up an alternate erc list by expanding any derived registers
100- let mut alt_erc : Vec < RegisterCluster > = registers. iter ( ) . filter_map ( |r| {
101- match r. derived_from {
104+ let mut alt_erc: Vec < RegisterCluster > = registers
105+ . iter ( )
106+ . filter_map ( |r| match r. derived_from {
102107 Some ( ref derived) => {
103108 let ancestor = match reg_map. get ( derived) {
104109 Some ( r) => r,
105110 None => {
106- eprintln ! ( "register {} derivedFrom missing register {}" , r. name, derived) ;
107- return None
111+ eprintln ! (
112+ "register {} derivedFrom missing register {}" ,
113+ r. name, derived
114+ ) ;
115+ return None ;
108116 }
109117 } ;
110118
111- let d = match * * ancestor {
112- Register :: Array ( ref info, ref array_info) => {
113- Some ( RegisterCluster :: Register ( Register :: Array ( r. derive_from ( info) , array_info. clone ( ) ) ) )
114- }
115- Register :: Single ( ref info) => {
116- Some ( RegisterCluster :: Register ( Register :: Single ( r. derive_from ( info) ) ) )
117- }
118- } ;
119-
120- d
119+ match * ancestor {
120+ Register :: Array ( ref info, ref array_info) => Some ( RegisterCluster :: Register (
121+ Register :: Array ( r. derive_from ( info) , array_info. clone ( ) ) ,
122+ ) ) ,
123+ Register :: Single ( ref info) => Some ( RegisterCluster :: Register (
124+ Register :: Single ( r. derive_from ( info) ) ,
125+ ) ) ,
126+ }
121127 }
122128 None => Some ( RegisterCluster :: Register ( ( * r) . clone ( ) ) ) ,
123- }
124- } ) . collect ( ) ;
129+ } )
130+ . collect ( ) ;
125131
126132 // Now add the clusters to our alternate erc list
127133 let clusters = util:: only_clusters ( ercs) ;
@@ -507,11 +513,16 @@ fn register_or_cluster_block(
507513 // name, along with the region number, falling back to
508514 // the offset and end in case we couldn't figure out a
509515 // nice identifier.
510- let name = Ident :: new ( & format ! (
511- "_reserved_{}_{}" ,
512- i,
513- region. compute_ident( ) . unwrap_or_else( || format!( "{}_{}" , region. offset, region. end) )
514- ) , span) ;
516+ let name = Ident :: new (
517+ & format ! (
518+ "_reserved_{}_{}" ,
519+ i,
520+ region
521+ . compute_ident( )
522+ . unwrap_or_else( || format!( "{}_{}" , region. offset, region. end) )
523+ ) ,
524+ span,
525+ ) ;
515526 let pad = ( region. end - region. offset ) as usize ;
516527 fields. extend ( quote ! {
517528 #name: [ u8 ; #pad] ,
@@ -520,10 +531,13 @@ fn register_or_cluster_block(
520531 last_end = region. end ;
521532 }
522533
523- let name = Ident :: new ( & match name {
524- Some ( name) => name. to_sanitized_upper_case ( ) ,
525- None => "RegisterBlock" . into ( ) ,
526- } , span) ;
534+ let name = Ident :: new (
535+ & match name {
536+ Some ( name) => name. to_sanitized_upper_case ( ) ,
537+ None => "RegisterBlock" . into ( ) ,
538+ } ,
539+ span,
540+ ) ;
527541
528542 let accessors = if have_accessors {
529543 quote ! {
@@ -819,10 +833,10 @@ fn expand_svd_register(register: &Register, name: Option<&str>) -> Vec<syn::Fiel
819833fn convert_svd_register ( register : & Register , name : Option < & str > ) -> syn:: Field {
820834 let name_to_ty = |name : & String , ns : Option < & str > | -> String {
821835 if let Some ( ns) = ns {
822- String :: from ( "self::" )
823- + & ns. to_sanitized_snake_case ( )
824- + "::"
825- + & name. to_sanitized_upper_case ( )
836+ String :: from ( "self::" )
837+ + & ns. to_sanitized_snake_case ( )
838+ + "::"
839+ + & name. to_sanitized_upper_case ( )
826840 } else {
827841 name. to_sanitized_upper_case ( ) . to_string ( )
828842 }
@@ -831,7 +845,7 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> syn::Field {
831845 match register {
832846 Register :: Single ( info) => new_syn_field (
833847 & info. name . to_sanitized_snake_case ( ) ,
834- syn:: Type :: Path ( parse_str :: < syn:: TypePath > ( & name_to_ty ( & info. name , name) ) . unwrap ( ) )
848+ syn:: Type :: Path ( parse_str :: < syn:: TypePath > ( & name_to_ty ( & info. name , name) ) . unwrap ( ) ) ,
835849 ) ,
836850 Register :: Array ( info, array_info) => {
837851 let has_brackets = info. name . contains ( "[%s]" ) ;
@@ -842,9 +856,14 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> syn::Field {
842856 info. name . replace ( "%s" , "" )
843857 } ;
844858
845- let ty = syn:: Type :: Array ( parse_str :: < syn:: TypeArray > (
846- & format ! ( "[{};{}]" , name_to_ty( & nb_name, name) , u64 :: from( array_info. dim) )
847- ) . unwrap ( ) ) ;
859+ let ty = syn:: Type :: Array (
860+ parse_str :: < syn:: TypeArray > ( & format ! (
861+ "[{};{}]" ,
862+ name_to_ty( & nb_name, name) ,
863+ u64 :: from( array_info. dim)
864+ ) )
865+ . unwrap ( ) ,
866+ ) ;
848867
849868 new_syn_field ( & nb_name. to_sanitized_snake_case ( ) , ty)
850869 }
@@ -904,7 +923,9 @@ fn convert_svd_cluster(cluster: &Cluster) -> syn::Field {
904923 match cluster {
905924 Cluster :: Single ( info) => new_syn_field (
906925 & info. name . to_sanitized_snake_case ( ) ,
907- syn:: Type :: Path ( parse_str :: < syn:: TypePath > ( & info. name . to_sanitized_upper_case ( ) ) . unwrap ( ) )
926+ syn:: Type :: Path (
927+ parse_str :: < syn:: TypePath > ( & info. name . to_sanitized_upper_case ( ) ) . unwrap ( ) ,
928+ ) ,
908929 ) ,
909930 Cluster :: Array ( info, array_info) => {
910931 let has_brackets = info. name . contains ( "[%s]" ) ;
@@ -915,9 +936,14 @@ fn convert_svd_cluster(cluster: &Cluster) -> syn::Field {
915936 info. name . replace ( "%s" , "" )
916937 } ;
917938
918- let ty = syn:: Type :: Array ( parse_str :: < syn:: TypeArray > (
919- & format ! ( "[{};{}]" , & name. to_sanitized_upper_case( ) , u64 :: from( array_info. dim) )
920- ) . unwrap ( ) ) ;
939+ let ty = syn:: Type :: Array (
940+ parse_str :: < syn:: TypeArray > ( & format ! (
941+ "[{};{}]" ,
942+ & name. to_sanitized_upper_case( ) ,
943+ u64 :: from( array_info. dim)
944+ ) )
945+ . unwrap ( ) ,
946+ ) ;
921947
922948 new_syn_field ( & name. to_sanitized_snake_case ( ) , ty)
923949 }
@@ -928,7 +954,9 @@ fn new_syn_field(ident: &str, ty: syn::Type) -> syn::Field {
928954 let span = Span :: call_site ( ) ;
929955 syn:: Field {
930956 ident : Some ( Ident :: new ( ident, span) ) ,
931- vis : syn:: Visibility :: Public ( syn:: VisPublic { pub_token : Token ! [ pub ] ( span) } ) ,
957+ vis : syn:: Visibility :: Public ( syn:: VisPublic {
958+ pub_token : Token ! [ pub ] ( span) ,
959+ } ) ,
932960 attrs : vec ! [ ] ,
933961 colon_token : Some ( Token ! [ : ] ( span) ) ,
934962 ty,
0 commit comments