cgen: cleanup stmt_path_pos processing (#11983)
parent
d93737dd34
commit
4c01627e00
|
@ -172,7 +172,7 @@ fn (mut g Gen) gen_array_map(node ast.CallExpr) {
|
||||||
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
||||||
g.indent++
|
g.indent++
|
||||||
g.writeln('$inp_elem_type it = (($inp_elem_type*) ${tmp}_orig.data)[$i];')
|
g.writeln('$inp_elem_type it = (($inp_elem_type*) ${tmp}_orig.data)[$i];')
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
mut is_embed_map_filter := false
|
mut is_embed_map_filter := false
|
||||||
mut expr := node.args[0].expr
|
mut expr := node.args[0].expr
|
||||||
match mut expr {
|
match mut expr {
|
||||||
|
@ -200,7 +200,7 @@ fn (mut g Gen) gen_array_map(node ast.CallExpr) {
|
||||||
ast.CallExpr {
|
ast.CallExpr {
|
||||||
if expr.name in ['map', 'filter', 'all', 'any'] {
|
if expr.name in ['map', 'filter', 'all', 'any'] {
|
||||||
is_embed_map_filter = true
|
is_embed_map_filter = true
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
g.write('$ret_elem_type ti = ')
|
g.write('$ret_elem_type ti = ')
|
||||||
g.expr(node.args[0].expr)
|
g.expr(node.args[0].expr)
|
||||||
|
@ -215,7 +215,7 @@ fn (mut g Gen) gen_array_map(node ast.CallExpr) {
|
||||||
g.indent--
|
g.indent--
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
if !is_embed_map_filter {
|
if !is_embed_map_filter {
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
if has_infix_left_var_name {
|
if has_infix_left_var_name {
|
||||||
g.indent--
|
g.indent--
|
||||||
|
@ -365,7 +365,7 @@ fn (mut g Gen) gen_array_filter(node ast.CallExpr) {
|
||||||
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
||||||
g.indent++
|
g.indent++
|
||||||
g.writeln('$elem_type_str it = (($elem_type_str*) ${tmp}_orig.data)[$i];')
|
g.writeln('$elem_type_str it = (($elem_type_str*) ${tmp}_orig.data)[$i];')
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
mut is_embed_map_filter := false
|
mut is_embed_map_filter := false
|
||||||
mut expr := node.args[0].expr
|
mut expr := node.args[0].expr
|
||||||
match mut expr {
|
match mut expr {
|
||||||
|
@ -393,7 +393,7 @@ fn (mut g Gen) gen_array_filter(node ast.CallExpr) {
|
||||||
ast.CallExpr {
|
ast.CallExpr {
|
||||||
if expr.name in ['map', 'filter', 'all', 'any'] {
|
if expr.name in ['map', 'filter', 'all', 'any'] {
|
||||||
is_embed_map_filter = true
|
is_embed_map_filter = true
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
g.write('if (')
|
g.write('if (')
|
||||||
g.expr(node.args[0].expr)
|
g.expr(node.args[0].expr)
|
||||||
|
@ -409,7 +409,7 @@ fn (mut g Gen) gen_array_filter(node ast.CallExpr) {
|
||||||
g.indent--
|
g.indent--
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
if !is_embed_map_filter {
|
if !is_embed_map_filter {
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
if has_infix_left_var_name {
|
if has_infix_left_var_name {
|
||||||
g.indent--
|
g.indent--
|
||||||
|
@ -658,7 +658,7 @@ fn (mut g Gen) gen_array_any(node ast.CallExpr) {
|
||||||
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
g.writeln('for (int $i = 0; $i < ${tmp}_len; ++$i) {')
|
||||||
g.indent++
|
g.indent++
|
||||||
g.writeln('$elem_type_str it = (($elem_type_str*) ${tmp}_orig.data)[$i];')
|
g.writeln('$elem_type_str it = (($elem_type_str*) ${tmp}_orig.data)[$i];')
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
mut is_embed_map_filter := false
|
mut is_embed_map_filter := false
|
||||||
mut expr := node.args[0].expr
|
mut expr := node.args[0].expr
|
||||||
match mut expr {
|
match mut expr {
|
||||||
|
@ -686,7 +686,7 @@ fn (mut g Gen) gen_array_any(node ast.CallExpr) {
|
||||||
ast.CallExpr {
|
ast.CallExpr {
|
||||||
if expr.name in ['map', 'filter', 'all', 'any'] {
|
if expr.name in ['map', 'filter', 'all', 'any'] {
|
||||||
is_embed_map_filter = true
|
is_embed_map_filter = true
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
g.write('if (')
|
g.write('if (')
|
||||||
g.expr(node.args[0].expr)
|
g.expr(node.args[0].expr)
|
||||||
|
@ -703,7 +703,7 @@ fn (mut g Gen) gen_array_any(node ast.CallExpr) {
|
||||||
g.indent--
|
g.indent--
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
if !is_embed_map_filter {
|
if !is_embed_map_filter {
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
if has_infix_left_var_name {
|
if has_infix_left_var_name {
|
||||||
g.indent--
|
g.indent--
|
||||||
|
@ -743,7 +743,7 @@ fn (mut g Gen) gen_array_all(node ast.CallExpr) {
|
||||||
g.indent++
|
g.indent++
|
||||||
g.writeln('$elem_type_str it = (($elem_type_str*) ${tmp}_orig.data)[$i];')
|
g.writeln('$elem_type_str it = (($elem_type_str*) ${tmp}_orig.data)[$i];')
|
||||||
g.empty_line = true
|
g.empty_line = true
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
mut is_embed_map_filter := false
|
mut is_embed_map_filter := false
|
||||||
mut expr := node.args[0].expr
|
mut expr := node.args[0].expr
|
||||||
match mut expr {
|
match mut expr {
|
||||||
|
@ -771,7 +771,7 @@ fn (mut g Gen) gen_array_all(node ast.CallExpr) {
|
||||||
ast.CallExpr {
|
ast.CallExpr {
|
||||||
if expr.name in ['map', 'filter', 'all', 'any'] {
|
if expr.name in ['map', 'filter', 'all', 'any'] {
|
||||||
is_embed_map_filter = true
|
is_embed_map_filter = true
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
g.write('if (!(')
|
g.write('if (!(')
|
||||||
g.expr(node.args[0].expr)
|
g.expr(node.args[0].expr)
|
||||||
|
@ -788,7 +788,7 @@ fn (mut g Gen) gen_array_all(node ast.CallExpr) {
|
||||||
g.indent--
|
g.indent--
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
if !is_embed_map_filter {
|
if !is_embed_map_filter {
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
if has_infix_left_var_name {
|
if has_infix_left_var_name {
|
||||||
g.indent--
|
g.indent--
|
||||||
|
|
|
@ -1106,7 +1106,7 @@ fn (mut g Gen) stmts_with_tmp_var(stmts []ast.Stmt, tmp_var string) {
|
||||||
if i == stmts.len - 1 && tmp_var != '' {
|
if i == stmts.len - 1 && tmp_var != '' {
|
||||||
// Handle if expressions, set the value of the last expression to the temp var.
|
// Handle if expressions, set the value of the last expression to the temp var.
|
||||||
if g.inside_if_optional {
|
if g.inside_if_optional {
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
g.skip_stmt_pos = true
|
g.skip_stmt_pos = true
|
||||||
if stmt is ast.ExprStmt {
|
if stmt is ast.ExprStmt {
|
||||||
if stmt.typ == ast.error_type_idx || stmt.expr is ast.None {
|
if stmt.typ == ast.error_type_idx || stmt.expr is ast.None {
|
||||||
|
@ -1129,7 +1129,7 @@ fn (mut g Gen) stmts_with_tmp_var(stmts []ast.Stmt, tmp_var string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
g.skip_stmt_pos = true
|
g.skip_stmt_pos = true
|
||||||
mut is_noreturn := false
|
mut is_noreturn := false
|
||||||
if stmt is ast.ExprStmt {
|
if stmt is ast.ExprStmt {
|
||||||
|
@ -1204,7 +1204,7 @@ fn (mut g Gen) write_v_source_line_info(pos token.Position) {
|
||||||
|
|
||||||
fn (mut g Gen) stmt(node ast.Stmt) {
|
fn (mut g Gen) stmt(node ast.Stmt) {
|
||||||
if !g.skip_stmt_pos {
|
if !g.skip_stmt_pos {
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
defer {
|
defer {
|
||||||
}
|
}
|
||||||
|
@ -1665,7 +1665,7 @@ fn (mut g Gen) for_stmt(node ast.ForStmt) {
|
||||||
g.writeln('for (;;) {')
|
g.writeln('for (;;) {')
|
||||||
if !node.is_inf {
|
if !node.is_inf {
|
||||||
g.indent++
|
g.indent++
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
g.write('if (!(')
|
g.write('if (!(')
|
||||||
g.expr(node.cond)
|
g.expr(node.cond)
|
||||||
g.writeln(')) break;')
|
g.writeln(')) break;')
|
||||||
|
@ -4039,7 +4039,7 @@ fn (mut g Gen) match_expr(node ast.MatchExpr) {
|
||||||
g.write('${g.typ(node.cond_type)} $cond_var = ')
|
g.write('${g.typ(node.cond_type)} $cond_var = ')
|
||||||
g.expr(node.cond)
|
g.expr(node.cond)
|
||||||
g.writeln(';')
|
g.writeln(';')
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
g.write(line)
|
g.write(line)
|
||||||
}
|
}
|
||||||
if need_tmp_var {
|
if need_tmp_var {
|
||||||
|
@ -4131,7 +4131,7 @@ fn (mut g Gen) match_expr_sumtype(node ast.MatchExpr, is_expr bool, cond_var str
|
||||||
g.expected_cast_type = 0
|
g.expected_cast_type = 0
|
||||||
if g.inside_ternary == 0 {
|
if g.inside_ternary == 0 {
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
sumtype_index++
|
sumtype_index++
|
||||||
if branch.exprs.len == 0 || sumtype_index == branch.exprs.len {
|
if branch.exprs.len == 0 || sumtype_index == branch.exprs.len {
|
||||||
|
@ -4807,7 +4807,7 @@ fn (mut g Gen) if_expr(node ast.IfExpr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
if needs_tmp_var {
|
if needs_tmp_var {
|
||||||
if g.infix_left_var_name.len > 0 {
|
if g.infix_left_var_name.len > 0 {
|
||||||
g.indent--
|
g.indent--
|
||||||
|
@ -5996,6 +5996,11 @@ fn (g &Gen) nth_stmt_pos(n int) int {
|
||||||
return g.stmt_path_pos[g.stmt_path_pos.len - (1 + n)]
|
return g.stmt_path_pos[g.stmt_path_pos.len - (1 + n)]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[inline]
|
||||||
|
fn (mut g Gen) set_current_pos_as_last_stmt_pos() {
|
||||||
|
g.stmt_path_pos << g.out.len
|
||||||
|
}
|
||||||
|
|
||||||
fn (mut g Gen) go_before_stmt(n int) string {
|
fn (mut g Gen) go_before_stmt(n int) string {
|
||||||
stmt_pos := g.nth_stmt_pos(n)
|
stmt_pos := g.nth_stmt_pos(n)
|
||||||
return g.out.cut_to(stmt_pos)
|
return g.out.cut_to(stmt_pos)
|
||||||
|
@ -6052,7 +6057,7 @@ fn (mut g Gen) or_block(var_name string, or_block ast.OrExpr, return_type ast.Ty
|
||||||
for i, stmt in stmts {
|
for i, stmt in stmts {
|
||||||
if i == stmts.len - 1 {
|
if i == stmts.len - 1 {
|
||||||
expr_stmt := stmt as ast.ExprStmt
|
expr_stmt := stmt as ast.ExprStmt
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
g.write('*($mr_styp*) ${cvar_name}.data = ')
|
g.write('*($mr_styp*) ${cvar_name}.data = ')
|
||||||
old_inside_opt_data := g.inside_opt_data
|
old_inside_opt_data := g.inside_opt_data
|
||||||
g.inside_opt_data = true
|
g.inside_opt_data = true
|
||||||
|
@ -6103,7 +6108,7 @@ fn (mut g Gen) or_block(var_name string, or_block ast.OrExpr, return_type ast.Ty
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g.writeln('}')
|
g.writeln('}')
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
}
|
}
|
||||||
|
|
||||||
[inline]
|
[inline]
|
||||||
|
|
|
@ -656,7 +656,7 @@ fn (mut g Gen) infix_expr_and_or_op(node ast.InfixExpr) {
|
||||||
g.write('bool $tmp = (')
|
g.write('bool $tmp = (')
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
g.writeln(');')
|
g.writeln(');')
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
g.write('$cur_line $tmp $node.op.str() ')
|
g.write('$cur_line $tmp $node.op.str() ')
|
||||||
g.infix_left_var_name = if node.op == .and { tmp } else { '!$tmp' }
|
g.infix_left_var_name = if node.op == .and { tmp } else { '!$tmp' }
|
||||||
g.expr(node.right)
|
g.expr(node.right)
|
||||||
|
@ -677,7 +677,7 @@ fn (mut g Gen) infix_expr_and_or_op(node ast.InfixExpr) {
|
||||||
}
|
}
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
g.writeln(');')
|
g.writeln(');')
|
||||||
g.stmt_path_pos << g.out.len
|
g.set_current_pos_as_last_stmt_pos()
|
||||||
g.write('$cur_line $tmp $node.op.str() ')
|
g.write('$cur_line $tmp $node.op.str() ')
|
||||||
g.infix_left_var_name = if node.op == .and { tmp } else { '!$tmp' }
|
g.infix_left_var_name = if node.op == .and { tmp } else { '!$tmp' }
|
||||||
g.expr(node.right)
|
g.expr(node.right)
|
||||||
|
|
Loading…
Reference in New Issue