| ... | @@ -1868,6 +1868,271 @@ export fn entry() { | ... | @@ -1868,6 +1868,271 @@ export fn entry() { |
| 1868 | | 1868 | |
| 1869 | ////////////////////////////////////////////////////////////////////////////// | 1869 | ////////////////////////////////////////////////////////////////////////////// |
| 1870 | | 1870 | |
| | 1871 | static void add_parse_error_tests(void) { |
| | 1872 | add_compile_fail_case("implicit semicolon - block statement", R"SOURCE( |
| | 1873 | export fn entry() { |
| | 1874 | {} |
| | 1875 | var good = {}; |
| | 1876 | ({}) |
| | 1877 | var bad = {}; |
| | 1878 | } |
| | 1879 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1880 | |
| | 1881 | add_compile_fail_case("implicit semicolon - block expr", R"SOURCE( |
| | 1882 | export fn entry() { |
| | 1883 | _ = {}; |
| | 1884 | var good = {}; |
| | 1885 | _ = {} |
| | 1886 | var bad = {}; |
| | 1887 | } |
| | 1888 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1889 | |
| | 1890 | add_compile_fail_case("implicit semicolon - comptime statement", R"SOURCE( |
| | 1891 | export fn entry() { |
| | 1892 | comptime {} |
| | 1893 | var good = {}; |
| | 1894 | comptime ({}) |
| | 1895 | var bad = {}; |
| | 1896 | } |
| | 1897 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1898 | |
| | 1899 | add_compile_fail_case("implicit semicolon - comptime expression", R"SOURCE( |
| | 1900 | export fn entry() { |
| | 1901 | _ = comptime {}; |
| | 1902 | var good = {}; |
| | 1903 | _ = comptime {} |
| | 1904 | var bad = {}; |
| | 1905 | } |
| | 1906 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1907 | |
| | 1908 | add_compile_fail_case("implicit semicolon - defer", R"SOURCE( |
| | 1909 | export fn entry() { |
| | 1910 | defer {} |
| | 1911 | var good = {}; |
| | 1912 | defer ({}) |
| | 1913 | var bad = {}; |
| | 1914 | } |
| | 1915 | )SOURCE", 1, ".tmp_source.zig:6:5: error: expected token ';', found 'var'"); |
| | 1916 | |
| | 1917 | add_compile_fail_case("implicit semicolon - if statement", R"SOURCE( |
| | 1918 | export fn entry() { |
| | 1919 | if(true) {} |
| | 1920 | var good = {}; |
| | 1921 | if(true) ({}) |
| | 1922 | var bad = {}; |
| | 1923 | } |
| | 1924 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1925 | |
| | 1926 | add_compile_fail_case("implicit semicolon - if expression", R"SOURCE( |
| | 1927 | export fn entry() { |
| | 1928 | _ = if(true) {}; |
| | 1929 | var good = {}; |
| | 1930 | _ = if(true) {} |
| | 1931 | var bad = {}; |
| | 1932 | } |
| | 1933 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1934 | |
| | 1935 | add_compile_fail_case("implicit semicolon - if-else statement", R"SOURCE( |
| | 1936 | export fn entry() { |
| | 1937 | if(true) {} else {} |
| | 1938 | var good = {}; |
| | 1939 | if(true) ({}) else ({}) |
| | 1940 | var bad = {}; |
| | 1941 | } |
| | 1942 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1943 | |
| | 1944 | add_compile_fail_case("implicit semicolon - if-else expression", R"SOURCE( |
| | 1945 | export fn entry() { |
| | 1946 | _ = if(true) {} else {}; |
| | 1947 | var good = {}; |
| | 1948 | _ = if(true) {} else {} |
| | 1949 | var bad = {}; |
| | 1950 | } |
| | 1951 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1952 | |
| | 1953 | add_compile_fail_case("implicit semicolon - if-else-if statement", R"SOURCE( |
| | 1954 | export fn entry() { |
| | 1955 | if(true) {} else if(true) {} |
| | 1956 | var good = {}; |
| | 1957 | if(true) ({}) else if(true) ({}) |
| | 1958 | var bad = {}; |
| | 1959 | } |
| | 1960 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1961 | |
| | 1962 | add_compile_fail_case("implicit semicolon - if-else-if expression", R"SOURCE( |
| | 1963 | export fn entry() { |
| | 1964 | _ = if(true) {} else if(true) {}; |
| | 1965 | var good = {}; |
| | 1966 | _ = if(true) {} else if(true) {} |
| | 1967 | var bad = {}; |
| | 1968 | } |
| | 1969 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1970 | |
| | 1971 | add_compile_fail_case("implicit semicolon - if-else-if-else statement", R"SOURCE( |
| | 1972 | export fn entry() { |
| | 1973 | if(true) {} else if(true) {} else {} |
| | 1974 | var good = {}; |
| | 1975 | if(true) ({}) else if(true) ({}) else ({}) |
| | 1976 | var bad = {}; |
| | 1977 | } |
| | 1978 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1979 | |
| | 1980 | add_compile_fail_case("implicit semicolon - if-else-if-else expression", R"SOURCE( |
| | 1981 | export fn entry() { |
| | 1982 | _ = if(true) {} else if(true) {} else {}; |
| | 1983 | var good = {}; |
| | 1984 | _ = if(true) {} else if(true) {} else {} |
| | 1985 | var bad = {}; |
| | 1986 | } |
| | 1987 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1988 | |
| | 1989 | add_compile_fail_case("implicit semicolon - if(var) statement", R"SOURCE( |
| | 1990 | export fn entry() { |
| | 1991 | if(_=foo()) {} |
| | 1992 | var good = {}; |
| | 1993 | if(_=foo()) ({}) |
| | 1994 | var bad = {}; |
| | 1995 | } |
| | 1996 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 1997 | |
| | 1998 | add_compile_fail_case("implicit semicolon - if(var) expression", R"SOURCE( |
| | 1999 | export fn entry() { |
| | 2000 | _ = if(_=foo()) {}; |
| | 2001 | var good = {}; |
| | 2002 | _ = if(_=foo()) {} |
| | 2003 | var bad = {}; |
| | 2004 | } |
| | 2005 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2006 | |
| | 2007 | add_compile_fail_case("implicit semicolon - if(var)-else statement", R"SOURCE( |
| | 2008 | export fn entry() { |
| | 2009 | if(_=foo()) {} else {} |
| | 2010 | var good = {}; |
| | 2011 | if(_=foo()) ({}) else ({}) |
| | 2012 | var bad = {}; |
| | 2013 | } |
| | 2014 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2015 | |
| | 2016 | add_compile_fail_case("implicit semicolon - if(var)-else expression", R"SOURCE( |
| | 2017 | export fn entry() { |
| | 2018 | _ = if(_=foo()) {} else {}; |
| | 2019 | var good = {}; |
| | 2020 | _ = if(_=foo()) {} else {} |
| | 2021 | var bad = {}; |
| | 2022 | } |
| | 2023 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2024 | |
| | 2025 | add_compile_fail_case("implicit semicolon - if(var)-else-if(var) statement", R"SOURCE( |
| | 2026 | export fn entry() { |
| | 2027 | if(_=foo()) {} else if(_=foo()) {} |
| | 2028 | var good = {}; |
| | 2029 | if(_=foo()) ({}) else if(_=foo()) ({}) |
| | 2030 | var bad = {}; |
| | 2031 | } |
| | 2032 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2033 | |
| | 2034 | add_compile_fail_case("implicit semicolon - if(var)-else-if(var) expression", R"SOURCE( |
| | 2035 | export fn entry() { |
| | 2036 | _ = if(_=foo()) {} else if(_=foo()) {}; |
| | 2037 | var good = {}; |
| | 2038 | _ = if(_=foo()) {} else if(_=foo()) {} |
| | 2039 | var bad = {}; |
| | 2040 | } |
| | 2041 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2042 | |
| | 2043 | add_compile_fail_case("implicit semicolon - if(var)-else-if(var)-else statement", R"SOURCE( |
| | 2044 | export fn entry() { |
| | 2045 | if(_=foo()) {} else if(_=foo()) {} else {} |
| | 2046 | var good = {}; |
| | 2047 | if(_=foo()) ({}) else if(_=foo()) ({}) else ({}) |
| | 2048 | var bad = {}; |
| | 2049 | } |
| | 2050 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2051 | |
| | 2052 | add_compile_fail_case("implicit semicolon - if(var)-else-if(var)-else expression", R"SOURCE( |
| | 2053 | export fn entry() { |
| | 2054 | _ = if(_=foo()) {} else if(_=foo()) {} else {}; |
| | 2055 | var good = {}; |
| | 2056 | _ = if(_=foo()) {} else if(_=foo()) {} else {} |
| | 2057 | var bad = {}; |
| | 2058 | } |
| | 2059 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2060 | |
| | 2061 | add_compile_fail_case("implicit semicolon - try statement", R"SOURCE( |
| | 2062 | export fn entry() { |
| | 2063 | try (_ = foo()) {} |
| | 2064 | var good = {}; |
| | 2065 | try (_ = foo()) ({}) |
| | 2066 | var bad = {}; |
| | 2067 | } |
| | 2068 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2069 | |
| | 2070 | add_compile_fail_case("implicit semicolon - try expression", R"SOURCE( |
| | 2071 | export fn entry() { |
| | 2072 | _ = try (_ = foo()) {}; |
| | 2073 | var good = {}; |
| | 2074 | _ = try (_ = foo()) {} |
| | 2075 | var bad = {}; |
| | 2076 | } |
| | 2077 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2078 | |
| | 2079 | add_compile_fail_case("implicit semicolon - while statement", R"SOURCE( |
| | 2080 | export fn entry() { |
| | 2081 | while(true) {} |
| | 2082 | var good = {}; |
| | 2083 | while(true) ({}) |
| | 2084 | var bad = {}; |
| | 2085 | } |
| | 2086 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2087 | |
| | 2088 | add_compile_fail_case("implicit semicolon - while expression", R"SOURCE( |
| | 2089 | export fn entry() { |
| | 2090 | _ = while(true) {}; |
| | 2091 | var good = {}; |
| | 2092 | _ = while(true) {} |
| | 2093 | var bad = {}; |
| | 2094 | } |
| | 2095 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2096 | |
| | 2097 | add_compile_fail_case("implicit semicolon - while-continue statement", R"SOURCE( |
| | 2098 | export fn entry() { |
| | 2099 | while(true;{}) {} |
| | 2100 | var good = {}; |
| | 2101 | while(true;{}) ({}) |
| | 2102 | var bad = {}; |
| | 2103 | } |
| | 2104 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2105 | |
| | 2106 | add_compile_fail_case("implicit semicolon - while-continue expression", R"SOURCE( |
| | 2107 | export fn entry() { |
| | 2108 | _ = while(true;{}) {}; |
| | 2109 | var good = {}; |
| | 2110 | _ = while(true;{}) {} |
| | 2111 | var bad = {}; |
| | 2112 | } |
| | 2113 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2114 | |
| | 2115 | add_compile_fail_case("implicit semicolon - for statement", R"SOURCE( |
| | 2116 | export fn entry() { |
| | 2117 | for(foo()) {} |
| | 2118 | var good = {}; |
| | 2119 | for(foo()) ({}) |
| | 2120 | var bad = {}; |
| | 2121 | } |
| | 2122 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2123 | |
| | 2124 | add_compile_fail_case("implicit semicolon - for expression", R"SOURCE( |
| | 2125 | export fn entry() { |
| | 2126 | _ = for(foo()) {}; |
| | 2127 | var good = {}; |
| | 2128 | _ = for(foo()) {} |
| | 2129 | var bad = {}; |
| | 2130 | } |
| | 2131 | )SOURCE", 1, ".tmp_source.zig:6:5: error: invalid token: 'var'"); |
| | 2132 | } |
| | 2133 | |
| | 2134 | ////////////////////////////////////////////////////////////////////////////// |
| | 2135 | |
| 1871 | static void add_debug_safety_test_cases(void) { | 2136 | static void add_debug_safety_test_cases(void) { |
| 1872 | add_debug_safety_case("calling panic", R"SOURCE( | 2137 | add_debug_safety_case("calling panic", R"SOURCE( |
| 1873 | pub fn panic(message: []const u8) -> noreturn { | 2138 | pub fn panic(message: []const u8) -> noreturn { |
| ... | @@ -2624,6 +2889,7 @@ int main(int argc, char **argv) { | ... | @@ -2624,6 +2889,7 @@ int main(int argc, char **argv) { |
| 2624 | add_compiling_test_cases(); | 2889 | add_compiling_test_cases(); |
| 2625 | add_debug_safety_test_cases(); | 2890 | add_debug_safety_test_cases(); |
| 2626 | add_compile_failure_test_cases(); | 2891 | add_compile_failure_test_cases(); |
| | 2892 | add_parse_error_tests(); |
| 2627 | add_parseh_test_cases(); | 2893 | add_parseh_test_cases(); |
| 2628 | add_self_hosted_tests(); | 2894 | add_self_hosted_tests(); |
| 2629 | add_std_lib_tests(); | 2895 | add_std_lib_tests(); |