mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: check unknown array of fn type in struct field (#15502)
This commit is contained in:
parent
9dd8228f91
commit
42c0bae9ce
@ -3827,6 +3827,13 @@ fn (mut c Checker) ensure_type_exists(typ ast.Type, pos token.Pos) ? {
|
||||
return
|
||||
}
|
||||
}
|
||||
.function {
|
||||
fn_info := sym.info as ast.FnType
|
||||
c.ensure_type_exists(fn_info.func.return_type, fn_info.func.return_type_pos)?
|
||||
for param in fn_info.func.params {
|
||||
c.ensure_type_exists(param.typ, param.type_pos)?
|
||||
}
|
||||
}
|
||||
.array {
|
||||
c.ensure_type_exists((sym.info as ast.Array).elem_type, pos)?
|
||||
}
|
||||
|
@ -68,16 +68,6 @@ pub fn (mut c Checker) struct_decl(mut node ast.StructDecl) {
|
||||
field.type_pos)
|
||||
}
|
||||
}
|
||||
field_sym := c.table.sym(field.typ)
|
||||
if field_sym.kind == .function {
|
||||
fn_info := field_sym.info as ast.FnType
|
||||
c.ensure_type_exists(fn_info.func.return_type, fn_info.func.return_type_pos) or {
|
||||
return
|
||||
}
|
||||
for param in fn_info.func.params {
|
||||
c.ensure_type_exists(param.typ, param.type_pos) or { return }
|
||||
}
|
||||
}
|
||||
}
|
||||
if sym.kind == .struct_ {
|
||||
info := sym.info as ast.Struct
|
||||
|
@ -0,0 +1,7 @@
|
||||
vlib/v/checker/tests/unknown_array_fn_type_in_struct_field.vv:2:22: error: unknown type `UnknownThing`.
|
||||
Did you mean `[2]fn (u32) UnknownThing`?
|
||||
1 | struct Virt {
|
||||
2 | fns [2]fn (num u32) UnknownThing
|
||||
| ~~~~~~~~~~~~
|
||||
3 | }
|
||||
4 |
|
@ -0,0 +1,10 @@
|
||||
struct Virt {
|
||||
fns [2]fn (num u32) UnknownThing
|
||||
}
|
||||
|
||||
fn (virt Virt) caller() {
|
||||
func := virt.fns[0]
|
||||
func(5)
|
||||
}
|
||||
|
||||
fn main() {}
|
Loading…
Reference in New Issue
Block a user