Skip to content

Commit 2806157

Browse files
committed
Track dbg! calls
1 parent d07f6bd commit 2806157

File tree

1 file changed

+33
-1
lines changed

1 file changed

+33
-1
lines changed

src/bit_machine/mod.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,24 @@ 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+
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+
355368
match (ip.inner(), choice_bit) {
356369
(node::Inner::Case(_, right), true)
357370
| (node::Inner::AssertR(_, right), true) => {
@@ -545,6 +558,12 @@ pub trait ExecTracker<J: Jet> {
545558
output_buffer: &[UWORD],
546559
success: bool,
547560
);
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;
548567
}
549568

550569
/// Tracker of executed left and right branches for each case node.
@@ -580,6 +599,12 @@ impl<J: Jet> ExecTracker<J> for SetTracker {
580599
}
581600

582601
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+
}
583608
}
584609

585610
impl<J: Jet> ExecTracker<J> for NoTracker {
@@ -588,6 +613,13 @@ impl<J: Jet> ExecTracker<J> for NoTracker {
588613
fn track_right(&mut self, _: Ihr) {}
589614

590615
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+
}
591623
}
592624

593625
/// Errors related to simplicity Execution

0 commit comments

Comments
 (0)