diff options
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/exceptions-anyref.js')
-rw-r--r-- | deps/v8/test/mjsunit/wasm/exceptions-anyref.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/wasm/exceptions-anyref.js b/deps/v8/test/mjsunit/wasm/exceptions-anyref.js new file mode 100644 index 0000000000..8d43610ff8 --- /dev/null +++ b/deps/v8/test/mjsunit/wasm/exceptions-anyref.js @@ -0,0 +1,101 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --experimental-wasm-eh --experimental-wasm-anyref --allow-natives-syntax + +load("test/mjsunit/wasm/wasm-constants.js"); +load("test/mjsunit/wasm/wasm-module-builder.js"); +load("test/mjsunit/wasm/exceptions-utils.js"); + +// Test the encoding of a thrown exception with a null-ref value. +(function TestThrowRefNull() { + print(arguments.callee.name); + let builder = new WasmModuleBuilder(); + let except = builder.addException(kSig_v_r); + builder.addFunction("throw_null", kSig_v_v) + .addBody([ + kExprRefNull, + kExprThrow, except, + ]).exportFunc(); + let instance = builder.instantiate(); + + assertWasmThrows(instance, except, [null], () => instance.exports.throw_null()); +})(); + +// Test throwing/catching the null-ref value. +(function TestThrowCatchRefNull() { + print(arguments.callee.name); + let builder = new WasmModuleBuilder(); + let except = builder.addException(kSig_v_r); + builder.addFunction("throw_catch_null", kSig_i_i) + .addBody([ + kExprTry, kWasmAnyRef, + kExprGetLocal, 0, + kExprI32Eqz, + kExprIf, kWasmAnyRef, + kExprRefNull, + kExprThrow, except, + kExprElse, + kExprI32Const, 42, + kExprReturn, + kExprEnd, + kExprCatch, + kExprBrOnExn, 0, except, + kExprRethrow, + kExprEnd, + kExprRefIsNull, + kExprIf, kWasmI32, + kExprI32Const, 23, + kExprElse, + kExprUnreachable, + kExprEnd, + ]).exportFunc(); + let instance = builder.instantiate(); + + assertEquals(23, instance.exports.throw_catch_null(0)); + assertEquals(42, instance.exports.throw_catch_null(1)); +})(); + +// Test the encoding of a thrown exception with a reference type value. +(function TestThrowRefParam() { + print(arguments.callee.name); + let builder = new WasmModuleBuilder(); + let except = builder.addException(kSig_v_r); + builder.addFunction("throw_param", kSig_v_r) + .addBody([ + kExprGetLocal, 0, + kExprThrow, except, + ]).exportFunc(); + let instance = builder.instantiate(); + let o = new Object(); + + assertWasmThrows(instance, except, [o], () => instance.exports.throw_param(o)); + assertWasmThrows(instance, except, [1], () => instance.exports.throw_param(1)); + assertWasmThrows(instance, except, [2.3], () => instance.exports.throw_param(2.3)); + assertWasmThrows(instance, except, ["str"], () => instance.exports.throw_param("str")); +})(); + +// Test throwing/catching the reference type value. +(function TestThrowCatchRefParam() { + print(arguments.callee.name); + let builder = new WasmModuleBuilder(); + let except = builder.addException(kSig_v_r); + builder.addFunction("throw_catch_param", kSig_r_r) + .addBody([ + kExprTry, kWasmAnyRef, + kExprGetLocal, 0, + kExprThrow, except, + kExprCatch, + kExprBrOnExn, 0, except, + kExprRethrow, + kExprEnd, + ]).exportFunc(); + let instance = builder.instantiate(); + let o = new Object(); + + assertEquals(o, instance.exports.throw_catch_param(o)); + assertEquals(1, instance.exports.throw_catch_param(1)); + assertEquals(2.3, instance.exports.throw_catch_param(2.3)); + assertEquals("str", instance.exports.throw_catch_param("str")); +})(); |