diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 66656d41ec..a014da9b14 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -3064,6 +3064,10 @@ fn (mut g Gen) map_fn_ptrs(key_typ ast.TypeSymbol) (string, string, string, stri mut clone_fn := '' mut free_fn := '&map_free_nop' match key_typ.kind { + .alias { + alias_key_type := (key_typ.info as ast.Alias).parent_type + return g.map_fn_ptrs(g.table.sym(alias_key_type)) + } .u8, .i8, .char { hash_fn = '&map_hash_int_1' key_eq_fn = '&map_eq_int_1' diff --git a/vlib/v/tests/map_key_alias_test.v b/vlib/v/tests/map_key_alias_test.v new file mode 100644 index 0000000000..8d561996db --- /dev/null +++ b/vlib/v/tests/map_key_alias_test.v @@ -0,0 +1,16 @@ +type String = string +type Rune = rune + +fn test_map_key_alias() { + mut str_data := map[string]map[String]string{} + str_data['str'][String('String')] = 'test' + assert '${str_data}' == "{'str': {'String': 'test'}}" + + mut i32_data := map[i32]string{} + i32_data[23] = 'num' + assert '${i32_data}' == "{23: 'num'}" + + mut rune_data := map[Rune]string{} + rune_data[`A`] = 'rune' + assert '${rune_data}' == "{`A`: 'rune'}" +}