Skip to content

Commit 48d4e20

Browse files
bors[bot]couchand
andauthored
Merge #466
466: Avoid register type aliases r=therealprof a=couchand Part 3 of #463, builds on #465. - Removes generated use of the register type aliases in favor of directly referencing `Reg<REGISTER_SPEC>`. I think this helps clarify how the generated and generic types work together. No breaking change concerns on this change set. r? @burrbull Co-authored-by: Andrew Dona-Couch <[email protected]>
2 parents 5356990 + d01cbe6 commit 48d4e20

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

src/generate/peripheral.rs

Lines changed: 24 additions & 14 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
}
@@ -810,28 +810,17 @@ fn expand_svd_register(
810810

811811
/// Convert a parsed `Register` into its `Field` equivalent
812812
fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::Field, syn::Error> {
813-
let name_to_ty_str = |name: &String, ns: Option<&str>| -> String {
814-
if let Some(ns) = ns {
815-
String::from("self::")
816-
+ &ns.to_sanitized_snake_case()
817-
+ "::"
818-
+ &name.to_sanitized_upper_case()
819-
} else {
820-
name.to_sanitized_upper_case().to_string()
821-
}
822-
};
823-
824813
Ok(match register {
825814
Register::Single(info) => new_syn_field(
826815
&info.name.to_sanitized_snake_case(),
827-
name_to_ty(&info.name, name)?,
816+
name_to_wrapped_ty(&info.name, name)?,
828817
),
829818
Register::Array(info, array_info) => {
830819
let nb_name = util::replace_suffix(&info.name, "");
831820

832821
let ty = syn::Type::Array(parse_str::<syn::TypeArray>(&format!(
833822
"[{};{}]",
834-
name_to_ty_str(&nb_name, name),
823+
name_to_wrapped_ty_str(&nb_name, name),
835824
u64::from(array_info.dim)
836825
))?);
837826

@@ -924,6 +913,27 @@ fn name_to_ty(name: &String, ns: Option<&str>) -> Result<syn::Type, syn::Error>
924913
} else {
925914
name.to_sanitized_upper_case()
926915
};
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+
)
933+
}
934+
}
927935

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);
928938
Ok(syn::Type::Path(parse_str::<syn::TypePath>(&ident)?))
929939
}

0 commit comments

Comments
 (0)