Skip to content

Commit 99b5c17

Browse files
bors[bot]gkelly
andauthored
Merge #444
444: Cluster name qualification r=burrbull a=gkelly This contains two commits, the first is a simple typo fix. The second ensures that the complete-pathed type name is generated for clusters. Co-authored-by: Garret Kelly <[email protected]>
2 parents d89c2d2 + 139cadc commit 99b5c17

File tree

1 file changed

+33
-32
lines changed

1 file changed

+33
-32
lines changed

src/generate/peripheral.rs

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ pub fn render(
155155
mod_items.extend(cluster_block(c, &defaults, p, all_peripherals, nightly)?);
156156
}
157157

158-
// Push all regsiter realted information into the peripheral module
158+
// Push all register related information into the peripheral module
159159
for reg in registers {
160160
mod_items.extend(register::render(
161161
reg,
@@ -564,7 +564,7 @@ fn expand(
564564
for erc in ercs {
565565
ercs_expanded.extend(match &erc {
566566
RegisterCluster::Register(register) => expand_register(register, defs, name)?,
567-
RegisterCluster::Cluster(cluster) => expand_cluster(cluster, defs)?,
567+
RegisterCluster::Cluster(cluster) => expand_cluster(cluster, defs, name)?,
568568
});
569569
}
570570

@@ -599,7 +599,11 @@ fn cluster_size_in_bits(info: &ClusterInfo, defs: &RegisterProperties) -> Result
599599
}
600600

601601
/// Render a given cluster (and any children) into `RegisterBlockField`s
602-
fn expand_cluster(cluster: &Cluster, defs: &RegisterProperties) -> Result<Vec<RegisterBlockField>> {
602+
fn expand_cluster(
603+
cluster: &Cluster,
604+
defs: &RegisterProperties,
605+
name: Option<&str>,
606+
) -> Result<Vec<RegisterBlockField>> {
603607
let mut cluster_expanded = vec![];
604608

605609
let defs = cluster.default_register_properties.derive_from(defs);
@@ -635,7 +639,7 @@ fn expand_cluster(cluster: &Cluster, defs: &RegisterProperties) -> Result<Vec<Re
635639
size: cluster_size * array_info.dim,
636640
});
637641
} else {
638-
for (field_num, field) in expand_svd_cluster(cluster)?.iter().enumerate() {
642+
for (field_num, field) in expand_svd_cluster(cluster, name)?.iter().enumerate() {
639643
cluster_expanded.push(RegisterBlockField {
640644
field: field.clone(),
641645
description: info.description.as_ref().unwrap_or(&info.name).into(),
@@ -770,21 +774,6 @@ fn expand_svd_register(
770774
register: &Register,
771775
name: Option<&str>,
772776
) -> Result<Vec<syn::Field>, syn::Error> {
773-
let name_to_ty = |name: &String, ns: Option<&str>| -> Result<syn::Type, syn::Error> {
774-
let ident = if let Some(ns) = ns {
775-
Cow::Owned(
776-
String::from("self::")
777-
+ &ns.to_sanitized_snake_case()
778-
+ "::"
779-
+ &name.to_sanitized_upper_case(),
780-
)
781-
} else {
782-
name.to_sanitized_upper_case()
783-
};
784-
785-
Ok(syn::Type::Path(parse_str::<syn::TypePath>(&ident)?))
786-
};
787-
788777
let mut out = vec![];
789778

790779
match register {
@@ -818,7 +807,7 @@ fn expand_svd_register(
818807

819808
/// Convert a parsed `Register` into its `Field` equivalent
820809
fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::Field, syn::Error> {
821-
let name_to_ty = |name: &String, ns: Option<&str>| -> String {
810+
let name_to_ty_str = |name: &String, ns: Option<&str>| -> String {
822811
if let Some(ns) = ns {
823812
String::from("self::")
824813
+ &ns.to_sanitized_snake_case()
@@ -832,14 +821,14 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::
832821
Ok(match register {
833822
Register::Single(info) => new_syn_field(
834823
&info.name.to_sanitized_snake_case(),
835-
syn::Type::Path(parse_str::<syn::TypePath>(&name_to_ty(&info.name, name))?),
824+
name_to_ty(&info.name, name)?,
836825
),
837826
Register::Array(info, array_info) => {
838827
let nb_name = util::replace_suffix(&info.name, "");
839828

840829
let ty = syn::Type::Array(parse_str::<syn::TypeArray>(&format!(
841830
"[{};{}]",
842-
name_to_ty(&nb_name, name),
831+
name_to_ty_str(&nb_name, name),
843832
u64::from(array_info.dim)
844833
))?);
845834

@@ -850,13 +839,10 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> Result<syn::
850839

851840
/// Takes a svd::Cluster which may contain a register array, and turn in into
852841
/// a list of syn::Field where the register arrays have been expanded.
853-
fn expand_svd_cluster(cluster: &Cluster) -> Result<Vec<syn::Field>, syn::Error> {
854-
let name_to_ty = |name: &String| -> Result<syn::Type, syn::Error> {
855-
Ok(syn::Type::Path(parse_str::<syn::TypePath>(
856-
&name.to_sanitized_upper_case(),
857-
)?))
858-
};
859-
842+
fn expand_svd_cluster(
843+
cluster: &Cluster,
844+
name: Option<&str>,
845+
) -> Result<Vec<syn::Field>, syn::Error> {
860846
let mut out = vec![];
861847

862848
match &cluster {
@@ -877,11 +863,11 @@ fn expand_svd_cluster(cluster: &Cluster) -> Result<Vec<syn::Field>, syn::Error>
877863
let ty_name = util::replace_suffix(&info.name, "");
878864

879865
for (idx, _i) in indices.iter().zip(0..) {
880-
let name = util::replace_suffix(&info.name, idx);
866+
let nb_name = util::replace_suffix(&info.name, idx);
881867

882-
let ty = name_to_ty(&ty_name)?;
868+
let ty = name_to_ty(&ty_name, name)?;
883869

884-
out.push(new_syn_field(&name.to_sanitized_snake_case(), ty));
870+
out.push(new_syn_field(&nb_name.to_sanitized_snake_case(), ty));
885871
}
886872
}
887873
}
@@ -923,3 +909,18 @@ fn new_syn_field(ident: &str, ty: syn::Type) -> syn::Field {
923909
ty,
924910
}
925911
}
912+
913+
fn name_to_ty(name: &String, ns: Option<&str>) -> Result<syn::Type, syn::Error> {
914+
let ident = if let Some(ns) = ns {
915+
Cow::Owned(
916+
String::from("self::")
917+
+ &ns.to_sanitized_snake_case()
918+
+ "::"
919+
+ &name.to_sanitized_upper_case(),
920+
)
921+
} else {
922+
name.to_sanitized_upper_case()
923+
};
924+
925+
Ok(syn::Type::Path(parse_str::<syn::TypePath>(&ident)?))
926+
}

0 commit comments

Comments
 (0)