...
1(module
2 (func (export "block") (result i32)
3 (block $exit (result i32)
4 (br $exit (i32.const 1))
5 (i32.const 0)
6 )
7 )
8
9 (func (export "loop1") (result i32)
10 (local $i i32)
11 (local.set $i (i32.const 0))
12 (block $exit (result i32)
13 (loop $cont (result i32)
14 (local.set $i (i32.add (local.get $i) (i32.const 1)))
15 (if (i32.eq (local.get $i) (i32.const 5))
16 (then (br $exit (local.get $i)))
17 )
18 (br $cont)
19 )
20 )
21 )
22
23 (func (export "loop2") (result i32)
24 (local $i i32)
25 (local.set $i (i32.const 0))
26 (block $exit (result i32)
27 (loop $cont (result i32)
28 (local.set $i (i32.add (local.get $i) (i32.const 1)))
29 (if (i32.eq (local.get $i) (i32.const 5))
30 (then (br $cont))
31 )
32 (if (i32.eq (local.get $i) (i32.const 8))
33 (then (br $exit (local.get $i)))
34 )
35 (local.set $i (i32.add (local.get $i) (i32.const 1)))
36 (br $cont)
37 )
38 )
39 )
40
41 (func (export "loop3") (result i32)
42 (local $i i32)
43 (local.set $i (i32.const 0))
44 (block $exit (result i32)
45 (loop $cont (result i32)
46 (local.set $i (i32.add (local.get $i) (i32.const 1)))
47 (if (i32.eq (local.get $i) (i32.const 5))
48 (then (br $exit (local.get $i)))
49 )
50 (local.get $i)
51 )
52 )
53 )
54
55 (func (export "loop4") (param $max i32) (result i32)
56 (local $i i32)
57 (local.set $i (i32.const 1))
58 (block $exit (result i32)
59 (loop $cont (result i32)
60 (local.set $i (i32.add (local.get $i) (local.get $i)))
61 (if (i32.gt_u (local.get $i) (local.get $max))
62 (then (br $exit (local.get $i)))
63 )
64 (br $cont)
65 )
66 )
67 )
68
69 (func (export "loop5") (result i32)
70 (i32.add
71 (loop $l (result i32) (i32.const 1))
72 (i32.const 1)
73 )
74 )
75
76 (func (export "loop6") (result i32)
77 (loop (result i32)
78 (br_if 0 (i32.const 0))
79 (i32.const 3)
80 )
81 )
82
83 (func (export "if") (result i32)
84 (local $i i32)
85 (local.set $i (i32.const 0))
86 (block
87 (if $l
88 (i32.const 1)
89 (then (br $l) (local.set $i (i32.const 666)))
90 )
91 (local.set $i (i32.add (local.get $i) (i32.const 1)))
92 (if $l
93 (i32.const 1)
94 (then (br $l) (local.set $i (i32.const 666)))
95 (else (local.set $i (i32.const 888)))
96 )
97 (local.set $i (i32.add (local.get $i) (i32.const 1)))
98 (if $l
99 (i32.const 1)
100 (then (br $l) (local.set $i (i32.const 666)))
101 (else (local.set $i (i32.const 888)))
102 )
103 (local.set $i (i32.add (local.get $i) (i32.const 1)))
104 (if $l
105 (i32.const 0)
106 (then (local.set $i (i32.const 888)))
107 (else (br $l) (local.set $i (i32.const 666)))
108 )
109 (local.set $i (i32.add (local.get $i) (i32.const 1)))
110 (if $l
111 (i32.const 0)
112 (then (local.set $i (i32.const 888)))
113 (else (br $l) (local.set $i (i32.const 666)))
114 )
115 (local.set $i (i32.add (local.get $i) (i32.const 1)))
116 )
117 (local.get $i)
118 )
119
120 (func (export "if2") (result i32)
121 (local $i i32)
122 (local.set $i (i32.const 0))
123 (block
124 (if
125 (i32.const 1)
126 (then (br 0) (local.set $i (i32.const 666)))
127 )
128 (local.set $i (i32.add (local.get $i) (i32.const 1)))
129 (if
130 (i32.const 1)
131 (then (br 0) (local.set $i (i32.const 666)))
132 (else (local.set $i (i32.const 888)))
133 )
134 (local.set $i (i32.add (local.get $i) (i32.const 1)))
135 (if
136 (i32.const 1)
137 (then (br 0) (local.set $i (i32.const 666)))
138 (else (local.set $i (i32.const 888)))
139 )
140 (local.set $i (i32.add (local.get $i) (i32.const 1)))
141 (if
142 (i32.const 0)
143 (then (local.set $i (i32.const 888)))
144 (else (br 0) (local.set $i (i32.const 666)))
145 )
146 (local.set $i (i32.add (local.get $i) (i32.const 1)))
147 (if
148 (i32.const 0)
149 (then (local.set $i (i32.const 888)))
150 (else (br 0) (local.set $i (i32.const 666)))
151 )
152 (local.set $i (i32.add (local.get $i) (i32.const 1)))
153 )
154 (local.get $i)
155 )
156
157 (func (export "switch") (param i32) (result i32)
158 (block $ret (result i32)
159 (i32.mul (i32.const 10)
160 (block $exit (result i32)
161 (block $0
162 (block $default
163 (block $3
164 (block $2
165 (block $1
166 (br_table $0 $1 $2 $3 $default (local.get 0))
167 ) ;; 1
168 ) ;; 2
169 (br $exit (i32.const 2))
170 ) ;; 3
171 (br $ret (i32.const 3))
172 ) ;; default
173 ) ;; 0
174 (i32.const 5)
175 )
176 )
177 )
178 )
179
180 (func (export "return") (param i32) (result i32)
181 (block $default
182 (block $1
183 (block $0
184 (br_table $0 $1 (local.get 0))
185 (br $default)
186 ) ;; 0
187 (return (i32.const 0))
188 ) ;; 1
189 ) ;; default
190 (i32.const 2)
191 )
192
193 (func (export "br_if0") (result i32)
194 (local $i i32)
195 (local.set $i (i32.const 0))
196 (block $outer (result i32)
197 (block $inner
198 (br_if $inner (i32.const 0))
199 (local.set $i (i32.or (local.get $i) (i32.const 0x1)))
200 (br_if $inner (i32.const 1))
201 (local.set $i (i32.or (local.get $i) (i32.const 0x2)))
202 )
203 (drop (br_if $outer
204 (block (result i32)
205 (local.set $i (i32.or (local.get $i) (i32.const 0x4)))
206 (local.get $i)
207 )
208 (i32.const 0)
209 ))
210 (local.set $i (i32.or (local.get $i) (i32.const 0x8)))
211 (drop (br_if $outer
212 (block (result i32)
213 (local.set $i (i32.or (local.get $i) (i32.const 0x10)))
214 (local.get $i)
215 )
216 (i32.const 1)
217 ))
218 (local.set $i (i32.or (local.get $i) (i32.const 0x20))) (local.get $i)
219 )
220 )
221
222 (func (export "br_if1") (result i32)
223 (block $l0 (result i32)
224 (drop
225 (br_if $l0
226 (block $l1 (result i32) (br $l1 (i32.const 1)))
227 (i32.const 1)
228 )
229 )
230 (i32.const 0)
231 )
232 )
233
234 (func (export "br_if2") (result i32)
235 (block $l0 (result i32)
236 (if (i32.const 1)
237 (then
238 (drop
239 (br_if $l0
240 (block $l1 (result i32) (br $l1 (i32.const 1)))
241 (i32.const 1)
242 )
243 )
244 )
245 )
246 (i32.const 0)
247 )
248 )
249
250 (func (export "br_if3") (result i32)
251 (local $i1 i32)
252 (drop
253 (i32.add
254 (block $l0 (result i32)
255 (drop (br_if $l0
256 (block (result i32) (local.set $i1 (i32.const 1)) (local.get $i1))
257 (block (result i32) (local.set $i1 (i32.const 2)) (local.get $i1))
258 ))
259 (i32.const 0)
260 )
261 (i32.const 0)
262 )
263 )
264 (local.get $i1)
265 )
266
267 (func (export "br") (result i32)
268 (block $l0 (result i32)
269 (if (i32.const 1)
270 (then (br $l0 (block $l1 (result i32) (br $l1 (i32.const 1)))))
271 (else (block (drop (block $l1 (result i32) (br $l1 (i32.const 1))))))
272 )
273 (i32.const 1)
274 )
275 )
276
277 (func (export "shadowing") (result i32)
278 (block $l1 (result i32) (i32.xor (br $l1 (i32.const 1)) (i32.const 2)))
279 )
280
281 (func (export "redefinition") (result i32)
282 (block $l1 (result i32)
283 (i32.add
284 (block $l1 (result i32) (i32.const 2))
285 (block $l1 (result i32) (br $l1 (i32.const 3)))
286 )
287 )
288 )
289)
290
291(assert_return (invoke "block") (i32.const 1))
292(assert_return (invoke "loop1") (i32.const 5))
293(assert_return (invoke "loop2") (i32.const 8))
294(assert_return (invoke "loop3") (i32.const 1))
295(assert_return (invoke "loop4" (i32.const 8)) (i32.const 16))
296(assert_return (invoke "loop5") (i32.const 2))
297(assert_return (invoke "loop6") (i32.const 3))
298(assert_return (invoke "if") (i32.const 5))
299(assert_return (invoke "if2") (i32.const 5))
300(assert_return (invoke "switch" (i32.const 0)) (i32.const 50))
301(assert_return (invoke "switch" (i32.const 1)) (i32.const 20))
302(assert_return (invoke "switch" (i32.const 2)) (i32.const 20))
303(assert_return (invoke "switch" (i32.const 3)) (i32.const 3))
304(assert_return (invoke "switch" (i32.const 4)) (i32.const 50))
305(assert_return (invoke "switch" (i32.const 5)) (i32.const 50))
306(assert_return (invoke "return" (i32.const 0)) (i32.const 0))
307(assert_return (invoke "return" (i32.const 1)) (i32.const 2))
308(assert_return (invoke "return" (i32.const 2)) (i32.const 2))
309(assert_return (invoke "br_if0") (i32.const 0x1d))
310(assert_return (invoke "br_if1") (i32.const 1))
311(assert_return (invoke "br_if2") (i32.const 1))
312(assert_return (invoke "br_if3") (i32.const 2))
313(assert_return (invoke "br") (i32.const 1))
314(assert_return (invoke "shadowing") (i32.const 1))
315(assert_return (invoke "redefinition") (i32.const 5))
316
317(assert_invalid
318 (module (func (block $l (f32.neg (br_if $l (i32.const 1))) (nop))))
319 "type mismatch"
320)
321(assert_invalid
322 (module (func (block $l (br_if $l (f32.const 0) (i32.const 1)))))
323 "type mismatch"
324)
325(assert_invalid
326 (module (func (block $l (br_if $l (f32.const 0) (i32.const 1)))))
327 "type mismatch"
328)
View as plain text