mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-04 20:17:48 +00:00
Merge pull request #1347 from DanielGavin/parser-fix
Do not save comments when peeking tokens.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user