@@ -34,7 +34,6 @@ use derive::{
3434 Derive , DeriveCompr , DeriveKey , DeriveLegacy , DeriveSet , DeriveXOnly , Keychain , NormalIndex ,
3535 XkeyDecodeError , XpubAccount ,
3636} ;
37- use indexmap:: { indexmap, IndexMap } ;
3837
3938use crate :: compiler:: { DescrAst , DescrParseError , ScriptExpr } ;
4039use crate :: {
@@ -104,37 +103,34 @@ impl FromStr for NoKey {
104103pub fn check_forms < ' s , K : Display + FromStr > (
105104 ast : ScriptExpr < ' s , K > ,
106105 ident : & str ,
107- forms : IndexMap < & ' static str , & [ DescrExpr ] > ,
108- ) -> Option < ( & ' static str , Vec < DescrAst < ' s , K > > ) >
106+ form : & [ DescrExpr ] ,
107+ ) -> Option < Vec < DescrAst < ' s , K > > >
109108where
110109 K :: Err : core:: error:: Error ,
111110{
112- for ( name, form) in forms {
113- if ast. name != ident {
114- continue ;
115- }
116- let mut iter1 = form. iter ( ) ;
117- let mut iter2 = ast. children . iter ( ) ;
118- if iter1. by_ref ( ) . zip ( iter2. by_ref ( ) ) . any ( |( a, b) | !a. check_expr ( b) ) {
119- continue ;
111+ if ast. name != ident {
112+ return None ;
113+ }
114+ let mut iter1 = form. iter ( ) ;
115+ let mut iter2 = ast. children . iter ( ) ;
116+ if iter1. by_ref ( ) . zip ( iter2. by_ref ( ) ) . any ( |( a, b) | !a. check_expr ( b) ) {
117+ return None ;
118+ }
119+ if iter1. count ( ) > 0 {
120+ return None ;
121+ }
122+ if form. last ( ) == Some ( & DescrExpr :: VariadicKey ) {
123+ if iter2. any ( |d| !DescrExpr :: Key . check_expr ( d) ) {
124+ return None ;
120125 }
121- if iter1. count ( ) > 0 {
122- continue ;
126+ } else if form. last ( ) == Some ( & DescrExpr :: VariadicLit ) {
127+ if iter2. any ( |d| !DescrExpr :: Lit . check_expr ( d) ) {
128+ return None ;
123129 }
124- if form. last ( ) == Some ( & DescrExpr :: VariadicKey ) {
125- if iter2. any ( |d| !DescrExpr :: Key . check_expr ( d) ) {
126- continue ;
127- }
128- } else if form. last ( ) == Some ( & DescrExpr :: VariadicLit ) {
129- if iter2. any ( |d| !DescrExpr :: Lit . check_expr ( d) ) {
130- continue ;
131- }
132- } else if iter2. count ( ) > 0 {
133- continue ;
134- }
135- return Some ( ( name, ast. children ) ) ;
130+ } else if iter2. count ( ) > 0 {
131+ return None ;
136132 }
137- None
133+ Some ( ast . children )
138134}
139135
140136////////////////////////////////////////
@@ -147,7 +143,7 @@ where K::Err: core::error::Error
147143
148144 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
149145 let ast = ScriptExpr :: < K > :: from_str ( s) ?;
150- let ( _ , mut form) = check_forms ( ast, "pkh" , indexmap ! { "" => & [ DescrExpr :: Key ] [ ..] } )
146+ let mut form = check_forms ( ast, "pkh" , & [ DescrExpr :: Key ] [ ..] )
151147 . ok_or ( DescrParseError :: InvalidArgs ( "pkh" ) ) ?;
152148 let Some ( DescrAst :: Key ( key, _) ) = form. pop ( ) else {
153149 unreachable ! ( ) ;
@@ -163,7 +159,7 @@ where K::Err: core::error::Error
163159
164160 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
165161 let ast = ScriptExpr :: < K > :: from_str ( s) ?;
166- let ( _ , mut form) = check_forms ( ast, "wpkh" , indexmap ! { "" => & [ DescrExpr :: Key ] [ ..] } )
162+ let mut form = check_forms ( ast, "wpkh" , & [ DescrExpr :: Key ] [ ..] )
167163 . ok_or ( DescrParseError :: InvalidArgs ( "wpkh" ) ) ?;
168164 let Some ( DescrAst :: Key ( key, _) ) = form. pop ( ) else {
169165 unreachable ! ( ) ;
@@ -179,13 +175,13 @@ where K::Err: core::error::Error
179175
180176 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
181177 let ast = ScriptExpr :: < K > :: from_str ( s) ?;
182- let ( _ , mut form) = check_forms ( ast, "sh" , indexmap ! { "" => & [ DescrExpr :: Script ] [ ..] } )
178+ let mut form = check_forms ( ast, "sh" , & [ DescrExpr :: Script ] [ ..] )
183179 . ok_or ( DescrParseError :: InvalidArgs ( "sh" ) ) ?;
184180 let Some ( DescrAst :: Script ( inner) ) = form. pop ( ) else {
185181 unreachable ! ( ) ;
186182 } ;
187183
188- let ( _ , mut form) = check_forms ( * inner, "wpkh" , indexmap ! { "" => & [ DescrExpr :: Key ] [ ..] } )
184+ let mut form = check_forms ( * inner, "wpkh" , & [ DescrExpr :: Key ] [ ..] )
189185 . ok_or ( DescrParseError :: InvalidArgs ( "wpkh" ) ) ?;
190186 let Some ( DescrAst :: Key ( key, _) ) = form. pop ( ) else {
191187 unreachable ! ( ) ;
@@ -208,28 +204,23 @@ where
208204{
209205 let ast = ScriptExpr :: < K > :: from_str ( s) ?;
210206
211- let ( _ , mut form) = check_forms ( ast, outer, indexmap ! { "" => & [ DescrExpr :: Script ] [ ..] } )
207+ let mut form = check_forms ( ast, outer, & [ DescrExpr :: Script ] [ ..] )
212208 . ok_or ( DescrParseError :: InvalidArgs ( outer) ) ?;
213209 let Some ( DescrAst :: Script ( mut script) ) = form. pop ( ) else {
214210 unreachable ! ( ) ;
215211 } ;
216212
217213 if let Some ( medium) = medium {
218- let ( _, mut form) =
219- check_forms ( * script, medium, indexmap ! { "" => & [ DescrExpr :: Script ] [ ..] } )
220- . ok_or ( DescrParseError :: InvalidArgs ( medium) ) ?;
214+ let mut form = check_forms ( * script, medium, & [ DescrExpr :: Script ] [ ..] )
215+ . ok_or ( DescrParseError :: InvalidArgs ( medium) ) ?;
221216 let Some ( DescrAst :: Script ( script2) ) = form. pop ( ) else {
222217 unreachable ! ( ) ;
223218 } ;
224219 script = script2;
225220 }
226221
227- let ( _, mut form) = check_forms (
228- * script,
229- inner,
230- indexmap ! { "" => & [ DescrExpr :: Lit , DescrExpr :: VariadicKey ] [ ..] } ,
231- )
232- . ok_or ( DescrParseError :: InvalidArgs ( inner) ) ?;
222+ let mut form = check_forms ( * script, inner, & [ DescrExpr :: Lit , DescrExpr :: VariadicKey ] [ ..] )
223+ . ok_or ( DescrParseError :: InvalidArgs ( inner) ) ?;
233224 let DescrAst :: Lit ( thresh, _) = form. remove ( 0 ) else {
234225 unreachable ! ( ) ;
235226 } ;
@@ -354,7 +345,7 @@ where K::Err: core::error::Error
354345
355346 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
356347 let ast = ScriptExpr :: < K > :: from_str ( s) ?;
357- let ( _ , mut form) = check_forms ( ast, "tr" , indexmap ! { "" => & [ DescrExpr :: Key ] [ ..] } )
348+ let mut form = check_forms ( ast, "tr" , & [ DescrExpr :: Key ] [ ..] )
358349 . ok_or ( DescrParseError :: InvalidArgs ( "tr" ) ) ?;
359350 let Some ( DescrAst :: Key ( key, _) ) = form. pop ( ) else {
360351 unreachable ! ( ) ;
@@ -372,22 +363,17 @@ where
372363{
373364 let ast = ScriptExpr :: < K > :: from_str ( s) ?;
374365
375- let ( _, mut form) =
376- check_forms ( ast, "tr" , indexmap ! { "" => & [ DescrExpr :: Key , DescrExpr :: Script ] [ ..] } )
377- . ok_or ( DescrParseError :: InvalidArgs ( "tr" ) ) ?;
366+ let mut form = check_forms ( ast, "tr" , & [ DescrExpr :: Key , DescrExpr :: Script ] [ ..] )
367+ . ok_or ( DescrParseError :: InvalidArgs ( "tr" ) ) ?;
378368 let Some ( DescrAst :: Script ( script) ) = form. pop ( ) else {
379369 unreachable ! ( ) ;
380370 } ;
381371 let Some ( DescrAst :: Key ( internal_key, _) ) = form. pop ( ) else {
382372 unreachable ! ( ) ;
383373 } ;
384374
385- let ( _, mut form) = check_forms (
386- * script,
387- inner,
388- indexmap ! { "" => & [ DescrExpr :: Lit , DescrExpr :: VariadicKey ] [ ..] } ,
389- )
390- . ok_or ( DescrParseError :: InvalidArgs ( inner) ) ?;
375+ let mut form = check_forms ( * script, inner, & [ DescrExpr :: Lit , DescrExpr :: VariadicKey ] [ ..] )
376+ . ok_or ( DescrParseError :: InvalidArgs ( inner) ) ?;
391377 let DescrAst :: Lit ( thresh, _) = form. remove ( 0 ) else {
392378 unreachable ! ( ) ;
393379 } ;
@@ -439,9 +425,8 @@ where K::Err: core::error::Error
439425 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
440426 let ast = ScriptExpr :: < K > :: from_str ( s) ?;
441427
442- let ( _, mut form) =
443- check_forms ( ast, "tr" , indexmap ! { "" => & [ DescrExpr :: Key , DescrExpr :: Tree ] [ ..] } )
444- . ok_or ( DescrParseError :: InvalidArgs ( "tr" ) ) ?;
428+ let mut form = check_forms ( ast, "tr" , & [ DescrExpr :: Key , DescrExpr :: Tree ] [ ..] )
429+ . ok_or ( DescrParseError :: InvalidArgs ( "tr" ) ) ?;
445430 let Some ( DescrAst :: Key ( _internal_key, _) ) = form. pop ( ) else {
446431 unreachable ! ( ) ;
447432 } ;
0 commit comments