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 }