parser: proper unexpected eof errors in const declarations (#9712)
parent
0099458c0a
commit
f4c8f897fe
|
@ -2719,7 +2719,6 @@ fn (mut p Parser) const_decl() ast.ConstDecl {
|
||||||
if is_pub {
|
if is_pub {
|
||||||
p.next()
|
p.next()
|
||||||
}
|
}
|
||||||
end_pos := p.tok.position()
|
|
||||||
const_pos := p.tok.position()
|
const_pos := p.tok.position()
|
||||||
p.check(.key_const)
|
p.check(.key_const)
|
||||||
is_block := p.tok.kind == .lpar
|
is_block := p.tok.kind == .lpar
|
||||||
|
@ -2729,11 +2728,11 @@ fn (mut p Parser) const_decl() ast.ConstDecl {
|
||||||
mut fields := []ast.ConstField{}
|
mut fields := []ast.ConstField{}
|
||||||
mut comments := []ast.Comment{}
|
mut comments := []ast.Comment{}
|
||||||
for {
|
for {
|
||||||
if p.tok.kind == .eof {
|
comments = p.eat_comments({})
|
||||||
p.error_with_pos('const declaration is missing closing `)`', const_pos)
|
if is_block && p.tok.kind == .eof {
|
||||||
|
p.error('unexpected eof, expecting ´)´')
|
||||||
return ast.ConstDecl{}
|
return ast.ConstDecl{}
|
||||||
}
|
}
|
||||||
comments = p.eat_comments({})
|
|
||||||
if p.tok.kind == .rpar {
|
if p.tok.kind == .rpar {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -2749,6 +2748,10 @@ fn (mut p Parser) const_decl() ast.ConstDecl {
|
||||||
p.error('const initializer fn literal is not a constant')
|
p.error('const initializer fn literal is not a constant')
|
||||||
return ast.ConstDecl{}
|
return ast.ConstDecl{}
|
||||||
}
|
}
|
||||||
|
if p.tok.kind == .eof {
|
||||||
|
p.error('unexpected eof, expecting an expression')
|
||||||
|
return ast.ConstDecl{}
|
||||||
|
}
|
||||||
expr := p.expr(0)
|
expr := p.expr(0)
|
||||||
field := ast.ConstField{
|
field := ast.ConstField{
|
||||||
name: full_name
|
name: full_name
|
||||||
|
@ -2770,7 +2773,7 @@ fn (mut p Parser) const_decl() ast.ConstDecl {
|
||||||
p.check(.rpar)
|
p.check(.rpar)
|
||||||
}
|
}
|
||||||
return ast.ConstDecl{
|
return ast.ConstDecl{
|
||||||
pos: start_pos.extend_with_last_line(end_pos, p.prev_tok.line_nr)
|
pos: start_pos.extend_with_last_line(const_pos, p.prev_tok.line_nr)
|
||||||
fields: fields
|
fields: fields
|
||||||
is_pub: is_pub
|
is_pub: is_pub
|
||||||
end_comments: comments
|
end_comments: comments
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
vlib/v/parser/tests/const_missing_rpar_a.vv:3:1: error: unexpected eof, expecting ´)´
|
||||||
|
1 | const (
|
||||||
|
2 | a = 5
|
|
@ -0,0 +1,2 @@
|
||||||
|
const (
|
||||||
|
a = 5
|
|
@ -0,0 +1,3 @@
|
||||||
|
vlib/v/parser/tests/const_missing_rpar_b.vv:4:1: error: unexpected eof, expecting ´)´
|
||||||
|
2 | a = 5
|
||||||
|
3 | // foo
|
|
@ -0,0 +1,3 @@
|
||||||
|
const (
|
||||||
|
a = 5
|
||||||
|
// foo
|
|
@ -0,0 +1,2 @@
|
||||||
|
vlib/v/parser/tests/const_only_keyword.vv:2:1: error: unexpected eof, expecting name
|
||||||
|
1 | const
|
|
@ -0,0 +1 @@
|
||||||
|
const
|
|
@ -0,0 +1,2 @@
|
||||||
|
vlib/v/parser/tests/const_unexpected_eof.vv:2:1: error: unexpected eof, expecting an expression
|
||||||
|
1 | const a =
|
|
@ -0,0 +1 @@
|
||||||
|
const a =
|
Loading…
Reference in New Issue