v2 / vlib / v / tests / nest_defer_fn_test.v
30 lines · 28 sloc · 311 bytes · d39a55ac11861b2b034f971edfab4708c6b6d01f
Raw
1struct Fst {
2mut:
3 f fn () int
4}
5
6fn setfn(mut f Fst) {
7 mut i := 0
8 f.f = fn () int {
9 return 5
10 }
11 defer {
12 if i > 0 {
13 f.f = fn () int {
14 a := 0
15 defer {
16 assert a == 0
17 }
18 return 7
19 }
20 }
21 }
22 i = 1
23}
24
25fn test_nested_defer() {
26 mut g := Fst{}
27 setfn(mut g)
28 x := g.f()
29 assert x == 7
30}
31