fix(converter): use mask of parent register for virtual field if exists

This commit is contained in:
Wataru Otsubo 2025-04-24 03:11:08 +09:00
parent 6ee8239682
commit 3379babe12

View file

@ -517,17 +517,22 @@ impl Field {
/// Generate Field from Registers (piracy), guessing a lot of parameters. /// Generate Field from Registers (piracy), guessing a lot of parameters.
pub(crate) fn from_xml_register_dom(node: Node) -> Result<Self, DomConversionError> { pub(crate) fn from_xml_register_dom(node: Node) -> Result<Self, DomConversionError> {
let name = util::get_name(node)?; let name = util::get_name(node)?;
let mask = node let mask = match node.attribute("mask") {
.ancestors() Some(mask) => mask
.filter_map(|node| util::get_type(node)) .parse_prefixed_u32()
.next() .map_err(|e| DomConversionError::parse_prefixed_u32_error(e, "mask", node))?,
.transpose()? None => node
.map_or_else( .ancestors()
|| Err(DomConversionError::parameter_completion_error("type", node)), .filter_map(|node| util::get_type(node))
|dtype| match dtype { .next()
crate::types::DataType::D32 => Ok(u32::MAX), .transpose()?
}, .map_or_else(
)?; || Err(DomConversionError::parameter_completion_error("type", node)),
|dtype| match dtype {
crate::types::DataType::D32 => Ok(u32::MAX),
},
)?,
};
if node.has_attribute("default") { if node.has_attribute("default") {
return Err(DomConversionError::other_error( return Err(DomConversionError::other_error(
"unsupported structure: register with @default without field", "unsupported structure: register with @default without field",