Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
internal_call_stack_manager.cpp
Go to the documentation of this file.
1
#include "
barretenberg/vm2/simulation/gadgets/internal_call_stack_manager.hpp
"
2
3
#include <algorithm>
4
5
namespace
bb::avm2::simulation
{
6
7
void
InternalCallStackManager::push
(
PC
caller_pc,
PC
return_pc)
8
{
9
// Add the current call id & return_pc to the stack
10
internal_call_stack
.push_back(
11
{ .return_id =
current_return_call_id
, .caller_pc = caller_pc, .return_pc = return_pc });
12
13
internal_call_stack_events
.emit(
InternalCallStackEvent
{
14
.
context_id
=
context_id
,
15
.entered_call_id =
next_internal_call_id
,
16
.id =
current_internal_call_id
,
17
.return_id =
current_return_call_id
,
18
.return_pc = return_pc,
19
});
20
21
// Update id values
22
current_return_call_id
=
current_internal_call_id
;
23
current_internal_call_id
=
next_internal_call_id
;
24
next_internal_call_id
++;
25
}
26
27
PC
InternalCallStackManager::pop
()
28
{
29
if
(
internal_call_stack
.empty()) {
30
throw
InternalCallStackException
(
"Internal call stack is empty. Cannot pop."
);
31
}
32
// We need to restore the call ptr info to the previous call
33
InternalCallPtr
prev_call_ptr =
internal_call_stack
.back();
34
35
// Reset the id values
36
current_internal_call_id
=
current_return_call_id
;
37
current_return_call_id
= prev_call_ptr.
return_id
;
38
39
internal_call_stack
.pop_back();
40
41
// Return the next pc of the previous call
42
return
prev_call_ptr.
return_pc
;
43
}
44
45
InternalCallId
InternalCallStackManager::get_next_call_id
()
const
46
{
47
return
next_internal_call_id
;
48
}
49
50
InternalCallId
InternalCallStackManager::get_call_id
()
const
51
{
52
return
current_internal_call_id
;
53
}
54
55
InternalCallId
InternalCallStackManager::get_return_call_id
()
const
56
{
57
return
current_return_call_id
;
58
}
59
60
std::vector<PC>
InternalCallStackManager::get_current_call_stack
()
const
61
{
62
std::vector<PC> call_stack;
63
std::ranges::transform(
internal_call_stack
,
std::back_inserter
(call_stack), [](
const
InternalCallPtr
& call_ptr) {
64
return
call_ptr.
caller_pc
;
65
});
66
return
call_stack;
67
}
68
69
}
// namespace bb::avm2::simulation
bb::avm2::internal_call_stack
Definition
internal_call_stack.hpp:33
bb::avm2::simulation::InternalCallStackException
Definition
internal_call_stack_manager.hpp:32
bb::avm2::simulation::InternalCallStackManager::get_call_id
InternalCallId get_call_id() const override
Definition
internal_call_stack_manager.cpp:50
bb::avm2::simulation::InternalCallStackManager::push
void push(PC caller_pc, PC return_pc) override
Definition
internal_call_stack_manager.cpp:7
bb::avm2::simulation::InternalCallStackManager::get_next_call_id
InternalCallId get_next_call_id() const override
Definition
internal_call_stack_manager.cpp:45
bb::avm2::simulation::InternalCallStackManager::internal_call_stack_events
EventEmitterInterface< InternalCallStackEvent > & internal_call_stack_events
Definition
internal_call_stack_manager.hpp:45
bb::avm2::simulation::InternalCallStackManager::get_return_call_id
InternalCallId get_return_call_id() const override
Definition
internal_call_stack_manager.cpp:55
bb::avm2::simulation::InternalCallStackManager::context_id
uint32_t context_id
Definition
internal_call_stack_manager.hpp:41
bb::avm2::simulation::InternalCallStackManager::pop
PC pop() override
Definition
internal_call_stack_manager.cpp:27
bb::avm2::simulation::InternalCallStackManager::get_current_call_stack
std::vector< PC > get_current_call_stack() const override
Definition
internal_call_stack_manager.cpp:60
bb::avm2::simulation::InternalCallStackManager::next_internal_call_id
InternalCallId next_internal_call_id
Definition
internal_call_stack_manager.hpp:37
bb::avm2::simulation::InternalCallStackManager::current_internal_call_id
InternalCallId current_internal_call_id
Definition
internal_call_stack_manager.hpp:38
bb::avm2::simulation::InternalCallStackManager::current_return_call_id
InternalCallId current_return_call_id
Definition
internal_call_stack_manager.hpp:39
internal_call_stack_manager.hpp
bb::avm2::simulation
Definition
address_derivation_event.hpp:6
bb::avm2::PC
uint32_t PC
Definition
aztec_types.hpp:19
bb::avm2::InternalCallId
uint32_t InternalCallId
Definition
aztec_types.hpp:54
std::get
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition
tuple.hpp:13
bb::avm2::simulation::InternalCallPtr
Definition
internal_call_stack_manager.hpp:14
bb::avm2::simulation::InternalCallPtr::return_pc
PC return_pc
Definition
internal_call_stack_manager.hpp:17
bb::avm2::simulation::InternalCallPtr::return_id
InternalCallId return_id
Definition
internal_call_stack_manager.hpp:15
bb::avm2::simulation::InternalCallPtr::caller_pc
PC caller_pc
Definition
internal_call_stack_manager.hpp:16
bb::avm2::simulation::InternalCallStackEvent
Definition
internal_call_stack_event.hpp:9
bb::avm2::simulation::InternalCallStackEvent::context_id
uint32_t context_id
Definition
internal_call_stack_event.hpp:10
src
barretenberg
vm2
simulation
gadgets
internal_call_stack_manager.cpp
Generated by
1.9.8