automatically include loxstd in default env

This commit is contained in:
Moritz Gmeiner 2024-08-28 17:28:07 +02:00
commit 0dc19b4fdf

View file

@ -4,14 +4,20 @@ module Error = Error
module Expr = Expr module Expr = Expr
module Interpreter = Interpreter module Interpreter = Interpreter
module Lexer = Lexer module Lexer = Lexer
module Loxstd = Loxstd
module Parser = Parser module Parser = Parser
module Stmt = Stmt module Stmt = Stmt
type lox_error = Error.lox_error type lox_error = Error.lox_error
let make_env_with_std () =
let env = Environment.Env.make () in
Loxstd.init_std env;
env
let run ?(env : Environment.environment option) ?(debug = false) (source : string) : let run ?(env : Environment.environment option) ?(debug = false) (source : string) :
(unit, lox_error) result = (unit, lox_error) result =
let env = Option.value env ~default:(Environment.Env.make ()) in let env = Option.value env ~default:(make_env_with_std ()) in
let* tokens = Error.of_lexer_error (Lexer.tokenize source) in let* tokens = Error.of_lexer_error (Lexer.tokenize source) in
let () = let () =
if debug then if debug then
@ -50,12 +56,12 @@ let run ?(env : Environment.environment option) ?(debug = false) (source : strin
interpret_stmts stmts |> Error.of_runtimer_error interpret_stmts stmts |> Error.of_runtimer_error
let runRepl ?(debug = false) () : unit = let runRepl ?(debug = false) () : unit =
let env = Environment.Env.make () in let env = make_env_with_std () in
try try
while true do while true do
print_string "> "; print_string "> ";
let line = read_line () in let line = read_line () in
let result = run ~env ~debug line in let result = run ~env ~debug line in
Result.iter_error Error.print_error result Result.map_error Error.print_error result |> ignore
done done
with End_of_file -> () with End_of_file -> ()