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