checker: check generic method call args mismatch (#10669)
parent
972542d6ee
commit
c4b5805890
|
@ -306,15 +306,15 @@ fn test_read_raw_at() ? {
|
||||||
f.write_raw(another_permission) ?
|
f.write_raw(another_permission) ?
|
||||||
f.close()
|
f.close()
|
||||||
f = os.open_file(tfile, 'r') ?
|
f = os.open_file(tfile, 'r') ?
|
||||||
mut at := 3
|
mut at := u64(3)
|
||||||
p := f.read_raw_at<Point>(at) ?
|
p := f.read_raw_at<Point>(at) ?
|
||||||
at += int(sizeof(Point))
|
at += sizeof(Point)
|
||||||
b := f.read_raw_at<byte>(at) ?
|
b := f.read_raw_at<byte>(at) ?
|
||||||
at += int(sizeof(byte))
|
at += sizeof(byte)
|
||||||
c := f.read_raw_at<Color>(at) ?
|
c := f.read_raw_at<Color>(at) ?
|
||||||
at += int(sizeof(Color))
|
at += sizeof(Color)
|
||||||
x := f.read_raw_at<Permissions>(at) ?
|
x := f.read_raw_at<Permissions>(at) ?
|
||||||
at += int(sizeof(Permissions))
|
at += sizeof(Permissions)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
assert p == another_point
|
assert p == another_point
|
||||||
|
|
|
@ -2038,7 +2038,7 @@ pub fn (mut c Checker) method_call(mut call_expr ast.CallExpr) ast.Type {
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if method.generic_names.len > 0 {
|
if exp_arg_typ.has_flag(.generic) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
c.check_expected_call_arg(got_arg_typ, c.unwrap_generic(exp_arg_typ), call_expr.language) or {
|
c.check_expected_call_arg(got_arg_typ, c.unwrap_generic(exp_arg_typ), call_expr.language) or {
|
||||||
|
|
|
@ -3,5 +3,12 @@ vlib/v/checker/tests/generics_fn_called_multi_args_mismatch.vv:3:13: error: cann
|
||||||
2 | x := 'ab'.runes()[..1]
|
2 | x := 'ab'.runes()[..1]
|
||||||
3 | foo_str(1, x)
|
3 | foo_str(1, x)
|
||||||
| ^
|
| ^
|
||||||
4 | }
|
4 |
|
||||||
5 |
|
5 | foo := Foo<int>{}
|
||||||
|
vlib/v/checker/tests/generics_fn_called_multi_args_mismatch.vv:6:11: error: cannot use `[]rune` as `string` in argument 1 to `Foo<int>.info`
|
||||||
|
4 |
|
||||||
|
5 | foo := Foo<int>{}
|
||||||
|
6 | foo.info(x)
|
||||||
|
| ^
|
||||||
|
7 | }
|
||||||
|
8 |
|
||||||
|
|
|
@ -1,7 +1,17 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
x := 'ab'.runes()[..1]
|
x := 'ab'.runes()[..1]
|
||||||
foo_str(1, x)
|
foo_str(1, x)
|
||||||
|
|
||||||
|
foo := Foo<int>{}
|
||||||
|
foo.info(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn foo_str<T>(b T, a string) {
|
fn foo_str<T>(b T, a string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct Foo<T> {
|
||||||
|
t T
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (f Foo<T>) info(a string) {
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue