From aef751861db0b6a420d95036f13c75bd506f3d7c Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Fri, 22 May 2020 18:17:13 +0300 Subject: [PATCH] cgen: fix `_ := []byte{init:1}` --- vlib/v/gen/cgen.v | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index db679f2b35..d8154127b7 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -969,6 +969,9 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) { if is_call { g.expr(val) } else { + if val is ast.ArrayInit { + g.gen_default_init_value( val as ast.ArrayInit ) + } g.write('{$styp _ = ') g.expr(val) g.writeln(';}') @@ -977,26 +980,8 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) { right_sym := g.table.get_type_symbol(assign_stmt.right_types[i]) mut is_fixed_array_init := false mut has_val := false - /* if val is ast.ArrayInit { - is_fixed_array_init = val.is_fixed - has_val = val.has_val - } - */ - match val { - ast.ArrayInit { - is_fixed_array_init = it.is_fixed - has_val = it.has_val - elem_type_str := g.typ(it.elem_type) - if it.has_default { - g.write('$elem_type_str _val_$it.pos.pos = ') - g.expr(it.default_expr) - g.writeln(';') - } else if it.has_len && it.elem_type == table.string_type { - g.writeln('$elem_type_str _val_$it.pos.pos = tos_lit("");') - } - } - else {} + is_fixed_array_init, has_val = g.gen_default_init_value( val as ast.ArrayInit ) } is_inside_ternary := g.inside_ternary != 0 cur_line := if is_inside_ternary { @@ -1062,6 +1047,20 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) { } } +fn (mut g Gen) gen_default_init_value(val ast.ArrayInit) (bool, bool) { + is_fixed_array_init := val.is_fixed + has_val := val.has_val + elem_type_str := g.typ(val.elem_type) + if val.has_default { + g.write('$elem_type_str _val_$val.pos.pos = ') + g.expr(val.default_expr) + g.writeln(';') + } else if val.has_len && val.elem_type == table.string_type { + g.writeln('$elem_type_str _val_$val.pos.pos = tos_lit("");') + } + return is_fixed_array_init, has_val +} + fn (mut g Gen) register_ternary_name(name string) { level_key := g.inside_ternary.str() if level_key !in g.ternary_level_names {