From 1dc5d36724a796d8bbfb8192633a89cf00975b5b Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Tue, 30 Jan 2024 22:33:26 +0530 Subject: [PATCH] checker: disallow `(x) := 10` (#20695) --- vlib/v/checker/assign.v | 5 +++++ vlib/v/checker/tests/par_expr_decl_assign_err.out | 5 +++++ vlib/v/checker/tests/par_expr_decl_assign_err.vv | 3 +++ vlib/v/checker/tests/prefix_expr_decl_assign_err.out | 6 ++++++ 4 files changed, 19 insertions(+) create mode 100644 vlib/v/checker/tests/par_expr_decl_assign_err.out create mode 100644 vlib/v/checker/tests/par_expr_decl_assign_err.vv diff --git a/vlib/v/checker/assign.v b/vlib/v/checker/assign.v index 724ce57aa..28b3241ec 100644 --- a/vlib/v/checker/assign.v +++ b/vlib/v/checker/assign.v @@ -267,6 +267,11 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { } } node.left_types << left_type + + if left is ast.ParExpr && is_decl { + c.error('parentheses are not supported on the left side of `:=`', left.pos()) + } + for left is ast.ParExpr { left = (left as ast.ParExpr).expr } diff --git a/vlib/v/checker/tests/par_expr_decl_assign_err.out b/vlib/v/checker/tests/par_expr_decl_assign_err.out new file mode 100644 index 000000000..d77ba2cd3 --- /dev/null +++ b/vlib/v/checker/tests/par_expr_decl_assign_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/par_expr_decl_assign_err.vv:2:2: error: parentheses are not supported on the left side of `:=` + 1 | fn main() { + 2 | (x) := 5 + | ~~~ + 3 | } diff --git a/vlib/v/checker/tests/par_expr_decl_assign_err.vv b/vlib/v/checker/tests/par_expr_decl_assign_err.vv new file mode 100644 index 000000000..c122faa14 --- /dev/null +++ b/vlib/v/checker/tests/par_expr_decl_assign_err.vv @@ -0,0 +1,3 @@ +fn main() { + (x) := 5 +} diff --git a/vlib/v/checker/tests/prefix_expr_decl_assign_err.out b/vlib/v/checker/tests/prefix_expr_decl_assign_err.out index 1842eb032..17eab3890 100644 --- a/vlib/v/checker/tests/prefix_expr_decl_assign_err.out +++ b/vlib/v/checker/tests/prefix_expr_decl_assign_err.out @@ -10,6 +10,12 @@ vlib/v/checker/tests/prefix_expr_decl_assign_err.vv:2:5: error: non-name on the | ^ 3 | (*d) := 14 4 | } +vlib/v/checker/tests/prefix_expr_decl_assign_err.vv:3:5: error: parentheses are not supported on the left side of `:=` + 1 | fn main() { + 2 | &a := 12 + 3 | (*d) := 14 + | ~~~~ + 4 | } vlib/v/checker/tests/prefix_expr_decl_assign_err.vv:3:10: error: modifying variables via dereferencing can only be done in `unsafe` blocks 1 | fn main() { 2 | &a := 12 -- 2.39.5