| 1862 | |
| 1863 | |
| 1864 | static void statement (LexState *ls) { |
| 1865 | int line = ls->linenumber; /* may be needed for error messages */ |
| 1866 | enterlevel(ls); |
| 1867 | switch (ls->t.token) { |
| 1868 | case ';': { /* stat -> ';' (empty statement) */ |
| 1869 | luaX_next(ls); /* skip ';' */ |
| 1870 | break; |
| 1871 | } |
| 1872 | case TK_IF: { /* stat -> ifstat */ |
| 1873 | ifstat(ls, line); |
| 1874 | break; |
| 1875 | } |
| 1876 | case TK_WHILE: { /* stat -> whilestat */ |
| 1877 | whilestat(ls, line); |
| 1878 | break; |
| 1879 | } |
| 1880 | case TK_DO: { /* stat -> DO block END */ |
| 1881 | luaX_next(ls); /* skip DO */ |
| 1882 | block(ls); |
| 1883 | check_match(ls, TK_END, TK_DO, line); |
| 1884 | break; |
| 1885 | } |
| 1886 | case TK_FOR: { /* stat -> forstat */ |
| 1887 | forstat(ls, line); |
| 1888 | break; |
| 1889 | } |
| 1890 | case TK_REPEAT: { /* stat -> repeatstat */ |
| 1891 | repeatstat(ls, line); |
| 1892 | break; |
| 1893 | } |
| 1894 | case TK_FUNCTION: { /* stat -> funcstat */ |
| 1895 | funcstat(ls, line); |
| 1896 | break; |
| 1897 | } |
| 1898 | case TK_LOCAL: { /* stat -> localstat */ |
| 1899 | luaX_next(ls); /* skip LOCAL */ |
| 1900 | if (testnext(ls, TK_FUNCTION)) /* local function? */ |
| 1901 | localfunc(ls); |
| 1902 | else |
| 1903 | localstat(ls); |
| 1904 | break; |
| 1905 | } |
| 1906 | case TK_DBCOLON: { /* stat -> label */ |
| 1907 | luaX_next(ls); /* skip double colon */ |
| 1908 | labelstat(ls, str_checkname(ls), line); |
| 1909 | break; |
| 1910 | } |
| 1911 | case TK_RETURN: { /* stat -> retstat */ |
| 1912 | luaX_next(ls); /* skip RETURN */ |
| 1913 | retstat(ls); |
| 1914 | break; |
| 1915 | } |
| 1916 | case TK_BREAK: { /* stat -> breakstat */ |
| 1917 | breakstat(ls); |
| 1918 | break; |
| 1919 | } |
| 1920 | case TK_GOTO: { /* stat -> 'goto' NAME */ |
| 1921 | luaX_next(ls); /* skip 'goto' */ |
no test coverage detected