tor-browser

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

caching.js (1759B)


      1 // |jit-test| skip-if: !wasmCachingEnabled()
      2 
      3 load(libdir + "wasm-caching.js");
      4 load(libdir + "wasm-binary.js");
      5 
      6 testCached(`(module
      7    (func $test (param i64) (result f64)
      8        local.get 0
      9        f64.convert_i64_u
     10    )
     11    (func (export "run") (result i32)
     12        i64.const 1
     13        call $test
     14        f64.const 1
     15        f64.eq
     16    )
     17 )`,
     18    undefined,
     19    i => { assertEq(i.exports.run(), 1); }
     20 );
     21 
     22 testCached(
     23    `(module
     24       (type $long-serialized-type (func (param
     25          i64 i32 f64 f32 i64 i32 f64 f32 i64 i32 f64 f32 i64 i32 f64 f32))) 
     26       (func (export "run") (result i32)
     27         (i32.const 42)))`,
     28    undefined,
     29    i => { assertEq(i.exports.run(), 42); }
     30 );
     31 
     32 testCached(
     33    `(module
     34       (type $T (func (result i32)))
     35       (func $t1 (import "" "t1") (type $T))
     36       (func $t2 (import "" "t2") (type $T))
     37       (func $t3 (type $T) (i32.const 30))
     38       (func $t4 (type $T) (i32.const 40))
     39       (table funcref (elem $t1 $t2 $t3 $t4))
     40       (func (export "run") (param i32) (result i32)
     41         (call_indirect (type $T) (local.get 0))))`,
     42    {'':{ t1() { return 10 }, t2() { return 20 } }},
     43    i => {
     44        assertEq(i.exports.run(0), 10);
     45        assertEq(i.exports.run(1), 20);
     46        assertEq(i.exports.run(2), 30);
     47        assertEq(i.exports.run(3), 40);
     48    }
     49 );
     50 
     51 testCached(
     52  moduleWithSections([
     53    sigSection([{args:[], ret:VoidCode}]),
     54    declSection([0]),
     55    exportSection([{funcIndex:0, name:"run"}]),
     56    bodySection([funcBody({locals:[], body:[UnreachableCode]})]),
     57    nameSection([funcNameSubsection([{name:"wee"}])])
     58  ]),
     59  undefined,
     60  i => assertErrorMessage(() => i.exports.run(), RuntimeError, /unreachable/)
     61 );
     62 
     63 // Note: a fuller behavioral test of caching is in bench/wasm_box2d.js.