@@ -7,10 +7,9 @@ use miniscript::iter::{Tree, TreeLike};
77
88use crate :: array:: BTreeSlice ;
99use crate :: error:: Error ;
10- use crate :: named:: { PairBuilder , SelectorBuilder } ;
10+ use crate :: named:: { CoreExt , PairBuilder , SelectorBuilder } ;
1111use crate :: str:: Identifier ;
1212use crate :: types:: { ResolvedType , TypeInner } ;
13- use crate :: ProgNode ;
1413
1514/// Pattern for binding values to variables.
1615#[ derive( Debug , Clone , Eq , PartialEq , Hash ) ]
@@ -195,14 +194,15 @@ impl BasePattern {
195194
196195 /// Check if the `identifier` is contained inside the pattern.
197196 pub fn contains ( & self , identifier : & Identifier ) -> bool {
198- self . get ( identifier) . is_some ( )
197+ self . pre_order_iter ( )
198+ . any ( |node| matches ! ( node, BasePattern :: Identifier ( id) if id == identifier) )
199199 }
200200
201201 /// Compute a Simplicity expression that returns the value of the given `identifier`.
202202 /// The expression takes as input a value that matches the `self` pattern.
203203 ///
204204 /// The expression is a sequence of `take` and `drop` followed by `iden`.
205- fn get ( & self , identifier : & Identifier ) -> Option < SelectorBuilder < ProgNode > > {
205+ fn get < P : CoreExt > ( & self , identifier : & Identifier ) -> Option < SelectorBuilder < P > > {
206206 let mut selector = SelectorBuilder :: default ( ) ;
207207
208208 for data in self . verbose_pre_order_iter ( ) {
@@ -302,11 +302,11 @@ impl BasePattern {
302302 /// This means there are infinitely many translating expressions from `self` to `to`.
303303 /// For instance, `iden`, `iden & iden`, `(iden & iden) & iden`, and so on.
304304 /// We enforce a unique translation by banning ignore from the `to` pattern.
305- pub fn translate (
305+ pub fn translate < P : CoreExt > (
306306 & self ,
307307 ctx : & simplicity:: types:: Context ,
308308 to : & Self ,
309- ) -> Option < PairBuilder < ProgNode > > {
309+ ) -> Option < PairBuilder < P > > {
310310 #[ derive( Debug , Clone ) ]
311311 enum Task < ' a > {
312312 Translate ( & ' a BasePattern , & ' a BasePattern ) ,
@@ -439,6 +439,8 @@ impl From<&Pattern> for BasePattern {
439439#[ cfg( test) ]
440440mod tests {
441441 use super :: * ;
442+ use crate :: named;
443+ use simplicity:: jet:: Elements ;
442444
443445 #[ test]
444446 fn translate_pattern ( ) {
@@ -462,7 +464,9 @@ mod tests {
462464
463465 for ( target, expected_expr) in target_expr {
464466 let ctx = simplicity:: types:: Context :: new ( ) ;
465- let expr = env. translate ( & ctx, & target) . unwrap ( ) ;
467+ let expr = env
468+ . translate :: < Arc < named:: ConstructNode < Elements > > > ( & ctx, & target)
469+ . unwrap ( ) ;
466470 assert_eq ! ( expected_expr, expr. as_ref( ) . display_expr( ) . to_string( ) ) ;
467471 }
468472 }
0 commit comments