From c29f76454ef2cb12e0bfd6d0908274cead3f83fe Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Fri, 8 May 2020 15:07:50 +0200 Subject: [PATCH] cgen: clone strings in struct_init() --- vlib/v/gen/cgen.v | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 8b331bb5c4..c3d38a4455 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -2162,12 +2162,17 @@ fn (mut g Gen) struct_init(struct_init ast.StructInit) { field_name := c_name(field.name) inited_fields << field.name g.write('\t.$field_name = ') - // if g.autofree && right_sym.kind in [.array, .string] { - // g.write('/*clone1*/') - // if g.gen_clone_assignment(field.expr, right_sym, true) { - // } - // } - g.expr_with_cast(field.expr, field.typ, field.expected_type) + field_type_sym := g.table.get_type_symbol(field.typ) + mut cloned := false + if g.autofree && field_type_sym.kind in [.array, .string] { + g.write('/*clone1*/') + if g.gen_clone_assignment(field.expr, field_type_sym, false) { + cloned = true + } + } + if !cloned { + g.expr_with_cast(field.expr, field.typ, field.expected_type) + } g.writeln(',') } // The rest of the fields are zeroed.