OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "test/unittests/test-utils.h" | 5 #include "test/unittests/test-utils.h" |
6 | 6 |
7 #include "src/v8.h" | 7 #include "src/v8.h" |
8 | 8 |
9 #include "test/cctest/wasm/test-signatures.h" | 9 #include "test/cctest/wasm/test-signatures.h" |
10 | 10 |
(...skipping 1985 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1996 WASM_I32V(0)); | 1996 WASM_I32V(0)); |
1997 EXPECT_FAILURE_INLINE(sigs.i_f(), WASM_GET_LOCAL(0), kExprThrow, | 1997 EXPECT_FAILURE_INLINE(sigs.i_f(), WASM_GET_LOCAL(0), kExprThrow, |
1998 WASM_I32V(0)); | 1998 WASM_I32V(0)); |
1999 EXPECT_FAILURE_INLINE(sigs.l_l(), WASM_GET_LOCAL(0), kExprThrow, | 1999 EXPECT_FAILURE_INLINE(sigs.l_l(), WASM_GET_LOCAL(0), kExprThrow, |
2000 WASM_I64V(0)); | 2000 WASM_I64V(0)); |
2001 } | 2001 } |
2002 | 2002 |
2003 #define WASM_CATCH(local) kExprCatch, static_cast<byte>(local) | 2003 #define WASM_CATCH(local) kExprCatch, static_cast<byte>(local) |
2004 TEST_F(AstDecoderTest, TryCatch) { | 2004 TEST_F(AstDecoderTest, TryCatch) { |
2005 FLAG_wasm_eh_prototype = true; | 2005 FLAG_wasm_eh_prototype = true; |
2006 EXPECT_VERIFIES_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), kExprEnd); | 2006 EXPECT_VERIFIES_INLINE(sigs.v_i(), kExprTry, WASM_CATCH(0), kExprEnd); |
2007 | 2007 |
2008 // Missing catch. | 2008 // Missing catch. |
2009 EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryCatch, kExprEnd); | 2009 EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTry, kExprEnd); |
2010 | 2010 |
2011 // Missing end. | 2011 // Missing end. |
2012 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0)); | 2012 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTry, WASM_CATCH(0)); |
2013 | 2013 |
2014 // Double catch. | 2014 // Double catch. |
2015 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), WASM_CATCH(0), | 2015 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTry, WASM_CATCH(0), WASM_CATCH(0), |
2016 kExprEnd); | |
2017 | |
2018 // Unexpected finally. | |
2019 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), kExprFinally, | |
2020 kExprEnd); | 2016 kExprEnd); |
2021 } | 2017 } |
2022 | 2018 |
2023 TEST_F(AstDecoderTest, TryFinally) { | |
2024 FLAG_wasm_eh_prototype = true; | |
2025 EXPECT_VERIFIES_INLINE(sigs.v_v(), kExprTryFinally, kExprFinally, kExprEnd); | |
2026 | |
2027 // Mising finally. | |
2028 EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryFinally, kExprEnd); | |
2029 | |
2030 // Missing end. | |
2031 EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryFinally, kExprFinally); | |
2032 | |
2033 // Double finally. | |
2034 EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryFinally, kExprFinally, kExprFinally, | |
2035 kExprEnd); | |
2036 | |
2037 // Unexpected catch. | |
2038 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), kExprFinally, | |
2039 kExprEnd); | |
2040 } | |
2041 | |
2042 TEST_F(AstDecoderTest, TryCatchFinally) { | |
2043 FLAG_wasm_eh_prototype = true; | |
2044 EXPECT_VERIFIES_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), | |
2045 kExprFinally, kExprEnd); | |
2046 | |
2047 // Missing catch. | |
2048 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, kExprFinally, | |
2049 kExprEnd); | |
2050 | |
2051 // Double catch. | |
2052 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), | |
2053 WASM_CATCH(0), kExprFinally, kExprEnd); | |
2054 | |
2055 // Missing finally. | |
2056 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), | |
2057 kExprEnd); | |
2058 | |
2059 // Double finally. | |
2060 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), | |
2061 kExprFinally, kExprFinally, kExprEnd); | |
2062 | |
2063 // Finally before catch. | |
2064 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, kExprFinally, | |
2065 WASM_CATCH(0), kExprEnd); | |
2066 | |
2067 // Missing both try and finally. | |
2068 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, kExprEnd); | |
2069 | |
2070 // Missing end. | |
2071 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), | |
2072 kExprFinally); | |
2073 } | |
2074 | |
2075 class WasmOpcodeLengthTest : public TestWithZone { | 2019 class WasmOpcodeLengthTest : public TestWithZone { |
2076 public: | 2020 public: |
2077 WasmOpcodeLengthTest() : TestWithZone() {} | 2021 WasmOpcodeLengthTest() : TestWithZone() {} |
2078 }; | 2022 }; |
2079 | 2023 |
2080 #define EXPECT_LENGTH(expected, opcode) \ | 2024 #define EXPECT_LENGTH(expected, opcode) \ |
2081 { \ | 2025 { \ |
2082 static const byte code[] = {opcode, 0, 0, 0, 0, 0, 0, 0, 0}; \ | 2026 static const byte code[] = {opcode, 0, 0, 0, 0, 0, 0, 0, 0}; \ |
2083 EXPECT_EQ(expected, OpcodeLength(code, code + sizeof(code))); \ | 2027 EXPECT_EQ(expected, OpcodeLength(code, code + sizeof(code))); \ |
2084 } | 2028 } |
2085 | 2029 |
2086 #define EXPECT_LENGTH_N(expected, ...) \ | 2030 #define EXPECT_LENGTH_N(expected, ...) \ |
2087 { \ | 2031 { \ |
2088 static const byte code[] = {__VA_ARGS__}; \ | 2032 static const byte code[] = {__VA_ARGS__}; \ |
2089 EXPECT_EQ(expected, OpcodeLength(code, code + sizeof(code))); \ | 2033 EXPECT_EQ(expected, OpcodeLength(code, code + sizeof(code))); \ |
2090 } | 2034 } |
2091 | 2035 |
2092 TEST_F(WasmOpcodeLengthTest, Statements) { | 2036 TEST_F(WasmOpcodeLengthTest, Statements) { |
2093 EXPECT_LENGTH(1, kExprNop); | 2037 EXPECT_LENGTH(1, kExprNop); |
2094 EXPECT_LENGTH(1, kExprBlock); | 2038 EXPECT_LENGTH(1, kExprBlock); |
2095 EXPECT_LENGTH(1, kExprLoop); | 2039 EXPECT_LENGTH(1, kExprLoop); |
2096 EXPECT_LENGTH(1, kExprIf); | 2040 EXPECT_LENGTH(1, kExprIf); |
2097 EXPECT_LENGTH(1, kExprElse); | 2041 EXPECT_LENGTH(1, kExprElse); |
2098 EXPECT_LENGTH(1, kExprEnd); | 2042 EXPECT_LENGTH(1, kExprEnd); |
2099 EXPECT_LENGTH(1, kExprSelect); | 2043 EXPECT_LENGTH(1, kExprSelect); |
2100 EXPECT_LENGTH(3, kExprBr); | 2044 EXPECT_LENGTH(3, kExprBr); |
2101 EXPECT_LENGTH(3, kExprBrIf); | 2045 EXPECT_LENGTH(3, kExprBrIf); |
2102 EXPECT_LENGTH(1, kExprThrow); | 2046 EXPECT_LENGTH(1, kExprThrow); |
2103 EXPECT_LENGTH(1, kExprTryCatch); | 2047 EXPECT_LENGTH(1, kExprTry); |
2104 EXPECT_LENGTH(1, kExprTryFinally); | |
2105 EXPECT_LENGTH(1, kExprTryCatchFinally); | |
2106 EXPECT_LENGTH(2, kExprCatch); | 2048 EXPECT_LENGTH(2, kExprCatch); |
2107 EXPECT_LENGTH(1, kExprFinally); | |
2108 } | 2049 } |
2109 | 2050 |
2110 TEST_F(WasmOpcodeLengthTest, MiscExpressions) { | 2051 TEST_F(WasmOpcodeLengthTest, MiscExpressions) { |
2111 EXPECT_LENGTH(2, kExprI8Const); | 2052 EXPECT_LENGTH(2, kExprI8Const); |
2112 EXPECT_LENGTH(5, kExprF32Const); | 2053 EXPECT_LENGTH(5, kExprF32Const); |
2113 EXPECT_LENGTH(9, kExprF64Const); | 2054 EXPECT_LENGTH(9, kExprF64Const); |
2114 EXPECT_LENGTH(2, kExprGetLocal); | 2055 EXPECT_LENGTH(2, kExprGetLocal); |
2115 EXPECT_LENGTH(2, kExprSetLocal); | 2056 EXPECT_LENGTH(2, kExprSetLocal); |
2116 EXPECT_LENGTH(2, kExprGetGlobal); | 2057 EXPECT_LENGTH(2, kExprGetGlobal); |
2117 EXPECT_LENGTH(2, kExprSetGlobal); | 2058 EXPECT_LENGTH(2, kExprSetGlobal); |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2341 EXPECT_ARITY(1, kExprBr, ARITY_1); | 2282 EXPECT_ARITY(1, kExprBr, ARITY_1); |
2342 EXPECT_ARITY(2, kExprBrIf, ARITY_1); | 2283 EXPECT_ARITY(2, kExprBrIf, ARITY_1); |
2343 EXPECT_ARITY(2, kExprBrTable, ARITY_1); | 2284 EXPECT_ARITY(2, kExprBrTable, ARITY_1); |
2344 | 2285 |
2345 { | 2286 { |
2346 EXPECT_ARITY(0, kExprReturn, ARITY_0); | 2287 EXPECT_ARITY(0, kExprReturn, ARITY_0); |
2347 EXPECT_ARITY(1, kExprReturn, ARITY_1); | 2288 EXPECT_ARITY(1, kExprReturn, ARITY_1); |
2348 } | 2289 } |
2349 | 2290 |
2350 EXPECT_ARITY(0, kExprThrow); | 2291 EXPECT_ARITY(0, kExprThrow); |
2351 EXPECT_ARITY(0, kExprTryCatch); | 2292 EXPECT_ARITY(0, kExprTry); |
2352 EXPECT_ARITY(0, kExprTryFinally); | |
2353 EXPECT_ARITY(0, kExprTryCatchFinally); | |
2354 EXPECT_ARITY(1, kExprCatch, 2); | 2293 EXPECT_ARITY(1, kExprCatch, 2); |
2355 EXPECT_ARITY(0, kExprFinally); | |
2356 } | 2294 } |
2357 | 2295 |
2358 TEST_F(WasmOpcodeArityTest, Misc) { | 2296 TEST_F(WasmOpcodeArityTest, Misc) { |
2359 EXPECT_ARITY(0, kExprI8Const); | 2297 EXPECT_ARITY(0, kExprI8Const); |
2360 EXPECT_ARITY(0, kExprI32Const); | 2298 EXPECT_ARITY(0, kExprI32Const); |
2361 EXPECT_ARITY(0, kExprF32Const); | 2299 EXPECT_ARITY(0, kExprF32Const); |
2362 EXPECT_ARITY(0, kExprI64Const); | 2300 EXPECT_ARITY(0, kExprI64Const); |
2363 EXPECT_ARITY(0, kExprF64Const); | 2301 EXPECT_ARITY(0, kExprF64Const); |
2364 EXPECT_ARITY(0, kExprGetLocal); | 2302 EXPECT_ARITY(0, kExprGetLocal); |
2365 EXPECT_ARITY(1, kExprSetLocal); | 2303 EXPECT_ARITY(1, kExprSetLocal); |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2720 iter.next(); | 2658 iter.next(); |
2721 EXPECT_TRUE(iter.has_next()); | 2659 EXPECT_TRUE(iter.has_next()); |
2722 EXPECT_EQ(kExprI8Const, iter.current()); | 2660 EXPECT_EQ(kExprI8Const, iter.current()); |
2723 iter.next(); | 2661 iter.next(); |
2724 EXPECT_FALSE(iter.has_next()); | 2662 EXPECT_FALSE(iter.has_next()); |
2725 } | 2663 } |
2726 | 2664 |
2727 } // namespace wasm | 2665 } // namespace wasm |
2728 } // namespace internal | 2666 } // namespace internal |
2729 } // namespace v8 | 2667 } // namespace v8 |
OLD | NEW |