| 1087 | |
| 1088 | |
| 1089 | static void forlist (LexState *ls, TString *indexname) { |
| 1090 | /* forlist -> NAME {,NAME} IN explist1 forbody */ |
| 1091 | FuncState *fs = ls->fs; |
| 1092 | expdesc e; |
| 1093 | int nvars = 0; |
| 1094 | int line; |
| 1095 | int base = fs->freereg; |
| 1096 | /* create control variables */ |
| 1097 | new_localvarliteral(ls, "(for generator)", nvars++); |
| 1098 | new_localvarliteral(ls, "(for state)", nvars++); |
| 1099 | new_localvarliteral(ls, "(for control)", nvars++); |
| 1100 | /* create declared variables */ |
| 1101 | new_localvar(ls, indexname, nvars++); |
| 1102 | while (testnext(ls, ',')) |
| 1103 | new_localvar(ls, str_checkname(ls), nvars++); |
| 1104 | checknext(ls, TK_IN); |
| 1105 | line = ls->linenumber; |
| 1106 | adjust_assign(ls, 3, explist1(ls, &e), &e); |
| 1107 | luaK_checkstack(fs, 3); /* extra space to call generator */ |
| 1108 | forbody(ls, base, line, nvars - 3, 0); |
| 1109 | } |
| 1110 | |
| 1111 | |
| 1112 | static void forstat (LexState *ls, int line) { |
no test coverage detected