diff --git a/src/svd2ir.rs b/src/svd2ir.rs index f032935..a23b175 100644 --- a/src/svd2ir.rs +++ b/src/svd2ir.rs @@ -57,6 +57,7 @@ pub fn convert_peripheral(ir: &mut IR, p: &svd::Peripheral) -> anyhow::Result<() if let Some(fields) = &r.fields { let mut fieldset_name = block.name.clone(); + let mut field_name_counts: BTreeMap = BTreeMap::new(); fieldset_name.push(replace_suffix(&r.name, "")); fieldsets.push(ProtoFieldset { name: fieldset_name.clone(), @@ -74,7 +75,14 @@ pub fn convert_peripheral(ir: &mut IR, p: &svd::Peripheral) -> anyhow::Result<() let mut enum_write = None; let mut enum_readwrite = None; - let field_name = replace_suffix(&f.name, ""); + let mut field_name = replace_suffix(&f.name, ""); + + let field_name_count = + field_name_counts.entry(field_name.clone()).or_insert(0); + *field_name_count += 1; + if *field_name_count > 1 { + field_name = format!("{}{}", field_name, field_name_count); + } for e in &f.enumerated_values { let e = if let Some(derived_from) = &e.derived_from { diff --git a/src/transform/sanitize.rs b/src/transform/sanitize.rs index 3172257..afcf80e 100644 --- a/src/transform/sanitize.rs +++ b/src/transform/sanitize.rs @@ -148,7 +148,7 @@ pub(crate) fn rename_duplicate_variants(enumm: &mut crate::ir::Enum) { for v in &mut enumm.variants { if name_counts.get(&v.name).is_some_and(|&c| c > 1) { v.name = format!("{}_{:x}", v.name, v.value); - // increment new name to catch cascading name collisons + // increment new name to catch cascading name collisions *name_counts.entry(v.name.clone()).or_insert(0) += 1; } }