From bffbc9a10fe2fd1a072f38feb524f09ccedbd0f4 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Thu, 6 Feb 2025 08:56:40 -0300 Subject: [PATCH 1/3] fix --- vlib/v/checker/checker.v | 3 +-- .../checker/tests/sumtype_variant_mismatch.out | 18 ++++++++++++++++++ .../checker/tests/sumtype_variant_mismatch.vv | 10 ++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 vlib/v/checker/tests/sumtype_variant_mismatch.out create mode 100644 vlib/v/checker/tests/sumtype_variant_mismatch.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 7a7f9d5cf36fa6..db5f2a305a9500 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -3402,8 +3402,7 @@ fn (mut c Checker) cast_expr(mut node ast.CastExpr) ast.Type { node.expr_type = c.promote_num(node.expr_type, xx) from_type = node.expr_type } - if !c.table.sumtype_has_variant(to_type, from_type, false) && !to_type.has_flag(.option) - && !to_type.has_flag(.result) { + if !c.table.sumtype_has_variant(to_type, from_type, false) { ft := c.table.type_to_str(from_type) tt := c.table.type_to_str(to_type) c.error('cannot cast `${ft}` to `${tt}`', node.pos) diff --git a/vlib/v/checker/tests/sumtype_variant_mismatch.out b/vlib/v/checker/tests/sumtype_variant_mismatch.out new file mode 100644 index 00000000000000..4bbdc22de2460a --- /dev/null +++ b/vlib/v/checker/tests/sumtype_variant_mismatch.out @@ -0,0 +1,18 @@ +vlib/v/checker/tests/sumtype_variant_mismatch.vv:4:7: error: cannot cast `?string` to `?Any` + 2 | type Any2 = ?int | ?string + 3 | + 4 | _ := ?Any(?string('baz')) + | ~~~~~~~~~~~~~~~~~~~ + 5 | _ := ?Any(string('baz')) + 6 | _ := ?Any('baz') +vlib/v/checker/tests/sumtype_variant_mismatch.vv:10:7: error: cannot cast `string` to `?Any2` + 8 | + 9 | _ := ?Any2(?string('baz')) + 10 | _ := ?Any2(string('baz')) + | ~~~~~~~~~~~~~~~~~~~ + 11 | _ := ?Any2('baz') +vlib/v/checker/tests/sumtype_variant_mismatch.vv:11:7: error: cannot cast `string` to `?Any2` + 9 | _ := ?Any2(?string('baz')) + 10 | _ := ?Any2(string('baz')) + 11 | _ := ?Any2('baz') + | ~~~~~~~~~~~ diff --git a/vlib/v/checker/tests/sumtype_variant_mismatch.vv b/vlib/v/checker/tests/sumtype_variant_mismatch.vv new file mode 100644 index 00000000000000..946824755284b0 --- /dev/null +++ b/vlib/v/checker/tests/sumtype_variant_mismatch.vv @@ -0,0 +1,10 @@ +type Any = ?int | string +type Any2 = ?int | ?string + +_ := ?Any(?string('baz')) +_ := ?Any(string('baz')) +_ := ?Any('baz') + +_ := ?Any2(?string('baz')) +_ := ?Any2(string('baz')) +_ := ?Any2('baz') From 7431890bcee8777598ef3e159ab7a2f257c3e5b4 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Thu, 6 Feb 2025 09:05:50 -0300 Subject: [PATCH 2/3] fmt --- .../checker/tests/sumtype_variant_mismatch.out | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/vlib/v/checker/tests/sumtype_variant_mismatch.out b/vlib/v/checker/tests/sumtype_variant_mismatch.out index 4bbdc22de2460a..82a21a7eef8548 100644 --- a/vlib/v/checker/tests/sumtype_variant_mismatch.out +++ b/vlib/v/checker/tests/sumtype_variant_mismatch.out @@ -5,14 +5,14 @@ vlib/v/checker/tests/sumtype_variant_mismatch.vv:4:7: error: cannot cast `?strin | ~~~~~~~~~~~~~~~~~~~ 5 | _ := ?Any(string('baz')) 6 | _ := ?Any('baz') -vlib/v/checker/tests/sumtype_variant_mismatch.vv:10:7: error: cannot cast `string` to `?Any2` - 8 | - 9 | _ := ?Any2(?string('baz')) - 10 | _ := ?Any2(string('baz')) +vlib/v/checker/tests/sumtype_variant_mismatch.vv:9:7: error: cannot cast `string` to `?Any2` + 7 | + 8 | _ := ?Any2(?string('baz')) + 9 | _ := ?Any2(string('baz')) | ~~~~~~~~~~~~~~~~~~~ - 11 | _ := ?Any2('baz') -vlib/v/checker/tests/sumtype_variant_mismatch.vv:11:7: error: cannot cast `string` to `?Any2` - 9 | _ := ?Any2(?string('baz')) - 10 | _ := ?Any2(string('baz')) - 11 | _ := ?Any2('baz') + 10 | _ := ?Any2('baz') +vlib/v/checker/tests/sumtype_variant_mismatch.vv:10:7: error: cannot cast `string` to `?Any2` + 8 | _ := ?Any2(?string('baz')) + 9 | _ := ?Any2(string('baz')) + 10 | _ := ?Any2('baz') | ~~~~~~~~~~~ From c719f28f91e1c26708c4a74470389e10d6cf5440 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Fri, 7 Feb 2025 06:54:12 -0300 Subject: [PATCH 3/3] fix --- vlib/x/json2/decoder.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vlib/x/json2/decoder.v b/vlib/x/json2/decoder.v index 431b366d3524a1..297e2402454ca7 100644 --- a/vlib/x/json2/decoder.v +++ b/vlib/x/json2/decoder.v @@ -259,7 +259,7 @@ fn decode_array_item[T](mut field T, arr []Any) { typeof[[]time.Time]().idx { field = arr.map(it.to_time() or { time.Time{} }) } typeof[[]?time.Time]().idx { field = arr.map(?time.Time(it.to_time() or { time.Time{} })) } typeof[[]Any]().idx { field = arr.clone() } - typeof[[]?Any]().idx { field = arr.map(?Any(it)) } + typeof[[]?Any]().idx { field = arr.map(it) } typeof[[]u8]().idx { field = arr.map(it.u64()) } typeof[[]?u8]().idx { field = arr.map(?u8(it.u64())) } typeof[[]u16]().idx { field = arr.map(it.u64()) }