From 168845e7d287b624e7269af57b60438d79be2425 Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Tue, 15 Mar 2022 20:30:53 +0000 Subject: [PATCH] use comma op to assign temporary Also make insert_before_stmt work inside a ternary expression. --- vlib/v/gen/c/cgen.v | 2 +- vlib/v/gen/c/index.v | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index d576ede838..6dec0b93c1 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -4795,7 +4795,7 @@ fn (mut g Gen) go_before_ternary() string { } fn (mut g Gen) insert_before_stmt(s string) { - cur_line := g.go_before_stmt(0) + cur_line := g.go_before_stmt(g.inside_ternary) g.writeln(s) g.write(cur_line) } diff --git a/vlib/v/gen/c/index.v b/vlib/v/gen/c/index.v index ccdb310ee3..8ff1dd7633 100644 --- a/vlib/v/gen/c/index.v +++ b/vlib/v/gen/c/index.v @@ -85,12 +85,12 @@ fn (mut g Gen) range_expr(node ast.IndexExpr, range ast.RangeExpr) { } else if sym.kind == .array { if !range.has_high { tmp_left = g.new_tmp_var() - line := g.go_before_ternary() - g.out.write_string(util.tabs(g.indent)) tmp_type := g.typ(node.left_type) - g.write('$tmp_type $tmp_left = ') + g.insert_before_stmt('${util.tabs(g.indent)}$tmp_type $tmp_left;') + // (tmp = expr, array_slice(...)) + g.write('($tmp_left = ') g.expr(node.left) - g.write(';\n$line') + g.write(', ') } if node.is_gated { g.write('array_slice_ni(') @@ -148,10 +148,11 @@ fn (mut g Gen) range_expr(node ast.IndexExpr, range ast.RangeExpr) { g.write('$info.size') } else if sym.kind == .array { if node.left_type.is_ptr() { - g.write('$tmp_left->len') + g.write('$tmp_left->') } else { - g.write('${tmp_left}.len') + g.write('${tmp_left}.') } + g.write('len)') } else { g.write('(') g.expr(node.left)