implemented return by rewriting interpreter result

This commit is contained in:
Moritz Gmeiner 2024-08-28 22:55:15 +02:00
commit dee73dea20
16 changed files with 191 additions and 239 deletions

View file

@ -4,9 +4,9 @@ type lexer_error = { pos : code_pos; msg : string }
module LexerError = struct
type t = lexer_error
let make (pos : code_pos) (msg : string) : lexer_error = { pos; msg }
let make (pos : code_pos) (msg : string) : t = { pos; msg }
let show (e : lexer_error) =
let show (e : t) =
Printf.sprintf "LexerError at line %d, column %d: %s" e.pos.line e.pos.col e.msg
end
@ -15,27 +15,22 @@ type parser_error = { pos : code_pos; msg : string }
module ParserError = struct
type t = parser_error
let make (pos : code_pos) (msg : string) : parser_error = { pos; msg }
let make (pos : code_pos) (msg : string) : t = { pos; msg }
let show (e : parser_error) =
let show (e : t) =
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 } *)
type runtime_error = Error of { pos : code_pos; msg : string } | Break | Continue
type runtime_error = { pos : code_pos; msg : string }
module RuntimeError = struct
type t = parser_error
type t = runtime_error
let make (pos : code_pos) (msg : string) : runtime_error = Error { pos; msg }
let break () : runtime_error = Break
let continue () : runtime_error = Continue
let make (pos : code_pos) (msg : string) : t = { pos; msg }
let show (e : runtime_error) =
match e with
| Error { pos; msg } ->
Printf.sprintf "RuntimeError at line %d, column %d: %s" pos.line pos.col msg
| Break | Continue -> assert false
let show ({ pos; msg } : t) =
Printf.sprintf "RuntimeError at line %d, column %d: %s" pos.line pos.col msg
end
type lox_error =