vls,parser: fix an eof error in parsing invalid const declarations (#7115)
parent
15ffce1317
commit
6c100a0bc3
|
@ -95,11 +95,14 @@ pub fn parse_comptime(text string, table &table.Table, pref &pref.Preferences, s
|
|||
return p.parse()
|
||||
}
|
||||
|
||||
pub fn parse_text(text string, table &table.Table, comments_mode scanner.CommentsMode, pref &pref.Preferences, global_scope &ast.Scope) ast.File {
|
||||
pub fn parse_text(text string, path string, table &table.Table, comments_mode scanner.CommentsMode, pref &pref.Preferences, global_scope &ast.Scope) ast.File {
|
||||
s := scanner.new_scanner(text, comments_mode, pref)
|
||||
mut p := Parser{
|
||||
scanner: s
|
||||
comments_mode: comments_mode
|
||||
file_name: path
|
||||
file_base: os.base(path)
|
||||
file_name_dir: os.dir(path)
|
||||
table: table
|
||||
pref: pref
|
||||
scope: &ast.Scope{
|
||||
|
@ -1708,14 +1711,20 @@ fn (mut p Parser) const_decl() ast.ConstDecl {
|
|||
p.next()
|
||||
}
|
||||
end_pos := p.tok.position()
|
||||
const_pos := p.tok.position()
|
||||
p.check(.key_const)
|
||||
if p.tok.kind != .lpar {
|
||||
p.error('consts must be grouped, e.g.\nconst (\n\ta = 1\n)')
|
||||
p.error_with_pos('const declaration is missing parentheses `( ... )`', const_pos)
|
||||
return ast.ConstDecl{}
|
||||
}
|
||||
p.next() // (
|
||||
mut fields := []ast.ConstField{}
|
||||
mut comments := []ast.Comment{}
|
||||
for {
|
||||
if p.tok.kind == .eof {
|
||||
p.error_with_pos('const declaration is missing closing `)`', const_pos)
|
||||
return ast.ConstDecl{}
|
||||
}
|
||||
comments = p.eat_comments()
|
||||
if p.tok.kind == .rpar {
|
||||
break
|
||||
|
|
|
@ -231,8 +231,11 @@ pub fn (mut p Parser) expr(precedence int) ast.Expr {
|
|||
}
|
||||
}
|
||||
else {
|
||||
p.error_with_pos('invalid expression: unexpected $p.tok.kind.str() token',
|
||||
p.tok.position())
|
||||
if p.tok.kind != .eof {
|
||||
// eof should be handled where it happens
|
||||
p.error_with_pos('invalid expression: unexpected $p.tok.kind.str() token',
|
||||
p.tok.position())
|
||||
}
|
||||
}
|
||||
}
|
||||
return p.expr_with_left(node, precedence, is_stmt_ident)
|
||||
|
|
Loading…
Reference in New Issue