checker: fix panic in generic methods (#7944)
parent
2820139216
commit
1ce93536d0
|
@ -426,6 +426,9 @@ pub fn (mut c Checker) infer_fn_types(f table.Fn, mut call_expr ast.CallExpr) {
|
||||||
gt_name := 'T'
|
gt_name := 'T'
|
||||||
mut typ := table.void_type
|
mut typ := table.void_type
|
||||||
for i, param in f.params {
|
for i, param in f.params {
|
||||||
|
if call_expr.args.len == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
arg := if i != 0 && call_expr.is_method { call_expr.args[i - 1] } else { call_expr.args[i] }
|
arg := if i != 0 && call_expr.is_method { call_expr.args[i - 1] } else { call_expr.args[i] }
|
||||||
if param.typ.has_flag(.generic) {
|
if param.typ.has_flag(.generic) {
|
||||||
typ = arg.typ
|
typ = arg.typ
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
vlib/v/checker/tests/method_generic_infer_err.vv:9:7: error: could not infer generic type `T` in call to `func`
|
||||||
|
7 | fn main() {
|
||||||
|
8 | data := Data{}
|
||||||
|
9 | data.func()
|
||||||
|
| ~~~~~~
|
||||||
|
10 | }
|
|
@ -0,0 +1,10 @@
|
||||||
|
struct Data {}
|
||||||
|
|
||||||
|
fn (_ Data) func<T>() T {
|
||||||
|
return T{}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
data := Data{}
|
||||||
|
data.func()
|
||||||
|
}
|
Loading…
Reference in New Issue