From 01d07aba9c1937f5039af8b3ff3717a0a142d9a4 Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Thu, 31 Mar 2022 22:17:43 +0200 Subject: [PATCH] checker: fixes cast comparison between generics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR introduce the error in the cast comparison when generics are used. This is an example of stacktrace ``` ➜ v git:(macros/generic_cast) ✗ ./v vlib/v/checker/tests/generic_cast_complex_interface.vv vlib/v/checker/tests/generic_cast_complex_interface.vv:29:10: error: cannot cast `Some` to `Token, ParseErr>` 27 | match r { 28 | Some { 29 | rx := Result<[]Token, ParseErr>(r) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 | println(rx) 31 | } ``` Signed-off-by: Vincenzo Palazzo --- .../tests/generic_cast_complex_interface.vv | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 vlib/v/checker/tests/generic_cast_complex_interface.vv diff --git a/vlib/v/checker/tests/generic_cast_complex_interface.vv b/vlib/v/checker/tests/generic_cast_complex_interface.vv new file mode 100644 index 0000000000..1c640ec283 --- /dev/null +++ b/vlib/v/checker/tests/generic_cast_complex_interface.vv @@ -0,0 +1,34 @@ +type ParseRes = Result<[]Token, ParseErr> + +struct ParseErr{ + +} + +type Opt = None | Some + +struct None {} + +struct Some { + value T +} + +type Result = Err | Ok + +struct Ok { + value T +} + +struct Err { + value U +} + +fn main() { + r := Opt(None{}) + match r { + Some { + rx := Result<[]Token, ParseErr>(r) + println(rx) + } + None {} + } +}