51 lines
872 B
V
51 lines
872 B
V
[params]
|
|
struct Data {
|
|
array []int
|
|
}
|
|
|
|
fn (d Data) len() int {
|
|
return d.array.len
|
|
}
|
|
|
|
fn make_result() []Data {
|
|
return []
|
|
}
|
|
|
|
// make_result2 is here to ensure that
|
|
// the branches contain different code,
|
|
// so the tests passes even with -cstrict -cc gcc
|
|
fn make_result2() []Data {
|
|
return []
|
|
}
|
|
|
|
fn f_doesnotcompile(d Data) []Data {
|
|
return match d.len() {
|
|
1 { make_result() }
|
|
else { make_result2() }
|
|
}
|
|
}
|
|
|
|
fn f_compiles1(d Data) []Data {
|
|
return match d.array.len {
|
|
1 { make_result() }
|
|
else { make_result2() }
|
|
}
|
|
}
|
|
|
|
fn f_compiles2(d Data) []Data {
|
|
length := d.array.len
|
|
return match length {
|
|
1 { make_result() }
|
|
else { make_result2() }
|
|
}
|
|
}
|
|
|
|
fn test_match_in_fn_call() {
|
|
println(f_doesnotcompile())
|
|
assert f_doesnotcompile() == []Data{}
|
|
println(f_compiles1())
|
|
assert f_compiles1() == []Data{}
|
|
println(f_compiles2())
|
|
assert f_compiles2() == []Data{}
|
|
}
|