@@ -799,7 +799,7 @@ fn expand_svd_register(
799
799
for ( idx, _i) in indices. iter ( ) . zip ( 0 ..) {
800
800
let nb_name = util:: replace_suffix ( & info. name , idx) ;
801
801
802
- let ty = name_to_ty ( & ty_name, name) ?;
802
+ let ty = name_to_wrapped_ty ( & ty_name, name) ?;
803
803
804
804
out. push ( new_syn_field ( & nb_name. to_sanitized_snake_case ( ) , ty) ) ;
805
805
}
@@ -813,14 +813,14 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::
813
813
Ok ( match register {
814
814
Register :: Single ( info) => new_syn_field (
815
815
& info. name . to_sanitized_snake_case ( ) ,
816
- name_to_ty ( & info. name , name) ?,
816
+ name_to_wrapped_ty ( & info. name , name) ?,
817
817
) ,
818
818
Register :: Array ( info, array_info) => {
819
819
let nb_name = util:: replace_suffix ( & info. name , "" ) ;
820
820
821
821
let ty = syn:: Type :: Array ( parse_str :: < syn:: TypeArray > ( & format ! (
822
822
"[{};{}]" ,
823
- name_to_ty_cow ( & nb_name, name) ,
823
+ name_to_wrapped_ty_str ( & nb_name, name) ,
824
824
u64 :: from( array_info. dim)
825
825
) ) ?) ;
826
826
@@ -902,8 +902,8 @@ fn new_syn_field(ident: &str, ty: syn::Type) -> syn::Field {
902
902
}
903
903
}
904
904
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 {
907
907
Cow :: Owned (
908
908
String :: from ( "self::" )
909
909
+ & ns. to_sanitized_snake_case ( )
@@ -912,10 +912,28 @@ fn name_to_ty_cow<'a>(name: &'a String, ns: Option<&str>) -> Cow<'a, str> {
912
912
)
913
913
} else {
914
914
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
+ )
915
933
}
916
934
}
917
935
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) ;
920
938
Ok ( syn:: Type :: Path ( parse_str :: < syn:: TypePath > ( & ident) ?) )
921
939
}
0 commit comments