[WASM-References] Rename anyfunc to funcref
[WebKit-https.git] / JSTests / wasm / references / validation.js
1 import * as assert from '../assert.js';
2 import Builder from '../Builder.js';
3
4 {
5     const builder = (new Builder())
6       .Type().End()
7       .Function().End()
8       .Export()
9           .Function("j")
10       .End()
11       .Code()
12         .Function("j", { params: [], ret: "i32" })
13             .I32Const(0)
14             .RefIsNull()
15         .End()
16       .End();
17
18     const bin = builder.WebAssembly();
19     bin.trim();
20
21     assert.throws(() => new WebAssembly.Module(bin.get()), WebAssembly.CompileError, "WebAssembly.Module doesn't validate: ref.is_null to type I32 expected Anyref, in function at index 0 (evaluating 'new WebAssembly.Module(bin.get())')");
22 }
23
24 {
25     const builder = (new Builder())
26       .Type().End()
27       .Import()
28             .Table("imp", "tbl", {initial: 2, element: "funcref"})
29       .End()
30       .Function().End()
31       .Export()
32           .Function("j")
33       .End()
34       .Code()
35         .Function("j", { params: [], ret: "void" })
36             .I32Const(0)
37             .I32Const(0)
38             .TableSet(0)
39         .End()
40       .End();
41
42     const bin = builder.WebAssembly();
43     bin.trim();
44
45     assert.throws(() => new WebAssembly.Module(bin.get()), WebAssembly.CompileError, "WebAssembly.Module doesn't validate: table.set value to type I32 expected Funcref, in function at index 0 (evaluating 'new WebAssembly.Module(bin.get())')");
46 }
47
48 {
49     const builder = (new Builder())
50       .Type().End()
51       .Import()
52             .Table("imp", "tbl", {initial: 2, element: "funcref"})
53       .End()
54       .Function().End()
55       .Export()
56           .Function("j")
57       .End()
58       .Code()
59         .Function("j", { params: ["anyref"], ret: "void" })
60             .I32Const(0)
61             .GetLocal(0)
62             .TableSet(0)
63         .End()
64       .End();
65
66     const bin = builder.WebAssembly();
67     bin.trim();
68
69     assert.throws(() => new WebAssembly.Module(bin.get()), WebAssembly.CompileError, "WebAssembly.Module doesn't validate: table.set value to type Anyref expected Funcref, in function at index 0 (evaluating 'new WebAssembly.Module(bin.get())')");
70 }
71
72 {
73     const builder = (new Builder())
74       .Type().End()
75       .Import()
76             .Table("imp", "tbl", {initial: 2, element: "funcref"})
77       .End()
78       .Function().End()
79       .Export()
80           .Function("j")
81       .End()
82       .Code()
83         .Function("j", { params: [], ret: "anyref" })
84             .I32Const(0)
85             .TableGet(0)
86         .End()
87       .End();
88
89     const bin = builder.WebAssembly();
90     bin.trim();
91
92     assert.throws(() => new WebAssembly.Module(bin.get()), WebAssembly.CompileError, "WebAssembly.Module doesn't validate: control flow returns with unexpected type, in function at index 0 (evaluating 'new WebAssembly.Module(bin.get())')");
93 }
94
95 {
96     assert.throws(() => new WebAssembly.Table({initial:2, element:"i32"}), TypeError, "WebAssembly.Table expects its 'element' field to be the string 'funcref' or 'anyref'");
97 }