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'
 | 
						mut name := 'main'
 | 
				
			||||||
	is_skipped := p.tok.kind != .key_module
 | 
						is_skipped := p.tok.kind != .key_module
 | 
				
			||||||
	if !is_skipped {
 | 
						if !is_skipped {
 | 
				
			||||||
 | 
							module_pos := p.tok.position()
 | 
				
			||||||
		p.next()
 | 
							p.next()
 | 
				
			||||||
 | 
							mut pos := p.tok.position()
 | 
				
			||||||
		name = p.check_name()
 | 
							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)
 | 
						full_mod := p.table.qualify_module(name, p.file_name)
 | 
				
			||||||
	p.mod = full_mod
 | 
						p.mod = full_mod
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue