@@ -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 {
@@ -106,10 +106,20 @@ impl DeducedOperands {
106106 }
107107}
108108
109- #[ derive( Default ) ]
110109pub struct VirtualMachineConfig {
111110 pub trace_enabled : bool ,
112111 pub disable_trace_padding : bool ,
112+ pub max_traceback_entries : u32 ,
113+ }
114+
115+ impl Default for VirtualMachineConfig {
116+ fn default ( ) -> Self {
117+ Self {
118+ trace_enabled : false ,
119+ disable_trace_padding : false ,
120+ max_traceback_entries : DEFAULT_MAX_TRACEBACK_ENTRIES ,
121+ }
122+ }
113123}
114124
115125pub struct VirtualMachine {
@@ -139,6 +149,7 @@ pub struct VirtualMachine {
139149 #[ cfg( feature = "test_utils" ) ]
140150 pub ( crate ) hooks : Option < Box < dyn crate :: vm:: hooks:: StepHooks > > ,
141151 pub ( crate ) relocation_table : Option < Vec < usize > > ,
152+ pub ( crate ) max_traceback_entries : u32 ,
142153}
143154
144155impl Default for VirtualMachine {
@@ -177,6 +188,7 @@ impl VirtualMachine {
177188 #[ cfg( feature = "test_utils" ) ]
178189 hooks : None ,
179190 relocation_table : None ,
191+ max_traceback_entries : config. max_traceback_entries ,
180192 }
181193 }
182194
@@ -947,7 +959,7 @@ impl VirtualMachine {
947959 let mut entries = Vec :: < ( Relocatable , Relocatable ) > :: new ( ) ;
948960 let mut fp = Relocatable :: from ( ( 1 , self . run_context . fp ) ) ;
949961 // Fetch the fp and pc traceback entries
950- for _ in 0 ..MAX_TRACEBACK_ENTRIES {
962+ for _ in 0 ..self . max_traceback_entries {
951963 // Get return pc
952964 let ret_pc = match ( fp - 1 )
953965 . ok ( )
@@ -1396,6 +1408,7 @@ pub struct VirtualMachineBuilder {
13961408 run_finished : bool ,
13971409 #[ cfg( feature = "test_utils" ) ]
13981410 pub ( crate ) hooks : Option < Box < dyn crate :: vm:: hooks:: StepHooks > > ,
1411+ pub ( crate ) max_traceback_entries : u32 ,
13991412}
14001413
14011414impl Default for VirtualMachineBuilder {
@@ -1416,6 +1429,7 @@ impl Default for VirtualMachineBuilder {
14161429 run_finished : false ,
14171430 #[ cfg( feature = "test_utils" ) ]
14181431 hooks : None ,
1432+ max_traceback_entries : DEFAULT_MAX_TRACEBACK_ENTRIES ,
14191433 }
14201434 }
14211435}
@@ -1465,6 +1479,11 @@ impl VirtualMachineBuilder {
14651479 self
14661480 }
14671481
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+
14681487 pub fn build ( self ) -> VirtualMachine {
14691488 VirtualMachine {
14701489 run_context : self . run_context ,
@@ -1482,6 +1501,7 @@ impl VirtualMachineBuilder {
14821501 hooks : self . hooks ,
14831502 relocation_table : None ,
14841503 disable_trace_padding : false ,
1504+ max_traceback_entries : self . max_traceback_entries ,
14851505 }
14861506 }
14871507}
0 commit comments