|
| 1 | +use core::any::Any; |
| 2 | + |
1 | 3 | use cairo_lang_casm::hints::Hint;
|
2 | 4 | use cairo_lang_executable::executable::{EntryPointKind, Executable, ExecutableEntryPoint};
|
3 | 5 |
|
@@ -145,8 +147,17 @@ impl CairoRunner2 {
|
145 | 147 |
|
146 | 148 | pub fn run(
|
147 | 149 | &mut self,
|
148 |
| - _hint_processor: &mut dyn HintProcessor, |
| 150 | + hint_processor: &mut dyn HintProcessor, |
149 | 151 | ) -> Result<(), VirtualMachineError> {
|
| 152 | + #[allow(unused_mut)] |
| 153 | + let mut hint_data = get_hint_data( |
| 154 | + &self.hint_collection, |
| 155 | + &self.reference_manager, |
| 156 | + hint_processor, |
| 157 | + )?; |
| 158 | + |
| 159 | + let _ = hint_data; |
| 160 | + |
150 | 161 | Ok(())
|
151 | 162 | }
|
152 | 163 | }
|
@@ -325,6 +336,26 @@ fn extend_stack_with_builtins(
|
325 | 336 | }
|
326 | 337 | }
|
327 | 338 |
|
| 339 | +fn get_hint_data( |
| 340 | + collection: &HintsCollection, |
| 341 | + references: &[HintReference], |
| 342 | + processor: &dyn HintProcessor, |
| 343 | +) -> Result<Vec<Box<dyn Any>>, VirtualMachineError> { |
| 344 | + collection |
| 345 | + .iter_hints() |
| 346 | + .map(|hint| { |
| 347 | + processor |
| 348 | + .compile_hint( |
| 349 | + &hint.code, |
| 350 | + &hint.flow_tracking_data.ap_tracking, |
| 351 | + &hint.flow_tracking_data.reference_ids, |
| 352 | + references, |
| 353 | + ) |
| 354 | + .map_err(|_| VirtualMachineError::CompileHintFail(hint.code.clone().into())) |
| 355 | + }) |
| 356 | + .collect() |
| 357 | +} |
| 358 | + |
328 | 359 | /// TODO: Remove this once cyclic dependency is fixed.
|
329 | 360 | /// It should not be necessary, but cargo treats executable BuiltinName as a separate type
|
330 | 361 | /// which is why I had to create this adapter function.
|
|
0 commit comments