@@ -9,7 +9,7 @@ use svd_parser::svd::{
99use yaml_rust:: { yaml:: Hash , Yaml } ;
1010
1111use super :: iterators:: { MatchIter , Matched } ;
12- use super :: register:: { RegisterExt , RegisterInfoExt } ;
12+ use super :: register:: RegisterExt ;
1313use super :: yaml_ext:: { AsType , GetVal , ToYaml } ;
1414use super :: {
1515 check_offsets, common_description, make_dim_element, matchname, matchsubspec,
@@ -172,8 +172,22 @@ pub(crate) trait RegisterBlockExt: Name {
172172 }
173173
174174 /// Delete registers matched by rspec inside ptag
175- fn delete_register ( & mut self , rspec : & str ) -> PatchResult {
175+ fn delete_register ( & mut self , rspec : & str , bpath : & BlockPath ) -> PatchResult {
176176 if let Some ( children) = self . children_mut ( ) {
177+ if children
178+ . iter ( )
179+ . filter (
180+ |rc| matches ! ( rc, RegisterCluster :: Register ( r) if matchname( & r. name, rspec) ) ,
181+ )
182+ . count ( )
183+ == 0
184+ {
185+ log:: info!(
186+ "Trying to delete absent `{}` register from {}" ,
187+ rspec,
188+ bpath
189+ ) ;
190+ }
177191 children. retain (
178192 |rc| !matches ! ( rc, RegisterCluster :: Register ( r) if matchname( & r. name, rspec) ) ,
179193 ) ;
@@ -1043,7 +1057,7 @@ impl PeripheralExt for Peripheral {
10431057 }
10441058 Yaml :: Hash ( deletions) => {
10451059 for rspec in deletions. str_vec_iter ( "_registers" ) ? {
1046- self . delete_register ( rspec)
1060+ self . delete_register ( rspec, & ppath )
10471061 . with_context ( || format ! ( "Deleting registers matched to `{rspec}`" ) ) ?;
10481062 }
10491063 for cspec in deletions. str_vec_iter ( "_clusters" ) ? {
@@ -1344,6 +1358,8 @@ impl InterruptExt for Peripheral {
13441358
13451359impl ClusterExt for Cluster {
13461360 fn pre_process ( & mut self , cmod : & Hash , parent : & BlockPath , _config : & Config ) -> PatchResult {
1361+ let cpath = parent. new_cluster ( & self . name ) ;
1362+
13471363 // Handle deletions
13481364 if let Some ( deletions) = cmod. get_yaml ( "_delete" ) {
13491365 match deletions {
@@ -1362,7 +1378,7 @@ impl ClusterExt for Cluster {
13621378 }
13631379 Yaml :: Hash ( deletions) => {
13641380 for rspec in deletions. str_vec_iter ( "_registers" ) ? {
1365- self . delete_register ( rspec)
1381+ self . delete_register ( rspec, & cpath )
13661382 . with_context ( || format ! ( "Deleting registers matched to `{rspec}`" ) ) ?;
13671383 }
13681384 for cspec in deletions. str_vec_iter ( "_clusters" ) ? {
@@ -1386,8 +1402,6 @@ impl ClusterExt for Cluster {
13861402 }
13871403 }
13881404
1389- let cpath = parent. new_cluster ( & self . name ) ;
1390-
13911405 // Handle any copied peripherals
13921406 for ( rname, rcopy) in cmod. hash_iter ( "_copy" ) {
13931407 let rname = rname. str ( ) ?;
@@ -1643,10 +1657,7 @@ fn collect_in_array(
16431657 if !check_offsets ( & offsets, dim_increment) {
16441658 return Err ( anyhow ! ( "{path}: registers cannot be collected into {rspec} array. Different addressOffset increments" ) ) ;
16451659 }
1646- let bitmasks = registers
1647- . iter ( )
1648- . map ( RegisterInfo :: get_bitmask)
1649- . collect :: < Vec < _ > > ( ) ;
1660+ let bitmasks = registers. iter ( ) . map ( |r| r. bitmask ( ) ) . collect :: < Vec < _ > > ( ) ;
16501661 if !bitmasks. iter ( ) . all ( |& m| m == bitmasks[ 0 ] ) {
16511662 return Err ( anyhow ! (
16521663 "{path}: registers cannot be collected into {rspec} array. Different bit masks"
@@ -1769,10 +1780,7 @@ fn collect_in_cluster(
17691780 "Some of `{rspec}` registers are arrays and some are not"
17701781 ) ) ;
17711782 }
1772- let bitmasks = registers
1773- . iter ( )
1774- . map ( |r| RegisterInfo :: get_bitmask ( r) )
1775- . collect :: < Vec < _ > > ( ) ;
1783+ let bitmasks = registers. iter ( ) . map ( |r| r. bitmask ( ) ) . collect :: < Vec < _ > > ( ) ;
17761784 let new_dim_index = registers
17771785 . iter ( )
17781786 . map ( |r| {
0 commit comments