diff --git a/vlib/v/gen/c/fn.v b/vlib/v/gen/c/fn.v index 01c34b6b0a..b0cdce129a 100644 --- a/vlib/v/gen/c/fn.v +++ b/vlib/v/gen/c/fn.v @@ -505,7 +505,7 @@ fn (mut g Gen) call_expr(node ast.CallExpr) { pub fn (mut g Gen) unwrap_generic(typ ast.Type) ast.Type { if typ.has_flag(.generic) { if t_typ := g.table.resolve_generic_to_concrete(typ, g.table.cur_fn.generic_names, - g.table.cur_concrete_types, false) + g.table.cur_concrete_types, true) { return t_typ } diff --git a/vlib/v/tests/generic_fn_typeof_name_test.v b/vlib/v/tests/generic_fn_typeof_name_test.v index 75fa7e7bd3..93b08e09b6 100644 --- a/vlib/v/tests/generic_fn_typeof_name_test.v +++ b/vlib/v/tests/generic_fn_typeof_name_test.v @@ -41,3 +41,20 @@ fn test_no_paras_generics_fn_typeof_name() { ret = print_type() assert ret == 'bool' } + +// test generic method receiver typeof name +struct Num { + num T +} + +fn (num Num) test(v T) { + println(typeof(num).name) + assert typeof(num).name == 'Num' + println(typeof(v).name) + assert typeof(v).name == 'int' +} + +fn test_generic_method_receiver_typeof_name() { + num := Num{3} + num.test(100) +}