@@ -248,9 +248,10 @@ pub(crate) trait RegisterBlockExt: Name {
248
248
/// Update all derivedFrom referencing rname
249
249
fn derive_register ( & mut self , rspec : & str , rderive : & Yaml , bpath : & BlockPath ) -> PatchResult {
250
250
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 ( ) {
252
252
(
253
253
rderive,
254
+ None ,
254
255
RegisterInfo :: builder ( ) . derived_from ( Some ( rderive. into ( ) ) ) ,
255
256
)
256
257
} else if let Some ( hash) = rderive. as_hash ( ) {
@@ -259,6 +260,7 @@ pub(crate) trait RegisterBlockExt: Name {
259
260
} ) ?;
260
261
(
261
262
rderive,
263
+ make_dim_element ( hash) ?,
262
264
make_register ( hash, Some ( bpath) ) ?. derived_from ( Some ( rderive. into ( ) ) ) ,
263
265
)
264
266
} else {
@@ -281,14 +283,21 @@ pub(crate) trait RegisterBlockExt: Name {
281
283
let rtags = self . iter_registers ( rspec) . collect :: < Vec < _ > > ( ) ;
282
284
let mut found = Vec :: new ( ) ;
283
285
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 ) ?;
287
290
}
288
291
} else if !ignore {
289
292
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
+ } ) ) ;
292
301
}
293
302
for rname in found {
294
303
for r in self
0 commit comments