@@ -347,11 +347,24 @@ impl BitMachine {
347
347
call_stack. push ( CallStack :: Goto ( left) ) ;
348
348
}
349
349
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 ) ;
351
352
352
353
let ( sum_a_b, _c) = ip. arrow ( ) . source . as_product ( ) . unwrap ( ) ;
353
354
let ( a, b) = sum_a_b. as_sum ( ) . unwrap ( ) ;
354
355
356
+ if tracker. is_track_debug_enabled ( ) {
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
+ }
367
+
355
368
match ( ip. inner ( ) , choice_bit) {
356
369
( node:: Inner :: Case ( _, right) , true )
357
370
| ( node:: Inner :: AssertR ( _, right) , true ) => {
@@ -545,6 +558,12 @@ pub trait ExecTracker<J: Jet> {
545
558
output_buffer : & [ UWORD ] ,
546
559
success : bool ,
547
560
) ;
561
+
562
+ /// Track the potential execution of a `dbg!` call with the given `cmr` and `value`.
563
+ fn track_dbg_call ( & mut self , cmr : & Cmr , value : Value ) ;
564
+
565
+ /// Check if tracking debug calls is enabled.
566
+ fn is_track_debug_enabled ( & self ) -> bool ;
548
567
}
549
568
550
569
/// Tracker of executed left and right branches for each case node.
@@ -580,6 +599,12 @@ impl<J: Jet> ExecTracker<J> for SetTracker {
580
599
}
581
600
582
601
fn track_jet_call ( & mut self , _: & J , _: & [ UWORD ] , _: & [ UWORD ] , _: bool ) { }
602
+
603
+ fn track_dbg_call ( & mut self , _: & Cmr , _: Value ) { }
604
+
605
+ fn is_track_debug_enabled ( & self ) -> bool {
606
+ false
607
+ }
583
608
}
584
609
585
610
impl < J : Jet > ExecTracker < J > for NoTracker {
@@ -588,6 +613,13 @@ impl<J: Jet> ExecTracker<J> for NoTracker {
588
613
fn track_right ( & mut self , _: Ihr ) { }
589
614
590
615
fn track_jet_call ( & mut self , _: & J , _: & [ UWORD ] , _: & [ UWORD ] , _: bool ) { }
616
+
617
+ fn track_dbg_call ( & mut self , _: & Cmr , _: Value ) { }
618
+
619
+ fn is_track_debug_enabled ( & self ) -> bool {
620
+ // Set flag to test frame decoding in unit tests
621
+ cfg ! ( test)
622
+ }
591
623
}
592
624
593
625
/// Errors related to simplicity Execution
0 commit comments