diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index 3b2b3aa245..c484eb5a95 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -3213,14 +3213,15 @@ fn (mut c Checker) map_builtin_method_call(mut node ast.CallExpr, left_type_ ast } 'delete' { c.check_for_mut_receiver(mut node.left) - if node.args.len != 1 { + if node.args.len == 1 { + info := left_sym.info as ast.Map + arg_type := c.expr(mut node.args[0].expr) + c.check_expected_call_arg(arg_type, info.key_type, node.language, node.args[0]) or { + c.error('${err.msg()} in argument 1 to `Map.delete`', node.args[0].pos) + } + } else { c.error('expected 1 argument, but got ${node.args.len}', node.pos) } - info := left_sym.info as ast.Map - arg_type := c.expr(mut node.args[0].expr) - c.check_expected_call_arg(arg_type, info.key_type, node.language, node.args[0]) or { - c.error('${err.msg()} in argument 1 to `Map.delete`', node.args[0].pos) - } } else {} } diff --git a/vlib/v/checker/tests/map_delete.out b/vlib/v/checker/tests/map_delete.out index 7706f321ff..18ef09cbc7 100644 --- a/vlib/v/checker/tests/map_delete.out +++ b/vlib/v/checker/tests/map_delete.out @@ -12,16 +12,29 @@ vlib/v/checker/tests/map_delete.vv:6:4: error: expected 1 argument, but got 2 | ~~~~~~~~~~~~ 7 | m2 := { 8 | '1': 1 -vlib/v/checker/tests/map_delete.vv:6:11: error: cannot use `int literal` as `string` in argument 1 to `Map.delete` - 4 | } - 5 | m.delete(1) - 6 | m.delete(1, 2) - | ^ - 7 | m2 := { - 8 | '1': 1 vlib/v/checker/tests/map_delete.vv:10:2: error: `m2` is immutable, declare it with `mut` to make it mutable 8 | '1': 1 9 | } 10 | m2.delete('1') | ~~ - 11 | } + 11 | m.delete() + 12 | _ := m.delete() +vlib/v/checker/tests/map_delete.vv:11:4: error: expected 1 argument, but got 0 + 9 | } + 10 | m2.delete('1') + 11 | m.delete() + | ~~~~~~~~ + 12 | _ := m.delete() + 13 | } +vlib/v/checker/tests/map_delete.vv:12:9: error: expected 1 argument, but got 0 + 10 | m2.delete('1') + 11 | m.delete() + 12 | _ := m.delete() + | ~~~~~~~~ + 13 | } +vlib/v/checker/tests/map_delete.vv:12:4: error: assignment mismatch: 1 variable but `delete()` returns 0 values + 10 | m2.delete('1') + 11 | m.delete() + 12 | _ := m.delete() + | ~~ + 13 | } diff --git a/vlib/v/checker/tests/map_delete.vv b/vlib/v/checker/tests/map_delete.vv index c9cd093b90..3583557ce3 100644 --- a/vlib/v/checker/tests/map_delete.vv +++ b/vlib/v/checker/tests/map_delete.vv @@ -8,4 +8,6 @@ fn main() { '1': 1 } m2.delete('1') + m.delete() + _ := m.delete() }