@@ -248,9 +248,10 @@ pub(crate) trait RegisterBlockExt: Name {
248248 /// Update all derivedFrom referencing rname
249249 fn derive_register ( & mut self , rspec : & str , rderive : & Yaml , bpath : & BlockPath ) -> PatchResult {
250250 let ( rspec, ignore) = rspec. spec ( ) ;
251- let ( rderive, info) = if let Some ( rderive) = rderive. as_str ( ) {
251+ let ( rderive, dim , info) = if let Some ( rderive) = rderive. as_str ( ) {
252252 (
253253 rderive,
254+ None ,
254255 RegisterInfo :: builder ( ) . derived_from ( Some ( rderive. into ( ) ) ) ,
255256 )
256257 } else if let Some ( hash) = rderive. as_hash ( ) {
@@ -259,6 +260,7 @@ pub(crate) trait RegisterBlockExt: Name {
259260 } ) ?;
260261 (
261262 rderive,
263+ make_dim_element ( hash) ?,
262264 make_register ( hash, Some ( bpath) ) ?. derived_from ( Some ( rderive. into ( ) ) ) ,
263265 )
264266 } else {
@@ -281,14 +283,21 @@ pub(crate) trait RegisterBlockExt: Name {
281283 let rtags = self . iter_registers ( rspec) . collect :: < Vec < _ > > ( ) ;
282284 let mut found = Vec :: new ( ) ;
283285 if !rtags. is_empty ( ) {
284- for register in rtags {
285- found. push ( register. name . to_string ( ) ) ;
286- register. modify_from ( info. clone ( ) , VAL_LVL ) ?;
286+ for rtag in rtags {
287+ found. push ( rtag. name . to_string ( ) ) ;
288+ modify_dim_element ( rtag, & dim) ?;
289+ rtag. modify_from ( info. clone ( ) , VAL_LVL ) ?;
287290 }
288291 } else if !ignore {
289292 super :: check_dimable_name ( rspec) ?;
290- let register = info. name ( rspec. into ( ) ) . build ( VAL_LVL ) ?. single ( ) ;
291- self . add_child ( RegisterCluster :: Register ( register) ) ;
293+ let reg = info. name ( rspec. into ( ) ) . build ( VAL_LVL ) ?;
294+ self . add_child ( RegisterCluster :: Register ( {
295+ if let Some ( dim) = dim {
296+ reg. array ( dim. build ( VAL_LVL ) ?)
297+ } else {
298+ reg. single ( )
299+ }
300+ } ) ) ;
292301 }
293302 for rname in found {
294303 for r in self
0 commit comments