parser: check for module statement errors
parent
85723e3799
commit
ba3a631954
|
@ -0,0 +1,5 @@
|
|||
vlib/v/checker/tests/module_multiple_names_err.v:1:13: error: `module x` can only declare one module
|
||||
1 | module main os
|
||||
| ~~
|
||||
2 | fn main() {
|
||||
3 | println('hello, world')
|
|
@ -0,0 +1,4 @@
|
|||
module main os
|
||||
fn main() {
|
||||
println('hello, world')
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
vlib/v/checker/tests/module_not_at_same_line_err.v:2:1: error: `module` and `main` must be at same line
|
||||
1 | module
|
||||
2 | main
|
||||
| ~~~~
|
||||
3 | fn main() {
|
||||
4 | println('hello, world')
|
|
@ -0,0 +1,5 @@
|
|||
module
|
||||
main
|
||||
fn main() {
|
||||
println('hello, world')
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
vlib/v/checker/tests/module_syntax_err.v:1:12: error: `module x` syntax error
|
||||
1 | module main.os
|
||||
| ^
|
||||
2 | fn main() {
|
||||
3 | println('hello, world')
|
|
@ -0,0 +1,4 @@
|
|||
module main.os
|
||||
fn main() {
|
||||
println('hello, world')
|
||||
}
|
|
@ -966,8 +966,21 @@ fn (mut p Parser) module_decl() ast.Module {
|
|||
mut name := 'main'
|
||||
is_skipped := p.tok.kind != .key_module
|
||||
if !is_skipped {
|
||||
module_pos := p.tok.position()
|
||||
p.next()
|
||||
mut pos := p.tok.position()
|
||||
name = p.check_name()
|
||||
if module_pos.line_nr != pos.line_nr {
|
||||
p.error_with_pos('`module` and `$name` must be at same line', pos)
|
||||
}
|
||||
pos = p.tok.position()
|
||||
if module_pos.line_nr == pos.line_nr {
|
||||
if p.tok.kind != .name {
|
||||
p.error_with_pos('`module x` syntax error', pos)
|
||||
} else {
|
||||
p.error_with_pos('`module x` can only declare one module', pos)
|
||||
}
|
||||
}
|
||||
}
|
||||
full_mod := p.table.qualify_module(name, p.file_name)
|
||||
p.mod = full_mod
|
||||
|
|
Loading…
Reference in New Issue