Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(457)

Side by Side Diff: test/mjsunit/wasm/start-function.js

Issue 1770913002: [wasm] Use the JavaScript WasmModuleBuilder utility in JS tests. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/mjsunit/wasm/stackwalk.js ('k') | test/mjsunit/wasm/unreachable.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --expose-wasm 5 // Flags: --expose-wasm
6 6
7 load("test/mjsunit/wasm/wasm-constants.js"); 7 load("test/mjsunit/wasm/wasm-constants.js");
8 load("test/mjsunit/wasm/wasm-module-builder.js");
8 9
9 function instantiate(sig, body) { 10 function instantiate(sig, body) {
10 var module = new Array(); 11 var builder = new WasmModuleBuilder();
11 module = module.concat([
12 // -- header
13 kWasmH0, kWasmH1, kWasmH2, kWasmH3,
14 kWasmV0, kWasmV1, kWasmV2, kWasmV3
15 ]);
16 module = module.concat([
17 // -- signatures
18 kDeclSignatures, 1,
19 ]);
20 module = module.concat(sig);
21 module = module.concat([
22 // -- functions
23 kDeclFunctions, 1,
24 0, // decl flags
25 0, 0, // signature
26 body.length, 0, // body size
27 ]);
28 module = module.concat(body);
29 module = module.concat([
30 // -- declare start function
31 kDeclStartFunction,
32 0
33 ]);
34 12
35 var data = bytes.apply(this, module); 13 var func = builder.addFunction("", sig)
36 print(module); 14 .addBody(body);
37 print(data instanceof ArrayBuffer); 15
38 print(data.byteLength); 16 builder.addStart(func.index);
39 return _WASMEXP_.instantiateModule(data); 17
18 return builder.instantiate();
40 } 19 }
41 20
42 function assertFails(sig, body) { 21 function assertFails(sig, body) {
43 try { 22 try {
44 var module = instantiate(sig, body); 23 var module = instantiate(sig, body);
45 print("expected failure, but passes"); 24 print("expected failure, but passes");
46 assertFalse(true); 25 assertFalse(true);
47 } catch (expected) { 26 } catch (expected) {
48 print("ok: " + expected); 27 print("ok: " + expected);
49 } 28 }
50 } 29 }
51 30
52 function assertVerifies(sig, body) { 31 function assertVerifies(sig, body) {
53 var module = instantiate(sig, body); 32 var module = instantiate(sig, body);
54 assertFalse(module === undefined); 33 assertFalse(module === undefined);
55 assertFalse(module === null); 34 assertFalse(module === null);
56 assertFalse(module === 0); 35 assertFalse(module === 0);
57 assertEquals("object", typeof module); 36 assertEquals("object", typeof module);
58 return module; 37 return module;
59 } 38 }
60 39
61 assertVerifies([0, kAstStmt], [kExprNop]); 40 assertVerifies([kAstStmt], [kExprNop]);
62 assertVerifies([0, kAstI32], [kExprI8Const, 0]); 41 assertVerifies([kAstI32], [kExprI8Const, 0]);
63 42
64 // Arguments aren't allow to start functions. 43 // Arguments aren't allow to start functions.
65 assertFails([1, kAstI32, kAstI32], [kExprGetLocal, 0]); 44 assertFails([kAstI32, kAstI32], [kExprGetLocal, 0]);
66 assertFails([2, kAstI32, kAstI32, kAstF32], [kExprGetLocal, 0]); 45 assertFails([kAstI32, kAstI32, kAstF32], [kExprGetLocal, 0]);
67 assertFails([3, kAstI32, kAstI32, kAstF32, kAstF64], [kExprGetLocal, 0]); 46 assertFails([kAstI32, kAstI32, kAstF32, kAstF64], [kExprGetLocal, 0]);
68 47
69 (function testInvalidIndex() { 48 (function testInvalidIndex() {
70 var kBodySize = 1; 49 print("testInvalidIndex");
71 var data = bytesWithHeader( 50 var builder = new WasmModuleBuilder();
72 // -- signatures
73 kDeclSignatures, 1,
74 0, kAstStmt,
75 // -- functions
76 kDeclFunctions, 1,
77 0, // decl flags
78 0, 0, // signature
79 kBodySize, 0, // body size
80 kExprNop, // body
81 // -- declare start function
82 kDeclStartFunction,
83 1
84 );
85 51
86 assertThrows(function() { _WASMEXP_.instantiateModule(data); }); 52 var func = builder.addFunction("", [kAstStmt])
53 .addBody([kExprNop]);
54
55 builder.addStart(func.index + 1);
56
57 assertThrows(builder.instantiate);
87 })(); 58 })();
88 59
89 60
90 (function testTwoStartFuncs() { 61 (function testTwoStartFuncs() {
91 var kBodySize = 1; 62 print("testTwoStartFuncs");
92 var data = bytesWithHeader( 63 var builder = new WasmModuleBuilder();
93 // -- signatures
94 kDeclSignatures, 1,
95 0, kAstStmt,
96 // -- functions
97 kDeclFunctions, 1,
98 0, // decl flags
99 0, 0, // signature
100 kBodySize, 0, // body size
101 kExprNop, // body
102 // -- declare start function
103 kDeclStartFunction,
104 0,
105 // -- declare start function
106 kDeclStartFunction,
107 0
108 );
109 64
110 assertThrows(function() { _WASMEXP_.instantiateModule(data); }); 65 var func = builder.addFunction("", [kAstStmt])
66 .addBody([kExprNop]);
67
68 builder.addExplicitSection([kDeclStartFunction, 0]);
69 builder.addExplicitSection([kDeclStartFunction, 0]);
70
71 assertThrows(builder.instantiate);
111 })(); 72 })();
112 73
113 74
114 (function testRun() { 75 (function testRun() {
115 var kBodySize = 6; 76 print("testRun");
77 var builder = new WasmModuleBuilder();
116 78
117 var data = bytesWithHeader( 79 builder.addMemory(12, 12, true);
118 kDeclMemory,
119 12, 12, 1, // memory
120 // -- signatures
121 kDeclSignatures, 1,
122 0, kAstStmt,
123 // -- start function
124 kDeclFunctions, 1,
125 0, // decl flags
126 0, 0, // signature
127 kBodySize, 0, // code size
128 // -- start body
129 kExprI32StoreMem, 0, kExprI8Const, 0, kExprI8Const, 77,
130 // -- declare start function
131 kDeclStartFunction,
132 0
133 );
134 80
135 var module = _WASMEXP_.instantiateModule(data); 81 var func = builder.addFunction("", [kAstStmt])
82 .addBody([kExprI32StoreMem, 0, kExprI8Const, 0, kExprI8Const, 77]);
83
84 builder.addStart(func.index);
85
86 var module = builder.instantiate();
136 var memory = module.memory; 87 var memory = module.memory;
137 var view = new Int8Array(memory); 88 var view = new Int8Array(memory);
138 assertEquals(77, view[0]); 89 assertEquals(77, view[0]);
139 })(); 90 })();
140 91
141 (function testStartFFI() { 92 (function testStartFFI() {
142 var kBodySize = 2; 93 print("testStartFFI");
143 var kNameOffset = kHeaderSize + 4 + 9 + 7 + 3;
144
145 var data = bytesWithHeader(
146 // -- signatures
147 kDeclSignatures, 1,
148 0, kAstStmt,
149 // -- imported function
150 kDeclFunctions, 2,
151 kDeclFunctionImport | kDeclFunctionName, // decl flags
152 0, 0, // signature
153 kNameOffset, 0, 0, 0,
154 // -- start function
155 0, // decl flags
156 0, 0, // signature
157 kBodySize, 0, // code size
158 // -- start body
159 kExprCallFunction, 0,
160 // -- declare start function
161 kDeclStartFunction,
162 1,
163 kDeclEnd,
164 'f', 'o', 'o', 0
165 );
166
167 var ranned = false; 94 var ranned = false;
168 var ffi = new Object(); 95 var ffi = { foo : function() {
169 ffi.foo = function() {
170 print("we ranned at stert!"); 96 print("we ranned at stert!");
171 ranned = true; 97 ranned = true;
172 } 98 }};
173 var module = _WASMEXP_.instantiateModule(data, ffi); 99
174 var memory = module.memory; 100 var builder = new WasmModuleBuilder();
175 var view = new Int8Array(memory); 101 var sig_index = builder.addSignature([kAstStmt]);
102
103 builder.addImport("foo", sig_index);
104 var func = builder.addFunction("", sig_index)
105 .addBody([kExprCallImport, 0]);
106
107 builder.addStart(func.index);
108
109 var module = builder.instantiate(ffi);
176 assertTrue(ranned); 110 assertTrue(ranned);
177 })(); 111 })();
OLDNEW
« no previous file with comments | « test/mjsunit/wasm/stackwalk.js ('k') | test/mjsunit/wasm/unreachable.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698