1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

builtin: add map.values() (#14301)

This commit is contained in:
Hunam
2022-05-06 19:42:01 +02:00
committed by GitHub
parent ce99a306c0
commit 0699f324b5
4 changed files with 66 additions and 6 deletions

View File

@@ -1111,7 +1111,7 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type {
if left_sym.kind == .array && method_name in array_builtin_methods {
return c.array_builtin_method_call(mut node, left_type, c.table.sym(left_type))
} else if (left_sym.kind == .map || final_left_sym.kind == .map)
&& method_name in ['clone', 'keys', 'move', 'delete'] {
&& method_name in ['clone', 'keys', 'values', 'move', 'delete'] {
if left_sym.kind == .map {
return c.map_builtin_method_call(mut node, left_type, left_sym)
} else {
@@ -1820,12 +1820,16 @@ fn (mut c Checker) map_builtin_method_call(mut node ast.CallExpr, left_type ast.
}
ret_type = ret_type.clear_flag(.shared_f)
}
'keys' {
'keys', 'values' {
if node.args.len != 0 {
c.error('`.keys()` does not have any arguments', node.args[0].pos)
c.error('`.${method_name}()` 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)
typ := if method_name == 'keys' {
c.table.find_or_register_array(info.key_type)
} else {
c.table.find_or_register_array(info.value_type)
}
ret_type = ast.Type(typ)
}
'delete' {

View File

@@ -1044,6 +1044,8 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
} else if final_left_sym.kind == .map {
if node.name == 'keys' {
name = 'map_keys'
} else if node.name == 'values' {
name = 'map_values'
}
}
if g.pref.obfuscate && g.cur_mod.name == 'main' && name.starts_with('main__')