@@ -34,7 +34,7 @@ pub fn render(
3434 }
3535
3636 let name_pc = Ident :: from ( & * p. name . to_sanitized_upper_case ( ) ) ;
37- let address = util:: hex ( p. base_address ) ;
37+ let address = util:: hex ( p. base_address as u64 ) ;
3838 let description = util:: respace ( p. description . as_ref ( ) . unwrap_or ( & p. name ) ) ;
3939 let derive_regs = p_derivedfrom. is_some ( ) && p_original. registers . is_none ( ) ;
4040
@@ -600,7 +600,11 @@ fn cluster_size_in_bits(info: &ClusterInfo, defs: &Defaults) -> Result<u32> {
600600fn expand_cluster ( cluster : & Cluster , defs : & Defaults ) -> Result < Vec < RegisterBlockField > > {
601601 let mut cluster_expanded = vec ! [ ] ;
602602
603- let cluster_size = cluster_size_in_bits ( cluster, defs)
603+ let reg_size = cluster. size . or ( defs. size ) ;
604+ let mut defs = defs. clone ( ) ;
605+ defs. size = reg_size;
606+
607+ let cluster_size = cluster_size_in_bits ( cluster, & defs)
604608 . chain_err ( || format ! ( "Cluster {} has no determinable `size` field" , cluster. name) ) ?;
605609
606610 match cluster {
@@ -724,7 +728,12 @@ fn cluster_block(
724728 . replace ( "[%s]" , "" )
725729 . replace ( "%s" , "" ) ;
726730 let name_sc = Ident :: from ( & * mod_name. to_sanitized_snake_case ( ) ) ;
727- let reg_block = register_or_cluster_block ( & c. children , defaults, Some ( & mod_name) , nightly) ?;
731+
732+ let reg_size = c. size . or ( defaults. size ) ;
733+ let mut defaults = defaults. clone ( ) ;
734+ defaults. size = reg_size;
735+
736+ let reg_block = register_or_cluster_block ( & c. children , & defaults, Some ( & mod_name) , nightly) ?;
728737
729738 // Generate definition for each of the registers.
730739 let registers = util:: only_registers ( & c. children ) ;
@@ -734,14 +743,14 @@ fn cluster_block(
734743 & registers,
735744 p,
736745 all_peripherals,
737- defaults,
746+ & defaults,
738747 ) ?) ;
739748 }
740749
741750 // Generate the sub-cluster blocks.
742751 let clusters = util:: only_clusters ( & c. children ) ;
743752 for c in & clusters {
744- mod_items. push ( cluster_block ( c, defaults, p, all_peripherals, nightly) ?) ;
753+ mod_items. push ( cluster_block ( c, & defaults, p, all_peripherals, nightly) ?) ;
745754 }
746755
747756 Ok ( quote ! {
0 commit comments