| 7798 | |
| 7799 | |
| 7800 | static int singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) { |
| 7801 | if (fs == NULL) { /* no more levels? */ |
| 7802 | init_exp(var, VGLOBAL, NO_REG); /* default is global variable */ |
| 7803 | return VGLOBAL; |
| 7804 | } |
| 7805 | else { |
| 7806 | int v = searchvar(fs, n); /* look up at current level */ |
| 7807 | if (v >= 0) { |
| 7808 | init_exp(var, VLOCAL, v); |
| 7809 | if (!base) |
| 7810 | markupval(fs, v); /* local will be used as an upval */ |
| 7811 | return VLOCAL; |
| 7812 | } |
| 7813 | else { /* not found at current level; try upper one */ |
| 7814 | if (singlevaraux(fs->prev, n, var, 0) == VGLOBAL) |
| 7815 | return VGLOBAL; |
| 7816 | var->u.s.info = indexupvalue(fs, n, var); /* else was LOCAL or UPVAL */ |
| 7817 | var->k = VUPVAL; /* upvalue in this level */ |
| 7818 | return VUPVAL; |
| 7819 | } |
| 7820 | } |
| 7821 | } |
| 7822 | |
| 7823 | |
| 7824 | static void singlevar (LexState *ls, expdesc *var) { |
no test coverage detected