ion-error-trace.js (2437B)
1 /////////////////////////////////////////////////////////////////////////////// 2 // FIRST TEST ///////////////////////////////////////////////////////////////// 3 /////////////////////////////////////////////////////////////////////////////// 4 5 (function() { 6 7 function debug() { 8 throw new Error('gotcha'); 9 } 10 11 var imports = { 12 numCalls:0, 13 main: { 14 f() { 15 debug(); 16 } 17 } 18 }; 19 20 var instance = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(`(module 21 (import "main" "f" (func)) 22 (func (export "add") (param i32) (param i32) (result i32) 23 local.get 0 24 local.get 1 25 call 2 26 ) 27 (func (param i32) (param i32) (result i32) 28 local.get 0 29 i32.const 5000 30 i32.eq 31 if 32 call 0 33 end 34 35 local.get 0 36 local.get 1 37 i32.add 38 ) 39 )`)), imports).exports; 40 41 function loopBody(i) { 42 var caught = null; 43 try { 44 assertEq(instance.add(i, i), 2 * i); 45 } catch(e) { 46 // TODO check stack trace 47 print(e.stack); 48 caught = e; 49 } 50 assertEq(!!caught, i === 5000); 51 } 52 53 function main() { 54 for (var i = 0; i < 100000; i++) { 55 loopBody(i); 56 } 57 assertEq(i, 100000); 58 } 59 60 main(); 61 62 })(); 63 64 /////////////////////////////////////////////////////////////////////////////// 65 // SECOND TEST //////////////////////////////////////////////////////////////// 66 /////////////////////////////////////////////////////////////////////////////// 67 68 (function() { 69 70 function debug() { 71 gc(); 72 } 73 74 var imports = { 75 numCalls:0, 76 main: { 77 f() { 78 debug(); 79 } 80 } 81 }; 82 83 var instance = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(`(module 84 (import "main" "f" (func)) 85 (func (export "add") (param i32) (param i32) (result i32) 86 local.get 0 87 local.get 1 88 call 2 89 ) 90 (func (param i32) (param i32) (result i32) 91 local.get 0 92 i32.const 5000 93 i32.eq 94 if 95 call 0 96 unreachable 97 end 98 99 local.get 0 100 local.get 1 101 i32.add 102 ) 103 )`)), imports).exports; 104 105 function loopBody(i) { 106 var caught = null; 107 try { 108 assertEq(instance.add(i, i), 2 * i); 109 } catch(e) { 110 // TODO check stack trace 111 print(e.stack); 112 caught = e; 113 } 114 assertEq(!!caught, i === 5000); 115 } 116 117 function main() { 118 for (var i = 0; i < 100000; i++) { 119 loopBody(i); 120 } 121 assertEq(i, 100000); 122 } 123 124 main(); 125 126 })();