diff options
Diffstat (limited to 'js/src/jit-test/tests/wasm/spec/exception-handling/try_delegate.wast.js')
-rw-r--r-- | js/src/jit-test/tests/wasm/spec/exception-handling/try_delegate.wast.js | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/spec/exception-handling/try_delegate.wast.js b/js/src/jit-test/tests/wasm/spec/exception-handling/try_delegate.wast.js new file mode 100644 index 0000000000..83400f02f5 --- /dev/null +++ b/js/src/jit-test/tests/wasm/spec/exception-handling/try_delegate.wast.js @@ -0,0 +1,177 @@ +/* Copyright 2021 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// ./test/core/try_delegate.wast + +// ./test/core/try_delegate.wast:3 +let $0 = instantiate(`(module + (tag $$e0) + (tag $$e1) + + (func (export "delegate-no-throw") (result i32) + (try $$t (result i32) + (do (try (result i32) (do (i32.const 1)) (delegate $$t))) + (catch $$e0 (i32.const 2)) + ) + ) + + (func $$throw-if (param i32) + (local.get 0) + (if (then (throw $$e0)) (else)) + ) + + (func (export "delegate-throw") (param i32) (result i32) + (try $$t (result i32) + (do + (try (result i32) + (do (local.get 0) (call $$throw-if) (i32.const 1)) + (delegate $$t) + ) + ) + (catch $$e0 (i32.const 2)) + ) + ) + + (func (export "delegate-skip") (result i32) + (try $$t (result i32) + (do + (try (result i32) + (do + (try (result i32) + (do (throw $$e0) (i32.const 1)) + (delegate $$t) + ) + ) + (catch $$e0 (i32.const 2)) + ) + ) + (catch $$e0 (i32.const 3)) + ) + ) + + (func (export "delegate-to-block") (result i32) + (try (result i32) + (do (block (try (do (throw $$e0)) (delegate 0))) + (i32.const 0)) + (catch_all (i32.const 1))) + ) + + (func (export "delegate-to-catch") (result i32) + (try (result i32) + (do (try + (do (throw $$e0)) + (catch $$e0 + (try (do (rethrow 1)) (delegate 0)))) + (i32.const 0)) + (catch_all (i32.const 1))) + ) + + (func (export "delegate-to-caller") + (try (do (try (do (throw $$e0)) (delegate 1))) (catch_all)) + ) + + (func $$select-tag (param i32) + (block (block (block (local.get 0) (br_table 0 1 2)) (return)) (throw $$e0)) + (throw $$e1) + ) + + (func (export "delegate-merge") (param i32 i32) (result i32) + (try $$t (result i32) + (do + (local.get 0) + (call $$select-tag) + (try + (result i32) + (do (local.get 1) (call $$select-tag) (i32.const 1)) + (delegate $$t) + ) + ) + (catch $$e0 (i32.const 2)) + ) + ) + + (func (export "delegate-throw-no-catch") (result i32) + (try (result i32) + (do (try (result i32) (do (throw $$e0) (i32.const 1)) (delegate 0))) + (catch $$e1 (i32.const 2)) + ) + ) +)`); + +// ./test/core/try_delegate.wast:97 +assert_return(() => invoke($0, `delegate-no-throw`, []), [value("i32", 1)]); + +// ./test/core/try_delegate.wast:99 +assert_return(() => invoke($0, `delegate-throw`, [0]), [value("i32", 1)]); + +// ./test/core/try_delegate.wast:100 +assert_return(() => invoke($0, `delegate-throw`, [1]), [value("i32", 2)]); + +// ./test/core/try_delegate.wast:102 +assert_exception(() => invoke($0, `delegate-throw-no-catch`, [])); + +// ./test/core/try_delegate.wast:104 +assert_return(() => invoke($0, `delegate-merge`, [1, 0]), [value("i32", 2)]); + +// ./test/core/try_delegate.wast:105 +assert_exception(() => invoke($0, `delegate-merge`, [2, 0])); + +// ./test/core/try_delegate.wast:106 +assert_return(() => invoke($0, `delegate-merge`, [0, 1]), [value("i32", 2)]); + +// ./test/core/try_delegate.wast:107 +assert_exception(() => invoke($0, `delegate-merge`, [0, 2])); + +// ./test/core/try_delegate.wast:108 +assert_return(() => invoke($0, `delegate-merge`, [0, 0]), [value("i32", 1)]); + +// ./test/core/try_delegate.wast:110 +assert_return(() => invoke($0, `delegate-skip`, []), [value("i32", 3)]); + +// ./test/core/try_delegate.wast:112 +assert_return(() => invoke($0, `delegate-to-block`, []), [value("i32", 1)]); + +// ./test/core/try_delegate.wast:113 +assert_return(() => invoke($0, `delegate-to-catch`, []), [value("i32", 1)]); + +// ./test/core/try_delegate.wast:115 +assert_exception(() => invoke($0, `delegate-to-caller`, [])); + +// ./test/core/try_delegate.wast:117 +assert_malformed(() => instantiate(`(module (func (delegate 0))) `), `unexpected token`); + +// ./test/core/try_delegate.wast:122 +assert_malformed( + () => instantiate(`(module (tag $$e) (func (try (do) (catch $$e) (delegate 0)))) `), + `unexpected token`, +); + +// ./test/core/try_delegate.wast:127 +assert_malformed( + () => instantiate(`(module (func (try (do) (catch_all) (delegate 0)))) `), + `unexpected token`, +); + +// ./test/core/try_delegate.wast:132 +assert_malformed( + () => instantiate(`(module (func (try (do) (delegate) (delegate 0)))) `), + `unexpected token`, +); + +// ./test/core/try_delegate.wast:137 +assert_invalid( + () => instantiate(`(module (func (try (do) (delegate 1))))`), + `unknown label`, +); |