1
1
use crate :: svd:: {
2
- Access , BitRange , RegisterProperties , EnumeratedValues , Field , Peripheral , Register , RegisterCluster ,
3
- Usage , WriteConstraint ,
2
+ Access , BitRange , EnumeratedValues , Field , Peripheral , Register , RegisterCluster ,
3
+ RegisterProperties , Usage , WriteConstraint ,
4
4
} ;
5
5
use cast:: u64;
6
6
use log:: warn;
7
- use proc_macro2:: { TokenStream , Ident , Span , Punct , Spacing } ;
7
+ use proc_macro2:: { Ident , Punct , Spacing , Span , TokenStream } ;
8
8
9
9
use crate :: errors:: * ;
10
10
use crate :: util:: { self , ToSanitizedSnakeCase , ToSanitizedUpperCase , U32Ext } ;
@@ -59,10 +59,7 @@ pub fn render(
59
59
methods. push ( "read" ) ;
60
60
}
61
61
62
- let res_val = register
63
- . reset_value
64
- . or ( defs. reset_value )
65
- . map ( |v| v as u64 ) ;
62
+ let res_val = register. reset_value . or ( defs. reset_value ) . map ( |v| v as u64 ) ;
66
63
if can_write {
67
64
let desc = format ! ( "Writer for register {}" , register. name) ;
68
65
mod_items. push ( quote ! {
@@ -151,12 +148,19 @@ pub fn render(
151
148
}
152
149
153
150
let mut out = TokenStream :: new ( ) ;
154
- let methods = methods. iter ( ) . map ( |s| format ! ( "[`{0}`](crate::generic::Reg::{0})" , s) ) . collect :: < Vec < _ > > ( ) ;
151
+ let methods = methods
152
+ . iter ( )
153
+ . map ( |s| format ! ( "[`{0}`](crate::generic::Reg::{0})" , s) )
154
+ . collect :: < Vec < _ > > ( ) ;
155
155
let mut doc = format ! ( "{}\n \n This register you can {}. See [API](https://docs.rs/svd2rust/#read--modify--write-api)." ,
156
156
& description, methods. join( ", " ) ) ;
157
157
158
158
if name_sc != "cfg" {
159
- doc += format ! ( "\n \n For information about available fields see [{0}]({0}) module" , & name_sc) . as_str ( ) ;
159
+ doc += format ! (
160
+ "\n \n For information about available fields see [{0}]({0}) module" ,
161
+ & name_sc
162
+ )
163
+ . as_str ( ) ;
160
164
}
161
165
out. extend ( quote ! {
162
166
#[ doc = #doc]
@@ -168,14 +172,20 @@ pub fn render(
168
172
} ) ;
169
173
170
174
if can_read {
171
- let doc = format ! ( "`read()` method returns [{0}::R]({0}::R) reader structure" , & name_sc) ;
175
+ let doc = format ! (
176
+ "`read()` method returns [{0}::R]({0}::R) reader structure" ,
177
+ & name_sc
178
+ ) ;
172
179
out. extend ( quote ! {
173
180
#[ doc = #doc]
174
181
impl crate :: Readable for #name_pc { }
175
182
} ) ;
176
183
}
177
184
if can_write {
178
- let doc = format ! ( "`write(|w| ..)` method takes [{0}::W]({0}::W) writer structure" , & name_sc) ;
185
+ let doc = format ! (
186
+ "`write(|w| ..)` method takes [{0}::W]({0}::W) writer structure" ,
187
+ & name_sc
188
+ ) ;
179
189
out. extend ( quote ! {
180
190
#[ doc = #doc]
181
191
impl crate :: Writable for #name_pc { }
@@ -216,11 +226,7 @@ pub fn fields(
216
226
impl < ' a > F < ' a > {
217
227
fn from ( f : & ' a Field ) -> Result < Self > {
218
228
// TODO(AJM) - do we need to do anything with this range type?
219
- let BitRange {
220
- offset,
221
- width,
222
- range_type : _,
223
- } = f. bit_range ;
229
+ let BitRange { offset, width, .. } = f. bit_range ;
224
230
let sc = f. name . to_sanitized_snake_case ( ) ;
225
231
let pc = f. name . to_sanitized_upper_case ( ) ;
226
232
let span = Span :: call_site ( ) ;
@@ -229,11 +235,7 @@ pub fn fields(
229
235
let pc_w = Ident :: new ( & format ! ( "{}_AW" , pc) , span) ;
230
236
let _pc_w = Ident :: new ( & format ! ( "{}_W" , pc) , span) ;
231
237
let _sc = Ident :: new ( & format ! ( "_{}" , sc) , span) ;
232
- let bits = Ident :: new ( if width == 1 {
233
- "bit"
234
- } else {
235
- "bits"
236
- } , Span :: call_site ( ) ) ;
238
+ let bits = Ident :: new ( if width == 1 { "bit" } else { "bits" } , Span :: call_site ( ) ) ;
237
239
let mut description_with_bits = if width == 1 {
238
240
format ! ( "Bit {}" , offset)
239
241
} else {
@@ -262,7 +264,7 @@ pub fn fields(
262
264
access : f. access ,
263
265
evs : & f. enumerated_values ,
264
266
sc : Ident :: new ( & sc, Span :: call_site ( ) ) ,
265
- mask : 1u64 . wrapping_neg ( ) >> ( 64 - width) ,
267
+ mask : 1u64 . wrapping_neg ( ) >> ( 64 - width) ,
266
268
name : & f. name ,
267
269
offset : u64:: from ( offset) ,
268
270
ty : width. to_ty ( ) ?,
@@ -296,7 +298,6 @@ pub fn fields(
296
298
all_peripherals,
297
299
) ?;
298
300
299
-
300
301
let pc_r = & f. pc_r ;
301
302
let mut pc_w = & f. pc_r ;
302
303
@@ -340,7 +341,8 @@ pub fn fields(
340
341
base_pc_w = base. as_ref ( ) . map ( |base| {
341
342
let pc = base. field . to_sanitized_upper_case ( ) ;
342
343
let base_pc_r = Ident :: new ( & format ! ( "{}_A" , pc) , Span :: call_site ( ) ) ;
343
- let base_pc_r = derive_from_base ( mod_items, & base, & pc_r, & base_pc_r, description) ;
344
+ let base_pc_r =
345
+ derive_from_base ( mod_items, & base, & pc_r, & base_pc_r, description) ;
344
346
345
347
let doc = format ! ( "Reader of field `{}`" , f. name) ;
346
348
mod_items. push ( quote ! {
@@ -410,11 +412,14 @@ pub fn fields(
410
412
let pc = & v. pc ;
411
413
let sc = & v. sc ;
412
414
413
- let is_variant = Ident :: new ( & if sc. to_string ( ) . starts_with ( '_' ) {
414
- format ! ( "is{}" , sc)
415
- } else {
416
- format ! ( "is_{}" , sc)
417
- } , Span :: call_site ( ) ) ;
415
+ let is_variant = Ident :: new (
416
+ & if sc. to_string ( ) . starts_with ( '_' ) {
417
+ format ! ( "is{}" , sc)
418
+ } else {
419
+ format ! ( "is_{}" , sc)
420
+ } ,
421
+ Span :: call_site ( ) ,
422
+ ) ;
418
423
419
424
let doc = format ! ( "Checks if the value of the field is `{}`" , pc) ;
420
425
enum_items. push ( quote ! {
@@ -435,7 +440,6 @@ pub fn fields(
435
440
}
436
441
} ) ;
437
442
}
438
-
439
443
} else {
440
444
let sc = & f. sc ;
441
445
r_impl_items. push ( quote ! {
@@ -451,7 +455,6 @@ pub fn fields(
451
455
#[ doc = #doc]
452
456
pub type #_pc_r = crate :: R <#fty, #fty>;
453
457
} )
454
-
455
458
}
456
459
}
457
460
@@ -583,7 +586,8 @@ pub fn fields(
583
586
fn unsafety ( write_constraint : Option < & WriteConstraint > , width : u32 ) -> Option < Ident > {
584
587
match & write_constraint {
585
588
Some ( & WriteConstraint :: Range ( range) )
586
- if u64:: from ( range. min ) == 0 && u64:: from ( range. max ) == 1u64 . wrapping_neg ( ) >> ( 64 -width) =>
589
+ if u64:: from ( range. min ) == 0
590
+ && u64:: from ( range. max ) == 1u64 . wrapping_neg ( ) >> ( 64 - width) =>
587
591
{
588
592
// the SVD has acknowledged that it's safe to write
589
593
// any value that can fit in the field
@@ -633,11 +637,18 @@ impl Variant {
633
637
}
634
638
}
635
639
636
- fn add_from_variants ( mod_items : & mut Vec < TokenStream > , variants : & Vec < Variant > , pc : & Ident , f : & F , desc : & str , reset_value : Option < u64 > ) {
640
+ fn add_from_variants (
641
+ mod_items : & mut Vec < TokenStream > ,
642
+ variants : & [ Variant ] ,
643
+ pc : & Ident ,
644
+ f : & F ,
645
+ desc : & str ,
646
+ reset_value : Option < u64 > ,
647
+ ) {
637
648
let fty = & f. ty ;
638
649
639
650
let ( repr, cast) = if f. ty == "bool" {
640
- ( quote ! { } , quote ! { variant as u8 != 0 } )
651
+ ( quote ! { } , quote ! { variant as u8 != 0 } )
641
652
} else {
642
653
( quote ! { #[ repr( #fty) ] } , quote ! { variant as _ } )
643
654
} ;
@@ -677,7 +688,13 @@ fn add_from_variants(mod_items: &mut Vec<TokenStream>, variants: &Vec<Variant>,
677
688
} ) ;
678
689
}
679
690
680
- fn derive_from_base ( mod_items : & mut Vec < TokenStream > , base : & Base , pc : & Ident , base_pc : & Ident , desc : & str ) -> TokenStream {
691
+ fn derive_from_base (
692
+ mod_items : & mut Vec < TokenStream > ,
693
+ base : & Base ,
694
+ pc : & Ident ,
695
+ base_pc : & Ident ,
696
+ desc : & str ,
697
+ ) -> TokenStream {
681
698
let span = Span :: call_site ( ) ;
682
699
if let ( Some ( peripheral) , Some ( register) ) = ( & base. peripheral , & base. register ) {
683
700
let pmod_ = peripheral. to_sanitized_snake_case ( ) ;
@@ -799,7 +816,7 @@ fn lookup<'a>(
799
816
}
800
817
801
818
fn lookup_filter < ' a > (
802
- evs : & Vec < ( & ' a EnumeratedValues , Option < Base < ' a > > ) > ,
819
+ evs : & [ ( & ' a EnumeratedValues , Option < Base < ' a > > ) ] ,
803
820
usage : Usage ,
804
821
) -> Option < ( & ' a EnumeratedValues , Option < Base < ' a > > ) > {
805
822
for ( evs, base) in evs. iter ( ) {
@@ -818,12 +835,13 @@ fn lookup_in_fields<'f>(
818
835
register : & Register ,
819
836
) -> Result < ( & ' f EnumeratedValues , Option < Base < ' f > > ) > {
820
837
if let Some ( base_field) = fields. iter ( ) . find ( |f| f. name == base_field) {
821
- return lookup_in_field ( base_evs, None , None , base_field) ;
838
+ lookup_in_field ( base_evs, None , None , base_field)
822
839
} else {
823
840
Err ( format ! (
824
841
"Field {} not found in register {}" ,
825
842
base_field, register. name
826
- ) ) ?
843
+ )
844
+ . into ( ) )
827
845
}
828
846
}
829
847
@@ -846,16 +864,14 @@ fn lookup_in_peripheral<'p>(
846
864
{
847
865
lookup_in_field ( base_evs, Some ( base_register) , base_peripheral, field)
848
866
} else {
849
- Err ( format ! (
850
- "No field {} in register {}" ,
851
- base_field, register. name
852
- ) ) ?
867
+ Err ( format ! ( "No field {} in register {}" , base_field, register. name) . into ( ) )
853
868
}
854
869
} else {
855
870
Err ( format ! (
856
871
"No register {} in peripheral {}" ,
857
872
base_register, peripheral. name
858
- ) ) ?
873
+ )
874
+ . into ( ) )
859
875
}
860
876
}
861
877
@@ -878,10 +894,7 @@ fn lookup_in_field<'f>(
878
894
}
879
895
}
880
896
881
- Err ( format ! (
882
- "No EnumeratedValues {} in field {}" ,
883
- base_evs, field. name
884
- ) ) ?
897
+ Err ( format ! ( "No EnumeratedValues {} in field {}" , base_evs, field. name) . into ( ) )
885
898
}
886
899
887
900
fn lookup_in_register < ' r > (
@@ -904,7 +917,8 @@ fn lookup_in_register<'r>(
904
917
None => Err ( format ! (
905
918
"EnumeratedValues {} not found in register {}" ,
906
919
base_evs, register. name
907
- ) ) ?,
920
+ )
921
+ . into ( ) ) ,
908
922
Some ( & ( evs, field) ) => {
909
923
if matches. len ( ) == 1 {
910
924
Ok ( (
@@ -921,7 +935,8 @@ fn lookup_in_register<'r>(
921
935
"Fields {:?} have an \
922
936
enumeratedValues named {}",
923
937
fields, base_evs
924
- ) ) ?
938
+ )
939
+ . into ( ) )
925
940
}
926
941
}
927
942
}
@@ -945,7 +960,7 @@ fn lookup_in_peripherals<'p>(
945
960
peripheral,
946
961
)
947
962
} else {
948
- Err ( format ! ( "No peripheral {}" , base_peripheral) ) ?
963
+ Err ( format ! ( "No peripheral {}" , base_peripheral) . into ( ) )
949
964
}
950
965
}
951
966
0 commit comments