tor-browser

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

br-non-null.js (1528B)


      1 // br_on_non_null from constant
      2 wasmValidateText(`(module
      3  (func
      4    block (result (ref extern))
      5      ref.null extern
      6      br_on_non_null 0
      7      return
      8    end
      9    drop
     10  )
     11 )`);
     12 
     13 // br_on_non_null from parameter
     14 wasmValidateText(`(module
     15  (func (param externref) (result (ref extern))
     16    local.get 0
     17    br_on_non_null 0
     18    unreachable
     19  )
     20 )`);
     21 
     22 // br_on_null with multiple results
     23 wasmValidateText(`(module
     24  (func (param (ref null extern) (ref extern)) (result i32 i32 i32 (ref extern))
     25    i32.const 0
     26    i32.const 1
     27    i32.const 2
     28    local.get 0
     29    br_on_non_null 0
     30    local.get 1
     31  )
     32 )`);
     33 
     34 // no block type
     35 wasmFailValidateText(`(module
     36  (func
     37    block
     38      ref.null extern
     39      br_on_non_null 0
     40    end
     41  )
     42 )`, /type mismatch: target block type expected to be \[_, ref\]/);
     43 
     44 // in dead code
     45 wasmValidateText(`(module
     46  (type $t (func))
     47  (func (result funcref)
     48    ref.null $t
     49    return
     50    br_on_non_null 0
     51  )
     52 )`);
     53 
     54 wasmFailValidateText(`(module
     55  (func
     56    return
     57    br_on_non_null 0
     58  )
     59 )`, /type mismatch: target block type expected to be \[_, ref\]/);
     60 
     61 // Test the branch takes the correct path and results are passed correctly
     62 let {ifNull} = wasmEvalText(`(module
     63  (func (export "ifNull") (param externref externref) (result externref)
     64    local.get 0
     65    br_on_non_null 0
     66    local.get 1
     67  )
     68 )`).exports;
     69 
     70 const DefaultTestVal = "default!test";
     71 assertEq(ifNull(null, DefaultTestVal), DefaultTestVal);
     72 for (let val of WasmNonNullExternrefValues) {
     73  assertEq(ifNull(val, DefaultTestVal), val);
     74 }