From c7b8da7ffe21fb21f60c6feb7b683dee0ed9eadf Mon Sep 17 00:00:00 2001 From: yuyi Date: Mon, 8 Jan 2024 18:41:11 +0800 Subject: [PATCH] checker: fix lambda expr with result (#20433) --- vlib/v/checker/lambda_expr.v | 2 +- vlib/v/tests/lambda_expr_with_result_test.v | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/lambda_expr_with_result_test.v diff --git a/vlib/v/checker/lambda_expr.v b/vlib/v/checker/lambda_expr.v index 31d968b087b2f8..122d4c94701107 100644 --- a/vlib/v/checker/lambda_expr.v +++ b/vlib/v/checker/lambda_expr.v @@ -63,7 +63,7 @@ pub fn (mut c Checker) lambda_expr(mut node ast.LambdaExpr, exp_typ ast.Type) as mut stmts := []ast.Stmt{} mut has_return := false - if return_type == ast.void_type { + if return_type.clear_flags(.option, .result) == ast.void_type { stmts << ast.ExprStmt{ pos: node.pos expr: node.expr diff --git a/vlib/v/tests/lambda_expr_with_result_test.v b/vlib/v/tests/lambda_expr_with_result_test.v new file mode 100644 index 00000000000000..890f883f89099d --- /dev/null +++ b/vlib/v/tests/lambda_expr_with_result_test.v @@ -0,0 +1,8 @@ +fn test_lambda_expr_with_result() { + take_lambda(|| println('abc')) + assert true +} + +fn take_lambda(l fn () !) { + l() or { panic(err) } +}