use comma op to assign temporary

Also make insert_before_stmt work inside a ternary expression.
pull/13737/head
Nick Treleaven 2022-03-15 20:30:53 +00:00
parent 9291180274
commit 168845e7d2
2 changed files with 8 additions and 7 deletions

View File

@ -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)
}

View File

@ -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)