Chromium Code Reviews| Index: test/unittests/wasm/ast-decoder-unittest.cc |
| diff --git a/test/unittests/wasm/ast-decoder-unittest.cc b/test/unittests/wasm/ast-decoder-unittest.cc |
| index 0a9ce865edba94e653b8020227ce25a7f0495d0a..621040ae17206dca8475ecf0542eba1c07741738 100644 |
| --- a/test/unittests/wasm/ast-decoder-unittest.cc |
| +++ b/test/unittests/wasm/ast-decoder-unittest.cc |
| @@ -1829,6 +1829,91 @@ TEST_F(AstDecoderTest, Select_TypeCheck) { |
| WASM_SELECT(WASM_F32(9.9), WASM_GET_LOCAL(0), WASM_I64V_1(0))); |
| } |
| +TEST_F(AstDecoderTest, Throw) { |
| + FLAG_wasm_eh_prototype = true; |
| + EXPECT_VERIFIES_INLINE(sigs.v_i(), WASM_GET_LOCAL(0), kExprThrow); |
| + |
| + // TODO(jpp): can't throw d, f, or l. |
|
bradnelson
2016/08/11 00:39:29
Wait just to clarify.
You're asserting the current
John
2016/08/11 11:22:27
Yes. I am testing the (current) implementation, le
|
| + EXPECT_VERIFIES_INLINE(sigs.i_d(), WASM_GET_LOCAL(0), kExprThrow, |
| + WASM_I32V(0)); |
| + EXPECT_VERIFIES_INLINE(sigs.i_f(), WASM_GET_LOCAL(0), kExprThrow, |
| + WASM_I32V(0)); |
| + EXPECT_VERIFIES_INLINE(sigs.l_l(), WASM_GET_LOCAL(0), kExprThrow, |
| + WASM_I64V(0)); |
| +} |
| + |
| +#define WASM_CATCH(local) kExprCatch, static_cast<byte>(local) |
| +TEST_F(AstDecoderTest, TryCatch) { |
| + FLAG_wasm_eh_prototype = true; |
| + EXPECT_VERIFIES_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), kExprEnd); |
| + |
| + // Missing catch. |
| + EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryCatch, kExprEnd); |
| + |
| + // Missing end. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0)); |
| + |
| + // Double catch. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), WASM_CATCH(0), |
| + kExprEnd); |
| + |
| + // Unexpected finally. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), kExprFinally, |
| + kExprEnd); |
| +} |
| + |
| +TEST_F(AstDecoderTest, TryFinally) { |
| + FLAG_wasm_eh_prototype = true; |
| + EXPECT_VERIFIES_INLINE(sigs.v_v(), kExprTryFinally, kExprFinally, kExprEnd); |
| + |
| + // Mising finally. |
| + EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryFinally, kExprEnd); |
| + |
| + // Missing end. |
| + EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryFinally, kExprFinally); |
| + |
| + // Double finally. |
| + EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryFinally, kExprFinally, kExprFinally, |
| + kExprEnd); |
| + |
| + // Unexpected catch. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), kExprFinally, |
| + kExprEnd); |
| +} |
| + |
| +TEST_F(AstDecoderTest, TryCatchFinally) { |
| + FLAG_wasm_eh_prototype = true; |
| + EXPECT_VERIFIES_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), |
| + kExprFinally, kExprEnd); |
| + |
| + // Missing catch. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, kExprFinally, |
| + kExprEnd); |
| + |
| + // Double catch. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), |
| + WASM_CATCH(0), kExprFinally, kExprEnd); |
| + |
| + // Missing finally. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), |
| + kExprEnd); |
| + |
| + // Double finally. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), |
| + kExprFinally, kExprFinally, kExprEnd); |
| + |
| + // Finally before catch. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, kExprFinally, |
| + WASM_CATCH(0), kExprEnd); |
| + |
| + // Missing both try and finally. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, kExprEnd); |
| + |
| + // Missing end. |
| + EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), |
| + kExprFinally); |
| +} |
| + |
| class WasmOpcodeLengthTest : public TestWithZone { |
| public: |
| WasmOpcodeLengthTest() : TestWithZone() {} |
| @@ -1856,6 +1941,12 @@ TEST_F(WasmOpcodeLengthTest, Statements) { |
| EXPECT_LENGTH(1, kExprSelect); |
| EXPECT_LENGTH(3, kExprBr); |
| EXPECT_LENGTH(3, kExprBrIf); |
| + EXPECT_LENGTH(1, kExprThrow); |
| + EXPECT_LENGTH(1, kExprTryCatch); |
| + EXPECT_LENGTH(1, kExprTryFinally); |
| + EXPECT_LENGTH(1, kExprTryCatchFinally); |
| + EXPECT_LENGTH(2, kExprCatch); |
| + EXPECT_LENGTH(1, kExprFinally); |
| } |
| TEST_F(WasmOpcodeLengthTest, MiscExpressions) { |
| @@ -2097,6 +2188,13 @@ TEST_F(WasmOpcodeArityTest, Control) { |
| EXPECT_ARITY(0, kExprReturn, ARITY_0); |
| EXPECT_ARITY(1, kExprReturn, ARITY_1); |
| } |
| + |
| + EXPECT_ARITY(0, kExprThrow); |
| + EXPECT_ARITY(0, kExprTryCatch); |
| + EXPECT_ARITY(0, kExprTryFinally); |
| + EXPECT_ARITY(0, kExprTryCatchFinally); |
| + EXPECT_ARITY(1, kExprCatch, 2); |
| + EXPECT_ARITY(0, kExprFinally); |
| } |
| TEST_F(WasmOpcodeArityTest, Misc) { |