@@ -799,7 +799,7 @@ fn expand_svd_register(
799799 for ( idx, _i) in indices. iter ( ) . zip ( 0 ..) {
800800 let nb_name = util:: replace_suffix ( & info. name , idx) ;
801801
802- let ty = name_to_ty ( & ty_name, name) ?;
802+ let ty = name_to_wrapped_ty ( & ty_name, name) ?;
803803
804804 out. push ( new_syn_field ( & nb_name. to_sanitized_snake_case ( ) , ty) ) ;
805805 }
@@ -813,14 +813,14 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::
813813 Ok ( match register {
814814 Register :: Single ( info) => new_syn_field (
815815 & info. name . to_sanitized_snake_case ( ) ,
816- name_to_ty ( & info. name , name) ?,
816+ name_to_wrapped_ty ( & info. name , name) ?,
817817 ) ,
818818 Register :: Array ( info, array_info) => {
819819 let nb_name = util:: replace_suffix ( & info. name , "" ) ;
820820
821821 let ty = syn:: Type :: Array ( parse_str :: < syn:: TypeArray > ( & format ! (
822822 "[{};{}]" ,
823- name_to_ty_cow ( & nb_name, name) ,
823+ name_to_wrapped_ty_str ( & nb_name, name) ,
824824 u64 :: from( array_info. dim)
825825 ) ) ?) ;
826826
@@ -902,8 +902,8 @@ fn new_syn_field(ident: &str, ty: syn::Type) -> syn::Field {
902902 }
903903}
904904
905- fn name_to_ty_cow < ' a > ( name : & ' a String , ns : Option < & str > ) -> Cow < ' a , str > {
906- if let Some ( ns) = ns {
905+ fn name_to_ty ( name : & String , ns : Option < & str > ) -> Result < syn :: Type , syn :: Error > {
906+ let ident = if let Some ( ns) = ns {
907907 Cow :: Owned (
908908 String :: from ( "self::" )
909909 + & ns. to_sanitized_snake_case ( )
@@ -912,10 +912,28 @@ fn name_to_ty_cow<'a>(name: &'a String, ns: Option<&str>) -> Cow<'a, str> {
912912 )
913913 } else {
914914 name. to_sanitized_upper_case ( )
915+ } ;
916+ Ok ( syn:: Type :: Path ( parse_str :: < syn:: TypePath > ( & ident) ?) )
917+ }
918+
919+ fn name_to_wrapped_ty_str ( name : & String , ns : Option < & str > ) -> String {
920+ if let Some ( ns) = ns {
921+ format ! (
922+ "crate::Reg<self::{}::{}::{}_SPEC>" ,
923+ & ns. to_sanitized_snake_case( ) ,
924+ & name. to_sanitized_snake_case( ) ,
925+ & name. to_sanitized_upper_case( ) ,
926+ )
927+ } else {
928+ format ! (
929+ "crate::Reg<{}::{}_SPEC>" ,
930+ & name. to_sanitized_snake_case( ) ,
931+ & name. to_sanitized_upper_case( ) ,
932+ )
915933 }
916934}
917935
918- fn name_to_ty ( name : & String , ns : Option < & str > ) -> Result < syn:: Type , syn:: Error > {
919- let ident = name_to_ty_cow ( name, ns) ;
936+ fn name_to_wrapped_ty ( name : & String , ns : Option < & str > ) -> Result < syn:: Type , syn:: Error > {
937+ let ident = name_to_wrapped_ty_str ( name, ns) ;
920938 Ok ( syn:: Type :: Path ( parse_str :: < syn:: TypePath > ( & ident) ?) )
921939}
0 commit comments