Skip to content

Commit f97267f

Browse files
Refactor cairo runner 2 code
1 parent eb27800 commit f97267f

File tree

1 file changed

+66
-36
lines changed

1 file changed

+66
-36
lines changed

Diff for: vm/src/vm/runners/cairo_runner_2.rs

+66-36
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ use crate::{
2828
KeccakBuiltinRunner, ModBuiltinRunner, OutputBuiltinRunner, PoseidonBuiltinRunner,
2929
RangeCheckBuiltinRunner, SignatureBuiltinRunner, RC_N_PARTS_96, RC_N_PARTS_STANDARD,
3030
},
31-
vm_core::{VirtualMachine, VirtualMachineBuilder},
32-
vm_memory::memory_segments::MemorySegmentManager,
31+
vm_core::VirtualMachine,
32+
vm_memory::{memory::Memory, memory_segments::MemorySegmentManager},
3333
},
3434
Felt252,
3535
};
@@ -71,23 +71,40 @@ impl CairoRunner2 {
7171
reference_manager: Vec<HintReference>,
7272
hints: BTreeMap<usize, Vec<HintParams>>,
7373
) -> Result<Self, RunnerError> {
74+
// =============
75+
// PREPROCESSING
76+
// =============
77+
7478
let entrypoint = find_entrypoint_of_kind(&executable.entrypoints, entrypoint_kind.clone());
7579

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+
7691
let builtins = get_entrypoint_builtins(entrypoint);
7792

93+
// ==============
94+
// INITIALIZATION
95+
// ==============
96+
97+
let mut vm = VirtualMachine::new(trace_enabled, false);
98+
7899
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)?;
80101

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();
84104

85-
initialize_builtin_runner_segments(&mut builtin_runners, &mut segments);
105+
initialize_builtin_runner_segments(&mut vm.builtin_runners, &mut vm.segments);
86106

87-
let mut vm = VirtualMachineBuilder::default()
88-
.builtin_runners(builtin_runners)
89-
.segments(segments)
90-
.build();
107+
load_program(&mut vm, program_base, &bytecode)?;
91108

92109
let mut stack = Vec::new();
93110

@@ -150,32 +167,9 @@ impl CairoRunner2 {
150167
let run_context = RunContext::new(initial_pc, initial_ap.offset, initial_fp.offset);
151168
vm.set_run_context(run_context);
152169

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)?;
176171

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)?;
179173

180174
Ok(Self {
181175
executable,
@@ -416,6 +410,42 @@ fn extend_stack_with_builtins(
416410
}
417411
}
418412

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+
419449
fn get_hint_data(
420450
collection: &HintsCollection,
421451
references: &[HintReference],

0 commit comments

Comments
 (0)