From fe618a500b52bc876707235c5972eaf27f66a810 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Tue, 11 Mar 2025 13:28:04 +0200 Subject: [PATCH] cgen: improve the stability of generated code for auto string methods --- vlib/v/gen/c/auto_str_methods.v | 5 ++++- vlib/v/gen/c/cgen.v | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/vlib/v/gen/c/auto_str_methods.v b/vlib/v/gen/c/auto_str_methods.v index 105f20938d..f0bd0cfc35 100644 --- a/vlib/v/gen/c/auto_str_methods.v +++ b/vlib/v/gen/c/auto_str_methods.v @@ -284,6 +284,8 @@ fn (mut g Gen) gen_str_for_alias(info ast.Alias, styp string, str_fn_name string g.auto_str_funcs.writeln('${g.static_non_parallel}string ${str_fn_name}(${arg_def}) { return indent_${str_fn_name}(it, 0); }') g.definitions.writeln('${g.static_non_parallel}string indent_${str_fn_name}(${arg_def}, int indent_count); // auto') g.auto_str_funcs.writeln('${g.static_non_parallel}string indent_${str_fn_name}(${arg_def}, int indent_count) {') + old := g.reset_tmp_count() + defer { g.tmp_count = old } g.auto_str_funcs.writeln('\tstring indents = string_repeat(_SLIT(" "), indent_count);') if str_method_expects_ptr { it_arg := if is_c_struct { 'it' } else { '&it' } @@ -954,7 +956,8 @@ fn (mut g Gen) gen_str_for_struct(info ast.Struct, lang ast.Language, styp strin g.auto_fn_definitions << fn_builder.str() } fn_builder.writeln('string indent_${str_fn_name}(${arg_def}, int indent_count) {') - + old := g.reset_tmp_count() + defer { g.tmp_count = old } clean_struct_v_type_name := if info.is_anon { 'struct ' } else { util.strip_main_name(typ_str) } // generate ident / indent length = 4 spaces if info.fields.len == 0 { diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 765c7b0641..78c619d48a 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -2024,8 +2024,10 @@ pub fn (mut g Gen) current_tmp_var() string { return prefix_with_counter('_t', g.tmp_count) } -pub fn (mut g Gen) reset_tmp_count() { +pub fn (mut g Gen) reset_tmp_count() int { + old := g.tmp_count g.tmp_count = 0 + return old } fn (mut g Gen) decrement_inside_ternary() {