Source file
test/inline.go
Documentation: test
1
2
3
4
5
6
7
8
9
10 package foo
11
12 import (
13 "runtime"
14 "unsafe"
15 )
16
17 func add2(p *byte, n uintptr) *byte {
18 return (*byte)(add1(unsafe.Pointer(p), n))
19 }
20
21 func add1(p unsafe.Pointer, x uintptr) unsafe.Pointer {
22 return unsafe.Pointer(uintptr(p) + x)
23 }
24
25 func f(x *byte) *byte {
26 return add2(x, 1)
27 }
28
29
30 func g(x int) int {
31 return x + 1
32 }
33
34 func h(x int) int {
35 return x + 2
36 }
37
38 func i(x int) int {
39 const y = 2
40 return x + y
41 }
42
43 func j(x int) int {
44 switch {
45 case x > 0:
46 return x + 2
47 default:
48 return x + 1
49 }
50 }
51
52 func _() int {
53 tmp1 := h
54 tmp2 := tmp1
55 return tmp2(0)
56 }
57
58 var somethingWrong error
59
60
61 func l(x, y int) (int, int, error) {
62 e := func(err error) (int, int, error) {
63 return 0, 0, err
64 }
65 if x == y {
66 e(somethingWrong)
67 } else {
68 f := e
69 f(nil)
70 }
71 return y, x, nil
72 }
73
74
75 func m() int {
76 foo := func() int { return 1 }
77 x := foo()
78 foo = func() int { return 2 }
79 return x + foo()
80 }
81
82
83 func n() int {
84 foo := func() int { return 1 }
85 bar := &foo
86 x := (*bar)() + foo()
87 return x
88 }
89
90
91 func o() int {
92 foo := func() int { return 1 }
93 func(x int) {
94 if x > 10 {
95 foo = func() int { return 2 }
96 }
97 }(11)
98 return foo()
99 }
100
101 func p() int {
102 return func() int { return 42 }()
103 }
104
105 func q(x int) int {
106 foo := func() int { return x * 2 }
107 return foo()
108 }
109
110 func r(z int) int {
111 foo := func(x int) int {
112 return x + z
113 }
114 bar := func(x int) int {
115 return x + func(y int) int {
116 return 2*y + x*z
117 }(x)
118 }
119 return foo(42) + bar(42)
120 }
121
122 func s0(x int) int {
123 foo := func() {
124 x = x + 1
125 }
126 foo()
127 return x
128 }
129
130 func s1(x int) int {
131 foo := func() int {
132 return x
133 }
134 x = x + 1
135 return foo()
136 }
137
138
139 func switchBreak(x, y int) int {
140 var n int
141 switch x {
142 case 0:
143 n = 1
144 Done:
145 switch y {
146 case 0:
147 n += 10
148 break Done
149 }
150 n = 2
151 }
152 return n
153 }
154
155 func switchType(x interface{}) int {
156 switch x.(type) {
157 case int:
158 return x.(int)
159 default:
160 return 0
161 }
162 }
163
164 type T struct{}
165
166 func (T) meth(int, int) {}
167
168 func k() (T, int, int) { return T{}, 0, 0 }
169
170 func _() {
171 T.meth(k())
172 }
173
174 func small1() {
175 runtime.GC()
176 }
177 func small2() int {
178 return runtime.GOMAXPROCS(0)
179 }
180 func small3(t T) {
181 t.meth2(3, 5)
182 }
183 func small4(t T) {
184 t.meth2(runtime.GOMAXPROCS(0), 5)
185 }
186 func (T) meth2(int, int) {
187 runtime.GC()
188 runtime.GC()
189 }
190
191
192 func ee() {
193 ff(100)
194 }
195
196 func ff(x int) {
197 if x < 0 {
198 return
199 }
200 gg(x - 1)
201 }
202 func gg(x int) {
203 hh(x - 1)
204 }
205 func hh(x int) {
206 ff(x - 1)
207 }
208
209
210 func for1(fn func() bool) {
211 for {
212 if fn() {
213 break
214 } else {
215 continue
216 }
217 }
218 }
219
220
221 func for2(fn func() bool) {
222 Loop:
223 for {
224 if fn() {
225 break Loop
226 } else {
227 continue Loop
228 }
229 }
230 }
231
232
233 type T1 struct{}
234
235 func (a T1) meth(val int) int {
236 return val + 5
237 }
238
239 func getMeth(t1 T1) func(int) int {
240 return t1.meth
241 }
242
243 func ii() {
244 var t1 T1
245 f := getMeth(t1)
246 _ = f(3)
247 }
248
249
250
251 func gd1(int) {
252 defer gd1(gd2())
253 defer gd3()()
254 go gd1(gd2())
255 go gd3()()
256 }
257
258 func gd2() int {
259 return 1
260 }
261
262 func gd3() func() {
263 return ii
264 }
265
266
267 func EncodeQuad(d []uint32, x [6]float32) {
268 _ = d[:6]
269 d[0] = float32bits(x[0])
270 d[1] = float32bits(x[1])
271 d[2] = float32bits(x[2])
272 d[3] = float32bits(x[3])
273 d[4] = float32bits(x[4])
274 d[5] = float32bits(x[5])
275 }
276
277
278
279 func float32bits(f float32) uint32 {
280 return *(*uint32)(unsafe.Pointer(&f))
281 }
282
283
284 func Conv(v uint64) uint64 {
285 return conv2(conv2(conv2(v)))
286 }
287 func conv2(v uint64) uint64 {
288 return conv1(conv1(conv1(conv1(v))))
289 }
290 func conv1(v uint64) uint64 {
291 return uint64(uint64(uint64(uint64(uint64(uint64(uint64(uint64(uint64(uint64(uint64(v)))))))))))
292 }
293
View as plain text