parser: check the redefinition of built-in IError (#13606)
							parent
							
								
									4215bb125c
								
							
						
					
					
						commit
						0fb1eaef04
					
				|  | @ -47,6 +47,10 @@ fn (mut p Parser) struct_decl() ast.StructDecl { | |||
| 			name_pos) | ||||
| 		return ast.StructDecl{} | ||||
| 	} | ||||
| 	if name == 'IError' && p.mod != 'builtin' { | ||||
| 		p.error_with_pos('cannot register struct `IError`, it is builtin interface type', | ||||
| 			name_pos) | ||||
| 	} | ||||
| 	generic_types, _ := p.parse_generic_types() | ||||
| 	no_body := p.tok.kind != .lcbr | ||||
| 	if language == .v && no_body { | ||||
|  | @ -453,6 +457,10 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl { | |||
| 	name_pos := p.tok.pos() | ||||
| 	p.check_for_impure_v(language, name_pos) | ||||
| 	modless_name := p.check_name() | ||||
| 	if modless_name == 'IError' && p.mod != 'builtin' { | ||||
| 		p.error_with_pos('cannot register interface `IError`, it is builtin interface type', | ||||
| 			name_pos) | ||||
| 	} | ||||
| 	mut interface_name := '' | ||||
| 	if language == .js { | ||||
| 		interface_name = 'JS.' + modless_name | ||||
|  |  | |||
|  | @ -0,0 +1,5 @@ | |||
| vlib/v/parser/tests/register_ierror_interface.vv:1:11: error: cannot register interface `IError`, it is builtin interface type | ||||
|     1 | interface IError { | ||||
|       |           ~~~~~~ | ||||
|     2 |     foo() string | ||||
|     3 | } | ||||
|  | @ -0,0 +1,7 @@ | |||
| interface IError { | ||||
| 	foo() string | ||||
| } | ||||
| 
 | ||||
| fn main() { | ||||
| 	println('Hello World') | ||||
| } | ||||
|  | @ -0,0 +1,5 @@ | |||
| vlib/v/parser/tests/register_ierror_struct.vv:1:8: error: cannot register struct `IError`, it is builtin interface type | ||||
|     1 | struct IError { | ||||
|       |        ~~~~~~ | ||||
|     2 |     msg string | ||||
|     3 | } | ||||
|  | @ -0,0 +1,7 @@ | |||
| struct IError { | ||||
| 	msg string | ||||
| } | ||||
| 
 | ||||
| fn main() { | ||||
| 	println('Hello World') | ||||
| } | ||||
		Loading…
	
		Reference in New Issue