From f2f7fc3295789e774ec47dafcd80605703dddeff Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Mon, 29 Apr 2024 07:16:55 -0300 Subject: [PATCH] checker: ignore last semicolon on or-expr (#21361) --- vlib/v/checker/checker.v | 3 ++- vlib/v/tests/last_stmt_semicolon_or_expr_test.v | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/last_stmt_semicolon_or_expr_test.v diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index cdb2b30e6c..82a9538a33 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -1308,7 +1308,8 @@ fn (mut c Checker) check_or_expr(node ast.OrExpr, ret_type ast.Type, expr_return // allow `f() or {}` return } - mut last_stmt := node.stmts.last() + mut valid_stmts := node.stmts.filter(it !is ast.SemicolonStmt) + mut last_stmt := if valid_stmts.len > 0 { valid_stmts.last() } else { node.stmts.last() } c.check_or_last_stmt(mut last_stmt, ret_type, expr_return_type.clear_option_and_result()) } diff --git a/vlib/v/tests/last_stmt_semicolon_or_expr_test.v b/vlib/v/tests/last_stmt_semicolon_or_expr_test.v new file mode 100644 index 0000000000..26c79b77af --- /dev/null +++ b/vlib/v/tests/last_stmt_semicolon_or_expr_test.v @@ -0,0 +1,11 @@ +fn foo() !int { + return 0 +} + +fn test_main() { + mut x := 1 + // vfmt off + x = foo() or { panic("failed"); } + // vfmt on + println('x=${x}') +}