tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 })();