1;; Functions
2
3(module (func) (export "a" (func 0)))
4(module (func) (export "a" (func 0)) (export "b" (func 0)))
5(module (func) (func) (export "a" (func 0)) (export "b" (func 1)))
6
7(module (func (export "a")))
8(module (func) (export "a" (func 0)))
9(module (func $a (export "a")))
10(module (func $a) (export "a" (func $a)))
11(module (export "a" (func 0)) (func))
12(module (export "a" (func $a)) (func $a))
13
14(module $Func
15  (export "e" (func $f))
16  (func $f (param $n i32) (result i32)
17    (return (i32.add (get_local $n) (i32.const 1)))
18  )
19)
20(assert_return (invoke "e" (i32.const 42)) (i32.const 43))
21(assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43))
22(module)
23(module $Other1)
24(assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43))
25
26(assert_invalid
27  (module (func) (export "a" (func 1)))
28  "unknown function"
29)
30(assert_invalid
31  (module (func) (export "a" (func 0)) (export "a" (func 0)))
32  "duplicate export name"
33)
34(assert_invalid
35  (module (func) (func) (export "a" (func 0)) (export "a" (func 1)))
36  "duplicate export name"
37)
38(assert_invalid
39  (module (func) (global i32 (i32.const 0)) (export "a" (func 0)) (export "a" (global 0)))
40  "duplicate export name"
41)
42(assert_invalid
43  (module (func) (table 0 anyfunc) (export "a" (func 0)) (export "a" (table 0)))
44  "duplicate export name"
45)
46(assert_invalid
47  (module (func) (memory 0) (export "a" (func 0)) (export "a" (memory 0)))
48  "duplicate export name"
49)
50
51
52;; Globals
53
54(module (global i32 (i32.const 0)) (export "a" (global 0)))
55(module (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 0)))
56(module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 1)))
57
58(module (global (export "a") i32 (i32.const 0)))
59(module (global i32 (i32.const 0)) (export "a" (global 0)))
60(module (global $a (export "a") i32 (i32.const 0)))
61(module (global $a i32 (i32.const 0)) (export "a" (global $a)))
62(module (export "a" (global 0)) (global i32 (i32.const 0)))
63(module (export "a" (global $a)) (global $a i32 (i32.const 0)))
64
65(module $Global
66  (export "e" (global $g))
67  (global $g i32 (i32.const 42))
68)
69(assert_return (get "e") (i32.const 42))
70(assert_return (get $Global "e") (i32.const 42))
71(module)
72(module $Other2)
73(assert_return (get $Global "e") (i32.const 42))
74
75(assert_invalid
76  (module (global i32 (i32.const 0)) (export "a" (global 1)))
77  "unknown global"
78)
79(assert_invalid
80  (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 0)))
81  "duplicate export name"
82)
83(assert_invalid
84  (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 1)))
85  "duplicate export name"
86)
87(assert_invalid
88  (module (global i32 (i32.const 0)) (func) (export "a" (global 0)) (export "a" (func 0)))
89  "duplicate export name"
90)
91(assert_invalid
92  (module (global i32 (i32.const 0)) (table 0 anyfunc) (export "a" (global 0)) (export "a" (table 0)))
93  "duplicate export name"
94)
95(assert_invalid
96  (module (global i32 (i32.const 0)) (memory 0) (export "a" (global 0)) (export "a" (memory 0)))
97  "duplicate export name"
98)
99
100
101;; Tables
102
103(module (table 0 anyfunc) (export "a" (table 0)))
104(module (table 0 anyfunc) (export "a" (table 0)) (export "b" (table 0)))
105;; No multiple tables yet.
106;; (module (table 0 anyfunc) (table 0 anyfunc) (export "a" (table 0)) (export "b" (table 1)))
107
108(module (table (export "a") 0 anyfunc))
109(module (table (export "a") 0 1 anyfunc))
110(module (table 0 anyfunc) (export "a" (table 0)))
111(module (table 0 1 anyfunc) (export "a" (table 0)))
112(module (table $a (export "a") 0 anyfunc))
113(module (table $a (export "a") 0 1 anyfunc))
114(module (table $a 0 anyfunc) (export "a" (table $a)))
115(module (table $a 0 1 anyfunc) (export "a" (table $a)))
116(module (export "a" (table 0)) (table 0 anyfunc))
117(module (export "a" (table 0)) (table 0 1 anyfunc))
118(module (export "a" (table $a)) (table $a 0 anyfunc))
119(module (export "a" (table $a)) (table $a 0 1 anyfunc))
120
121(; TODO: access table ;)
122
123(assert_invalid
124  (module (table 0 anyfunc) (export "a" (table 1)))
125  "unknown table"
126)
127(assert_invalid
128  (module (table 0 anyfunc) (export "a" (table 0)) (export "a" (table 0)))
129  "duplicate export name"
130)
131;; No multiple tables yet.
132;; (assert_invalid
133;;   (module (table 0 anyfunc) (table 0 anyfunc) (export "a" (table 0)) (export "a" (table 1)))
134;;   "duplicate export name"
135;; )
136(assert_invalid
137  (module (table 0 anyfunc) (func) (export "a" (table 0)) (export "a" (func 0)))
138  "duplicate export name"
139)
140(assert_invalid
141  (module (table 0 anyfunc) (global i32 (i32.const 0)) (export "a" (table 0)) (export "a" (global 0)))
142  "duplicate export name"
143)
144(assert_invalid
145  (module (table 0 anyfunc) (memory 0) (export "a" (table 0)) (export "a" (memory 0)))
146  "duplicate export name"
147)
148
149
150;; Memories
151
152(module (memory 0) (export "a" (memory 0)))
153(module (memory 0) (export "a" (memory 0)) (export "b" (memory 0)))
154;; No multiple memories yet.
155;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "b" (memory 1)))
156
157(module (memory (export "a") 0))
158(module (memory (export "a") 0 1))
159(module (memory 0) (export "a" (memory 0)))
160(module (memory 0 1) (export "a" (memory 0)))
161(module (memory $a (export "a") 0))
162(module (memory $a (export "a") 0 1))
163(module (memory $a 0) (export "a" (memory $a)))
164(module (memory $a 0 1) (export "a" (memory $a)))
165(module (export "a" (memory 0)) (memory 0))
166(module (export "a" (memory 0)) (memory 0 1))
167(module (export "a" (memory $a)) (memory $a 0))
168(module (export "a" (memory $a)) (memory $a 0 1))
169
170(; TODO: access memory ;)
171
172(assert_invalid
173  (module (memory 0) (export "a" (memory 1)))
174  "unknown memory"
175)
176(assert_invalid
177  (module (memory 0) (export "a" (memory 0)) (export "a" (memory 0)))
178  "duplicate export name"
179)
180;; No multiple memories yet.
181;; (assert_invalid
182;;   (module (memory 0) (memory 0) (export "a" (memory 0)) (export "a" (memory 1)))
183;;   "duplicate export name"
184;; )
185(assert_invalid
186  (module (memory 0) (func) (export "a" (memory 0)) (export "a" (func 0)))
187  "duplicate export name"
188)
189(assert_invalid
190  (module (memory 0) (global i32 (i32.const 0)) (export "a" (memory 0)) (export "a" (global 0)))
191  "duplicate export name"
192)
193(assert_invalid
194  (module (memory 0) (table 0 anyfunc) (export "a" (memory 0)) (export "a" (table 0)))
195  "duplicate export name"
196)
197