aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2021-12-02 23:05:24 +0100
committerGitHub <noreply@github.com>2021-12-02 23:05:24 +0100
commitdb42a2db47550181998a348b9a2ec7ca1979c702 (patch)
tree6e90f0871f3d20f868e97c5ec5d3ee7c36872a68
parent9f0a30e36e65f9c94dd068ece53377251e00742e (diff)
parentcecca96f3d8bf5d0c864d18f0524e25060dc84dd (diff)
Merge pull request #1347 from DanielGavin/parser-fix
Do not save comments when peeking tokens.
-rw-r--r--core/odin/parser/parser.odin18
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)