[WASM-References] Rename anyfunc to funcref
[WebKit-https.git] / JSTests / wasm / js-api / element-data.js
1 import Builder from '../Builder.js';
2 import * as assert from '../assert.js';
3
4 const memSizeInPages = 1;
5 const pageSizeInBytes = 64 * 1024;
6 const memoryDescription = { initial: memSizeInPages, maximum: memSizeInPages };
7
8 (function ElementBeforeData() {
9     const builder = (new Builder())
10         .Type().End()
11         .Import()
12             .Memory("imp", "memory", memoryDescription)
13             .Table("imp", "table", {element: "funcref", initial: 19}) // unspecified maximum.
14         .End()
15         .Function().End()
16         .Element()
17             .Element({offset: 19, functionIndices: [0, 0, 0, 0, 0]})
18         .End()
19         .Code()
20             .Function("foo", {params: ["i32"], ret: "i32"})
21                 .GetLocal(0)
22                 .I32Const(42)
23                 .I32Add()
24                 .Return()
25             .End()
26         .End()
27         .Data()
28           .Segment([0xde, 0xad, 0xbe, 0xef]).Offset(0).End()
29         .End();
30     const bin = builder.WebAssembly().get();
31     const module = new WebAssembly.Module(bin);
32     const memory = new WebAssembly.Memory(memoryDescription);
33     const table = new WebAssembly.Table({element: "funcref", initial: 19});
34     const imports = {
35         imp: {
36             memory: memory,
37             table: table,
38         }
39     };
40     assert.throws(() => new WebAssembly.Instance(module, imports), WebAssembly.LinkError, `Element is trying to set an out of bounds table index (evaluating 'new WebAssembly.Instance(module, imports)')`);
41     // On Element failure, the Data section shouldn't have executed.
42     const buffer = new Uint8Array(memory.buffer);
43     for (let idx = 0; idx < memSizeInPages * pageSizeInBytes; ++idx) {
44         const value = buffer[idx];
45         assert.eq(value, 0x00);
46     }
47 })();