From f1a126e162b22d3de74e73c148426ef3399c39ba Mon Sep 17 00:00:00 2001 From: Daniel Gavin Date: Thu, 2 Dec 2021 22:44:47 +0100 Subject: [PATCH] Do not save the comment when peeking. --- core/odin/parser/parser.odin | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin index b151d0188..52d4b5e5a 100644 --- a/core/odin/parser/parser.odin +++ b/core/odin/parser/parser.odin @@ -47,6 +47,8 @@ Parser :: struct { fix_count: int, fix_prev_pos: tokenizer.Pos, + + peeking: bool, } MAX_FIX_COUNT :: 10 @@ -209,7 +211,12 @@ parse_file :: proc(p: ^Parser, file: ^ast.File) -> bool { peek_token_kind :: proc(p: ^Parser, kind: tokenizer.Token_Kind, lookahead := 0) -> (ok: bool) { prev_parser := p^ - defer p^ = prev_parser + p.peeking = true + + defer { + p^ = prev_parser + p.peeking = false + } p.tok.err = nil for i := 0; i <= lookahead; i += 1 { @@ -222,7 +229,12 @@ peek_token_kind :: proc(p: ^Parser, kind: tokenizer.Token_Kind, lookahead := 0) peek_token :: proc(p: ^Parser, lookahead := 0) -> (tok: tokenizer.Token) { prev_parser := p^ - defer p^ = prev_parser + p.peeking = true + + defer { + p^ = prev_parser + p.peeking = false + } p.tok.err = nil for i := 0; i <= lookahead; i += 1 { @@ -305,7 +317,7 @@ consume_comment_group :: proc(p: ^Parser, n: int) -> (comments: ^ast.Comment_Gro append(&list, comment) } - if len(list) > 0 { + if len(list) > 0 && !p.peeking { comments = ast.new(ast.Comment_Group, list[0].pos, end_pos(list[len(list)-1])) comments.list = list[:] append(&p.file.comments, comments)