diff --git a/svd-rs/CHANGELOG.md b/svd-rs/CHANGELOG.md index 5a690ff..1bc34db 100644 --- a/svd-rs/CHANGELOG.md +++ b/svd-rs/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +- Partially revert #283 + ## [v0.14.10] - 2025-02-08 - Do not derive `DimElement` diff --git a/svd-rs/src/derive_from.rs b/svd-rs/src/derive_from.rs index eaa6074..d3e4c9b 100644 --- a/svd-rs/src/derive_from.rs +++ b/svd-rs/src/derive_from.rs @@ -109,14 +109,25 @@ impl DeriveFrom for FieldInfo { impl DeriveFrom for MaybeArray where - T: DeriveFrom, + T: DeriveFrom + crate::Name, { fn derive_from(&self, other: &Self) -> Self { - use std::ops::Deref; - let info = self.deref().derive_from(other.deref()); - match self { - Self::Single(_) => Self::Single(info), - Self::Array(_, dim) => Self::Array(info, dim.clone()), + match (self, other) { + (Self::Single(info), Self::Single(other_info)) => { + Self::Single(info.derive_from(other_info)) + } + (Self::Single(info), Self::Array(other_info, other_dim)) => { + if info.name().contains("%s") { + let mut dim = other_dim.clone(); + dim.dim_name = None; + Self::Array(info.derive_from(other_info), dim) + } else { + Self::Single(info.derive_from(other_info)) + } + } + (Self::Array(info, dim), Self::Single(other_info) | Self::Array(other_info, _)) => { + Self::Array(info.derive_from(other_info), dim.clone()) + } } } }