diff --git a/lib/error.ml b/lib/error.ml index 475030e..adab803 100644 --- a/lib/error.ml +++ b/lib/error.ml @@ -6,8 +6,8 @@ module LexerError = struct let make (pos : code_pos) (msg : string) : lexer_error = { pos; msg } - let print (e : lexer_error) = - Printf.printf "LexerError at line %d, column %d: %s\n" e.pos.line e.pos.col e.msg + let show (e : lexer_error) = + Printf.sprintf "LexerError at line %d, column %d: %s" e.pos.line e.pos.col e.msg end type parser_error = { pos : code_pos; msg : string } @@ -17,8 +17,8 @@ module ParserError = struct let make (pos : code_pos) (msg : string) : parser_error = { pos; msg } - let print (e : parser_error) = - Printf.printf "ParserError at line %d, column %d: %s\n" e.pos.line e.pos.col e.msg + let show (e : parser_error) = + Printf.sprintf "ParserError at line %d, column %d: %s" e.pos.line e.pos.col e.msg end (* type runtime_error = { pos : code_pos; msg : string; type_ : runtime_error_type } *) @@ -31,10 +31,10 @@ module RuntimeError = struct let break () : runtime_error = Break let continue () : runtime_error = Continue - let print (e : runtime_error) = + let show (e : runtime_error) = match e with | Error { pos; msg } -> - Printf.printf "RuntimeError at line %d, column %d: %s\n" pos.line pos.col msg + Printf.sprintf "RuntimeError at line %d, column %d: %s" pos.line pos.col msg | Break | Continue -> assert false end @@ -48,16 +48,16 @@ let print_error (e : lox_error) = | LexerError es -> let num_errors = List.length es in assert (num_errors <> 0); - Printf.printf "found %d %s:\n" num_errors + Printf.fprintf stderr "found %d %s:\n" num_errors (if num_errors = 1 then "LexerError" else "LexerErrors"); - List.iter LexerError.print es + List.iter (fun e -> LexerError.show e |> Printf.fprintf stderr "%s\n") es | ParserError es -> let num_errors = List.length es in assert (num_errors <> 0); - Printf.printf "found %d %s:\n" num_errors + Printf.fprintf stderr "found %d %s:\n" num_errors (if num_errors = 1 then "ParserError" else "ParserErrors"); - List.iter ParserError.print es - | RuntimeError e -> RuntimeError.print e + List.iter (fun e -> ParserError.show e |> Printf.fprintf stderr "%s\n") es + | RuntimeError e -> RuntimeError.show e |> Printf.fprintf stderr "%s\n" let of_lexer_error e = Result.map_error (fun e -> LexerError e) e let of_parser_error e = Result.map_error (fun e -> ParserError e) e diff --git a/lib/interpreter.ml b/lib/interpreter.ml index a598516..a4014a1 100644 --- a/lib/interpreter.ml +++ b/lib/interpreter.ml @@ -83,10 +83,7 @@ let rec interpret_stmt (env : environment) (stmt_node : stmt_node) : (unit, runt | Expr expr -> let* _ = interpret_expr env expr in Ok () - | Break -> - (* print_endline "break!"; - Ok () (* TODO *) *) - RuntimeError.break () |> Result.error + | Break -> RuntimeError.break () |> Result.error | Continue -> RuntimeError.continue () |> Result.error | Print expr -> let* value = interpret_expr env expr in diff --git a/lib/lox.ml b/lib/lox.ml index 3e60171..5a43f1e 100644 --- a/lib/lox.ml +++ b/lib/lox.ml @@ -16,13 +16,13 @@ let run ?(env : Environment.environment option) ?(debug = false) (source : strin let () = if debug then let print_tokens () = - print_endline "--- Tokens ---"; - let f token = Printf.printf "%s " (Lexer.show_token token) in - Printf.printf "Got %d tokens\n" (List.length tokens); + Printf.fprintf stderr "--- Tokens ---\n"; + let f token = Printf.fprintf stderr "%s " (Lexer.show_token token) in + Printf.fprintf stderr "Got %d tokens\n" (List.length tokens); List.iter f tokens; - print_newline (); - print_endline "--------------"; - print_newline () + Printf.fprintf stderr "\n"; + Printf.fprintf stderr "--------------\n"; + Printf.fprintf stderr "\n" in print_tokens () else () @@ -31,11 +31,11 @@ let run ?(env : Environment.environment option) ?(debug = false) (source : strin let () = if debug then let print_statements () = - print_endline "--- Statements ---"; - let f (stmt : Stmt.stmt_node) = print_endline (Stmt.show_stmt stmt.stmt) in + Printf.fprintf stderr "--- Statements ---\n"; + let f (stmt : Stmt.stmt_node) = Printf.fprintf stderr "%s\n" (Stmt.show_stmt stmt.stmt) in List.iter f stmts; - print_endline "------------------"; - print_newline () + Printf.fprintf stderr "------------------\n"; + Printf.fprintf stderr "\n" in print_statements () else ()