Skip to content

Commit 2947604

Browse files
author
Jorge Aparicio
committed
don't emit unnecessary code
write only registers don't need the ${register}R accessor read only registers don't need the ${register}W constructor
1 parent 2741f61 commit 2947604

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

src/lib.rs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -352,9 +352,15 @@ pub fn gen_peripheral(p: &Peripheral, d: &Defaults) -> Vec<Tokens> {
352352
items.push(struct_);
353353

354354
for register in registers {
355+
let access = access(&register);
356+
355357
items.extend(gen_register(register, d));
356-
items.extend(gen_register_r(register, d));
357-
items.extend(gen_register_w(register, d));
358+
if access != Access::WriteOnly {
359+
items.extend(gen_register_r(register, d));
360+
}
361+
if access != Access::ReadOnly {
362+
items.extend(gen_register_w(register, d));
363+
}
358364
}
359365

360366
items
@@ -436,17 +442,8 @@ fn type_of(r: &Register) -> String {
436442
(&*ty).to_pascal_case()
437443
}
438444

439-
#[doc(hidden)]
440-
pub fn gen_register(r: &Register, d: &Defaults) -> Vec<Tokens> {
441-
let mut items = vec![];
442-
443-
let ty = type_of(r);
444-
let name = Ident::new(&*ty);
445-
let bits_ty = r.size
446-
.or(d.size)
447-
.expect(&format!("{:#?} has no `size` field", r))
448-
.to_ty();
449-
let access = r.access.unwrap_or_else(|| {
445+
fn access(r: &Register) -> Access {
446+
r.access.unwrap_or_else(|| {
450447
let fields = r.fields
451448
.as_ref()
452449
.expect(&format!("{:#?} has no `fields` field", r));
@@ -457,7 +454,20 @@ pub fn gen_register(r: &Register, d: &Defaults) -> Vec<Tokens> {
457454
} else {
458455
Access::ReadWrite
459456
}
460-
});
457+
})
458+
}
459+
460+
#[doc(hidden)]
461+
pub fn gen_register(r: &Register, d: &Defaults) -> Vec<Tokens> {
462+
let mut items = vec![];
463+
464+
let ty = type_of(r);
465+
let name = Ident::new(&*ty);
466+
let bits_ty = r.size
467+
.or(d.size)
468+
.expect(&format!("{:#?} has no `size` field", r))
469+
.to_ty();
470+
let access = access(r);
461471

462472
let name_r = Ident::new(format!("{}R", ty));
463473
let name_w = Ident::new(format!("{}W", ty));

0 commit comments

Comments
 (0)