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 {}