From b4af04259d24716c2e9cd8226ac0655751df2249 Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Thu, 31 Mar 2022 21:40:02 +0200 Subject: [PATCH] checker: improve the method searching in the generic types Signed-off-by: Vincenzo Palazzo --- vlib/rand/rand.v | 3 ++- vlib/v/checker/checker.v | 6 ++++-- vlib/v/checker/tests/generic_type_inference.out | 0 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 vlib/v/checker/tests/generic_type_inference.out diff --git a/vlib/rand/rand.v b/vlib/rand/rand.v index 15ac15c013..ab7ccae57d 100644 --- a/vlib/rand/rand.v +++ b/vlib/rand/rand.v @@ -327,7 +327,8 @@ pub fn (mut rng PRNG) choose(array []T, k int) ?[]T { } mut results := []T{len: k} mut indices := []int{len: n, init: it} - rng.shuffle(mut indices) ? + // enfoce the type to int to avoid ambiguity + rng.shuffle(mut indices) ? for i in 0 .. k { results[i] = array[indices[i]] } diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index f7a3c6d734..2f82ed82a4 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -823,10 +823,12 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { left_gen_type := c.unwrap_generic(left_type) gen_sym := c.table.sym(left_gen_type) need_overload := gen_sym.kind in [.struct_, .interface_] - if need_overload && !gen_sym.has_method('<') && node.op in [.ge, .le] { + if need_overload && !gen_sym.has_method_with_generic_parent('<') + && node.op in [.ge, .le] { c.error('cannot use `$node.op` as `<` operator method is not defined', left_right_pos) - } else if need_overload && !gen_sym.has_method('<') && node.op == .gt { + } else if need_overload && !gen_sym.has_method_with_generic_parent('<') + && node.op == .gt { c.error('cannot use `>` as `<=` operator method is not defined', left_right_pos) } } else if left_type in ast.integer_type_idxs && right_type in ast.integer_type_idxs { diff --git a/vlib/v/checker/tests/generic_type_inference.out b/vlib/v/checker/tests/generic_type_inference.out new file mode 100644 index 0000000000..e69de29bb2