Skip to content

Commit d01cbe6

Browse files
committed
Generate register block fields without reg type alias
1 parent 3e826c5 commit d01cbe6

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

src/generate/peripheral.rs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)