| ... | ... | @@ -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 | 2136 | static void add_debug_safety_test_cases(void) { |
| 1872 | 2137 | add_debug_safety_case("calling panic", R"SOURCE( |
| 1873 | 2138 | pub fn panic(message: []const u8) -> noreturn { |
| ... | ... | @@ -2624,6 +2889,7 @@ int main(int argc, char **argv) { |
| 2624 | 2889 | add_compiling_test_cases(); |
| 2625 | 2890 | add_debug_safety_test_cases(); |
| 2626 | 2891 | add_compile_failure_test_cases(); |
| 2892 | add_parse_error_tests(); |
| 2627 | 2893 | add_parseh_test_cases(); |
| 2628 | 2894 | add_self_hosted_tests(); |
| 2629 | 2895 | add_std_lib_tests(); |