OLD | NEW |
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: --validate-asm --allow-natives-syntax |
6 | 6 |
7 var stdlib = this; | 7 var stdlib = this; |
8 | 8 |
| 9 function assertValidAsm(func) { |
| 10 assertTrue(%IsAsmWasmCode(func)); |
| 11 } |
| 12 |
9 (function TestStdlibConstants() { | 13 (function TestStdlibConstants() { |
10 function Module(stdlib) { | 14 function Module(stdlib) { |
11 "use asm"; | 15 "use asm"; |
12 | 16 |
13 var StdlibInfinity = stdlib.Infinity; | 17 var StdlibInfinity = stdlib.Infinity; |
14 var StdlibNaN = stdlib.NaN; | 18 var StdlibNaN = stdlib.NaN; |
15 var StdlibMathE = stdlib.Math.E; | 19 var StdlibMathE = stdlib.Math.E; |
16 var StdlibMathLN10 = stdlib.Math.LN10; | 20 var StdlibMathLN10 = stdlib.Math.LN10; |
17 var StdlibMathLN2 = stdlib.Math.LN2; | 21 var StdlibMathLN2 = stdlib.Math.LN2; |
18 var StdlibMathLOG2E = stdlib.Math.LOG2E; | 22 var StdlibMathLOG2E = stdlib.Math.LOG2E; |
(...skipping 15 matching lines...) Expand all Loading... |
34 return 1; | 38 return 1; |
35 } | 39 } |
36 | 40 |
37 function nanCheck() { | 41 function nanCheck() { |
38 return +StdlibNaN; | 42 return +StdlibNaN; |
39 } | 43 } |
40 | 44 |
41 return {caller:caller, nanCheck:nanCheck}; | 45 return {caller:caller, nanCheck:nanCheck}; |
42 } | 46 } |
43 | 47 |
44 var m = Wasm.instantiateModuleFromAsm(Module.toString(), stdlib); | 48 var m = Module(stdlib); |
| 49 assertValidAsm(Module); |
45 assertEquals(1, m.caller()); | 50 assertEquals(1, m.caller()); |
46 assertTrue(isNaN(m.nanCheck())); | 51 assertTrue(isNaN(m.nanCheck())); |
47 })(); | 52 })(); |
48 | 53 |
49 | 54 |
50 var stdlib = this; | 55 var stdlib = this; |
51 var stdlib_root_members = [ | 56 var stdlib_root_members = [ |
52 'Infinity', | 57 'Infinity', |
53 'NaN', | 58 'NaN', |
54 ]; | 59 ]; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 "use asm"; | 93 "use asm"; |
89 var foo = stdlib.NaN; | 94 var foo = stdlib.NaN; |
90 return {}; | 95 return {}; |
91 } | 96 } |
92 for (var i = 0; i < stdlib_root_members.length; ++i) { | 97 for (var i = 0; i < stdlib_root_members.length; ++i) { |
93 var member = stdlib_root_members[i]; | 98 var member = stdlib_root_members[i]; |
94 var stdlib = {}; | 99 var stdlib = {}; |
95 stdlib[member] = 0; | 100 stdlib[member] = 0; |
96 print(member); | 101 print(member); |
97 var code = Module.toString().replace('NaN', member); | 102 var code = Module.toString().replace('NaN', member); |
98 assertThrows(function() { | 103 var decl = eval('(' + code + ')'); |
99 Wasm.instantiateModuleFromAsm(code, stdlib); | 104 decl(stdlib); |
100 }); | 105 assertTrue(%IsNotAsmWasmCode(decl)); |
101 } | 106 } |
102 for (var i = 0; i < stdlib_math_members.length; ++i) { | 107 for (var i = 0; i < stdlib_math_members.length; ++i) { |
103 var member = stdlib_math_members[i]; | 108 var member = stdlib_math_members[i]; |
104 var stdlib = {Math:{}}; | 109 var stdlib = {Math:{}}; |
105 stdlib['Math'][member] = 0; | 110 stdlib['Math'][member] = 0; |
106 print(member); | 111 print(member); |
107 var code = Module.toString().replace('NaN', 'Math.' + member); | 112 var code = Module.toString().replace('NaN', 'Math.' + member); |
108 assertThrows(function() { | 113 var decl = eval('(' + code + ')'); |
109 Wasm.instantiateModuleFromAsm(code, stdlib); | 114 decl(stdlib); |
110 }); | 115 assertTrue(%IsNotAsmWasmCode(decl)); |
111 } | 116 } |
112 })(); | 117 })(); |
113 | 118 |
114 | 119 |
115 (function TestMissingNaNStdlib() { | 120 (function TestMissingNaNStdlib() { |
116 function Module(stdlib) { | 121 function Module(stdlib) { |
117 "use asm"; | 122 "use asm"; |
118 var foo = stdlib.NaN; | 123 var foo = stdlib.NaN; |
119 return {}; | 124 return {}; |
120 } | 125 } |
121 for (var i = 0; i < stdlib_root_members.length; ++i) { | 126 for (var i = 0; i < stdlib_root_members.length; ++i) { |
122 var member = stdlib_root_members[i]; | 127 var member = stdlib_root_members[i]; |
123 var code = Module.toString().replace('NaN', member); | 128 var code = Module.toString().replace('NaN', member); |
124 assertThrows(function() { | 129 var decl = eval('(' + code + ')'); |
125 Wasm.instantiateModuleFromAsm(code, {}); | 130 decl({}); |
126 }); | 131 assertTrue(%IsNotAsmWasmCode(decl)); |
127 } | 132 } |
128 for (var i = 0; i < stdlib_math_members.length; ++i) { | 133 for (var i = 0; i < stdlib_math_members.length; ++i) { |
129 var member = stdlib_math_members[i]; | 134 var member = stdlib_math_members[i]; |
130 var code = Module.toString().replace('NaN', 'Math.' + member); | 135 var code = Module.toString().replace('NaN', 'Math.' + member); |
| 136 var decl = eval('(' + code + ')'); |
131 assertThrows(function() { | 137 assertThrows(function() { |
132 Wasm.instantiateModuleFromAsm(code, {}); | 138 decl({}); |
| 139 assertTrue(%IsNotAsmWasmCode(decl)); |
133 }); | 140 }); |
134 } | 141 } |
135 })(); | 142 })(); |
136 | 143 |
137 | 144 |
138 (function TestStdlibFunctionsInside() { | 145 (function TestStdlibFunctionsInside() { |
139 function Module(stdlib) { | 146 function Module(stdlib) { |
140 "use asm"; | 147 "use asm"; |
141 | 148 |
142 var StdlibMathCeil = stdlib.Math.ceil; | 149 var StdlibMathCeil = stdlib.Math.ceil; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 if (!(deltaEqual(+StdlibMathAtan2(6.0, 7.0), 0.7086262721276703)|0)) | 210 if (!(deltaEqual(+StdlibMathAtan2(6.0, 7.0), 0.7086262721276703)|0)) |
204 return 0; | 211 return 0; |
205 if (+StdlibMathPow(6.0, 7.0) != 279936.0) return 0; | 212 if (+StdlibMathPow(6.0, 7.0) != 279936.0) return 0; |
206 | 213 |
207 return 1; | 214 return 1; |
208 } | 215 } |
209 | 216 |
210 return {caller:caller}; | 217 return {caller:caller}; |
211 } | 218 } |
212 | 219 |
213 var m = Wasm.instantiateModuleFromAsm(Module.toString(), stdlib); | 220 var m = Module(stdlib); |
| 221 assertValidAsm(Module); |
214 assertEquals(1, m.caller()); | 222 assertEquals(1, m.caller()); |
215 })(); | 223 })(); |
216 | 224 |
217 | 225 |
218 (function TestStdlibFunctionOutside() { | 226 (function TestStdlibFunctionOutside() { |
219 function looseEqual(x, y, delta) { | 227 function looseEqual(x, y, delta) { |
220 if (delta === undefined) { | 228 if (delta === undefined) { |
221 delta = 1.0e-10; | 229 delta = 1.0e-10; |
222 } | 230 } |
223 if (isNaN(x) && isNaN(y)) { | 231 if (isNaN(x) && isNaN(y)) { |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 fround2_f32: fround2_f32, | 355 fround2_f32: fround2_f32, |
348 fround2_f64: fround2_f64, | 356 fround2_f64: fround2_f64, |
349 min_i32: min_i32, | 357 min_i32: min_i32, |
350 min_f32: min_f32, | 358 min_f32: min_f32, |
351 min_f64: min_f64, | 359 min_f64: min_f64, |
352 max_i32: max_i32, | 360 max_i32: max_i32, |
353 max_f32: max_f32, | 361 max_f32: max_f32, |
354 max_f64: max_f64, | 362 max_f64: max_f64, |
355 }; | 363 }; |
356 } | 364 } |
357 var m = Wasm.instantiateModuleFromAsm(Module.toString(), stdlib); | 365 var m = Module(stdlib); |
| 366 assertValidAsm(Module); |
358 var values = { | 367 var values = { |
359 i32: [ | 368 i32: [ |
360 0, 1, -1, 123, 456, -123, -456, | 369 0, 1, -1, 123, 456, -123, -456, |
361 0x40000000, 0x7FFFFFFF, -0x80000000, | 370 0x40000000, 0x7FFFFFFF, -0x80000000, |
362 ], | 371 ], |
363 u32: [ | 372 u32: [ |
364 0, 1, 123, 456, | 373 0, 1, 123, 456, |
365 0x40000000, 0x7FFFFFFF, 0xFFFFFFFF, 0x80000000, | 374 0x40000000, 0x7FFFFFFF, 0xFFFFFFFF, 0x80000000, |
366 ], | 375 ], |
367 f32: [ | 376 f32: [ |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 if (!compare(expected, actual)) { | 451 if (!compare(expected, actual)) { |
443 print(expected + ' !== ' + actual + ' for ' + name + | 452 print(expected + ' !== ' + actual + ' for ' + name + |
444 ' with input ' + val0 + ' ' + val1); | 453 ' with input ' + val0 + ' ' + val1); |
445 assertTrue(false); | 454 assertTrue(false); |
446 } | 455 } |
447 } | 456 } |
448 } | 457 } |
449 } | 458 } |
450 } | 459 } |
451 })(); | 460 })(); |
OLD | NEW |