v2 / vlib / v / gen / c / testdata / callstack.vv
73 lines · 60 sloc · 1.2 KB · b8c8a02b501ec62b013cb0b282feaed83ef121da
Raw
1module main
2
3import v.debug
4
5// vtest vflags: -d callstack
6
7struct Test {}
8
9fn (t Test) test_method() {
10 fn_test4()
11}
12
13fn Test.test_static_method() {
14 fn_test3()
15}
16
17fn fn_test2() ? {
18 a := 1
19 // debug.dump_callstack()
20 print(a)
21 assert debug.callstack(1)?.line == 43
22 assert debug.callstack(0)?.line == 51
23}
24
25fn fn_test3() ? {
26 // debug.dump_callstack()
27 assert debug.callstack(3)?.line == 8
28 assert debug.callstack(1)?.line == 41
29 assert debug.callstack(0)?.line == 51
30 return
31}
32
33fn fn_test4() ? {
34 // debug.dump_callstack()
35 assert debug.callstack(1)?.line == 10
36}
37
38fn fn_test_anon(cb fn ()) {
39 cb()
40}
41
42fn fn_test() ? {
43 fn_test2()
44 print('enter')
45 fn_test3()
46 assert debug.callstack(0)?.line == 51
47}
48
49fn main() {
50 print(12)
51 fn_test()
52 // debug.dump_callstack()
53 // dump(debug.callstack(0))
54 mut ret := debug.callstack(0)
55 Test{}.test_method()
56 Test.test_static_method()
57 fn_test_anon(fn () {
58 // debug.dump_callstack()
59 ret := debug.callstack(3) or { return }
60 res := ret.name.starts_with('anon_fn')
61 assert res
62 })
63
64 ret = debug.callstack(0)
65 assert ret == none
66 assert fn_test_unnamed_fn_var(fn (a int, b int) bool {
67 return a < b
68 })
69}
70
71fn fn_test_unnamed_fn_var(cb fn (int, int) bool) bool {
72 return cb(1, 2)
73}
74