| 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: --validate-asm --allow-natives-syntax | 5 // Flags: --validate-asm --allow-natives-syntax |
| 6 | 6 |
| 7 var filename = '(?:[^ ]+/)?test/mjsunit/wasm/asm-wasm-stack.js'; | 7 var filename = '(?:[^ ]+/)?test/mjsunit/wasm/asm-wasm-stack.js'; |
| 8 filename = filename.replace(/\//g, '[/\\\\]'); | 8 filename = filename.replace(/\//g, '[/\\\\]'); |
| 9 | 9 |
| 10 function checkPreformattedStack(e, expected_lines) { | 10 function checkPreformattedStack(e, expected_lines) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 function throwException() { | 42 function throwException() { |
| 43 throw new Error('exception from JS'); | 43 throw new Error('exception from JS'); |
| 44 } | 44 } |
| 45 | 45 |
| 46 function generateWasmFromAsmJs(stdlib, foreign, heap) { | 46 function generateWasmFromAsmJs(stdlib, foreign, heap) { |
| 47 'use asm'; | 47 'use asm'; |
| 48 var throwFunc = foreign.throwFunc; | 48 var throwFunc = foreign.throwFunc; |
| 49 function callThrow() { | 49 function callThrow() { |
| 50 throwFunc(); | 50 throwFunc(); |
| 51 } | 51 } |
| 52 function redirectFun() { | 52 function redirectFun(i) { |
| 53 callThrow(); | 53 i = i|0; |
| 54 switch (i|0) { |
| 55 case 0: callThrow(); break; |
| 56 case 1: redirectFun(0); break; |
| 57 case 2: redirectFun(1); break; |
| 58 } |
| 54 } | 59 } |
| 55 return redirectFun; | 60 return redirectFun; |
| 56 } | 61 } |
| 57 | 62 |
| 58 (function PreformattedStackTraceFromJS() { | 63 (function PreformattedStackTraceFromJS() { |
| 59 var fun = generateWasmFromAsmJs(this, {throwFunc: throwException}, undefined); | 64 var fun = generateWasmFromAsmJs(this, {throwFunc: throwException}, undefined); |
| 60 var e = null; | 65 var e = null; |
| 61 try { | 66 try { |
| 62 fun(); | 67 fun(0); |
| 63 } catch (ex) { | 68 } catch (ex) { |
| 64 e = ex; | 69 e = ex; |
| 65 } | 70 } |
| 66 assertInstanceof(e, Error, 'exception should have been thrown'); | 71 assertInstanceof(e, Error, 'exception should have been thrown'); |
| 67 checkPreformattedStack(e, [ | 72 checkPreformattedStack(e, [ |
| 68 '^Error: exception from JS$', | 73 '^Error: exception from JS$', |
| 69 '^ *at throwException \\(' + filename + ':43:9\\)$', | 74 '^ *at throwException \\(' + filename + ':43:9\\)$', |
| 70 '^ *at callThrow \\(' + filename + ':50:5\\)$', | 75 '^ *at callThrow \\(' + filename + ':50:5\\)$', |
| 71 '^ *at redirectFun \\(' + filename + ':53:5\\)$', | 76 '^ *at redirectFun \\(' + filename + ':55:15\\)$', |
| 72 '^ *at PreformattedStackTraceFromJS \\(' + filename + ':62:5\\)$', | 77 '^ *at PreformattedStackTraceFromJS \\(' + filename + ':67:5\\)$', |
| 73 '^ *at ' + filename + ':75:3$' | 78 '^ *at ' + filename + ':80:3$' |
| 74 ]); | 79 ]); |
| 75 })(); | 80 })(); |
| 76 | 81 |
| 77 // Now collect the Callsite objects instead of just a string. | 82 // Now collect the Callsite objects instead of just a string. |
| 78 Error.prepareStackTrace = function(error, frames) { | 83 Error.prepareStackTrace = function(error, frames) { |
| 79 return frames; | 84 return frames; |
| 80 }; | 85 }; |
| 81 | 86 |
| 82 (function CallsiteObjectsFromJS() { | 87 (function CallsiteObjectsFromJS() { |
| 83 var fun = generateWasmFromAsmJs(this, {throwFunc: throwException}, undefined); | 88 var fun = generateWasmFromAsmJs(this, {throwFunc: throwException}, undefined); |
| 84 var e = null; | 89 var e = null; |
| 85 try { | 90 try { |
| 86 fun(); | 91 fun(2); |
| 87 } catch (ex) { | 92 } catch (ex) { |
| 88 e = ex; | 93 e = ex; |
| 89 } | 94 } |
| 90 assertInstanceof(e, Error, 'exception should have been thrown'); | 95 assertInstanceof(e, Error, 'exception should have been thrown'); |
| 91 checkFunctionsOnCallsites(e, [ | 96 checkFunctionsOnCallsites(e, [ |
| 92 ['throwException', 43, 9], // -- | 97 ['throwException', 43, 9], // -- |
| 93 ['callThrow', 50, 5], // -- | 98 ['callThrow', 50, 5], // -- |
| 94 ['redirectFun', 53, 5], // -- | 99 ['redirectFun', 55, 15], // -- |
| 95 ['CallsiteObjectsFromJS', 86, 5], // -- | 100 ['redirectFun', 56, 15], // -- |
| 96 [null, 98, 3] | 101 ['redirectFun', 57, 15], // -- |
| 102 ['CallsiteObjectsFromJS', 91, 5], // -- |
| 103 [null, 105, 3] |
| 97 ]); | 104 ]); |
| 98 })(); | 105 })(); |
| OLD | NEW |