checker: check map builtin method's arguments (#14120)
parent
5e8c4a3aff
commit
8013bd43b0
|
@ -1743,6 +1743,9 @@ fn (mut c Checker) map_builtin_method_call(mut node ast.CallExpr, left_type ast.
|
|||
mut ret_type := ast.void_type
|
||||
match method_name {
|
||||
'clone', 'move' {
|
||||
if node.args.len != 0 {
|
||||
c.error('`.${method_name}()` does not have any arguments', node.args[0].pos)
|
||||
}
|
||||
if method_name[0] == `m` {
|
||||
c.fail_if_immutable(node.left)
|
||||
}
|
||||
|
@ -1754,6 +1757,9 @@ fn (mut c Checker) map_builtin_method_call(mut node ast.CallExpr, left_type ast.
|
|||
ret_type = ret_type.clear_flag(.shared_f)
|
||||
}
|
||||
'keys' {
|
||||
if node.args.len != 0 {
|
||||
c.error('`.keys()` does not have any arguments', node.args[0].pos)
|
||||
}
|
||||
info := left_sym.info as ast.Map
|
||||
typ := c.table.find_or_register_array(info.key_type)
|
||||
ret_type = ast.Type(typ)
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
vlib/v/checker/tests/map_builtin_method_args_err.vv:4:16: error: `.clone()` does not have any arguments
|
||||
2 | mut m := {11: 22}
|
||||
3 |
|
||||
4 | a1 := m.clone(11)
|
||||
| ~~
|
||||
5 | println(a1)
|
||||
6 |
|
||||
vlib/v/checker/tests/map_builtin_method_args_err.vv:7:15: error: `.move()` does not have any arguments
|
||||
5 | println(a1)
|
||||
6 |
|
||||
7 | a2 := m.move(11)
|
||||
| ~~
|
||||
8 | println(a2)
|
||||
9 |
|
||||
vlib/v/checker/tests/map_builtin_method_args_err.vv:10:15: error: `.keys()` does not have any arguments
|
||||
8 | println(a2)
|
||||
9 |
|
||||
10 | a3 := m.keys('aaa')
|
||||
| ~~~~~
|
||||
11 | println(a3)
|
||||
12 | }
|
|
@ -0,0 +1,12 @@
|
|||
fn main() {
|
||||
mut m := {11: 22}
|
||||
|
||||
a1 := m.clone(11)
|
||||
println(a1)
|
||||
|
||||
a2 := m.move(11)
|
||||
println(a2)
|
||||
|
||||
a3 := m.keys('aaa')
|
||||
println(a3)
|
||||
}
|
Loading…
Reference in New Issue