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