Skip to content

Commit fc26bd2

Browse files
committed
Auto merge of #177 - jamesmunns:master, r=japaric
Correctly handle case where `register.name` has "[%s]" and no `dimIndex`
2 parents 108ec70 + 550982e commit fc26bd2

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

ci/script.sh

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ main() {
3838
echo 'cortex-m = "0.4.0"' >> $td/Cargo.toml
3939
echo 'cortex-m-rt = "0.3.0"' >> $td/Cargo.toml
4040
echo 'vcell = "0.1.0"' >> $td/Cargo.toml
41+
echo 'msp430 = "0.1.0"' >> $td/Cargo.toml
4142
echo '[profile.dev]' >> $td/Cargo.toml
4243
echo 'incremental = false' >> $td/Cargo.toml
4344

@@ -386,8 +387,6 @@ main() {
386387

387388
# test other targets (architectures)
388389
OTHER)
389-
echo 'msp430 = "0.1.0"' >> $td/Cargo.toml
390-
391390
(
392391
cd $td &&
393392
curl -LO \

src/generate.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -566,20 +566,28 @@ fn register_block(registers: &[Register], defs: &Defaults) -> Result<Tokens> {
566566
Register::Array(ref info, ref array_info) => {
567567
let sequential_adresses = register_size == array_info.dim_increment * BITS_PER_BYTE;
568568

569-
let numeral_indexes = array_info
570-
.dim_index
571-
.clone()
572-
.ok_or_else(|| {
573-
format!("Register {} has no `dim_index` field", register.name)
574-
})?
569+
let indexes = if register.name.contains("[%s]") {
570+
// From: http://www.keil.com/pack/doc/CMSIS/SVD/html/elem_registers.html
571+
// "dimIndex should not be used together with the placeholder [%s],
572+
// but rather with %s"
573+
(0..array_info.dim)
574+
.map(|i| i.to_string())
575+
.collect()
576+
} else {
577+
array_info
578+
.dim_index
579+
.clone()
580+
.ok_or_else(|| {
581+
format!("Register {} has no `dim_index` field", register.name)
582+
})?
583+
};
584+
585+
let numeral_indexes = indexes
575586
.iter()
576587
.all(|element| element.parse::<usize>().is_ok());
577588

578589
let sequential_indexes = if numeral_indexes && sequential_adresses {
579-
array_info
580-
.dim_index
581-
.clone()
582-
.unwrap()
590+
indexes
583591
.iter()
584592
.map(|element| element.parse::<u32>().unwrap())
585593
.collect::<Vec<u32>>()

0 commit comments

Comments
 (0)