checker: check that the module `init` fn, should have no params, and no return type (#8988)
							parent
							
								
									d0a64f2da7
								
							
						
					
					
						commit
						a1244a9f5f
					
				|  | @ -5797,6 +5797,15 @@ fn (mut c Checker) fn_decl(mut node ast.FnDecl) { | ||||||
| 			c.ensure_type_exists(arg.typ, node.pos) or { return } | 			c.ensure_type_exists(arg.typ, node.pos) or { return } | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	if node.language == .v && node.name.after_char(`.`) == 'init' && !node.is_method | ||||||
|  | 		&& node.params.len == 0 { | ||||||
|  | 		if node.is_pub { | ||||||
|  | 			c.error('fn `init` must not be public', node.pos) | ||||||
|  | 		} | ||||||
|  | 		if node.return_type != table.void_type { | ||||||
|  | 			c.error('fn `init` cannot have a return type', node.pos) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 	if node.return_type != table.Type(0) { | 	if node.return_type != table.Type(0) { | ||||||
| 		c.ensure_type_exists(node.return_type, node.pos) or { return } | 		c.ensure_type_exists(node.return_type, node.pos) or { return } | ||||||
| 		if node.language == .v && node.is_method && node.name == 'str' { | 		if node.language == .v && node.is_method && node.name == 'str' { | ||||||
|  |  | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | vlib/v/checker/tests/fn_init_sig.vv:1:1: error: fn `init` cannot have a return type | ||||||
|  |     1 | fn init() int { | ||||||
|  |       | ~~~~~~~~~~~~~ | ||||||
|  |     2 |     return 1 | ||||||
|  |     3 | } | ||||||
|  | vlib/v/checker/tests/fn_init_sig.vv:4:1: error: fn `init` must not be public | ||||||
|  |     2 |     return 1 | ||||||
|  |     3 | } | ||||||
|  |     4 | pub fn init() int { | ||||||
|  |       | ~~~~~~~~~~~~~~~~~ | ||||||
|  |     5 |     return 1 | ||||||
|  |     6 | } | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | fn init() int { | ||||||
|  |     return 1 | ||||||
|  | } | ||||||
|  | pub fn init() int { | ||||||
|  |     return 1 | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue