@@ -28,8 +28,8 @@ use crate::{
28
28
KeccakBuiltinRunner , ModBuiltinRunner , OutputBuiltinRunner , PoseidonBuiltinRunner ,
29
29
RangeCheckBuiltinRunner , SignatureBuiltinRunner , RC_N_PARTS_96 , RC_N_PARTS_STANDARD ,
30
30
} ,
31
- vm_core:: { VirtualMachine , VirtualMachineBuilder } ,
32
- vm_memory:: memory_segments:: MemorySegmentManager ,
31
+ vm_core:: VirtualMachine ,
32
+ vm_memory:: { memory :: Memory , memory_segments:: MemorySegmentManager } ,
33
33
} ,
34
34
Felt252 ,
35
35
} ;
@@ -71,23 +71,40 @@ impl CairoRunner2 {
71
71
reference_manager : Vec < HintReference > ,
72
72
hints : BTreeMap < usize , Vec < HintParams > > ,
73
73
) -> Result < Self , RunnerError > {
74
+ // =============
75
+ // PREPROCESSING
76
+ // =============
77
+
74
78
let entrypoint = find_entrypoint_of_kind ( & executable. entrypoints , entrypoint_kind. clone ( ) ) ;
75
79
80
+ let bytecode = executable
81
+ . program
82
+ . bytecode
83
+ . iter ( )
84
+ . map ( Felt252 :: from)
85
+ . map ( MaybeRelocatable :: from)
86
+ . collect :: < Vec < _ > > ( ) ;
87
+
88
+ let hint_collection =
89
+ HintsCollection :: new ( & hints, bytecode. len ( ) ) . expect ( "failed to build hint collection" ) ;
90
+
76
91
let builtins = get_entrypoint_builtins ( entrypoint) ;
77
92
93
+ // ==============
94
+ // INITIALIZATION
95
+ // ==============
96
+
97
+ let mut vm = VirtualMachine :: new ( trace_enabled, false ) ;
98
+
78
99
check_builtin_order ( & builtins) ?;
79
- let mut builtin_runners = initialize_builtin_runners ( & layout, & builtins, true , true ) ?;
100
+ vm . builtin_runners = initialize_builtin_runners ( & layout, & builtins, true , true ) ?;
80
101
81
- let mut segments = MemorySegmentManager :: new ( ) ;
82
- let program_base = segments. add ( ) ;
83
- let execution_base = segments. add ( ) ;
102
+ let program_base = vm. add_memory_segment ( ) ;
103
+ let execution_base = vm. add_memory_segment ( ) ;
84
104
85
- initialize_builtin_runner_segments ( & mut builtin_runners, & mut segments) ;
105
+ initialize_builtin_runner_segments ( & mut vm . builtin_runners , & mut vm . segments ) ;
86
106
87
- let mut vm = VirtualMachineBuilder :: default ( )
88
- . builtin_runners ( builtin_runners)
89
- . segments ( segments)
90
- . build ( ) ;
107
+ load_program ( & mut vm, program_base, & bytecode) ?;
91
108
92
109
let mut stack = Vec :: new ( ) ;
93
110
@@ -150,32 +167,9 @@ impl CairoRunner2 {
150
167
let run_context = RunContext :: new ( initial_pc, initial_ap. offset , initial_fp. offset ) ;
151
168
vm. set_run_context ( run_context) ;
152
169
153
- let bytecode = executable
154
- . program
155
- . bytecode
156
- . iter ( )
157
- . map ( Felt252 :: from)
158
- . map ( MaybeRelocatable :: from)
159
- . collect :: < Vec < _ > > ( ) ;
160
- vm. load_data ( program_base, & bytecode)
161
- . map_err ( RunnerError :: MemoryInitializationError ) ?;
162
- for i in 0 ..bytecode. len ( ) {
163
- vm. segments . memory . mark_as_accessed ( ( program_base + i) ?) ;
164
- }
165
-
166
- vm. load_data ( execution_base, & stack)
167
- . map_err ( RunnerError :: MemoryInitializationError ) ?;
168
-
169
- for builtin_runner in & mut vm. builtin_runners {
170
- builtin_runner. add_validation_rule ( & mut vm. segments . memory )
171
- }
172
- vm. segments
173
- . memory
174
- . validate_existing_memory ( )
175
- . map_err ( RunnerError :: MemoryValidationError ) ?;
170
+ load_stack ( & mut vm, execution_base, stack) ?;
176
171
177
- let hint_collection =
178
- HintsCollection :: new ( & hints, bytecode. len ( ) ) . expect ( "failed to build hint collection" ) ;
172
+ add_builtin_validation_rules ( & mut vm. segments . memory , & mut vm. builtin_runners ) ?;
179
173
180
174
Ok ( Self {
181
175
executable,
@@ -416,6 +410,42 @@ fn extend_stack_with_builtins(
416
410
}
417
411
}
418
412
413
+ fn load_program (
414
+ vm : & mut VirtualMachine ,
415
+ program_base : Relocatable ,
416
+ bytecode : & Vec < MaybeRelocatable > ,
417
+ ) -> Result < ( ) , RunnerError > {
418
+ vm. load_data ( program_base, bytecode)
419
+ . map_err ( RunnerError :: MemoryInitializationError ) ?;
420
+ for i in 0 ..bytecode. len ( ) {
421
+ vm. segments . memory . mark_as_accessed ( ( program_base + i) ?) ;
422
+ }
423
+ Ok ( ( ) )
424
+ }
425
+
426
+ fn load_stack (
427
+ vm : & mut VirtualMachine ,
428
+ execution_base : Relocatable ,
429
+ stack : Vec < MaybeRelocatable > ,
430
+ ) -> Result < ( ) , RunnerError > {
431
+ vm. load_data ( execution_base, & stack)
432
+ . map_err ( RunnerError :: MemoryInitializationError ) ?;
433
+ Ok ( ( ) )
434
+ }
435
+
436
+ fn add_builtin_validation_rules (
437
+ memory : & mut Memory ,
438
+ runners : & mut [ BuiltinRunner ] ,
439
+ ) -> Result < ( ) , RunnerError > {
440
+ for runner in runners {
441
+ runner. add_validation_rule ( memory)
442
+ }
443
+ memory
444
+ . validate_existing_memory ( )
445
+ . map_err ( RunnerError :: MemoryValidationError ) ?;
446
+ Ok ( ( ) )
447
+ }
448
+
419
449
fn get_hint_data (
420
450
collection : & HintsCollection ,
421
451
references : & [ HintReference ] ,
0 commit comments