diff options
| author | Jeroen van Rijn <Kelimion@users.noreply.github.com> | 2021-12-02 23:05:24 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-02 23:05:24 +0100 |
| commit | db42a2db47550181998a348b9a2ec7ca1979c702 (patch) | |
| tree | 6e90f0871f3d20f868e97c5ec5d3ee7c36872a68 | |
| parent | 9f0a30e36e65f9c94dd068ece53377251e00742e (diff) | |
| parent | cecca96f3d8bf5d0c864d18f0524e25060dc84dd (diff) | |
Merge pull request #1347 from DanielGavin/parser-fix
Do not save comments when peeking tokens.
| -rw-r--r-- | core/odin/parser/parser.odin | 18 |
1 files 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) |