Skip to content

Commit 0b04c12

Browse files
Merge #423
423: Deduplicate some code and move some out of the inner loop r=Disasm a=therealprof Signed-off-by: Daniel Egger <[email protected]> Co-authored-by: Daniel Egger <[email protected]>
2 parents 7cf3952 + fbe9493 commit 0b04c12

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

src/generate/register.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -211,11 +211,14 @@ pub fn fields(
211211
r_impl_items: &mut TokenStream,
212212
w_impl_items: &mut TokenStream,
213213
) -> Result<()> {
214+
let span = Span::call_site();
215+
let can_read = [Access::ReadOnly, Access::ReadWriteOnce, Access::ReadWrite].contains(&access);
216+
let can_write = access != Access::ReadOnly;
217+
214218
// TODO enumeratedValues
215-
for f in fields.into_iter() {
219+
for f in fields.iter() {
216220
// TODO(AJM) - do we need to do anything with this range type?
217221
let BitRange { offset, width, .. } = f.bit_range;
218-
let span = Span::call_site();
219222
let sc = Ident::new(&f.name.to_sanitized_snake_case(), span);
220223
let pc = f.name.to_sanitized_upper_case();
221224
let bits = Ident::new(if width == 1 { "bit" } else { "bits" }, span);
@@ -234,18 +237,19 @@ pub fn fields(
234237
description_with_bits.push_str(&description);
235238
}
236239

237-
let can_read = [Access::ReadOnly, Access::ReadWriteOnce, Access::ReadWrite]
238-
.contains(&access)
240+
let can_read = can_read
239241
&& (f.access != Some(Access::WriteOnly))
240242
&& (f.access != Some(Access::WriteOnce));
241-
let can_write = (access != Access::ReadOnly) && (f.access != Some(Access::ReadOnly));
243+
let can_write = can_write && (f.access != Some(Access::ReadOnly));
242244

243245
let mask = 1u64.wrapping_neg() >> (64 - width);
244246
let hexmask = &util::hex(mask);
245247
let offset = u64::from(offset);
246248
let rv = reset_value.map(|rv| (rv >> offset) & mask);
247249
let fty = width.to_ty()?;
248250
let evs = &f.enumerated_values;
251+
let quotedfield = String::from("`") + &f.name + "`";
252+
let readerdoc = String::from("Reader of field ") + &quotedfield;
249253

250254
let lookup_results = lookup(
251255
evs,
@@ -298,9 +302,8 @@ pub fn fields(
298302
let base_pc_r = Ident::new(&(pc.clone() + "_A"), span);
299303
derive_from_base(mod_items, &base, &pc_r, &base_pc_r, &description);
300304

301-
let doc = format!("Reader of field `{}`", f.name);
302305
mod_items.extend(quote! {
303-
#[doc = #doc]
306+
#[doc = #readerdoc]
304307
pub type #_pc_r = crate::R<#fty, #pc_r>;
305308
});
306309
} else {
@@ -381,19 +384,17 @@ pub fn fields(
381384
});
382385
}
383386

384-
let doc = format!("Reader of field `{}`", f.name);
385387
mod_items.extend(quote! {
386-
#[doc = #doc]
388+
#[doc = #readerdoc]
387389
pub type #_pc_r = crate::R<#fty, #pc_r>;
388390
impl #_pc_r {
389391
#enum_items
390392
}
391393
});
392394
}
393395
} else {
394-
let doc = format!("Reader of field `{}`", f.name);
395396
mod_items.extend(quote! {
396-
#[doc = #doc]
397+
#[doc = #readerdoc]
397398
pub type #_pc_r = crate::R<#fty, #fty>;
398399
})
399400
}

0 commit comments

Comments
 (0)