| 1199 | |
| 1200 | |
| 1201 | static void ifstat (LexState *ls, int line) { |
| 1202 | /* ifstat -> IF cond THEN block {ELSEIF cond THEN block} [ELSE block] END */ |
| 1203 | FuncState *fs = ls->fs; |
| 1204 | int flist; |
| 1205 | int escapelist = NO_JUMP; |
| 1206 | flist = test_then_block(ls); /* IF cond THEN block */ |
| 1207 | while (ls->t.token == TK_ELSEIF) { |
| 1208 | luaK_concat(fs, &escapelist, luaK_jump(fs)); |
| 1209 | luaK_patchtohere(fs, flist); |
| 1210 | flist = test_then_block(ls); /* ELSEIF cond THEN block */ |
| 1211 | } |
| 1212 | if (ls->t.token == TK_ELSE) { |
| 1213 | luaK_concat(fs, &escapelist, luaK_jump(fs)); |
| 1214 | luaK_patchtohere(fs, flist); |
| 1215 | luaX_next(ls); /* skip ELSE (after patch, for correct line info) */ |
| 1216 | block(ls); /* `else' part */ |
| 1217 | } |
| 1218 | else |
| 1219 | luaK_concat(fs, &escapelist, flist); |
| 1220 | luaK_patchtohere(fs, escapelist); |
| 1221 | check_match(ls, TK_END, TK_IF, line); |
| 1222 | } |
| 1223 | |
| 1224 | |
| 1225 | static void localfunc (LexState *ls) { |
no test coverage detected