| 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 // clang-format off | 5 // clang-format off | 
| 6 // Flags: --expose-wasm | 6 // Flags: --expose-wasm | 
| 7 | 7 | 
| 8 load("test/mjsunit/wasm/wasm-constants.js"); | 8 load("test/mjsunit/wasm/wasm-constants.js"); | 
| 9 load("test/mjsunit/wasm/wasm-module-builder.js"); | 9 load("test/mjsunit/wasm/wasm-module-builder.js"); | 
| 10 | 10 | 
| 11 // The stack trace contains file path, only keep "stack.js". | 11 // The stack trace contains file path, only keep "stack.js". | 
| 12 function stripPath(s) { | 12 function stripPath(s) { | 
| 13   return s.replace(/[^ (]*stack\.js/g, "stack.js"); | 13   return s.replace(/[^ (]*stack\.js/g, "stack.js"); | 
| 14 } | 14 } | 
| 15 | 15 | 
| 16 function verifyStack(frames, expected) { | 16 function verifyStack(frames, expected) { | 
| 17   assertEquals(expected.length, frames.length, "number of frames mismatch"); | 17   assertEquals(expected.length, frames.length, "number of frames mismatch"); | 
| 18   expected.forEach(function(exp, i) { | 18   expected.forEach(function(exp, i) { | 
| 19     if (exp[1] != "?") { | 19     assertEquals(exp[1], frames[i].getFunctionName(), | 
| 20       assertEquals(exp[1], frames[i].getFunctionName(), | 20         "["+i+"].getFunctionName()"); | 
| 21           "["+i+"].getFunctionName()"); |  | 
| 22     } |  | 
| 23     assertEquals(exp[2], frames[i].getLineNumber(), "["+i+"].getLineNumber()"); | 21     assertEquals(exp[2], frames[i].getLineNumber(), "["+i+"].getLineNumber()"); | 
| 24     if (exp[0]) | 22     if (exp[0]) | 
| 25       assertEquals(exp[3], frames[i].getPosition(), | 23       assertEquals(exp[3], frames[i].getPosition(), | 
| 26           "["+i+"].getPosition()"); | 24           "["+i+"].getPosition()"); | 
| 27     assertContains(exp[4], frames[i].getFileName(), "["+i+"].getFileName()"); | 25     assertContains(exp[4], frames[i].getFileName(), "["+i+"].getFileName()"); | 
| 28     var toString; | 26     var toString; | 
| 29     if (exp[0]) { | 27     if (exp[0]) { | 
| 30       var funName = exp[1] == "?" ? "" : exp[1]; | 28       toString = exp[1] + " (<WASM>[" + exp[2] + "]+" + exp[3] + ")"; | 
| 31       toString = funName + " (<WASM>[" + exp[2] + "]+" + exp[3] + ")"; |  | 
| 32     } else { | 29     } else { | 
| 33       toString = exp[4] + ":" + exp[2] + ":"; | 30       toString = exp[4] + ":" + exp[2] + ":"; | 
| 34     } | 31     } | 
| 35     assertContains(toString, frames[i].toString(), "["+i+"].toString()"); | 32     assertContains(toString, frames[i].toString(), "["+i+"].toString()"); | 
| 36   }); | 33   }); | 
| 37 } | 34 } | 
| 38 | 35 | 
| 39 | 36 | 
| 40 var stack; | 37 var stack; | 
| 41 function STACK() { | 38 function STACK() { | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 64 // Call the mem_out_of_bounds function, in order to have two WASM stack frames. | 61 // Call the mem_out_of_bounds function, in order to have two WASM stack frames. | 
| 65 builder.addFunction("call_mem_out_of_bounds", kSig_v_v) | 62 builder.addFunction("call_mem_out_of_bounds", kSig_v_v) | 
| 66   .addBody([kExprCallFunction, kArity0, mem_oob_func.index]) | 63   .addBody([kExprCallFunction, kArity0, mem_oob_func.index]) | 
| 67   .exportAs("call_mem_out_of_bounds"); | 64   .exportAs("call_mem_out_of_bounds"); | 
| 68 | 65 | 
| 69 var module = builder.instantiate({func: STACK}); | 66 var module = builder.instantiate({func: STACK}); | 
| 70 | 67 | 
| 71 (function testSimpleStack() { | 68 (function testSimpleStack() { | 
| 72   var expected_string = "Error\n" + | 69   var expected_string = "Error\n" + | 
| 73     // The line numbers below will change as this test gains / loses lines.. | 70     // The line numbers below will change as this test gains / loses lines.. | 
| 74     "    at STACK (stack.js:42:11)\n" +           // -- | 71     "    at STACK (stack.js:39:11)\n" +           // -- | 
| 75     "    at main (<WASM>[0]+1)\n" +               // -- | 72     "    at main (<WASM>[0]+1)\n" +               // -- | 
| 76     "    at testSimpleStack (stack.js:79:18)\n" + // -- | 73     "    at testSimpleStack (stack.js:76:18)\n" + // -- | 
| 77     "    at stack.js:81:3";                       // -- | 74     "    at stack.js:78:3";                       // -- | 
| 78 | 75 | 
| 79   module.exports.main(); | 76   module.exports.main(); | 
| 80   assertEquals(expected_string, stripPath(stack)); | 77   assertEquals(expected_string, stripPath(stack)); | 
| 81 })(); | 78 })(); | 
| 82 | 79 | 
| 83 // For the remaining tests, collect the Callsite objects instead of just a | 80 // For the remaining tests, collect the Callsite objects instead of just a | 
| 84 // string: | 81 // string: | 
| 85 Error.prepareStackTrace = function(error, frames) { | 82 Error.prepareStackTrace = function(error, frames) { | 
| 86   return frames; | 83   return frames; | 
| 87 }; | 84 }; | 
| 88 | 85 | 
| 89 (function testStackFrames() { | 86 (function testStackFrames() { | 
| 90   module.exports.main(); | 87   module.exports.main(); | 
| 91 | 88 | 
| 92   verifyStack(stack, [ | 89   verifyStack(stack, [ | 
| 93       // isWasm           function   line  pos        file | 90       // isWasm           function   line  pos        file | 
| 94       [   false,           "STACK",    42,   0, "stack.js"], | 91       [   false,           "STACK",    39,   0, "stack.js"], | 
| 95       [    true,            "main",     0,   1,       null], | 92       [    true,            "main",     0,   1,       null], | 
| 96       [   false, "testStackFrames",    90,   0, "stack.js"], | 93       [   false, "testStackFrames",    87,   0, "stack.js"], | 
| 97       [   false,              null,    99,   0, "stack.js"] | 94       [   false,              null,    96,   0, "stack.js"] | 
| 98   ]); | 95   ]); | 
| 99 })(); | 96 })(); | 
| 100 | 97 | 
| 101 (function testWasmUnreachable() { | 98 (function testWasmUnreachable() { | 
| 102   try { | 99   try { | 
| 103     module.exports.exec_unreachable(); | 100     module.exports.exec_unreachable(); | 
| 104     fail("expected wasm exception"); | 101     fail("expected wasm exception"); | 
| 105   } catch (e) { | 102   } catch (e) { | 
| 106     assertContains("unreachable", e.message); | 103     assertContains("unreachable", e.message); | 
| 107     verifyStack(e.stack, [ | 104     verifyStack(e.stack, [ | 
| 108         // isWasm               function   line  pos        file | 105         // isWasm               function   line  pos        file | 
| 109         [    true,    "exec_unreachable",    1,    1,       null], | 106         [    true,    "exec_unreachable",    1,    1,       null], | 
| 110         [   false, "testWasmUnreachable",  103,    0, "stack.js"], | 107         [   false, "testWasmUnreachable",  100,    0, "stack.js"], | 
| 111         [   false,                  null,  114,    0, "stack.js"] | 108         [   false,                  null,  111,    0, "stack.js"] | 
| 112     ]); | 109     ]); | 
| 113   } | 110   } | 
| 114 })(); | 111 })(); | 
| 115 | 112 | 
| 116 (function testWasmMemOutOfBounds() { | 113 (function testWasmMemOutOfBounds() { | 
| 117   try { | 114   try { | 
| 118     module.exports.call_mem_out_of_bounds(); | 115     module.exports.call_mem_out_of_bounds(); | 
| 119     fail("expected wasm exception"); | 116     fail("expected wasm exception"); | 
| 120   } catch (e) { | 117   } catch (e) { | 
| 121     assertContains("out of bounds", e.message); | 118     assertContains("out of bounds", e.message); | 
| 122     verifyStack(e.stack, [ | 119     verifyStack(e.stack, [ | 
| 123         // isWasm                  function   line  pos        file | 120         // isWasm                  function   line  pos        file | 
| 124         [    true,                      "?",     2,   3,       null], | 121         [    true,                       "",     2,   3,       null], | 
| 125         [    true, "call_mem_out_of_bounds",     3,   1,       null], | 122         [    true, "call_mem_out_of_bounds",     3,   1,       null], | 
| 126         [   false, "testWasmMemOutOfBounds",   118,   0, "stack.js"], | 123         [   false, "testWasmMemOutOfBounds",   115,   0, "stack.js"], | 
| 127         [   false,                     null,   130,   0, "stack.js"] | 124         [   false,                     null,   127,   0, "stack.js"] | 
| 128     ]); | 125     ]); | 
| 129   } | 126   } | 
| 130 })(); | 127 })(); | 
| OLD | NEW | 
|---|