1 | } |
2 | } |
3 | tmp_var := g.new_tmp_var() |
4 | + is_opt_or_result := node.typ.has_flag(.option) || node.typ.has_flag(.result) |
5 | line := if node.is_expr { |
6 | stmt_str := g.go_before_stmt(0) |
7 | g.write(util.tabs(g.indent)) |
8 | g.set_current_pos_as_last_stmt_pos() |
9 | prev_skip_stmt_pos := g.skip_stmt_pos |
10 | g.skip_stmt_pos = true |
11 | - g.write('\t${tmp_var} = ') |
12 | - g.stmt(last) |
13 | + if is_opt_or_result { |
14 | + tmp_var2 := g.new_tmp_var() |
15 | + g.write('{ ${g.base_type(node.typ)} ${tmp_var2} = ') |
16 | + g.stmt(last) |
17 | + g.writeln('_result_ok(&(${g.base_type(node.typ)}[]) { ${tmp_var2} }, (_result*)(&${tmp_var}), sizeof(${g.base_type(node.typ)}));') |
18 | + g.writeln('}') |
19 | + } else { |
20 | + g.write('\t${tmp_var} = ') |
21 | + g.stmt(last) |
22 | + } |
23 | g.skip_stmt_pos = prev_skip_stmt_pos |
24 | g.writeln(';') |
25 | g.writeln('}') |
26 | g.set_current_pos_as_last_stmt_pos() |
27 | prev_skip_stmt_pos := g.skip_stmt_pos |
28 | g.skip_stmt_pos = true |
29 | - g.write('${tmp_var} = ') |
30 | - g.stmt(last) |
31 | + if is_opt_or_result { |
32 | + tmp_var2 := g.new_tmp_var() |
33 | + g.write('{ ${g.base_type(node.typ)} ${tmp_var2} = ') |
34 | + g.stmt(last) |
35 | + g.writeln('_result_ok(&(${g.base_type(node.typ)}[]) { ${tmp_var2} }, (_result*)(&${tmp_var}), sizeof(${g.base_type(node.typ)}));') |
36 | + g.writeln('}') |
37 | + } else { |
38 | + g.write('${tmp_var} = ') |
39 | + g.stmt(last) |
40 | + } |
41 | g.skip_stmt_pos = prev_skip_stmt_pos |
42 | g.writeln(';') |
43 | g.indent-- |
44 | |