tor-browser

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

cast-extern.js (1343B)


      1 // Casting an external value is an expected failure
      2 let { refCast, refTest, brOnCast, brOnCastFail } = wasmEvalText(`
      3  (module
      4    (; give this struct a unique identity to avoid conflict with
      5       the struct type defined in wasm.js ;)
      6    (type (struct (field i64 i32 i64 i32)))
      7 
      8    (func (export "refTest") (param externref) (result i32)
      9      local.get 0
     10      any.convert_extern
     11      ref.test (ref 0)
     12    )
     13    (func (export "refCast") (param externref) (result i32)
     14      local.get 0
     15      any.convert_extern
     16      ref.cast (ref null 0)
     17      drop
     18      i32.const 0
     19    )
     20    (func (export "brOnCast") (param externref) (result i32)
     21      (block (result (ref 0))
     22        local.get 0
     23        any.convert_extern
     24        br_on_cast 0 anyref (ref 0)
     25        drop
     26        i32.const 0
     27        br 1
     28      )
     29      drop
     30      i32.const 1
     31    )
     32    (func (export "brOnCastFail") (param externref) (result i32)
     33      (block (result anyref)
     34        local.get 0
     35        any.convert_extern
     36        br_on_cast_fail 0 anyref (ref 0)
     37        drop
     38        i32.const 1
     39        br 1
     40      )
     41      drop
     42      i32.const 0
     43    )
     44  )
     45 `).exports;
     46 
     47 for (let v of WasmNonNullExternrefValues) {
     48  assertErrorMessage(() => refCast(v), WebAssembly.RuntimeError, /bad cast/);
     49  assertEq(refTest(v), 0);
     50  assertEq(brOnCast(v), 0);
     51  assertEq(brOnCastFail(v), 0);
     52 }