Skip to content

Commit aa562e3

Browse files
committed
Fix crash on missing register description in SVD file
Continue with a dummy description and print name of the problematic register instead of just bailing out. Signed-off-by: Aurabindo Jayamohanan <[email protected]>
1 parent 61d14eb commit aa562e3

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
77

88
## [Unreleased]
99

10+
### Fixed
11+
12+
- Handling of missing register description (optional field)
13+
1014
## [v0.16.0] - 2019-08-05
1115

1216
### Added

src/generate/peripheral.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -679,7 +679,7 @@ fn expand_register(
679679
match register {
680680
Register::Single(info) => register_expanded.push(RegisterBlockField {
681681
field: convert_svd_register(register, name),
682-
description: info.description.clone().unwrap(),
682+
description: info.description.clone().unwrap_or_else(|| "".to_string()),
683683
offset: info.address_offset,
684684
size: register_size,
685685
}),
@@ -699,15 +699,15 @@ fn expand_register(
699699
if array_convertible {
700700
register_expanded.push(RegisterBlockField {
701701
field: convert_svd_register(&register, name),
702-
description: info.description.clone().unwrap(),
702+
description: info.description.clone().unwrap_or_else(|| "".to_string()),
703703
offset: info.address_offset,
704704
size: register_size * array_info.dim,
705705
});
706706
} else {
707707
for (field_num, field) in expand_svd_register(register, name).iter().enumerate() {
708708
register_expanded.push(RegisterBlockField {
709709
field: field.clone(),
710-
description: info.description.clone().unwrap(),
710+
description: info.description.clone().unwrap_or_else(|| "".to_string()),
711711
offset: info.address_offset + field_num as u32 * array_info.dim_increment,
712712
size: register_size,
713713
});

src/generate/register.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::svd::{
33
Usage, WriteConstraint,
44
};
55
use cast::u64;
6+
use log::warn;
67
use quote::Tokens;
78
use syn::Ident;
89

@@ -33,8 +34,13 @@ pub fn render(
3334
rsize.next_power_of_two()
3435
};
3536
let rty = rsize.to_ty()?;
36-
let description =
37-
util::escape_brackets(util::respace(&register.description.clone().unwrap()).as_ref());
37+
let description = util::escape_brackets(
38+
util::respace(&register.description.clone().unwrap_or_else(|| {
39+
warn!("Missing description for register {}", register.name);
40+
"".to_string()
41+
}))
42+
.as_ref(),
43+
);
3844

3945
let mut mod_items = vec![];
4046
let mut r_impl_items = vec![];

0 commit comments

Comments
 (0)