From 7f2f3ef0a6cf004e4920ccfdeb3db53b7e188846 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Sat, 25 Apr 2026 15:28:33 +0300 Subject: [PATCH] all: fix linux tests --- vlib/v/checker/fn.v | 2 +- vlib/v/gen/c/fn.v | 8 +++++++- vlib/v/gen/js/js.v | 3 +++ .../compile_obj_file_and_link_separately/main.v | 3 ++- vlib/v2/ssa/builder.v | 2 +- vlib/v2/types/checker.v | 11 +++++++++++ 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index 295631f40..cd9456a2e 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -2204,7 +2204,7 @@ fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) ast. } if node.kind == .free && func.mod == 'builtin' && args_len == 1 && c.table.cur_fn != unsafe { nil } && c.table.cur_fn.is_method && !c.is_builtin_mod - && !c.inside_recheck { + && c.table.cur_fn.name.all_after_last('.') != 'free' && !c.inside_recheck { if node.args[0].expr is ast.Ident { if node.args[0].expr.name == c.table.cur_fn.receiver.name { receiver_sym := c.table.sym(c.table.cur_fn.receiver.typ) diff --git a/vlib/v/gen/c/fn.v b/vlib/v/gen/c/fn.v index 8dd85e6e8..7d497a3b6 100644 --- a/vlib/v/gen/c/fn.v +++ b/vlib/v/gen/c/fn.v @@ -1856,7 +1856,6 @@ fn (mut g Gen) fn_decl_params(params []ast.Param, scope &ast.Scope, is_variadic } } for i, param in params { - mut caname := if param.name in ['', '_'] { '_d${i + 1}' } else { c_name(param.name) } mut typ := g.unwrap_generic(param.typ) if g.pref.translated && g.file.is_translated && param.typ.has_flag(.variadic) { typ = g.table.sym(typ).array_info().elem_type.set_flag(.variadic) @@ -1885,6 +1884,13 @@ fn (mut g Gen) fn_decl_params(params []ast.Param, scope &ast.Scope, is_variadic typ = typ.ref() } param_type_sym := g.table.sym(typ) + mut caname := if param.name in ['', '_'] { + '_d${i + 1}' + } else if param_type_sym.kind == .function && !typ.has_flag(.option) { + c_fn_name(param.name) + } else { + c_name(param.name) + } mut param_type_name := g.styp(typ) if param.typ.has_flag(.generic) { param_type_name = param_type_name.replace_each(c_fn_name_escape_seq) diff --git a/vlib/v/gen/js/js.v b/vlib/v/gen/js/js.v index d15dba5e0..3b793668d 100644 --- a/vlib/v/gen/js/js.v +++ b/vlib/v/gen/js/js.v @@ -177,6 +177,9 @@ pub fn gen(files []&ast.File, mut table ast.Table, pref_ &pref.Preferences) stri for ty in iface_types { sym := g.table.sym(ty) for method in iface.methods { + if method.name == 'toString' { + continue + } p_sym := g.table.sym(ty) mname := if p_sym.has_method(method.name) { diff --git a/vlib/v/slow_tests/run_project_folders/compile_obj_file_and_link_separately/main.v b/vlib/v/slow_tests/run_project_folders/compile_obj_file_and_link_separately/main.v index 470bc86b0..731b46b20 100644 --- a/vlib/v/slow_tests/run_project_folders/compile_obj_file_and_link_separately/main.v +++ b/vlib/v/slow_tests/run_project_folders/compile_obj_file_and_link_separately/main.v @@ -20,7 +20,8 @@ fn main() { os.chdir(@DIR)! os.rmdir_all(tfolder) or {} os.mkdir_all(tfolder)! - lexec('${vexe} -is_o -o "${tfolder}/abc.o" -gc none -cc ${gcc} abc/') + os.cp_all('abc', os.join_path(tfolder, 'abc'), true)! + lexec('${vexe} -is_o -o "${tfolder}/abc.o" -gc none -cc ${gcc} "${tfolder}/abc/"') lexec('${gcc} -o "${tfolder}/main_in_c.o" -c main_in_c.c') lexec('${gcc} -o "${tfolder}/program.exe" "${tfolder}/abc.o" "${tfolder}/main_in_c.o"') res := lexec('${tfolder}/program.exe') diff --git a/vlib/v2/ssa/builder.v b/vlib/v2/ssa/builder.v index 17d0c821f..2a07d8207 100644 --- a/vlib/v2/ssa/builder.v +++ b/vlib/v2/ssa/builder.v @@ -7556,7 +7556,7 @@ fn (mut b Builder) add_edge(from BlockID, to BlockID) { b.mod.block_add_pred(to, from) } -fn (mut b Builder) get_or_create_fn_ref(name string, typ TypeID) ValueID { +fn (mut b Builder) get_or_create_fn_ref(name string, _typ TypeID) ValueID { if name in b.fn_refs { return b.fn_refs[name] } diff --git a/vlib/v2/types/checker.v b/vlib/v2/types/checker.v index adde971f1..dd9a96bce 100644 --- a/vlib/v2/types/checker.v +++ b/vlib/v2/types/checker.v @@ -1006,6 +1006,17 @@ fn (mut c Checker) check_types(exp_type Type, got_type Type) bool { return false } +fn (c &Checker) resolve_stale_alias(name string) Type { + if obj := c.scope.lookup_parent(name, 0) { + typ := obj.typ() + if typ is Alias { + return typ.base_type + } + return typ + } + return Type(Alias{}) +} + fn (c &Checker) is_string_struct(typ Type) bool { if typ is Struct { return typ.name == 'string' || typ.name.ends_with('__string') -- 2.39.5