@@ -44,7 +44,7 @@ use super::errors::runner_errors::RunnerError;
4444use super :: runners:: builtin_runner:: { ModBuiltinRunner , RC_N_PARTS_STANDARD } ;
4545use super :: runners:: cairo_pie:: CairoPie ;
4646
47- const MAX_TRACEBACK_ENTRIES : u32 = 20 ;
47+ pub const DEFAULT_MAX_TRACEBACK_ENTRIES : u32 = 20 ;
4848
4949#[ derive( PartialEq , Eq , Debug ) ]
5050pub struct Operands {
@@ -109,13 +109,15 @@ impl DeducedOperands {
109109pub struct VirtualMachineConfig {
110110 pub trace_enabled : bool ,
111111 pub disable_trace_padding : bool ,
112+ pub max_traceback_entries : u32 ,
112113}
113114
114115impl Default for VirtualMachineConfig {
115116 fn default ( ) -> Self {
116117 Self {
117118 trace_enabled : false ,
118119 disable_trace_padding : false ,
120+ max_traceback_entries : DEFAULT_MAX_TRACEBACK_ENTRIES ,
119121 }
120122 }
121123}
@@ -147,6 +149,7 @@ pub struct VirtualMachine {
147149 #[ cfg( feature = "test_utils" ) ]
148150 pub ( crate ) hooks : Option < Box < dyn crate :: vm:: hooks:: StepHooks > > ,
149151 pub ( crate ) relocation_table : Option < Vec < usize > > ,
152+ pub ( crate ) max_traceback_entries : u32 ,
150153}
151154
152155impl Default for VirtualMachine {
@@ -185,6 +188,7 @@ impl VirtualMachine {
185188 #[ cfg( feature = "test_utils" ) ]
186189 hooks : None ,
187190 relocation_table : None ,
191+ max_traceback_entries : config. max_traceback_entries ,
188192 }
189193 }
190194
@@ -955,7 +959,7 @@ impl VirtualMachine {
955959 let mut entries = Vec :: < ( Relocatable , Relocatable ) > :: new ( ) ;
956960 let mut fp = Relocatable :: from ( ( 1 , self . run_context . fp ) ) ;
957961 // Fetch the fp and pc traceback entries
958- for _ in 0 ..MAX_TRACEBACK_ENTRIES {
962+ for _ in 0 ..self . max_traceback_entries {
959963 // Get return pc
960964 let ret_pc = match ( fp - 1 )
961965 . ok ( )
@@ -1404,6 +1408,7 @@ pub struct VirtualMachineBuilder {
14041408 run_finished : bool ,
14051409 #[ cfg( feature = "test_utils" ) ]
14061410 pub ( crate ) hooks : Option < Box < dyn crate :: vm:: hooks:: StepHooks > > ,
1411+ pub ( crate ) max_traceback_entries : u32 ,
14071412}
14081413
14091414impl Default for VirtualMachineBuilder {
@@ -1424,6 +1429,7 @@ impl Default for VirtualMachineBuilder {
14241429 run_finished : false ,
14251430 #[ cfg( feature = "test_utils" ) ]
14261431 hooks : None ,
1432+ max_traceback_entries : DEFAULT_MAX_TRACEBACK_ENTRIES ,
14271433 }
14281434 }
14291435}
@@ -1473,6 +1479,11 @@ impl VirtualMachineBuilder {
14731479 self
14741480 }
14751481
1482+ pub fn max_traceback_entries ( mut self , max_traceback_entries : u32 ) -> VirtualMachineBuilder {
1483+ self . max_traceback_entries = max_traceback_entries;
1484+ self
1485+ }
1486+
14761487 pub fn build ( self ) -> VirtualMachine {
14771488 VirtualMachine {
14781489 run_context : self . run_context ,
@@ -1490,6 +1501,7 @@ impl VirtualMachineBuilder {
14901501 hooks : self . hooks ,
14911502 relocation_table : None ,
14921503 disable_trace_padding : false ,
1504+ max_traceback_entries : self . max_traceback_entries ,
14931505 }
14941506 }
14951507}
0 commit comments