@@ -21,7 +21,7 @@ use std::{cmp, error, fmt};
2121
2222use super :: bititer:: { u2, DecodeNaturalError } ;
2323
24- type ArcNode < ' brand , J > = Arc < ConstructNode < ' brand , J > > ;
24+ type ArcNode < ' brand > = Arc < ConstructNode < ' brand > > ;
2525
2626/// Decoding error
2727#[ non_exhaustive]
@@ -104,7 +104,7 @@ impl error::Error for Error {
104104}
105105
106106#[ derive( Debug ) ]
107- enum DecodeNode < J : Jet > {
107+ enum DecodeNode {
108108 Iden ,
109109 Unit ,
110110 InjL ( usize ) ,
@@ -119,14 +119,14 @@ enum DecodeNode<J: Jet> {
119119 Witness ,
120120 Fail ( FailEntropy ) ,
121121 Hidden ( Cmr ) ,
122- Jet ( J ) ,
122+ Jet ( Box < dyn Jet > ) ,
123123 Word ( Word ) ,
124124}
125125
126- impl < J : Jet > DagLike for ( usize , & ' _ [ DecodeNode < J > ] ) {
127- type Node = DecodeNode < J > ;
126+ impl DagLike for ( usize , & ' _ [ DecodeNode ] ) {
127+ type Node = DecodeNode ;
128128
129- fn data ( & self ) -> & DecodeNode < J > {
129+ fn data ( & self ) -> & DecodeNode {
130130 & self . 1 [ self . 0 ]
131131 }
132132
@@ -156,14 +156,14 @@ impl<J: Jet> DagLike for (usize, &'_ [DecodeNode<J>]) {
156156pub fn decode_expression < ' brand , I : Iterator < Item = u8 > , J : Jet > (
157157 ctx : & types:: Context < ' brand > ,
158158 bits : & mut BitIter < I > ,
159- ) -> Result < ArcNode < ' brand , J > , Error > {
160- enum Converted < ' brand , J : Jet > {
161- Node ( ArcNode < ' brand , J > ) ,
159+ ) -> Result < ArcNode < ' brand > , Error > {
160+ enum Converted < ' brand > {
161+ Node ( ArcNode < ' brand > ) ,
162162 Hidden ( Cmr ) ,
163163 }
164164 use Converted :: { Hidden , Node } ;
165- impl < ' brand , J : Jet > Converted < ' brand , J > {
166- fn get ( & self ) -> Result < & ArcNode < ' brand , J > , Error > {
165+ impl < ' brand > Converted < ' brand > {
166+ fn get ( & self ) -> Result < & ArcNode < ' brand > , Error > {
167167 match self {
168168 Node ( arc) => Ok ( arc) ,
169169 Hidden ( _) => Err ( Error :: HiddenNode ) ,
@@ -176,57 +176,57 @@ pub fn decode_expression<'brand, I: Iterator<Item = u8>, J: Jet>(
176176
177177 let mut nodes = Vec :: with_capacity ( cmp:: min ( len, 10_000 ) ) ;
178178 for _ in 0 ..len {
179- let new_node = decode_node ( bits, nodes. len ( ) ) ?;
179+ let new_node = decode_node :: < I , J > ( bits, nodes. len ( ) ) ?;
180180 nodes. push ( new_node) ;
181181 }
182182
183183 // It is a sharing violation for any hidden node to be repeated. Track them in this set.
184184 let mut hidden_set = HashSet :: < Cmr > :: new ( ) ;
185185 // Convert the DecodeNode structure into a CommitNode structure
186- let mut converted = Vec :: < Converted < J > > :: with_capacity ( len) ;
186+ let mut converted = Vec :: < Converted > :: with_capacity ( len) ;
187187 for data in ( nodes. len ( ) - 1 , & nodes[ ..] ) . post_order_iter :: < InternalSharing > ( ) {
188188 // Check canonical order as we go
189189 if data. index != data. node . 0 {
190190 return Err ( Error :: NotInCanonicalOrder ) ;
191191 }
192192
193- let new = match nodes[ data. node . 0 ] {
193+ let new = match & nodes[ data. node . 0 ] {
194194 DecodeNode :: Unit => Node ( ArcNode :: unit ( ctx) ) ,
195195 DecodeNode :: Iden => Node ( ArcNode :: iden ( ctx) ) ,
196- DecodeNode :: InjL ( i) => Node ( ArcNode :: injl ( converted[ i] . get ( ) ?) ) ,
197- DecodeNode :: InjR ( i) => Node ( ArcNode :: injr ( converted[ i] . get ( ) ?) ) ,
198- DecodeNode :: Take ( i) => Node ( ArcNode :: take ( converted[ i] . get ( ) ?) ) ,
199- DecodeNode :: Drop ( i) => Node ( ArcNode :: drop_ ( converted[ i] . get ( ) ?) ) ,
196+ DecodeNode :: InjL ( i) => Node ( ArcNode :: injl ( converted[ * i] . get ( ) ?) ) ,
197+ DecodeNode :: InjR ( i) => Node ( ArcNode :: injr ( converted[ * i] . get ( ) ?) ) ,
198+ DecodeNode :: Take ( i) => Node ( ArcNode :: take ( converted[ * i] . get ( ) ?) ) ,
199+ DecodeNode :: Drop ( i) => Node ( ArcNode :: drop_ ( converted[ * i] . get ( ) ?) ) ,
200200 DecodeNode :: Comp ( i, j) => {
201- Node ( ArcNode :: comp ( converted[ i] . get ( ) ?, converted[ j] . get ( ) ?) ?)
201+ Node ( ArcNode :: comp ( converted[ * i] . get ( ) ?, converted[ * j] . get ( ) ?) ?)
202202 }
203203 DecodeNode :: Case ( i, j) => {
204204 // Case is a special case, since it uniquely is allowed to have hidden
205205 // children (but only one!) in which case it becomes an assertion.
206- match ( & converted[ i] , & converted[ j] ) {
206+ match ( & converted[ * i] , & converted[ * j] ) {
207207 ( Node ( left) , Node ( right) ) => Node ( ArcNode :: case ( left, right) ?) ,
208208 ( Node ( left) , Hidden ( cmr) ) => Node ( ArcNode :: assertl ( left, * cmr) ?) ,
209209 ( Hidden ( cmr) , Node ( right) ) => Node ( ArcNode :: assertr ( * cmr, right) ?) ,
210210 ( Hidden ( _) , Hidden ( _) ) => return Err ( Error :: BothChildrenHidden ) ,
211211 }
212212 }
213213 DecodeNode :: Pair ( i, j) => {
214- Node ( ArcNode :: pair ( converted[ i] . get ( ) ?, converted[ j] . get ( ) ?) ?)
214+ Node ( ArcNode :: pair ( converted[ * i] . get ( ) ?, converted[ * j] . get ( ) ?) ?)
215215 }
216- DecodeNode :: Disconnect1 ( i) => Node ( ArcNode :: disconnect ( converted[ i] . get ( ) ?, & None ) ?) ,
216+ DecodeNode :: Disconnect1 ( i) => Node ( ArcNode :: disconnect ( converted[ * i] . get ( ) ?, & None ) ?) ,
217217 DecodeNode :: Disconnect ( i, j) => Node ( ArcNode :: disconnect (
218- converted[ i] . get ( ) ?,
219- & Some ( Arc :: clone ( converted[ j] . get ( ) ?) ) ,
218+ converted[ * i] . get ( ) ?,
219+ & Some ( Arc :: clone ( converted[ * j] . get ( ) ?) ) ,
220220 ) ?) ,
221221 DecodeNode :: Witness => Node ( ArcNode :: witness ( ctx, None ) ) ,
222- DecodeNode :: Fail ( entropy) => Node ( ArcNode :: fail ( ctx, entropy) ) ,
222+ DecodeNode :: Fail ( entropy) => Node ( ArcNode :: fail ( ctx, * entropy) ) ,
223223 DecodeNode :: Hidden ( cmr) => {
224- if !hidden_set. insert ( cmr) {
224+ if !hidden_set. insert ( * cmr) {
225225 return Err ( Error :: SharingNotMaximal ) ;
226226 }
227- Hidden ( cmr)
227+ Hidden ( * cmr)
228228 }
229- DecodeNode :: Jet ( j) => Node ( ArcNode :: jet ( ctx, j) ) ,
229+ DecodeNode :: Jet ( j) => Node ( ArcNode :: jet ( ctx, j. as_ref ( ) ) ) ,
230230 DecodeNode :: Word ( ref w) => Node ( ArcNode :: const_word ( ctx, w. shallow_clone ( ) ) ) ,
231231 } ;
232232 converted. push ( new) ;
@@ -240,12 +240,12 @@ pub fn decode_expression<'brand, I: Iterator<Item = u8>, J: Jet>(
240240fn decode_node < I : Iterator < Item = u8 > , J : Jet > (
241241 bits : & mut BitIter < I > ,
242242 index : usize ,
243- ) -> Result < DecodeNode < J > , Error > {
243+ ) -> Result < DecodeNode , Error > {
244244 // First bit: 1 for jets/words, 0 for normal combinators
245245 if bits. read_bit ( ) ? {
246246 // Second bit: 1 for jets, 0 for words
247247 if bits. read_bit ( ) ? {
248- J :: decode ( bits) . map ( |jet| DecodeNode :: Jet ( jet) )
248+ J :: decode ( bits) . map ( |jet| DecodeNode :: Jet ( Box :: new ( jet) ) )
249249 } else {
250250 let n = bits. read_natural ( Some ( 32 ) ) ?;
251251 let word = Word :: from_bits ( bits, n - 1 ) ?;
@@ -321,10 +321,10 @@ mod tests {
321321 } ) ;
322322 // ...but NOT as a CommitNode
323323 let iter = BitIter :: from ( & justjet[ ..] ) ;
324- CommitNode :: < Core > :: decode ( iter) . unwrap_err ( ) ;
324+ CommitNode :: decode :: < _ , Core > ( iter) . unwrap_err ( ) ;
325325 // ...or as a RedeemNode
326326 let iter = BitIter :: from ( & justjet[ ..] ) ;
327- RedeemNode :: < Core > :: decode ( iter, BitIter :: from ( & [ ] [ ..] ) ) . unwrap_err ( ) ;
327+ RedeemNode :: decode :: < _ , _ , Core > ( iter, BitIter :: from ( & [ ] [ ..] ) ) . unwrap_err ( ) ;
328328 }
329329
330330 #[ test]
0 commit comments