From 37927235cd6769b5c05421e0a8c9542549320a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20Kr=C3=BCger?= <45282134+UweKrueger@users.noreply.github.com> Date: Sat, 20 Jun 2020 14:30:03 +0200 Subject: [PATCH] parser: trigger declaration of array element as error --- vlib/v/checker/tests/array_declare_element_a.out | 5 +++++ vlib/v/checker/tests/array_declare_element_a.vv | 3 +++ vlib/v/checker/tests/array_declare_element_b.out | 6 ++++++ vlib/v/checker/tests/array_declare_element_b.vv | 4 ++++ vlib/v/checker/tests/array_declare_element_c.out | 6 ++++++ vlib/v/checker/tests/array_declare_element_c.vv | 4 ++++ vlib/v/parser/assign.v | 3 +++ 7 files changed, 31 insertions(+) create mode 100644 vlib/v/checker/tests/array_declare_element_a.out create mode 100644 vlib/v/checker/tests/array_declare_element_a.vv create mode 100644 vlib/v/checker/tests/array_declare_element_b.out create mode 100644 vlib/v/checker/tests/array_declare_element_b.vv create mode 100644 vlib/v/checker/tests/array_declare_element_c.out create mode 100644 vlib/v/checker/tests/array_declare_element_c.vv diff --git a/vlib/v/checker/tests/array_declare_element_a.out b/vlib/v/checker/tests/array_declare_element_a.out new file mode 100644 index 0000000000..5b51a6a338 --- /dev/null +++ b/vlib/v/checker/tests/array_declare_element_a.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/array_declare_element_a.v:2:9: error: non-name `arr[0]` on left side of `:=` + 1 | fn main() { + 2 | arr[0] := 2 + | ~~ + 3 | } diff --git a/vlib/v/checker/tests/array_declare_element_a.vv b/vlib/v/checker/tests/array_declare_element_a.vv new file mode 100644 index 0000000000..ac074987fd --- /dev/null +++ b/vlib/v/checker/tests/array_declare_element_a.vv @@ -0,0 +1,3 @@ +fn main() { + arr[0] := 2 +} diff --git a/vlib/v/checker/tests/array_declare_element_b.out b/vlib/v/checker/tests/array_declare_element_b.out new file mode 100644 index 0000000000..e603d3dcf7 --- /dev/null +++ b/vlib/v/checker/tests/array_declare_element_b.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/array_declare_element_b.v:3:9: error: non-name `arr[1]` on left side of `:=` + 1 | fn main() { + 2 | arr := [1, 2] + 3 | arr[1] := 1 + | ~~ + 4 | } diff --git a/vlib/v/checker/tests/array_declare_element_b.vv b/vlib/v/checker/tests/array_declare_element_b.vv new file mode 100644 index 0000000000..a87a0e575a --- /dev/null +++ b/vlib/v/checker/tests/array_declare_element_b.vv @@ -0,0 +1,4 @@ +fn main() { + arr := [1, 2] + arr[1] := 1 +} diff --git a/vlib/v/checker/tests/array_declare_element_c.out b/vlib/v/checker/tests/array_declare_element_c.out new file mode 100644 index 0000000000..237da0682b --- /dev/null +++ b/vlib/v/checker/tests/array_declare_element_c.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/array_declare_element_c.v:3:12: error: non-name `arr[1][0]` on left side of `:=` + 1 | fn main() { + 2 | arr := [[1, 2], [0, 3]] + 3 | arr[1][0] := 1 + | ~~ + 4 | } diff --git a/vlib/v/checker/tests/array_declare_element_c.vv b/vlib/v/checker/tests/array_declare_element_c.vv new file mode 100644 index 0000000000..aacad5550d --- /dev/null +++ b/vlib/v/checker/tests/array_declare_element_c.vv @@ -0,0 +1,4 @@ +fn main() { + arr := [[1, 2], [0, 3]] + arr[1][0] := 1 +} diff --git a/vlib/v/parser/assign.v b/vlib/v/parser/assign.v index 9a817796b1..e7727856eb 100644 --- a/vlib/v/parser/assign.v +++ b/vlib/v/parser/assign.v @@ -111,6 +111,9 @@ fn (mut p Parser) partial_assign_stmt(left []ast.Expr) ast.Stmt { } } ast.IndexExpr { + if op == .decl_assign { + p.error_with_pos('non-name `$lx.left[$lx.index]` on left side of `:=`', lx.pos) + } lx.is_setter = true } ast.ParExpr {}