open Environment open Value let clock : native_function = let fn = function | [] -> let time = Unix.gettimeofday () in Number time |> Result.ok | _ -> assert false in { name = "clock"; arity = 0; fn } let exit : native_function = let fn = function | [ n ] -> ( match n with | Number n when Float.is_integer n -> Int.of_float n |> exit | _ -> Printf.sprintf "Must call exit with integer, received %s instead" (string_of_lox_value n) |> Result.error) | _ -> assert false in { name = "exit"; arity = 1; fn } let init_std (env : environment) = let register_fn fn = Env.define_global env fn.name (NativeFunction fn) in let _ = List.map register_fn [ clock; exit ] in ()