From b8f98b7ac706f9b2aaf0dea306feb81297759cf4 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Thu, 18 Jun 2026 20:51:45 +0300 Subject: [PATCH] compiler: avoid debug line C errors --- vlib/v/checker/comptime.v | 45 ++++++++++++++++++++++++--------------- vlib/v/checker/fn.v | 14 ++++++------ vlib/v/gen/c/str_intp.v | 22 ++++++++++--------- 3 files changed, 48 insertions(+), 33 deletions(-) diff --git a/vlib/v/checker/comptime.v b/vlib/v/checker/comptime.v index b3e117bca..dbd07a5b0 100644 --- a/vlib/v/checker/comptime.v +++ b/vlib/v/checker/comptime.v @@ -226,44 +226,55 @@ fn (mut c Checker) eval_comptime_type_selector_value(expr ast.SelectorExpr) ?ast } fn (c &Checker) comptime_expr_needs_multi_pass(expr ast.Expr) bool { - return match expr { + match expr { ast.TypeOf { - true + return true } ast.Ident { - (c.table.cur_fn != unsafe { nil } && expr.name in c.table.cur_fn.generic_names) - || (expr.obj is ast.Var && expr.obj.typ.has_flag(.generic)) - || expr.ct_expr + if c.table.cur_fn != unsafe { nil } && expr.name in c.table.cur_fn.generic_names { + return true + } + if expr.obj is ast.Var && expr.obj.typ.has_flag(.generic) { + return true + } + return expr.ct_expr } ast.SelectorExpr { - expr.expr is ast.TypeOf || (expr.expr is ast.Ident && c.table.cur_fn != unsafe { nil } - && expr.expr.name in c.table.cur_fn.generic_names) - || c.comptime_expr_needs_multi_pass(expr.expr) + if expr.expr is ast.TypeOf { + return true + } + if expr.expr is ast.Ident { + if c.table.cur_fn != unsafe { nil } + && expr.expr.name in c.table.cur_fn.generic_names { + return true + } + } + return c.comptime_expr_needs_multi_pass(expr.expr) } ast.InfixExpr { - c.comptime_expr_needs_multi_pass(expr.left) + return c.comptime_expr_needs_multi_pass(expr.left) || c.comptime_expr_needs_multi_pass(expr.right) } ast.CastExpr { - c.comptime_expr_needs_multi_pass(expr.expr) + return c.comptime_expr_needs_multi_pass(expr.expr) } ast.IndexExpr { - c.comptime_expr_needs_multi_pass(expr.left) + return c.comptime_expr_needs_multi_pass(expr.left) || c.comptime_expr_needs_multi_pass(expr.index) } ast.ParExpr { - c.comptime_expr_needs_multi_pass(expr.expr) + return c.comptime_expr_needs_multi_pass(expr.expr) } ast.PostfixExpr { - c.comptime_expr_needs_multi_pass(expr.expr) + return c.comptime_expr_needs_multi_pass(expr.expr) } ast.PrefixExpr { - c.comptime_expr_needs_multi_pass(expr.right) - } - else { - false + return c.comptime_expr_needs_multi_pass(expr.right) } + else {} } + + return false } fn (mut c Checker) try_eval_comptime_comparison(mut left ast.Expr, mut right ast.Expr, op token.Kind) ?ComptimeComparisonResult { diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index 8f9710832..13db671f5 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -4825,10 +4825,11 @@ fn (mut c Checker) array_builtin_method_call(mut node ast.CallExpr, left_type as } unwrapped_left_type := c.unwrap_generic(left_type) unaliased_left_type := c.table.unaliased_type(unwrapped_left_type) - array_info := if left_sym.info is ast.Array { - left_sym.info as ast.Array + mut array_info := ast.Array{} + if left_sym.info is ast.Array { + array_info = left_sym.info as ast.Array } else { - c.table.sym(unaliased_left_type).info as ast.Array + array_info = c.table.sym(unaliased_left_type).info as ast.Array } elem_typ = array_info.elem_type node_args_len := node.args.len @@ -5224,10 +5225,11 @@ fn (mut c Checker) fixed_array_builtin_method_call(mut node ast.CallExpr, left_t method_name := node.name unwrapped_left_type := c.unwrap_generic(left_type) unaliased_left_type := c.table.unaliased_type(unwrapped_left_type) - array_info := if left_sym.info is ast.ArrayFixed { - left_sym.info as ast.ArrayFixed + mut array_info := ast.ArrayFixed{} + if left_sym.info is ast.ArrayFixed { + array_info = left_sym.info as ast.ArrayFixed } else { - c.table.sym(unaliased_left_type).info as ast.ArrayFixed + array_info = c.table.sym(unaliased_left_type).info as ast.ArrayFixed } node_args_len := node.args.len mut arg0 := if node_args_len > 0 { node.args[0] } else { ast.CallArg{} } diff --git a/vlib/v/gen/c/str_intp.v b/vlib/v/gen/c/str_intp.v index ede1b2f5a..03eb75908 100644 --- a/vlib/v/gen/c/str_intp.v +++ b/vlib/v/gen/c/str_intp.v @@ -82,26 +82,28 @@ fn (g &Gen) int_ref_interpolates_as_value(expr ast.Expr, typ ast.Type, fmt u8) b if g.expr_is_auto_deref_var(expr) { return true } - return match expr { + match expr { ast.Ident { obj := expr.obj match obj { ast.Var { - obj.is_arg || obj.expr is ast.AsCast - || (obj.expr is ast.PrefixExpr && obj.expr.op == .amp) - } - else { - false + if obj.is_arg || obj.expr is ast.AsCast { + return true + } + if obj.expr is ast.PrefixExpr { + return obj.expr.op == .amp + } } + else {} } } ast.PrefixExpr { - expr.op == .amp - } - else { - false + return expr.op == .amp } + else {} } + + return false } fn (mut g Gen) should_resolve_str_intp_expr_type(expr ast.Expr, typ ast.Type) bool { -- 2.39.5