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 1811 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1822 | 1822 |
1823 EXPECT_FAILURE_INLINE( | 1823 EXPECT_FAILURE_INLINE( |
1824 sigs.i_i(), | 1824 sigs.i_i(), |
1825 WASM_SELECT(WASM_GET_LOCAL(0), WASM_F64(0.25), WASM_GET_LOCAL(0))); | 1825 WASM_SELECT(WASM_GET_LOCAL(0), WASM_F64(0.25), WASM_GET_LOCAL(0))); |
1826 | 1826 |
1827 EXPECT_FAILURE_INLINE( | 1827 EXPECT_FAILURE_INLINE( |
1828 sigs.i_i(), | 1828 sigs.i_i(), |
1829 WASM_SELECT(WASM_F32(9.9), WASM_GET_LOCAL(0), WASM_I64V_1(0))); | 1829 WASM_SELECT(WASM_F32(9.9), WASM_GET_LOCAL(0), WASM_I64V_1(0))); |
1830 } | 1830 } |
1831 | 1831 |
1832 TEST_F(AstDecoderTest, Throw) { | |
1833 FLAG_wasm_eh_prototype = true; | |
1834 EXPECT_VERIFIES_INLINE(sigs.v_i(), WASM_GET_LOCAL(0), kExprThrow); | |
1835 | |
1836 // 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
| |
1837 EXPECT_VERIFIES_INLINE(sigs.i_d(), WASM_GET_LOCAL(0), kExprThrow, | |
1838 WASM_I32V(0)); | |
1839 EXPECT_VERIFIES_INLINE(sigs.i_f(), WASM_GET_LOCAL(0), kExprThrow, | |
1840 WASM_I32V(0)); | |
1841 EXPECT_VERIFIES_INLINE(sigs.l_l(), WASM_GET_LOCAL(0), kExprThrow, | |
1842 WASM_I64V(0)); | |
1843 } | |
1844 | |
1845 #define WASM_CATCH(local) kExprCatch, static_cast<byte>(local) | |
1846 TEST_F(AstDecoderTest, TryCatch) { | |
1847 FLAG_wasm_eh_prototype = true; | |
1848 EXPECT_VERIFIES_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), kExprEnd); | |
1849 | |
1850 // Missing catch. | |
1851 EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryCatch, kExprEnd); | |
1852 | |
1853 // Missing end. | |
1854 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0)); | |
1855 | |
1856 // Double catch. | |
1857 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), WASM_CATCH(0), | |
1858 kExprEnd); | |
1859 | |
1860 // Unexpected finally. | |
1861 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), kExprFinally, | |
1862 kExprEnd); | |
1863 } | |
1864 | |
1865 TEST_F(AstDecoderTest, TryFinally) { | |
1866 FLAG_wasm_eh_prototype = true; | |
1867 EXPECT_VERIFIES_INLINE(sigs.v_v(), kExprTryFinally, kExprFinally, kExprEnd); | |
1868 | |
1869 // Mising finally. | |
1870 EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryFinally, kExprEnd); | |
1871 | |
1872 // Missing end. | |
1873 EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryFinally, kExprFinally); | |
1874 | |
1875 // Double finally. | |
1876 EXPECT_FAILURE_INLINE(sigs.v_v(), kExprTryFinally, kExprFinally, kExprFinally, | |
1877 kExprEnd); | |
1878 | |
1879 // Unexpected catch. | |
1880 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatch, WASM_CATCH(0), kExprFinally, | |
1881 kExprEnd); | |
1882 } | |
1883 | |
1884 TEST_F(AstDecoderTest, TryCatchFinally) { | |
1885 FLAG_wasm_eh_prototype = true; | |
1886 EXPECT_VERIFIES_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), | |
1887 kExprFinally, kExprEnd); | |
1888 | |
1889 // Missing catch. | |
1890 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, kExprFinally, | |
1891 kExprEnd); | |
1892 | |
1893 // Double catch. | |
1894 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), | |
1895 WASM_CATCH(0), kExprFinally, kExprEnd); | |
1896 | |
1897 // Missing finally. | |
1898 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), | |
1899 kExprEnd); | |
1900 | |
1901 // Double finally. | |
1902 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), | |
1903 kExprFinally, kExprFinally, kExprEnd); | |
1904 | |
1905 // Finally before catch. | |
1906 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, kExprFinally, | |
1907 WASM_CATCH(0), kExprEnd); | |
1908 | |
1909 // Missing both try and finally. | |
1910 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, kExprEnd); | |
1911 | |
1912 // Missing end. | |
1913 EXPECT_FAILURE_INLINE(sigs.v_i(), kExprTryCatchFinally, WASM_CATCH(0), | |
1914 kExprFinally); | |
1915 } | |
1916 | |
1832 class WasmOpcodeLengthTest : public TestWithZone { | 1917 class WasmOpcodeLengthTest : public TestWithZone { |
1833 public: | 1918 public: |
1834 WasmOpcodeLengthTest() : TestWithZone() {} | 1919 WasmOpcodeLengthTest() : TestWithZone() {} |
1835 }; | 1920 }; |
1836 | 1921 |
1837 #define EXPECT_LENGTH(expected, opcode) \ | 1922 #define EXPECT_LENGTH(expected, opcode) \ |
1838 { \ | 1923 { \ |
1839 static const byte code[] = {opcode, 0, 0, 0, 0, 0, 0, 0, 0}; \ | 1924 static const byte code[] = {opcode, 0, 0, 0, 0, 0, 0, 0, 0}; \ |
1840 EXPECT_EQ(expected, OpcodeLength(code, code + sizeof(code))); \ | 1925 EXPECT_EQ(expected, OpcodeLength(code, code + sizeof(code))); \ |
1841 } | 1926 } |
1842 | 1927 |
1843 #define EXPECT_LENGTH_N(expected, ...) \ | 1928 #define EXPECT_LENGTH_N(expected, ...) \ |
1844 { \ | 1929 { \ |
1845 static const byte code[] = {__VA_ARGS__}; \ | 1930 static const byte code[] = {__VA_ARGS__}; \ |
1846 EXPECT_EQ(expected, OpcodeLength(code, code + sizeof(code))); \ | 1931 EXPECT_EQ(expected, OpcodeLength(code, code + sizeof(code))); \ |
1847 } | 1932 } |
1848 | 1933 |
1849 TEST_F(WasmOpcodeLengthTest, Statements) { | 1934 TEST_F(WasmOpcodeLengthTest, Statements) { |
1850 EXPECT_LENGTH(1, kExprNop); | 1935 EXPECT_LENGTH(1, kExprNop); |
1851 EXPECT_LENGTH(1, kExprBlock); | 1936 EXPECT_LENGTH(1, kExprBlock); |
1852 EXPECT_LENGTH(1, kExprLoop); | 1937 EXPECT_LENGTH(1, kExprLoop); |
1853 EXPECT_LENGTH(1, kExprIf); | 1938 EXPECT_LENGTH(1, kExprIf); |
1854 EXPECT_LENGTH(1, kExprElse); | 1939 EXPECT_LENGTH(1, kExprElse); |
1855 EXPECT_LENGTH(1, kExprEnd); | 1940 EXPECT_LENGTH(1, kExprEnd); |
1856 EXPECT_LENGTH(1, kExprSelect); | 1941 EXPECT_LENGTH(1, kExprSelect); |
1857 EXPECT_LENGTH(3, kExprBr); | 1942 EXPECT_LENGTH(3, kExprBr); |
1858 EXPECT_LENGTH(3, kExprBrIf); | 1943 EXPECT_LENGTH(3, kExprBrIf); |
1944 EXPECT_LENGTH(1, kExprThrow); | |
1945 EXPECT_LENGTH(1, kExprTryCatch); | |
1946 EXPECT_LENGTH(1, kExprTryFinally); | |
1947 EXPECT_LENGTH(1, kExprTryCatchFinally); | |
1948 EXPECT_LENGTH(2, kExprCatch); | |
1949 EXPECT_LENGTH(1, kExprFinally); | |
1859 } | 1950 } |
1860 | 1951 |
1861 TEST_F(WasmOpcodeLengthTest, MiscExpressions) { | 1952 TEST_F(WasmOpcodeLengthTest, MiscExpressions) { |
1862 EXPECT_LENGTH(2, kExprI8Const); | 1953 EXPECT_LENGTH(2, kExprI8Const); |
1863 EXPECT_LENGTH(5, kExprF32Const); | 1954 EXPECT_LENGTH(5, kExprF32Const); |
1864 EXPECT_LENGTH(9, kExprF64Const); | 1955 EXPECT_LENGTH(9, kExprF64Const); |
1865 EXPECT_LENGTH(2, kExprGetLocal); | 1956 EXPECT_LENGTH(2, kExprGetLocal); |
1866 EXPECT_LENGTH(2, kExprSetLocal); | 1957 EXPECT_LENGTH(2, kExprSetLocal); |
1867 EXPECT_LENGTH(2, kExprGetGlobal); | 1958 EXPECT_LENGTH(2, kExprGetGlobal); |
1868 EXPECT_LENGTH(2, kExprSetGlobal); | 1959 EXPECT_LENGTH(2, kExprSetGlobal); |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2090 EXPECT_ARITY(1, kExprBrTable); | 2181 EXPECT_ARITY(1, kExprBrTable); |
2091 | 2182 |
2092 EXPECT_ARITY(1, kExprBr, ARITY_1); | 2183 EXPECT_ARITY(1, kExprBr, ARITY_1); |
2093 EXPECT_ARITY(2, kExprBrIf, ARITY_1); | 2184 EXPECT_ARITY(2, kExprBrIf, ARITY_1); |
2094 EXPECT_ARITY(2, kExprBrTable, ARITY_1); | 2185 EXPECT_ARITY(2, kExprBrTable, ARITY_1); |
2095 | 2186 |
2096 { | 2187 { |
2097 EXPECT_ARITY(0, kExprReturn, ARITY_0); | 2188 EXPECT_ARITY(0, kExprReturn, ARITY_0); |
2098 EXPECT_ARITY(1, kExprReturn, ARITY_1); | 2189 EXPECT_ARITY(1, kExprReturn, ARITY_1); |
2099 } | 2190 } |
2191 | |
2192 EXPECT_ARITY(0, kExprThrow); | |
2193 EXPECT_ARITY(0, kExprTryCatch); | |
2194 EXPECT_ARITY(0, kExprTryFinally); | |
2195 EXPECT_ARITY(0, kExprTryCatchFinally); | |
2196 EXPECT_ARITY(1, kExprCatch, 2); | |
2197 EXPECT_ARITY(0, kExprFinally); | |
2100 } | 2198 } |
2101 | 2199 |
2102 TEST_F(WasmOpcodeArityTest, Misc) { | 2200 TEST_F(WasmOpcodeArityTest, Misc) { |
2103 EXPECT_ARITY(0, kExprI8Const); | 2201 EXPECT_ARITY(0, kExprI8Const); |
2104 EXPECT_ARITY(0, kExprI32Const); | 2202 EXPECT_ARITY(0, kExprI32Const); |
2105 EXPECT_ARITY(0, kExprF32Const); | 2203 EXPECT_ARITY(0, kExprF32Const); |
2106 EXPECT_ARITY(0, kExprI64Const); | 2204 EXPECT_ARITY(0, kExprI64Const); |
2107 EXPECT_ARITY(0, kExprF64Const); | 2205 EXPECT_ARITY(0, kExprF64Const); |
2108 EXPECT_ARITY(0, kExprGetLocal); | 2206 EXPECT_ARITY(0, kExprGetLocal); |
2109 EXPECT_ARITY(1, kExprSetLocal); | 2207 EXPECT_ARITY(1, kExprSetLocal); |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2464 iter.next(); | 2562 iter.next(); |
2465 EXPECT_TRUE(iter.has_next()); | 2563 EXPECT_TRUE(iter.has_next()); |
2466 EXPECT_EQ(kExprI8Const, iter.current()); | 2564 EXPECT_EQ(kExprI8Const, iter.current()); |
2467 iter.next(); | 2565 iter.next(); |
2468 EXPECT_FALSE(iter.has_next()); | 2566 EXPECT_FALSE(iter.has_next()); |
2469 } | 2567 } |
2470 | 2568 |
2471 } // namespace wasm | 2569 } // namespace wasm |
2472 } // namespace internal | 2570 } // namespace internal |
2473 } // namespace v8 | 2571 } // namespace v8 |
OLD | NEW |