Skip to content

Commit 7c43d07

Browse files
committed
Track dbg! calls
1 parent d07f6bd commit 7c43d07

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ default = ["elements"]
1515
elements = ["dep:elements", "bitcoin"]
1616
test-utils = ["simplicity-sys/test-utils"]
1717
serde = ["dep:serde", "bitcoin/serde", "elements/serde"]
18+
debug = []
1819

1920
[lib]
2021
name = "simplicity"

src/bit_machine/mod.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

585602
impl<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

Comments
 (0)