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