| 8845 | |
| 8846 | |
| 8847 | static int statement (LexState *ls) { |
| 8848 | int line = ls->linenumber; /* may be needed for error messages */ |
| 8849 | switch (ls->t.token) { |
| 8850 | case TK_IF: { /* stat -> ifstat */ |
| 8851 | ifstat(ls, line); |
| 8852 | return 0; |
| 8853 | } |
| 8854 | case TK_WHILE: { /* stat -> whilestat */ |
| 8855 | whilestat(ls, line); |
| 8856 | return 0; |
| 8857 | } |
| 8858 | case TK_DO: { /* stat -> DO block END */ |
| 8859 | luaX_next(ls); /* skip DO */ |
| 8860 | block(ls); |
| 8861 | check_match(ls, TK_END, TK_DO, line); |
| 8862 | return 0; |
| 8863 | } |
| 8864 | case TK_FOR: { /* stat -> forstat */ |
| 8865 | forstat(ls, line); |
| 8866 | return 0; |
| 8867 | } |
| 8868 | case TK_REPEAT: { /* stat -> repeatstat */ |
| 8869 | repeatstat(ls, line); |
| 8870 | return 0; |
| 8871 | } |
| 8872 | case TK_FUNCTION: { |
| 8873 | funcstat(ls, line); /* stat -> funcstat */ |
| 8874 | return 0; |
| 8875 | } |
| 8876 | case TK_LOCAL: { /* stat -> localstat */ |
| 8877 | luaX_next(ls); /* skip LOCAL */ |
| 8878 | if (testnext(ls, TK_FUNCTION)) /* local function? */ |
| 8879 | localfunc(ls); |
| 8880 | else |
| 8881 | localstat(ls); |
| 8882 | return 0; |
| 8883 | } |
| 8884 | case TK_RETURN: { /* stat -> retstat */ |
| 8885 | retstat(ls); |
| 8886 | return 1; /* must be last statement */ |
| 8887 | } |
| 8888 | case TK_BREAK: { /* stat -> breakstat */ |
| 8889 | luaX_next(ls); /* skip BREAK */ |
| 8890 | breakstat(ls); |
| 8891 | return 1; /* must be last statement */ |
| 8892 | } |
| 8893 | default: { |
| 8894 | exprstat(ls); |
| 8895 | return 0; /* to avoid warnings */ |
| 8896 | } |
| 8897 | } |
| 8898 | } |
| 8899 | |
| 8900 | |
| 8901 | static void chunk (LexState *ls) { |
no test coverage detected