checker: fix cast enum to alias (#12968)
parent
10f63b3cd7
commit
03864e4ab8
|
@ -3483,7 +3483,8 @@ pub fn (mut c Checker) cast_expr(mut node ast.CastExpr) ast.Type {
|
||||||
c.error('cannot cast `$from_type_sym.name` to `$to_type_sym.name`', node.pos)
|
c.error('cannot cast `$from_type_sym.name` to `$to_type_sym.name`', node.pos)
|
||||||
}
|
}
|
||||||
} else if mut to_type_sym.info is ast.Alias {
|
} else if mut to_type_sym.info is ast.Alias {
|
||||||
if !c.check_types(from_type, to_type_sym.info.parent_type) {
|
if !c.check_types(from_type, to_type_sym.info.parent_type) && !(to_type_sym_final.is_int()
|
||||||
|
&& from_type_sym_final.kind == .enum_) {
|
||||||
c.error('cannot convert type `$from_type_sym.name` to `$to_type_sym.name` (alias to `$to_type_sym_final.name`)',
|
c.error('cannot convert type `$from_type_sym.name` to `$to_type_sym.name` (alias to `$to_type_sym_final.name`)',
|
||||||
node.pos)
|
node.pos)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
module main
|
||||||
|
|
||||||
|
type CEnum = int
|
||||||
|
|
||||||
|
enum Enum {
|
||||||
|
value = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
fn foo(n int) string {
|
||||||
|
return '$n'
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bar(n CEnum) string {
|
||||||
|
return '$n'
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_cast_to_alias() {
|
||||||
|
e := Enum.value
|
||||||
|
mut ret_str := ''
|
||||||
|
|
||||||
|
ret_str = foo(int(e))
|
||||||
|
println(ret_str)
|
||||||
|
assert ret_str == '1'
|
||||||
|
|
||||||
|
ret_str = bar(int(e))
|
||||||
|
println(ret_str)
|
||||||
|
assert ret_str == '1'
|
||||||
|
|
||||||
|
ret_str = foo(CEnum(e))
|
||||||
|
println(ret_str)
|
||||||
|
assert ret_str == '1'
|
||||||
|
|
||||||
|
ret_str = bar(CEnum(e))
|
||||||
|
println(ret_str)
|
||||||
|
assert ret_str == '1'
|
||||||
|
}
|
Loading…
Reference in New Issue