From ee8ef2f10536ddff954382241d94a18571a6a26e Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Fri, 10 Mar 2023 18:52:53 -0300 Subject: [PATCH 1/2] fix --- vlib/v/checker/assign.v | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/vlib/v/checker/assign.v b/vlib/v/checker/assign.v index c0c980a8ab8294..e5fdc797770540 100644 --- a/vlib/v/checker/assign.v +++ b/vlib/v/checker/assign.v @@ -80,10 +80,18 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { c.error('assignment mismatch: ${node.left.len} variable(s) but `${right_first.name}()` returns ${right_len} value(s)', node.pos) } else if right_first is ast.ParExpr { - if right_first.expr is ast.CallExpr { - if right_first.expr.return_type == ast.void_type { - c.error('assignment mismatch: expected ${node.left.len} value(s) but `${right_first.expr.name}()` returns ${right_len} value(s)', - node.pos) + mut right_next := right_first + for { + if right_next.expr is ast.CallExpr { + if (right_next.expr as ast.CallExpr).return_type == ast.void_type { + c.error('assignment mismatch: expected ${node.left.len} value(s) but `${(right_next.expr as ast.CallExpr).name}()` returns ${right_len} value(s)', + node.pos) + } + break + } else if right_next.expr is ast.ParExpr { + right_next = right_next.expr as ast.ParExpr + } else { + break } } } else { From e481ed3c25b42302fcf2fd70f5f999e07dce22a9 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Sat, 11 Mar 2023 11:48:12 +0200 Subject: [PATCH 2/2] add the test case with several layers of () too --- .../tests/par_expr_assign_void_right_type_err.out | 11 ++++++++++- .../tests/par_expr_assign_void_right_type_err.vv | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/vlib/v/checker/tests/par_expr_assign_void_right_type_err.out b/vlib/v/checker/tests/par_expr_assign_void_right_type_err.out index 7e4d140b8393dd..4945afaf0f81b5 100644 --- a/vlib/v/checker/tests/par_expr_assign_void_right_type_err.out +++ b/vlib/v/checker/tests/par_expr_assign_void_right_type_err.out @@ -1,3 +1,12 @@ +vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv:1:6: warning: redundant parentheses are used + 1 | _ := ((((print(10))))) + | ~~~~~~~~~~~~~~~~~ +vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv:1:7: warning: redundant parentheses are used + 1 | _ := ((((print(10))))) + | ~~~~~~~~~~~~~~~ +vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv:1:8: warning: redundant parentheses are used + 1 | _ := ((((print(10))))) + | ~~~~~~~~~~~~~ vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv:1:3: error: assignment mismatch: expected 1 value(s) but `print()` returns 0 value(s) - 1 | _ := (print(10)) + 1 | _ := ((((print(10))))) | ~~ diff --git a/vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv b/vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv index 18d271318c5412..cbea74a8663e0f 100644 --- a/vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv +++ b/vlib/v/checker/tests/par_expr_assign_void_right_type_err.vv @@ -1 +1 @@ -_ := (print(10)) +_ := ((((print(10)))))