notraps.any.js (2684B)
1 // META: global=window,dedicatedworker,jsshell 2 // META: script=/wasm/jsapi/wasm-module-builder.js 3 // META: script=/wasm/jsapi/jspi/testharness-additions.js 4 5 test(() => { 6 let builder = new WasmModuleBuilder(); 7 let js_tag = builder.addImportedTag("", "tag", kSig_v_r); 8 let try_sig_index = builder.addType(kSig_i_v); 9 10 let promise42 = new WebAssembly.Suspending(() => Promise.resolve(42)); 11 let kPromise42Ref = builder.addImport("", "promise42", kSig_i_v); 12 13 builder.addFunction("test", kSig_i_v) 14 .addBody([ 15 kExprTry, try_sig_index, 16 kExprCallFunction, kPromise42Ref, 17 kExprReturn, // If there was no trap or exception, return 18 kExprCatch, js_tag, 19 kExprI32Const, 43, 20 kExprReturn, 21 kExprEnd, 22 ]) 23 .exportFunc(); 24 25 let instance = builder.instantiate({"": { 26 promise42: promise42, 27 tag: WebAssembly.JSTag, 28 }}); 29 30 assert_equals(43, instance.exports.test()); 31 },"catch SuspendError"); 32 33 promise_test(async t=>{ 34 let builder = new WasmModuleBuilder(); 35 let js_tag = builder.addImportedTag("", "tag", kSig_v_r); 36 let try_sig_index = builder.addType(kSig_i_v); 37 38 let promise42 = new WebAssembly.Suspending(() => Promise.resolve(42)); 39 let kPromise42Ref = builder.addImport("", "promise42", kSig_i_v); 40 let backChnnlRef = builder.addImport("","backChnnl",kSig_i_v); 41 42 builder.addFunction("main", kSig_i_v) 43 .addBody([ 44 kExprTry, try_sig_index, 45 kExprCallFunction, backChnnlRef, 46 kExprReturn, // If there was no trap or exception, return 47 kExprCatch, js_tag, 48 kExprI32Const, 43, 49 kExprReturn, 50 kExprEnd, 51 ]) 52 .exportFunc(); 53 54 builder.addFunction("inner", kSig_i_v) 55 .addBody([ 56 kExprCallFunction, kPromise42Ref, 57 ]) 58 .exportFunc(); 59 60 let backChnnl = ()=>instance.exports.inner(); 61 let instance = builder.instantiate({"": { 62 promise42: promise42, 63 backChnnl: backChnnl, 64 tag: WebAssembly.JSTag, 65 }}); 66 67 wrapped_export = WebAssembly.promising(instance.exports.main); 68 69 assert_equals(await wrapped_export(), 43); 70 },"throw on reentrance"); 71 72 test(() => { 73 let builder = new WasmModuleBuilder(); 74 import_index = builder.addImport('m', 'import', kSig_v_v); 75 builder.addFunction("test", kSig_v_v) 76 .addBody([ 77 kExprCallFunction, import_index, 78 ]).exportFunc(); 79 let js_import = new WebAssembly.Suspending(() => Promise.resolve()); 80 let instance = builder.instantiate({m: {import: js_import}}); 81 assert_throws_js(WebAssembly.SuspendError, instance.exports.test); 82 },"unwrapped export");