| 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 |