File: testtracefns.go

package info (click to toggle)
delve 1.26.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 15,136 kB
  • sloc: ansic: 111,947; sh: 194; asm: 147; makefile: 43; python: 23
file content (156 lines) | stat: -rw-r--r-- 1,851 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package main

import "fmt"

func D(i int) int {
	return i * i * i
}
func C(i int) int {

	return D(i+10) + 20
}
func B(i int) int {
	return i * D(i)
}
func A(i int) int {
	d := 10 + B(i)
	return d + C(i)
}
func second(i int) int {
	if i > 0 {
		return first(i - 1)
	} else {
		return 0
	}
}
func first(n int) int {
	if n <= 1 {
		return n
	} else {
		return second(n - 3)
	}
}

func callmed(i int) int {
	return i * i * i
}
func callmee(i int) int {

	return i + 20
}
func callme2(i int) int {
	d := callmee(i) + 40
	return d + callmed(i)
}
func callme(i int) int {
	return 10 + callme2(i)
}

func F0() {
	defer func() {
		recover()
	}()
	F1()
}

func F1() {
	F2()
}

func F2() {
	F3()
}

func F3() {
	F4()
}

func F4() {
	panic("blah")
}

var intc, intd int

func swap() {
	defer func() {
		intc += 100
	}()
	temp := intc
	intc = intd
	intd = temp
}

func unnamedDefer() {
	intc = -100
	intd = 100
	swap()
	fmt.Println(intc, intd)
}
func formula(op string) func(int, int) int {
	var calc func(int, int) int
	if op == "add" {
		calc = func(m int, n int) int {
			res := m + n
			return res
		}
	} else if op == "mul" {
		calc = func(m int, n int) int {
			res := m * n
			return res
		}
	}
	return calc
}

func op() int {
	calc := formula("add")
	res := calc(10, 20)
	return res
}

func assign(bar func()) {
	bar()
}
func testfunc() {
	intc = 10
	intd = 20
}

func dyn() {
	intc = 0
	intd = 0
	assign(testfunc)
}

func outer() {
	intc = 40
        defer swap()
}
func nestDefer() {
        defer outer()
}

func namedDeferLoop(n int) {
        for i := 0; i < n; i++ {
                defer testfunc()
        }
        temp := intc
        intc = intd
        intd = temp
}
func main() {
	j := 0
	j += A(2)

	j += first(6)
	j += callme(2)
	fmt.Println(j)
	unnamedDefer()
	nestDefer()
	namedDeferLoop(2)
	F0()
	ans := op()
	fmt.Println(ans)
	dyn()

}