@@ -22,9 +22,10 @@ type args = {mode: mode}
22exception LangException of string
22exception LangException of string
25+ let interactive_mode = ref false in
26+ let eval_filepath = ref None in
25 let quiet = ref false in
27 let quiet = ref false in
26 let syntax = ref OCaml in
28 let syntax = ref OCaml in
27− let interactive_mode = ref false in
28 let print_mode = ref false in
29 let print_mode = ref false in
29 let run_mode = ref false in
30 let run_mode = ref false in
30 let ps1 = Sys.getenv_opt "PRYBAR_PS1" |> function | Some str -> str | None -> "#" in
31 let ps1 = Sys.getenv_opt "PRYBAR_PS1" |> function | Some str -> str | None -> "#" in
@@ -36,7 +37,6 @@ let _ =
36 | "ml" -> syntax := OCaml
37 | "ml" -> syntax := OCaml
37 | arg -> raise (Arg.Bad ("Unknown syntax: " ^ arg))
38 | arg -> raise (Arg.Bad ("Unknown syntax: " ^ arg))
39− (*let string_of_syntax = function OCaml -> "ml" | Reason -> "re" in*)
40 let print_mode_arg str =
40 let print_mode_arg str =
41 print_mode := true ;
41 print_mode := true ;
42 code := str
42 code := str
@@ -56,7 +56,11 @@ let _ =
56 "OCaml / Reason repl script for prybar. Options available:"
56 "OCaml / Reason repl script for prybar. Options available:"
58 Arg.parse speclist
58 Arg.parse speclist
60+ match (str, !interactive_mode) with
61+ | (path, true) -> eval_filepath := Some(path)
59− (fun str -> print_endline ("Anonymous arg: " ^ str))
62+ | _ -> print_endline ("Anonymous arg: " ^ str)
60 usage_msg ;
64 usage_msg ;
61 let mode =
65 let mode =
62 match (!print_mode, !run_mode, !interactive_mode) with
66 match (!print_mode, !run_mode, !interactive_mode) with
@@ -95,6 +99,17 @@ let _ =
102+ (* Minimal version of just running any input file, we stripped a lot of original logic
103+ * because we don't want to do any side effects on the compiler environment *)
104+ let run_script ppf name =
106+ (* Prevent use_silently from searching in the path. *)
107+ if name <> "" && Filename.is_implicit name
108+ then Filename.concat Filename.current_dir_name name
111+ use_silently ppf explicit_name
98 let loop ppf =
113 let loop ppf =
99 Clflags.debug := true ;
114 Clflags.debug := true ;
100 Location.formatter_for_warnings := ppf ;
115 Location.formatter_for_warnings := ppf ;
@@ -108,6 +123,12 @@ let _ =
108 Location.input_lexbuf := Some lb ;
123 Location.input_lexbuf := Some lb ;
109 Sys.catch_break true ;
124 Sys.catch_break true ;
110 (*load_ocamlinit ppf;*)
125 (*load_ocamlinit ppf;*)
127+ (* If there's an entry file provided, run it before dropping into interactive mode *)
128+ (match !eval_filepath with
129+ | Some name -> run_script ppf name
130+ | _ -> false) |> ignore ;
111 while true do
132 while true do
112 let snap = Btype.snapshot () in
133 let snap = Btype.snapshot () in