blob: c4d299e871e55e1a3cf10d82fc257584d5a40362 [file] [log] [blame]
Ben Murdoch097c5b22016-05-18 11:27:45 +01001// Copyright 2016 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --expose-wasm
6
7load("test/mjsunit/wasm/wasm-constants.js");
Ben Murdochda12d292016-06-02 14:46:10 +01008load("test/mjsunit/wasm/wasm-module-builder.js");
Ben Murdoch097c5b22016-05-18 11:27:45 +01009
10function instantiate(sig, body) {
Ben Murdochda12d292016-06-02 14:46:10 +010011 var builder = new WasmModuleBuilder();
Ben Murdoch097c5b22016-05-18 11:27:45 +010012
Ben Murdochda12d292016-06-02 14:46:10 +010013 var func = builder.addFunction("", sig)
14 .addBody(body);
15
16 builder.addStart(func.index);
17
18 return builder.instantiate();
Ben Murdoch097c5b22016-05-18 11:27:45 +010019}
20
21function assertFails(sig, body) {
22 try {
23 var module = instantiate(sig, body);
24 print("expected failure, but passes");
25 assertFalse(true);
26 } catch (expected) {
27 print("ok: " + expected);
28 }
29}
30
31function assertVerifies(sig, body) {
32 var module = instantiate(sig, body);
33 assertFalse(module === undefined);
34 assertFalse(module === null);
35 assertFalse(module === 0);
36 assertEquals("object", typeof module);
37 return module;
38}
39
Ben Murdochc5610432016-08-08 18:44:38 +010040assertVerifies(kSig_v_v, [kExprNop]);
41assertVerifies(kSig_i, [kExprI8Const, 0]);
Ben Murdoch097c5b22016-05-18 11:27:45 +010042
43// Arguments aren't allow to start functions.
Ben Murdochc5610432016-08-08 18:44:38 +010044assertFails(kSig_i_i, [kExprGetLocal, 0]);
45assertFails(kSig_i_ii, [kExprGetLocal, 0]);
46assertFails(kSig_i_dd, [kExprGetLocal, 0]);
Ben Murdoch097c5b22016-05-18 11:27:45 +010047
48(function testInvalidIndex() {
Ben Murdochda12d292016-06-02 14:46:10 +010049 print("testInvalidIndex");
50 var builder = new WasmModuleBuilder();
Ben Murdoch097c5b22016-05-18 11:27:45 +010051
Ben Murdochc5610432016-08-08 18:44:38 +010052 var func = builder.addFunction("", kSig_v_v)
Ben Murdochda12d292016-06-02 14:46:10 +010053 .addBody([kExprNop]);
54
55 builder.addStart(func.index + 1);
56
57 assertThrows(builder.instantiate);
Ben Murdoch097c5b22016-05-18 11:27:45 +010058})();
59
60
61(function testTwoStartFuncs() {
Ben Murdochda12d292016-06-02 14:46:10 +010062 print("testTwoStartFuncs");
63 var builder = new WasmModuleBuilder();
Ben Murdoch097c5b22016-05-18 11:27:45 +010064
Ben Murdochc5610432016-08-08 18:44:38 +010065 var func = builder.addFunction("", kSig_v_v)
Ben Murdochda12d292016-06-02 14:46:10 +010066 .addBody([kExprNop]);
67
Ben Murdoch61f157c2016-09-16 13:49:30 +010068 builder.addExplicitSection([kDeclStart, 0]);
69 builder.addExplicitSection([kDeclStart, 0]);
Ben Murdochda12d292016-06-02 14:46:10 +010070
71 assertThrows(builder.instantiate);
Ben Murdoch097c5b22016-05-18 11:27:45 +010072})();
73
74
75(function testRun() {
Ben Murdochda12d292016-06-02 14:46:10 +010076 print("testRun");
77 var builder = new WasmModuleBuilder();
Ben Murdoch097c5b22016-05-18 11:27:45 +010078
Ben Murdochda12d292016-06-02 14:46:10 +010079 builder.addMemory(12, 12, true);
Ben Murdoch097c5b22016-05-18 11:27:45 +010080
Ben Murdochc5610432016-08-08 18:44:38 +010081 var func = builder.addFunction("", kSig_v_v)
82 .addBody([kExprI8Const, 0, kExprI8Const, 77, kExprI32StoreMem, 0, 0]);
Ben Murdochda12d292016-06-02 14:46:10 +010083
84 builder.addStart(func.index);
85
86 var module = builder.instantiate();
87 var memory = module.exports.memory;
Ben Murdoch097c5b22016-05-18 11:27:45 +010088 var view = new Int8Array(memory);
89 assertEquals(77, view[0]);
90})();
91
92(function testStartFFI() {
Ben Murdochda12d292016-06-02 14:46:10 +010093 print("testStartFFI");
Ben Murdoch097c5b22016-05-18 11:27:45 +010094 var ranned = false;
Ben Murdochda12d292016-06-02 14:46:10 +010095 var ffi = { foo : function() {
Ben Murdoch097c5b22016-05-18 11:27:45 +010096 print("we ranned at stert!");
97 ranned = true;
Ben Murdochda12d292016-06-02 14:46:10 +010098 }};
99
100 var builder = new WasmModuleBuilder();
Ben Murdoch61f157c2016-09-16 13:49:30 +0100101 var sig_index = builder.addType(kSig_v_v);
Ben Murdochda12d292016-06-02 14:46:10 +0100102
103 builder.addImport("foo", sig_index);
104 var func = builder.addFunction("", sig_index)
Ben Murdochc5610432016-08-08 18:44:38 +0100105 .addBody([kExprCallImport, kArity0, 0]);
Ben Murdochda12d292016-06-02 14:46:10 +0100106
107 builder.addStart(func.index);
108
109 var module = builder.instantiate(ffi);
Ben Murdoch097c5b22016-05-18 11:27:45 +0100110 assertTrue(ranned);
111})();