diff --git a/vlib/v/ast/table.v b/vlib/v/ast/table.v index 08d8487677..f9d3ec7cb4 100644 --- a/vlib/v/ast/table.v +++ b/vlib/v/ast/table.v @@ -1661,16 +1661,14 @@ pub fn (mut t Table) generic_insts_to_concrete() { generic_names := parent_info.generic_types.map(t.get_type_symbol(it).name) for i in 0 .. fields.len { if fields[i].typ.has_flag(.generic) { - sym := t.get_type_symbol(fields[i].typ) - if sym.kind == .struct_ && fields[i].typ.idx() != info.parent_idx { + if fields[i].typ.idx() != info.parent_idx { fields[i].typ = t.unwrap_generic_type(fields[i].typ, generic_names, info.concrete_types) - } else { - if t_typ := t.resolve_generic_to_concrete(fields[i].typ, - generic_names, info.concrete_types) - { - fields[i].typ = t_typ - } + } + if t_typ := t.resolve_generic_to_concrete(fields[i].typ, + generic_names, info.concrete_types) + { + fields[i].typ = t_typ } } } diff --git a/vlib/v/tests/generics_nested_struct_init_test.v b/vlib/v/tests/generics_nested_struct_init_test.v new file mode 100644 index 0000000000..d69d7bfc71 --- /dev/null +++ b/vlib/v/tests/generics_nested_struct_init_test.v @@ -0,0 +1,25 @@ +struct Foo { + foo T +} + +struct Bar { +mut: + foos []Foo +} + +fn (mut b Bar) add(v T) { + b.foos << Foo{ + foo: v + } +} + +fn test_nested_generics_struct_init() { + mut bar := Bar{} + bar.add('bar') + println(bar) + + result := '$bar' + assert result.contains('Bar{') + assert result.contains('foos: [Foo{') + assert result.contains("foo: 'bar'") +}