diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 707735eec4..a387e2f1bb 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -1963,8 +1963,15 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { // FIXME: Argument count != 1 will break these if left_type_sym.kind == .array && method_name in checker.array_builtin_methods { return c.array_builtin_method_call(mut node, left_type, left_type_sym) - } else if left_type_sym.kind == .map && method_name in ['clone', 'keys', 'move', 'delete'] { - return c.map_builtin_method_call(mut node, left_type, left_type_sym) + } else if (left_type_sym.kind == .map || c.table.get_final_type_symbol(left_type).kind == .map) + && method_name in ['clone', 'keys', 'move', 'delete'] { + if left_type_sym.kind == .map { + return c.map_builtin_method_call(mut node, left_type, left_type_sym) + } else { + parent_type := (left_type_sym.info as ast.Alias).parent_type + parent_sym := c.table.get_type_symbol(parent_type) + return c.map_builtin_method_call(mut node, parent_type, parent_sym) + } } else if left_type_sym.kind == .array && method_name in ['insert', 'prepend'] { if method_name == 'insert' { if node.args.len != 2 { diff --git a/vlib/v/gen/c/fn.v b/vlib/v/gen/c/fn.v index 490c370f83..bb29eb2cfb 100644 --- a/vlib/v/gen/c/fn.v +++ b/vlib/v/gen/c/fn.v @@ -853,7 +853,7 @@ fn (mut g Gen) method_call(node ast.CallExpr) { if node.name in ['close', 'try_pop', 'try_push'] { name = 'sync__Channel_$node.name' } - } else if left_sym.kind == .map { + } else if final_left_sym.kind == .map { if node.name == 'keys' { name = 'map_keys' } diff --git a/vlib/v/tests/alias_map_keys_test.v b/vlib/v/tests/alias_map_keys_test.v new file mode 100644 index 0000000000..9a8518d802 --- /dev/null +++ b/vlib/v/tests/alias_map_keys_test.v @@ -0,0 +1,12 @@ +type Foo = map[string]string + +fn test_alias_map_keys() { + keys_list := Foo({ + 'foo1': 'bar1' + 'foo2': 'bar2' + 'foo3': 'bar3' + }).keys() + + println(keys_list) + assert keys_list == ['foo1', 'foo2', 'foo3'] +}