checker: check __global type (#9804)
							parent
							
								
									8e455495b2
								
							
						
					
					
						commit
						aa40dfc1de
					
				|  | @ -519,6 +519,7 @@ pub: | |||
| 	expr     Expr | ||||
| 	has_expr bool | ||||
| 	pos      token.Position | ||||
| 	typ_pos  token.Position | ||||
| pub mut: | ||||
| 	typ      Type | ||||
| 	comments []Comment | ||||
|  |  | |||
|  | @ -3834,6 +3834,10 @@ fn (mut c Checker) global_decl(node ast.GlobalDecl) { | |||
| 		if field.name in c.global_names { | ||||
| 			c.error('duplicate global `$field.name`', field.pos) | ||||
| 		} | ||||
| 		sym := c.table.get_type_symbol(field.typ) | ||||
| 		if sym.kind == .placeholder { | ||||
| 			c.error('unknown type `$sym.name`', field.typ_pos) | ||||
| 		} | ||||
| 		c.global_names << field.name | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,11 @@ | |||
| vlib/v/checker/tests/globals/unknown_typ.vv:1:12: error: unknown type `foo` | ||||
|     1 | __global x foo | ||||
|       |            ~~~ | ||||
|     2 | __global ( | ||||
|     3 |     y = float(5.0) | ||||
| vlib/v/checker/tests/globals/unknown_typ.vv:3:6: error: unknown type `float` | ||||
|     1 | __global x foo | ||||
|     2 | __global ( | ||||
|     3 |     y = float(5.0) | ||||
|       |         ~~~~~ | ||||
|     4 | ) | ||||
|  | @ -0,0 +1,4 @@ | |||
| __global x foo | ||||
| __global ( | ||||
| 	y = float(5.0) | ||||
| ) | ||||
|  | @ -2846,6 +2846,7 @@ fn (mut p Parser) global_decl() ast.GlobalDecl { | |||
| 		if has_expr { | ||||
| 			p.next() // =
 | ||||
| 		} | ||||
| 		typ_pos := p.tok.position() | ||||
| 		typ := p.parse_type() | ||||
| 		if p.tok.kind == .assign { | ||||
| 			p.error('global assign must have the type around the value, use `name = type(value)`') | ||||
|  | @ -2866,6 +2867,7 @@ fn (mut p Parser) global_decl() ast.GlobalDecl { | |||
| 			has_expr: has_expr | ||||
| 			expr: expr | ||||
| 			pos: pos | ||||
| 			typ_pos: typ_pos | ||||
| 			typ: typ | ||||
| 			comments: comments | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue