mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: check unknown generic type (#7954)
This commit is contained in:
parent
0998cbaaba
commit
828120a918
@ -1658,6 +1658,12 @@ pub fn (mut c Checker) call_fn(mut call_expr ast.CallExpr) table.Type {
|
||||
// builtin C.m*, C.s* only - temp
|
||||
c.warn('function `$f.name` must be called from an `unsafe` block', call_expr.pos)
|
||||
}
|
||||
if f.is_generic {
|
||||
sym := c.table.get_type_symbol(call_expr.generic_type)
|
||||
if sym.kind == .placeholder {
|
||||
c.error('unknown type `$sym.name`', call_expr.generic_list_pos)
|
||||
}
|
||||
}
|
||||
if f.is_generic && f.return_type.has_flag(.generic) {
|
||||
rts := c.table.get_type_symbol(f.return_type)
|
||||
if rts.kind == .struct_ {
|
||||
|
7
vlib/v/checker/tests/unknown_generic_type.out
Normal file
7
vlib/v/checker/tests/unknown_generic_type.out
Normal file
@ -0,0 +1,7 @@
|
||||
vlib/v/checker/tests/unknown_generic_type.vv:5:13: error: unknown type `Foo`
|
||||
3 |
|
||||
4 | fn main() {
|
||||
5 | x := decode<Foo>('{"name": "test"}')?
|
||||
| ~~~~~
|
||||
6 | println(x)
|
||||
7 | }
|
7
vlib/v/checker/tests/unknown_generic_type.vv
Normal file
7
vlib/v/checker/tests/unknown_generic_type.vv
Normal file
@ -0,0 +1,7 @@
|
||||
fn decode<T>(raw_data string) ?T {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
x := decode<Foo>('{"name": "test"}')?
|
||||
println(x)
|
||||
}
|
Loading…
Reference in New Issue
Block a user