@@ -15,6 +15,23 @@ use syn::*;
1515use inflections:: Inflect ;
1616use svd:: { Access , Defaults , Peripheral , Register } ;
1717
18+ /// Trait that sanitizes name avoiding rust keywords and the like.
19+ trait SanitizeName {
20+ /// Sanitize a name; avoiding Rust keywords and the like.
21+ fn sanitize ( & self ) -> String ;
22+ }
23+
24+ impl SanitizeName for String {
25+ fn sanitize ( & self ) -> String {
26+ match self . as_str ( ) {
27+ "fn" => "fn_" . to_owned ( ) ,
28+ "match" => "match_" . to_owned ( ) ,
29+ "mod" => "mod_" . to_owned ( ) ,
30+ _ => self . to_owned ( ) ,
31+ }
32+ }
33+ }
34+
1835pub fn gen_peripheral ( p : & Peripheral , d : & Defaults ) -> Vec < Tokens > {
1936 assert ! ( p. derived_from. is_none( ) , "DerivedFrom not supported" ) ;
2037
@@ -224,7 +241,7 @@ pub fn gen_register_r(r: &Register, d: &Defaults) -> Vec<Tokens> {
224241 continue ;
225242 }
226243
227- let name = Ident :: new ( field. name . to_snake_case ( ) ) ;
244+ let name = Ident :: new ( field. name . to_snake_case ( ) . sanitize ( ) ) ;
228245 let offset = field. bit_range . offset as u8 ;
229246
230247 let width = field. bit_range . width ;
@@ -313,7 +330,7 @@ pub fn gen_register_w(r: &Register, d: &Defaults) -> Vec<Tokens> {
313330 continue ;
314331 }
315332
316- let name = Ident :: new ( field. name . to_snake_case ( ) ) ;
333+ let name = Ident :: new ( field. name . to_snake_case ( ) . sanitize ( ) ) ;
317334 let offset = field. bit_range . offset as u8 ;
318335
319336 let width = field. bit_range . width ;
0 commit comments