v2 / vlib / wasm / tests / block_test.v
123 lines · 117 sloc · 2.04 KB · bf749b35590b7624a2495924e449a640a34acfb0
Raw
1module main
2
3import wasm
4
5fn test_block() {
6 mut m := wasm.Module{}
7 mut a1 := m.new_function('param', [], [.i32_t])
8 {
9 a1.i32_const(1)
10 blk := a1.c_block([.i32_t], [.i32_t])
11 {
12 a1.i32_const(2)
13 a1.add(.i32_t)
14 }
15 a1.c_end(blk)
16 }
17 m.commit(a1, true)
18 mut a2 := m.new_function('params', [], [.i32_t])
19 {
20 a2.i32_const(1)
21 a2.i32_const(2)
22 blk := a2.c_block([.i32_t, .i32_t], [.i32_t])
23 {
24 a2.add(.i32_t)
25 }
26 a2.c_end(blk)
27 }
28 m.commit(a2, true)
29 mut a3 := m.new_function('params-id', [], [.i32_t])
30 {
31 a3.i32_const(1)
32 a3.i32_const(2)
33 blk := a3.c_block([.i32_t, .i32_t], [.i32_t, .i32_t])
34 {
35 }
36 a3.c_end(blk)
37 a3.add(.i32_t)
38 }
39 m.commit(a3, true)
40
41 mut b1 := m.new_function('param-break', [], [.i32_t])
42 {
43 b1.i32_const(1)
44 blk := b1.c_block([.i32_t], [.i32_t])
45 {
46 b1.i32_const(2)
47 b1.add(.i32_t)
48 b1.c_br(blk)
49 }
50 b1.c_end(blk)
51 }
52 m.commit(b1, true)
53 mut b2 := m.new_function('params-break', [], [.i32_t])
54 {
55 b2.i32_const(1)
56 b2.i32_const(2)
57 blk := b2.c_block([.i32_t, .i32_t], [.i32_t])
58 {
59 b2.add(.i32_t)
60 b2.c_br(blk)
61 }
62 b2.c_end(blk)
63 }
64 m.commit(b2, true)
65 mut b3 := m.new_function('params-id-break', [], [.i32_t])
66 {
67 b3.i32_const(1)
68 b3.i32_const(2)
69 blk := b3.c_block([.i32_t, .i32_t], [.i32_t, .i32_t])
70 {
71 b3.c_br(blk)
72 }
73 b3.c_end(blk)
74 b3.add(.i32_t)
75 }
76 m.commit(b3, true)
77
78 mut dummy := m.new_function('dummy', [], [])
79 {
80 }
81 m.commit(dummy, false)
82
83 mut c1 := m.new_function('singular', [], [.i32_t])
84 {
85 blk1 := c1.c_block([], [])
86 {
87 c1.nop()
88 }
89 c1.c_end(blk1)
90 blk2 := c1.c_block([], [.i32_t])
91 {
92 c1.i32_const(7)
93 }
94 c1.c_end(blk2)
95 }
96 m.commit(c1, true)
97 mut c2 := m.new_function('nested', [], [.i32_t])
98 {
99 blk := c2.c_block([], [.i32_t])
100 {
101 blk1 := c2.c_block([], [])
102 {
103 c2.call('dummy')
104 blk2 := c2.c_block([], [])
105 {
106 }
107 c2.c_end(blk2)
108 c2.nop()
109 }
110 c2.c_end(blk1)
111 blk2 := c2.c_block([], [.i32_t])
112 {
113 c2.call('dummy')
114 c2.i32_const(9)
115 }
116 c2.c_end(blk2)
117 }
118 c2.c_end(blk)
119 }
120 m.commit(c2, true)
121
122 validate(m.compile()) or { panic(err) }
123}
124