@@ -456,21 +456,22 @@ pub fn gen_peripheral(p: &Peripheral, d: &Defaults) -> Vec<Tokens> {
456456 let mut fields = vec ! [ ] ;
457457 let mut offset = 0 ;
458458 let mut i = 0 ;
459- let registers = p. registers
460- . as_ref ( )
461- . expect ( & format ! ( "{:#?} has no `registers` field" , p) ) ;
459+ let registers =
460+ p. registers
461+ . as_ref ( )
462+ . expect ( & format ! ( "Peripheral {} has no `registers` field" , p. name) ) ;
462463
463464 for register in & expand ( registers) {
464465 let pad = if let Some ( pad) = register. offset
465- . checked_sub ( offset) {
466+ . checked_sub ( offset) {
466467 pad
467468 } else {
468469 writeln ! ( io:: stderr( ) ,
469470 "WARNING {} overlaps with another register at offset \
470471 {}. Ignoring.",
471472 register. name,
472473 register. offset)
473- . ok ( ) ;
474+ . ok ( ) ;
474475 continue ;
475476 } ;
476477
@@ -486,7 +487,7 @@ pub fn gen_peripheral(p: &Peripheral, d: &Defaults) -> Vec<Tokens> {
486487 let comment = & format ! ( "0x{:02x} - {}" ,
487488 register. offset,
488489 respace( & register. info
489- . description) )
490+ . description) )
490491 [ ..] ;
491492
492493 let reg_ty = match register. ty {
@@ -501,10 +502,11 @@ pub fn gen_peripheral(p: &Peripheral, d: &Defaults) -> Vec<Tokens> {
501502
502503 offset = register. offset +
503504 register. info
504- . size
505- . or ( d. size )
506- . expect ( & format ! ( "{:#?} has no `size` field" , register. info) ) /
507- 8 ;
505+ . size
506+ . or ( d. size )
507+ . expect ( & format ! ( "Register {}.{} has no `size` field" ,
508+ p. name,
509+ register. name) ) / 8 ;
508510 }
509511
510512 let p_name = Ident :: new ( & * p. name . to_sanitized_pascal_case ( ) ) ;
@@ -571,8 +573,8 @@ fn expand(registers: &[Register]) -> Vec<ExpandedRegister> {
571573 . map ( |v| Cow :: from ( & * * v) )
572574 . unwrap_or_else ( || {
573575 Cow :: from ( ( 0 ..array_info. dim )
574- . map ( |i| i. to_string ( ) )
575- . collect :: < Vec < _ > > ( ) )
576+ . map ( |i| i. to_string ( ) )
577+ . collect :: < Vec < _ > > ( ) )
576578 } ) ;
577579
578580 for ( idx, i) in indices. iter ( ) . zip ( 0 ..) {
@@ -586,11 +588,12 @@ fn expand(registers: &[Register]) -> Vec<ExpandedRegister> {
586588 i * array_info. dim_increment ;
587589
588590 out. push ( ExpandedRegister {
589- info : info,
590- name : name. to_sanitized_snake_case ( ) . into_owned ( ) ,
591- offset : offset,
592- ty : Either :: Right ( ty. clone ( ) ) ,
593- } ) ;
591+ info : info,
592+ name : name. to_sanitized_snake_case ( )
593+ . into_owned ( ) ,
594+ offset : offset,
595+ ty : Either :: Right ( ty. clone ( ) ) ,
596+ } ) ;
594597 }
595598 }
596599 }
@@ -616,16 +619,21 @@ fn name_of(r: &Register) -> Cow<str> {
616619
617620fn access ( r : & Register ) -> Access {
618621 r. access . unwrap_or_else ( || if let Some ( ref fields) = r. fields {
619- if fields. iter ( ) . all ( |f| f. access == Some ( Access :: ReadOnly ) ) {
620- Access :: ReadOnly
621- } else if fields. iter ( ) . all ( |f| f. access == Some ( Access :: WriteOnly ) ) {
622+ if fields. iter ( ) . all ( |f| {
623+ f. access ==
624+ Some ( Access :: ReadOnly )
625+ } ) {
626+ Access :: ReadOnly
627+ } else if fields. iter ( ) . all ( |f| {
628+ f. access == Some ( Access :: WriteOnly )
629+ } ) {
622630 Access :: WriteOnly
623631 } else {
624632 Access :: ReadWrite
625633 }
626- } else {
627- Access :: ReadWrite
628- } )
634+ } else {
635+ Access :: ReadWrite
636+ } )
629637}
630638
631639#[ cfg_attr( feature = "cargo-clippy" , allow( cyclomatic_complexity) ) ]
@@ -642,7 +650,7 @@ pub fn gen_register(r: &Register,
642650
643651 let reg_ty = r. size
644652 . or ( d. size )
645- . expect ( & format ! ( "{:#? } has no `size` field" , r) )
653+ . expect ( & format ! ( "Register { } has no `size` field" , r. name ) )
646654 . to_ty ( ) ;
647655 let access = access ( r) ;
648656
@@ -777,10 +785,10 @@ pub fn gen_register(r: &Register,
777785 continue ;
778786 }
779787
780- let field_name = Ident :: new ( & * field . name
781- . to_sanitized_snake_case ( ) ) ;
782- let _field_name =
783- Ident :: new ( & * format ! ( "_{}" ,
788+ let field_name =
789+ Ident :: new ( & * field . name
790+ . to_sanitized_snake_case ( ) ) ;
791+ let _field_name = Ident :: new ( & * format ! ( "_{}" ,
784792 field. name
785793 . replace( BLACKLIST_CHARS , "" )
786794 . to_snake_case( ) ) ) ;
@@ -815,9 +823,10 @@ pub fn gen_register(r: &Register,
815823 let variants = ( 0 ..1 << width)
816824 . map ( |i| {
817825 let value = u64:: from ( i) ;
818- if let Some ( ev) = evs. values
819- . iter ( )
820- . find ( |ev| ev. value == Some ( i) ) {
826+ if let Some ( ev) =
827+ evs. values
828+ . iter ( )
829+ . find ( |ev| ev. value == Some ( i) ) {
821830 let sc = Ident :: new ( & * ev. name
822831 . replace ( BLACKLIST_CHARS , "" )
823832 . to_snake_case ( ) ) ;
@@ -861,8 +870,9 @@ pub fn gen_register(r: &Register,
861870 . to_sanitized_pascal_case( ) ) )
862871 } ;
863872
864- if let Some ( register) = base. as_ref ( )
865- . and_then ( |base| base. register ) {
873+ if let Some ( register) =
874+ base. as_ref ( )
875+ . and_then ( |base| base. register ) {
866876 let register =
867877 Ident :: new ( & * register. to_sanitized_snake_case ( ) ) ;
868878
@@ -1004,8 +1014,9 @@ pub fn gen_register(r: &Register,
10041014 continue ;
10051015 }
10061016
1007- let field_name_sc = Ident :: new ( & * field. name
1008- . to_sanitized_snake_case ( ) ) ;
1017+ let field_name_sc =
1018+ Ident :: new ( & * field. name
1019+ . to_sanitized_snake_case ( ) ) ;
10091020 let width = field. bit_range . width ;
10101021 let mask = Lit :: Int ( ( 1u64 << width) - 1 , IntTy :: Unsuffixed ) ;
10111022 let offset = Lit :: Int ( u64:: from ( field. bit_range . offset ) ,
@@ -1049,8 +1060,9 @@ pub fn gen_register(r: &Register,
10491060 . to_sanitized_pascal_case( ) ) )
10501061 } ;
10511062
1052- if let Some ( register) = base. as_ref ( )
1053- . and_then ( |base| base. register ) {
1063+ if let Some ( register) =
1064+ base. as_ref ( )
1065+ . and_then ( |base| base. register ) {
10541066 let register =
10551067 Ident :: new ( & * register. to_sanitized_snake_case ( ) ) ;
10561068
@@ -1063,15 +1075,18 @@ pub fn gen_register(r: &Register,
10631075 }
10641076 }
10651077
1066- let variants =
1067- evs. values
1068- . iter ( )
1069- . map ( |ev| {
1070- // TODO better error message
1071- let value = u64:: from ( ev. value
1072- . expect ( "no value in EnumeratedValue" ) ) ;
1073-
1074- Variant {
1078+ let variants = evs. values
1079+ . iter ( )
1080+ . map ( |ev| {
1081+ let value =
1082+ u64:: from ( ev. value
1083+ . expect ( & format ! ( "no value in \
1084+ EnumeratedValue in \
1085+ {}.{}",
1086+ r. name,
1087+ field. name) ) ) ;
1088+
1089+ Variant {
10751090 doc : ev. description
10761091 . clone ( )
10771092 . unwrap_or_else ( || {
@@ -1083,8 +1098,8 @@ pub fn gen_register(r: &Register,
10831098 . to_sanitized_snake_case ( ) ) ,
10841099 value : value,
10851100 }
1086- } )
1087- . collect :: < Vec < _ > > ( ) ;
1101+ } )
1102+ . collect :: < Vec < _ > > ( ) ;
10881103
10891104 // Whether the `bits` method should be `unsafe`.
10901105 // `bits` can be safe when enumeratedValues covers all
@@ -1261,33 +1276,43 @@ fn lookup<'a>(evs: &'a [EnumeratedValues],
12611276 let mut parts = base. split ( '.' ) ;
12621277
12631278 let ( register, fields, field) = match ( parts. next ( ) ,
1264- parts. next ( ) ) {
1279+ parts. next ( ) ) {
12651280 ( Some ( register) , Some ( field) ) => {
1266- // TODO better error message
12671281 let fields = all_registers. iter ( )
12681282 . find ( |r| r. name == register)
1269- . expect ( "couldn't find register" )
1283+ . expect ( & format ! ( "couldn't find register {} \
1284+ requested by 'derivedFrom=\
1285+ \" {}\" '",
1286+ register,
1287+ base) )
12701288 . fields
12711289 . as_ref ( )
1272- . expect ( "no fields" ) ;
1290+ . expect ( & format ! ( "register {} has no fields" ,
1291+ register) ) ;
12731292
12741293 ( Some ( register) , & fields[ ..] , field)
12751294 }
12761295 ( Some ( field) , None ) => ( None , fields, field) ,
12771296 _ => unreachable ! ( ) ,
12781297 } ;
12791298
1280- // TODO better error message
1281- let evs = fields. iter ( )
1282- . flat_map ( |f| f. enumerated_values . iter ( ) )
1283- . find ( |evs| evs. name . as_ref ( ) . map ( |s| & * * s) == Some ( field) )
1284- . expect ( "" ) ;
1299+ let evs =
1300+ fields. iter ( )
1301+ . flat_map ( |f| f. enumerated_values . iter ( ) )
1302+ . find ( |evs| {
1303+ evs. name . as_ref ( ) . map ( |s| & * * s) == Some ( field)
1304+ } )
1305+ . expect ( & format ! ( "couldn't find field {} in {}" ,
1306+ field,
1307+ register. map( |r| {
1308+ format!( "register {}" , r)
1309+ } ) . unwrap_or( "this register" . to_owned( ) ) ) ) ;
12851310
12861311 ( evs,
12871312 Some ( Base {
1288- register : register,
1289- field : field,
1290- } ) )
1313+ register : register,
1314+ field : field,
1315+ } ) )
12911316 } else {
12921317 ( evs, None )
12931318 }
0 commit comments