From 8d63db9731180848c7aacfee1a0c8e15b22123bc Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Thu, 31 Mar 2022 18:47:07 +0200 Subject: [PATCH] checker: type inference over a generic type should compile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit introduce the code to produce the error reported in the issue In fact the error that is produced is the following one ``` ➜ v git:(master) ./v vlib/v/checker/tests/generic_type_inference.vv vlib/v/checker/tests/generic_type_inference.vv:19:13: error: inferred generic type `T` is ambiguous: got `KeyVal`, expected `int` 17 | fn main() { 18 | mut bst := datatypes.BSTree>{} 19 | bst.insert(KeyVal{key: "alibaba", val: 12}) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 20 | println(bst.in_order_traversals()) 21 | } vlib/v/checker/tests/generic_type_inference.vv:20:14: error: unknown method or field: `datatypes.BSTree>.in_order_traversals` 18 | mut bst := datatypes.BSTree>{} 19 | bst.insert(KeyVal{key: "alibaba", val: 12}) 20 | println(bst.in_order_traversals()) | ~~~~~~~~~~~~~~~~~~~~~ 21 | } vlib/datatypes/bstree.v:84:17: error: cannot use `>` as `<=` operator method is not defined 82 | node.right = new_node(node, value) 83 | return true 84 | } else if node.value > value { | ~~~~~~~~~~~~~ 85 | if node.left != 0 && node.left.is_init { 86 | return bst.insert_helper(mut node.left, value) vlib/datatypes/bstree.v:107:17: error: cannot use `>` as `<=` operator method is not defined 105 | if node.value < value { 106 | return bst.contains_helper(node.right, value) 107 | } else if node.value > value { | ~~~~~~~~~~~~~ 108 | return bst.contains_helper(node.left, value) 109 | } ``` Signed-off-by: Vincenzo Palazzo --- .../v/checker/tests/generic_type_inference.vv | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 vlib/v/checker/tests/generic_type_inference.vv diff --git a/vlib/v/checker/tests/generic_type_inference.vv b/vlib/v/checker/tests/generic_type_inference.vv new file mode 100644 index 0000000000..2226377332 --- /dev/null +++ b/vlib/v/checker/tests/generic_type_inference.vv @@ -0,0 +1,21 @@ +import datatypes + +struct KeyVal { +mut: + key string + val T +} + +fn (a KeyVal) == (b KeyVal) bool { + return a.key == b.key +} + +fn (a KeyVal) < (b KeyVal) bool { + return a.key < b.key +} + +fn main() { + mut bst := datatypes.BSTree>{} + bst.insert(KeyVal{key: "alibaba", val: 12}) + println(bst.in_order_traversal()) +}