Skip to content

Commit 09f191e

Browse files
committed
Refactored out register size to avoid duplication of error detection logic
1 parent fc238af commit 09f191e

File tree

1 file changed

+10
-17
lines changed

1 file changed

+10
-17
lines changed

src/generate.rs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -475,19 +475,21 @@ fn register_block(registers: &[Register], defs: &Defaults) -> Result<Tokens> {
475475
// offset from the base address, in bytes
476476
let mut offset = 0;
477477
let mut registers_expanded = vec![];
478-
478+
479479
for register in registers {
480+
let register_size = register.size.or(defs.size)
481+
.ok_or_else(
482+
|| {
483+
format!("Register {} has no `size` field", register.name)
484+
},)?;
485+
480486
match *register {
481487
Register::Single(ref info) => registers_expanded.push(
482488
RegisterBlockField{
483489
field: util::convert_svd_register(register),
484490
description: Ident::from(info.description.clone()),
485491
offset: info.address_offset,
486-
size: info.size.or(defs.size)
487-
.ok_or_else(
488-
|| {
489-
format!("Register {} has no `size` field", register.name)
490-
},)?,
492+
size: register_size,
491493
}
492494
),
493495
Register::Array(ref info, ref array_info) => {
@@ -536,12 +538,7 @@ fn register_block(registers: &[Register], defs: &Defaults) -> Result<Tokens> {
536538
field: util::convert_svd_register(&register),
537539
description: Ident::from(info.description.clone()),
538540
offset: info.address_offset,
539-
size: info.size.or(defs.size)
540-
.ok_or_else(
541-
|| {
542-
format!("Register {} has no `size` field", register.name)
543-
},)?
544-
* array_info.dim,
541+
size: register_size * array_info.dim,
545542
});
546543
} else {
547544
let mut field_num = 0;
@@ -551,11 +548,7 @@ fn register_block(registers: &[Register], defs: &Defaults) -> Result<Tokens> {
551548
field: field.clone(),
552549
description: Ident::from(info.description.clone()),
553550
offset: info.address_offset + field_num * array_info.dim_increment,
554-
size: info.size.or(defs.size)
555-
.ok_or_else(
556-
|| {
557-
format!("Register {} has no `size` field", register.name)
558-
},)?
551+
size: register_size,
559552
});
560553
field_num += 1;
561554
}

0 commit comments

Comments
 (0)