mirror of
https://github.com/vlang/v.git
synced 2025-09-13 17:36:52 -04:00
checker: improve if expr with compound conditions (#22541)
This commit is contained in:
parent
ffa79219f6
commit
a2e478be81
@ -1054,6 +1054,19 @@ fn (mut c Checker) autocast_in_if_conds(mut right ast.Expr, from_expr ast.Expr,
|
||||
}
|
||||
ast.IndexExpr {
|
||||
c.autocast_in_if_conds(mut right.left, from_expr, from_type, to_type)
|
||||
c.autocast_in_if_conds(mut right.index, from_expr, from_type, to_type)
|
||||
}
|
||||
ast.RangeExpr {
|
||||
c.autocast_in_if_conds(mut right.low, from_expr, from_type, to_type)
|
||||
c.autocast_in_if_conds(mut right.high, from_expr, from_type, to_type)
|
||||
}
|
||||
ast.StringInterLiteral {
|
||||
for mut expr in right.exprs {
|
||||
c.autocast_in_if_conds(mut expr, from_expr, from_type, to_type)
|
||||
}
|
||||
}
|
||||
ast.UnsafeExpr {
|
||||
c.autocast_in_if_conds(mut right.expr, from_expr, from_type, to_type)
|
||||
}
|
||||
else {}
|
||||
}
|
||||
|
@ -1,9 +1,14 @@
|
||||
type Foo = int | []int
|
||||
|
||||
fn test_if_expr_with_compound_conds() {
|
||||
fn works() bool {
|
||||
a := Foo([3])
|
||||
if a is []int && a[0] == 3 {
|
||||
println('works')
|
||||
return true
|
||||
}
|
||||
assert true
|
||||
return false
|
||||
}
|
||||
|
||||
fn test_if_expr_with_compound_conds() {
|
||||
assert works()
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
type Foo = int | []int
|
||||
|
||||
fn works() bool {
|
||||
arr := [1, 2, 3]
|
||||
a := Foo(2)
|
||||
if a is int && arr[a] == 3 {
|
||||
println('works')
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fn test_if_expr_with_compound_conds() {
|
||||
assert works()
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
type Foo = int | []int
|
||||
|
||||
fn works() bool {
|
||||
a := Foo(2)
|
||||
if a is int && '${a}' == '2' {
|
||||
println('works')
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fn test_if_expr_with_compound_conds() {
|
||||
assert works()
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
type Foo = int | []int
|
||||
|
||||
fn works() bool {
|
||||
arr := [1, 2, 3]
|
||||
a := Foo(2)
|
||||
if a is int && unsafe { arr[..a] == [1, 2] } {
|
||||
println('works')
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fn test_if_expr_with_compound_conds() {
|
||||
assert works()
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user