From 39bf02ea68c0ffa8d172cb7ae327a80f666afa41 Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Fri, 28 Aug 2020 13:38:07 +0530 Subject: [PATCH] checker: add error for arr1 <,>,>=,<= arr2 (#6243) --- vlib/v/checker/checker.v | 5 +++++ vlib/v/checker/tests/array_cmp_err.out | 26 ++++++++++++++++++++++++++ vlib/v/checker/tests/array_cmp_err.vv | 6 ++++++ 3 files changed, 37 insertions(+) create mode 100644 vlib/v/checker/tests/array_cmp_err.out create mode 100644 vlib/v/checker/tests/array_cmp_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index f351305b4e..725120bb61 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -593,6 +593,11 @@ pub fn (mut c Checker) infix_expr(mut infix_expr ast.InfixExpr) table.Type { return_type = promoted_type } } + .gt, .lt, .ge, .le { + if left.kind in [.array, .array_fixed] && right.kind in [.array, .array_fixed] { + c.error('only `==` and `!=` are defined on arrays', infix_expr.pos) + } + } .left_shift { if left.kind == .array { // `array << elm` diff --git a/vlib/v/checker/tests/array_cmp_err.out b/vlib/v/checker/tests/array_cmp_err.out new file mode 100644 index 0000000000..885a514d9c --- /dev/null +++ b/vlib/v/checker/tests/array_cmp_err.out @@ -0,0 +1,26 @@ +vlib/v/checker/tests/array_cmp_err.vv:2:26: error: only `==` and `!=` are defined on arrays + 1 | fn main() { + 2 | println([2, 3, 4, 6] < [2, 5]) + | ^ + 3 | println([2, 3, 4, 6] > [2, 5]) + 4 | println([2, 3, 1, 6] >= [3, 5, 7]) +vlib/v/checker/tests/array_cmp_err.vv:3:26: error: only `==` and `!=` are defined on arrays + 1 | fn main() { + 2 | println([2, 3, 4, 6] < [2, 5]) + 3 | println([2, 3, 4, 6] > [2, 5]) + | ^ + 4 | println([2, 3, 1, 6] >= [3, 5, 7]) + 5 | println([2, 3, 6, 8] <= [2, 5, 8, 9]) +vlib/v/checker/tests/array_cmp_err.vv:4:26: error: only `==` and `!=` are defined on arrays + 2 | println([2, 3, 4, 6] < [2, 5]) + 3 | println([2, 3, 4, 6] > [2, 5]) + 4 | println([2, 3, 1, 6] >= [3, 5, 7]) + | ~~ + 5 | println([2, 3, 6, 8] <= [2, 5, 8, 9]) + 6 | } +vlib/v/checker/tests/array_cmp_err.vv:5:26: error: only `==` and `!=` are defined on arrays + 3 | println([2, 3, 4, 6] > [2, 5]) + 4 | println([2, 3, 1, 6] >= [3, 5, 7]) + 5 | println([2, 3, 6, 8] <= [2, 5, 8, 9]) + | ~~ + 6 | } diff --git a/vlib/v/checker/tests/array_cmp_err.vv b/vlib/v/checker/tests/array_cmp_err.vv new file mode 100644 index 0000000000..ec60eb90f7 --- /dev/null +++ b/vlib/v/checker/tests/array_cmp_err.vv @@ -0,0 +1,6 @@ +fn main() { + println([2, 3, 4, 6] < [2, 5]) + println([2, 3, 4, 6] > [2, 5]) + println([2, 3, 1, 6] >= [3, 5, 7]) + println([2, 3, 6, 8] <= [2, 5, 8, 9]) +}