@@ -347,11 +347,23 @@ impl BitMachine {
347347 call_stack. push ( CallStack :: Goto ( left) ) ;
348348 }
349349 node:: Inner :: Case ( ..) | node:: Inner :: AssertL ( ..) | node:: Inner :: AssertR ( ..) => {
350- let choice_bit = self . read [ self . read . len ( ) - 1 ] . peek_bit ( & self . data ) ;
350+ let in_frame = & self . read [ self . read . len ( ) - 1 ] ;
351+ let choice_bit: bool = in_frame. peek_bit ( & self . data ) ;
351352
352353 let ( sum_a_b, _c) = ip. arrow ( ) . source . as_product ( ) . unwrap ( ) ;
353354 let ( a, b) = sum_a_b. as_sum ( ) . unwrap ( ) ;
354355
356+ #[ cfg( feature = "debug" ) ]
357+ if let node:: Inner :: AssertL ( _, cmr) = ip. inner ( ) {
358+ let mut bits = in_frame. as_bit_iter ( & self . data ) ;
359+ // Skips 1 + max(a.bit_width, b.bit_width) - a.bit_width
360+ bits. nth ( a. pad_left ( b) )
361+ . expect ( "AssertL: unexpected end of frame" ) ;
362+ let value = Value :: from_padded_bits ( & mut bits, _c)
363+ . expect ( "AssertL: decode `C` value" ) ;
364+ tracker. track_dbg_call ( cmr, value) ;
365+ }
366+
355367 match ( ip. inner ( ) , choice_bit) {
356368 ( node:: Inner :: Case ( _, right) , true )
357369 | ( node:: Inner :: AssertR ( _, right) , true ) => {
@@ -545,6 +557,9 @@ pub trait ExecTracker<J: Jet> {
545557 output_buffer : & [ UWORD ] ,
546558 success : bool ,
547559 ) ;
560+
561+ /// Track the potential execution of a `dbg!` call with the given `cmr` and `value`.
562+ fn track_dbg_call ( & mut self , cmr : & Cmr , value : Value ) ;
548563}
549564
550565/// Tracker of executed left and right branches for each case node.
@@ -580,6 +595,8 @@ impl<J: Jet> ExecTracker<J> for SetTracker {
580595 }
581596
582597 fn track_jet_call ( & mut self , _: & J , _: & [ UWORD ] , _: & [ UWORD ] , _: bool ) { }
598+
599+ fn track_dbg_call ( & mut self , _: & Cmr , _: Value ) { }
583600}
584601
585602impl < J : Jet > ExecTracker < J > for NoTracker {
@@ -588,6 +605,8 @@ impl<J: Jet> ExecTracker<J> for NoTracker {
588605 fn track_right ( & mut self , _: Ihr ) { }
589606
590607 fn track_jet_call ( & mut self , _: & J , _: & [ UWORD ] , _: & [ UWORD ] , _: bool ) { }
608+
609+ fn track_dbg_call ( & mut self , _: & Cmr , _: Value ) { }
591610}
592611
593612/// Errors related to simplicity Execution
0 commit comments