From 8d445cc9e4bb9785a3351ac7d5e322c194b8b600 Mon Sep 17 00:00:00 2001 From: Moritz Gmeiner Date: Tue, 27 Aug 2024 19:00:11 +0200 Subject: [PATCH] changed tokens from mutable to ref so that when record is copied it's still the same field --- lib/parser.ml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/parser.ml b/lib/parser.ml index d60605d..76c8d5d 100644 --- a/lib/parser.ml +++ b/lib/parser.ml @@ -6,33 +6,33 @@ open Lexer open Stmt type parse_result = (stmt_node list, parser_error list) result -type state = { mutable tokens : token list; is_in_loop : bool } +type state = { tokens : token list ref; is_in_loop : bool } type stmt_result = (stmt_node, parser_error) result type expr_result = (expr_node, parser_error) result let with_is_in_loop (f : state -> 'a) (state : state) : 'a = let new_state = { state with is_in_loop = true } in let result = f new_state in - state.tokens <- new_state.tokens; + (* state.tokens <- new_state.tokens; *) result let make_state tokens = { tokens; is_in_loop = false } let is_at_end state = - assert (not (List.is_empty state.tokens)); - (List.hd state.tokens).token_type = Eof + assert (not (List.is_empty !(state.tokens))); + (List.hd !(state.tokens)).token_type = Eof -let advance state = state.tokens <- List.tl state.tokens - -let next state = - let token = List.hd state.tokens in - advance state; - token - -let peek state = List.hd state.tokens +(* let advance state = state.tokens <- List.tl state.tokens *) +let advance state = state.tokens := List.tl !(state.tokens) +let peek state = List.hd !(state.tokens) let peek_tt (state : state) : token_type = (peek state).token_type let cur_pos state = (peek state).pos +let next state = + let token = peek state in + advance state; + token + let advance_if state tt = if peek_tt state = tt then ( advance state; @@ -384,5 +384,5 @@ let parse (tokens : token list) : parse_result = let tokens = List.filter (fun tok -> match tok.token_type with Comment _ -> false | _ -> true) tokens in - let state = make_state tokens in + let state = make_state (ref tokens) in parse_impl state