@@ -558,7 +558,7 @@ fn get_return_values(
558558/// If the endpoint used builtins, the respective returned (implicit) arg is the builtin instance
559559/// usage, unless the builtin is the output builtin, in which case the arg is the output.
560560#[ allow( clippy:: too_many_arguments) ]
561- pub fn run_cairo_0_entry_point (
561+ pub fn initialize_and_run_cairo_0_entry_point (
562562 runner_config : & EntryPointRunnerConfig ,
563563 program_bytes : & [ u8 ] ,
564564 entrypoint : & str ,
@@ -568,6 +568,33 @@ pub fn run_cairo_0_entry_point(
568568 hint_locals : HashMap < String , Box < dyn Any > > ,
569569 state_reader : Option < DictStateReader > ,
570570) -> Cairo0EntryPointRunnerResult < ( Vec < EndpointArg > , Vec < EndpointArg > , CairoRunner ) > {
571+ let ( mut cairo_runner, program, entrypoint) = initialize_cairo_runner (
572+ runner_config,
573+ program_bytes,
574+ entrypoint,
575+ implicit_args,
576+ hint_locals,
577+ ) ?;
578+ let ( explicit_return_values, implicit_return_values) = run_cairo_0_entrypoint (
579+ entrypoint,
580+ explicit_args,
581+ implicit_args,
582+ state_reader,
583+ & mut cairo_runner,
584+ & program,
585+ runner_config,
586+ expected_explicit_return_values,
587+ ) ?;
588+ Ok ( ( explicit_return_values, implicit_return_values, cairo_runner) )
589+ }
590+
591+ pub fn initialize_cairo_runner (
592+ runner_config : & EntryPointRunnerConfig ,
593+ program_bytes : & [ u8 ] ,
594+ entrypoint : & str ,
595+ implicit_args : & [ ImplicitArg ] ,
596+ hint_locals : HashMap < String , Box < dyn Any > > ,
597+ ) -> Cairo0EntryPointRunnerResult < ( CairoRunner , Program , String ) > {
571598 let mut entrypoint = entrypoint. to_string ( ) ;
572599 if runner_config. add_main_prefix_to_entrypoint {
573600 info ! ( "Adding __main__ prefix to entrypoint." ) ;
@@ -577,23 +604,6 @@ pub fn run_cairo_0_entry_point(
577604 let program = inject_builtins ( program_bytes, implicit_args) ?;
578605 info ! ( "Successfully injected builtins into program." ) ;
579606
580- let ( os_hints_config, os_state_input) = ( None , None ) ;
581- let os_block_input = OsBlockInput :: default ( ) ;
582- let mut hint_processor = SnosHintProcessor :: new_for_testing (
583- state_reader,
584- & program,
585- os_hints_config,
586- & os_block_input,
587- os_state_input,
588- )
589- . unwrap_or_else ( |err| panic ! ( "Failed to create SnosHintProcessor: {:?}" , err) ) ;
590- info ! ( "Program and Hint processor created successfully." ) ;
591-
592- // TODO(Amos): Perform complete validations.
593- perform_basic_validations_on_explicit_args ( explicit_args, & program, & entrypoint) ?;
594- perform_basic_validations_on_implicit_args ( implicit_args, & program, & entrypoint) ?;
595- info ! ( "Performed basic validations on explicit & implicit args." ) ;
596-
597607 let dynamic_layout_params = None ;
598608 let disable_trace_padding = false ;
599609 let mut cairo_runner = CairoRunner :: new (
@@ -613,6 +623,24 @@ pub fn run_cairo_0_entry_point(
613623 let program_base: Option < Relocatable > = None ;
614624 cairo_runner. initialize_segments ( program_base) ;
615625 info ! ( "Created and initialized Cairo runner." ) ;
626+ Ok ( ( cairo_runner, program, entrypoint) )
627+ }
628+
629+ #[ allow( clippy:: too_many_arguments) ]
630+ pub fn run_cairo_0_entrypoint (
631+ entrypoint : String ,
632+ explicit_args : & [ EndpointArg ] ,
633+ implicit_args : & [ ImplicitArg ] ,
634+ state_reader : Option < DictStateReader > ,
635+ cairo_runner : & mut CairoRunner ,
636+ program : & Program ,
637+ runner_config : & EntryPointRunnerConfig ,
638+ expected_explicit_return_values : & [ EndpointArg ] ,
639+ ) -> Cairo0EntryPointRunnerResult < ( Vec < EndpointArg > , Vec < EndpointArg > ) > {
640+ // TODO(Amos): Perform complete validations.
641+ perform_basic_validations_on_explicit_args ( explicit_args, program, & entrypoint) ?;
642+ perform_basic_validations_on_implicit_args ( implicit_args, program, & entrypoint) ?;
643+ info ! ( "Performed basic validations on explicit & implicit args." ) ;
616644
617645 let explicit_cairo_args: Vec < CairoArg > =
618646 explicit_args. iter ( ) . flat_map ( EndpointArg :: to_cairo_arg_vec) . collect ( ) ;
@@ -621,6 +649,17 @@ pub fn run_cairo_0_entry_point(
621649 implicit_cairo_args. iter ( ) . chain ( explicit_cairo_args. iter ( ) ) . collect ( ) ;
622650 info ! ( "Converted explicit & implicit args to Cairo args." ) ;
623651
652+ let ( os_hints_config, os_state_input) = ( None , None ) ;
653+ let os_block_input = OsBlockInput :: default ( ) ;
654+ let mut hint_processor = SnosHintProcessor :: new_for_testing (
655+ state_reader,
656+ program,
657+ os_hints_config,
658+ & os_block_input,
659+ os_state_input,
660+ )
661+ . unwrap_or_else ( |err| panic ! ( "Failed to create SnosHintProcessor: {:?}" , err) ) ;
662+ info ! ( "Program and Hint processor created successfully." ) ;
624663 let program_segment_size: Option < usize > = None ;
625664 cairo_runner
626665 . run_from_entrypoint (
@@ -638,5 +677,5 @@ pub fn run_cairo_0_entry_point(
638677 info ! ( "Successfully finished running entrypoint {}" , entrypoint) ;
639678 let ( implicit_return_values, explicit_return_values) =
640679 get_return_values ( implicit_args, expected_explicit_return_values, & cairo_runner. vm ) ?;
641- Ok ( ( implicit_return_values, explicit_return_values, cairo_runner ) )
680+ Ok ( ( implicit_return_values, explicit_return_values) )
642681}
0 commit comments