v.checker: fix `a.map(voidfn(it))` (#10985)
parent
75c41252d9
commit
57f30668e3
|
@ -1985,7 +1985,7 @@ fn (mut c Checker) check_map_and_filter(is_map bool, elem_typ ast.Type, call_exp
|
|||
}
|
||||
}
|
||||
ast.CallExpr {
|
||||
if is_map && arg_expr.return_type == ast.void_type {
|
||||
if is_map && arg_expr.return_type in [ast.void_type, 0] {
|
||||
c.error('type mismatch, `$arg_expr.name` does not return anything', arg_expr.pos)
|
||||
} else if !is_map && arg_expr.return_type != ast.bool_type {
|
||||
c.error('type mismatch, `$arg_expr.name` must return a bool', arg_expr.pos)
|
||||
|
@ -2767,6 +2767,7 @@ pub fn (mut c Checker) fn_call(mut call_expr ast.CallExpr) ast.Type {
|
|||
}
|
||||
c.fail_if_unreadable(arg.expr, arg.typ, 'argument to print')
|
||||
c.inside_println_arg = false
|
||||
call_expr.return_type = ast.void_type
|
||||
/*
|
||||
// TODO: optimize `struct T{} fn (t &T) str() string {return 'abc'} mut a := []&T{} a << &T{} println(a[0])`
|
||||
// It currently generates:
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
vlib/v/checker/tests/array_map_void_fn_err.vv:3:12: error: type mismatch, `println` does not return anything
|
||||
1 | fn main(){
|
||||
2 | array := [1,2,3,4]
|
||||
3 | array.map(println(it))
|
||||
| ~~~~~~~~~~~
|
||||
4 | }
|
|
@ -0,0 +1,4 @@
|
|||
fn main(){
|
||||
array := [1,2,3,4]
|
||||
array.map(println(it))
|
||||
}
|
Loading…
Reference in New Issue