| 1269 | |
| 1270 | |
| 1271 | static int statement (LexState *ls) { |
| 1272 | int line = ls->linenumber; /* may be needed for error messages */ |
| 1273 | switch (ls->t.token) { |
| 1274 | case TK_IF: { /* stat -> ifstat */ |
| 1275 | ifstat(ls, line); |
| 1276 | return 0; |
| 1277 | } |
| 1278 | case TK_WHILE: { /* stat -> whilestat */ |
| 1279 | whilestat(ls, line); |
| 1280 | return 0; |
| 1281 | } |
| 1282 | case TK_DO: { /* stat -> DO block END */ |
| 1283 | luaX_next(ls); /* skip DO */ |
| 1284 | block(ls); |
| 1285 | check_match(ls, TK_END, TK_DO, line); |
| 1286 | return 0; |
| 1287 | } |
| 1288 | case TK_FOR: { /* stat -> forstat */ |
| 1289 | forstat(ls, line); |
| 1290 | return 0; |
| 1291 | } |
| 1292 | case TK_REPEAT: { /* stat -> repeatstat */ |
| 1293 | repeatstat(ls, line); |
| 1294 | return 0; |
| 1295 | } |
| 1296 | case TK_FUNCTION: { |
| 1297 | funcstat(ls, line); /* stat -> funcstat */ |
| 1298 | return 0; |
| 1299 | } |
| 1300 | case TK_LOCAL: { /* stat -> localstat */ |
| 1301 | luaX_next(ls); /* skip LOCAL */ |
| 1302 | if (testnext(ls, TK_FUNCTION)) /* local function? */ |
| 1303 | localfunc(ls); |
| 1304 | else |
| 1305 | localstat(ls); |
| 1306 | return 0; |
| 1307 | } |
| 1308 | case TK_RETURN: { /* stat -> retstat */ |
| 1309 | retstat(ls); |
| 1310 | return 1; /* must be last statement */ |
| 1311 | } |
| 1312 | case TK_BREAK: { /* stat -> breakstat */ |
| 1313 | luaX_next(ls); /* skip BREAK */ |
| 1314 | breakstat(ls); |
| 1315 | return 1; /* must be last statement */ |
| 1316 | } |
| 1317 | default: { |
| 1318 | exprstat(ls); |
| 1319 | return 0; /* to avoid warnings */ |
| 1320 | } |
| 1321 | } |
| 1322 | } |
| 1323 | |
| 1324 | |
| 1325 | static void chunk (LexState *ls) { |