From 1c382ad2b4c82f11963a006215ac8b71d524d2a7 Mon Sep 17 00:00:00 2001 From: yuyi Date: Fri, 7 Jan 2022 00:36:31 +0800 Subject: [PATCH] checker: fix error for cast to u8 (#13058) --- vlib/v/checker/checker.v | 2 +- vlib/v/tests/cast_to_u8_test.v | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/cast_to_u8_test.v diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index fe863ac103..3c96576fef 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -2669,7 +2669,7 @@ pub fn (mut c Checker) cast_expr(mut node ast.CastExpr) ast.Type { } } else if mut to_sym.info is ast.Alias { if !c.check_types(from_type, to_sym.info.parent_type) && !(final_to_sym.is_int() - && final_from_sym.kind == .enum_) { + && final_from_sym.kind in [.enum_, .bool]) { c.error('cannot convert type `$from_sym.name` to `$to_sym.name` (alias to `$final_to_sym.name`)', node.pos) } diff --git a/vlib/v/tests/cast_to_u8_test.v b/vlib/v/tests/cast_to_u8_test.v new file mode 100644 index 0000000000..8bd9e144f3 --- /dev/null +++ b/vlib/v/tests/cast_to_u8_test.v @@ -0,0 +1,16 @@ +module main + +fn test_cast_to_alias() { + r1 := u8(byte(1)) + println(r1) + assert '$r1' == '1' + + + r2 := u8(byte(true)) + println(r2) + assert '$r2' == '1' + + r3 := u8(true) + println(r3) + assert '$r3' == '1' +}