WebAssembly: implement Module imports/exports
[WebKit-https.git] / JSTests / wasm / js-api / Module.exports.js
1 import Builder from '../Builder.js';
2 import * as assert from '../assert.js';
3
4 assert.throws(() => WebAssembly.Module.prototype.exports(undefined, ""), TypeError, `WebAssembly.Module.prototype.exports called with non WebAssembly.Module |this| value`);
5
6 {
7     const m = new WebAssembly.Module((new Builder()).WebAssembly().get());
8     assert.isArray(m.exports);
9     assert.eq(m.exports.length, 0);
10     assert.truthy(m.exports !== m.exports);
11 }
12
13 {
14     const m = new WebAssembly.Module(
15         (new Builder())
16             .Type().End()
17             .Function().End()
18             .Table()
19                 .Table({initial: 20, maximum: 30, element: "anyfunc"})
20             .End()
21             .Memory().InitialMaxPages(1, 1).End()
22             .Global().I32(42, "immutable").End()
23             .Export()
24                 .Function("func")
25                 .Table("tab", 0)
26                 .Memory("mem", 0)
27                 .Global("glob", 0)
28             .End()
29             .Code()
30                 .Function("func", { params: [] }).Return().End()
31             .End()
32             .WebAssembly().get());
33     assert.eq(m.exports.length, 4);
34     assert.eq(m.exports[0].name, "func");
35     assert.eq(m.exports[0].kind, "function");
36     assert.eq(m.exports[1].name, "tab");
37     assert.eq(m.exports[1].kind, "table");
38     assert.eq(m.exports[2].name, "mem");
39     assert.eq(m.exports[2].kind, "memory");
40     assert.eq(m.exports[3].name, "glob");
41     assert.eq(m.exports[3].kind, "global");
42 }