@@ -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