From 8e0761e39ed2234a53c5be53aa70c0305f474a2a Mon Sep 17 00:00:00 2001 From: Wataru Otsubo Date: Fri, 31 Jan 2025 12:02:25 +0900 Subject: [PATCH] update(converter): add validation for register about mask & field ref: ea1850e csr commit --- src/converter.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/converter.rs b/src/converter.rs index 5483282..0334bb7 100644 --- a/src/converter.rs +++ b/src/converter.rs @@ -352,12 +352,21 @@ impl Register { .transpose()?; let desc = node.attribute("desc").map(str::to_string); - let children = node + let children: Vec<_> = node .children() .filter(|node| node.is_element() && node.tag_name().name().eq("field")) .map(Field::from_xml_dom) .collect::>()?; + // Validation + if mask.is_some() && !children.is_empty() { + return Err(DomConversionError::OtherError(format!( + "both mask and field are used in the same register: {} - {}", + node.document().text_pos_at(node.range().start), + node.document().text_pos_at(node.range().end), + ))); + } + Ok(Register { name, addr, @@ -424,6 +433,7 @@ impl Field { .map(Value::from_xml_dom) .collect::>()?; + // Validation if let Some(default) = default { if default & !(mask) != 0 { log::warn!(