Skip to content

Commit d31aaec

Browse files
authored
checker: add more checks for map.delete (fix #25204) (#25205)
1 parent 0dc4e9b commit d31aaec

3 files changed

Lines changed: 30 additions & 14 deletions

File tree

‎vlib/v/checker/fn.v‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3213,14 +3213,15 @@ fn (mut c Checker) map_builtin_method_call(mut node ast.CallExpr, left_type_ ast
32133213
}
32143214
'delete' {
32153215
c.check_for_mut_receiver(mut node.left)
3216-
if node.args.len != 1 {
3216+
if node.args.len == 1 {
3217+
info := left_sym.info as ast.Map
3218+
arg_type := c.expr(mut node.args[0].expr)
3219+
c.check_expected_call_arg(arg_type, info.key_type, node.language, node.args[0]) or {
3220+
c.error('${err.msg()} in argument 1 to `Map.delete`', node.args[0].pos)
3221+
}
3222+
} else {
32173223
c.error('expected 1 argument, but got ${node.args.len}', node.pos)
32183224
}
3219-
info := left_sym.info as ast.Map
3220-
arg_type := c.expr(mut node.args[0].expr)
3221-
c.check_expected_call_arg(arg_type, info.key_type, node.language, node.args[0]) or {
3222-
c.error('${err.msg()} in argument 1 to `Map.delete`', node.args[0].pos)
3223-
}
32243225
}
32253226
else {}
32263227
}

‎vlib/v/checker/tests/map_delete.out‎

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,29 @@ vlib/v/checker/tests/map_delete.vv:6:4: error: expected 1 argument, but got 2
1212
| ~~~~~~~~~~~~
1313
7 | m2 := {
1414
8 | '1': 1
15-
vlib/v/checker/tests/map_delete.vv:6:11: error: cannot use `int literal` as `string` in argument 1 to `Map.delete`
16-
4 | }
17-
5 | m.delete(1)
18-
6 | m.delete(1, 2)
19-
| ^
20-
7 | m2 := {
21-
8 | '1': 1
2215
vlib/v/checker/tests/map_delete.vv:10:2: error: `m2` is immutable, declare it with `mut` to make it mutable
2316
8 | '1': 1
2417
9 | }
2518
10 | m2.delete('1')
2619
| ~~
27-
11 | }
20+
11 | m.delete()
21+
12 | _ := m.delete()
22+
vlib/v/checker/tests/map_delete.vv:11:4: error: expected 1 argument, but got 0
23+
9 | }
24+
10 | m2.delete('1')
25+
11 | m.delete()
26+
| ~~~~~~~~
27+
12 | _ := m.delete()
28+
13 | }
29+
vlib/v/checker/tests/map_delete.vv:12:9: error: expected 1 argument, but got 0
30+
10 | m2.delete('1')
31+
11 | m.delete()
32+
12 | _ := m.delete()
33+
| ~~~~~~~~
34+
13 | }
35+
vlib/v/checker/tests/map_delete.vv:12:4: error: assignment mismatch: 1 variable but `delete()` returns 0 values
36+
10 | m2.delete('1')
37+
11 | m.delete()
38+
12 | _ := m.delete()
39+
| ~~
40+
13 | }

‎vlib/v/checker/tests/map_delete.vv‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ fn main() {
88
'1': 1
99
}
1010
m2.delete('1')
11+
m.delete()
12+
_ := m.delete()
1113
}

0 commit comments

Comments
 (0)