use core::ops::ControlFlow;
use miden_core::{Felt, Operation, Word, ZERO};
use super::{CoreTraceFragmentGenerator, trace_builder::OperationTraceConfig};
use crate::decoder::block_stack::ExecutionContextInfo;
impl CoreTraceFragmentGenerator {
pub fn add_dyn_start_trace_row(
&mut self,
parent_addr: Felt,
callee_hash: Word,
) -> ControlFlow<()> {
let config = OperationTraceConfig {
opcode: Operation::Dyn.op_code(),
hasher_state: (callee_hash, Word::default()),
addr: parent_addr,
};
self.add_control_flow_trace_row(config)
}
pub fn add_dyncall_start_trace_row(
&mut self,
parent_addr: Felt,
callee_hash: Word,
ctx_info: ExecutionContextInfo,
) -> ControlFlow<()> {
let second_hasher_state: Word = [
Felt::from(ctx_info.parent_stack_depth),
ctx_info.parent_next_overflow_addr,
ZERO,
ZERO,
]
.into();
let config = OperationTraceConfig {
opcode: Operation::Dyncall.op_code(),
hasher_state: (callee_hash, second_hasher_state),
addr: parent_addr,
};
self.add_control_flow_trace_row(config)
}
}