Skip to content

Commit d466ab0

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

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-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: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,22 @@ 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+
bits.nth(1 + a.pad_left(b))
360+
.expect("AssertL: unexpected end of frame");
361+
let value = Value::from_padded_bits(&mut bits, _c)
362+
.expect("AssertL: decode `C` value");
363+
tracker.track_dbg_call(cmr, value);
364+
}
365+
355366
match (ip.inner(), choice_bit) {
356367
(node::Inner::Case(_, right), true)
357368
| (node::Inner::AssertR(_, right), true) => {
@@ -545,6 +556,9 @@ pub trait ExecTracker<J: Jet> {
545556
output_buffer: &[UWORD],
546557
success: bool,
547558
);
559+
560+
/// Track the potential execution of a `dbg!` call with the given `cmr` and `value`.
561+
fn track_dbg_call(&mut self, cmr: &Cmr, value: Value);
548562
}
549563

550564
/// Tracker of executed left and right branches for each case node.
@@ -580,6 +594,8 @@ impl<J: Jet> ExecTracker<J> for SetTracker {
580594
}
581595

582596
fn track_jet_call(&mut self, _: &J, _: &[UWORD], _: &[UWORD], _: bool) {}
597+
598+
fn track_dbg_call(&mut self, _: &Cmr, _: Value) {}
583599
}
584600

585601
impl<J: Jet> ExecTracker<J> for NoTracker {
@@ -588,6 +604,8 @@ impl<J: Jet> ExecTracker<J> for NoTracker {
588604
fn track_right(&mut self, _: Ihr) {}
589605

590606
fn track_jet_call(&mut self, _: &J, _: &[UWORD], _: &[UWORD], _: bool) {}
607+
608+
fn track_dbg_call(&mut self, _: &Cmr, _: Value) {}
591609
}
592610

593611
/// Errors related to simplicity Execution

0 commit comments

Comments
 (0)