** Generate code to store result of expression 'ex' into variable 'var'. */
| 780 | ** Generate code to store result of expression 'ex' into variable 'var'. |
| 781 | */ |
| 782 | void luaK_storevar (FuncState *fs, expdesc *var, expdesc *ex) { |
| 783 | switch (var->k) { |
| 784 | case VLOCAL: { |
| 785 | freeexp(fs, ex); |
| 786 | exp2reg(fs, ex, var->u.info); /* compute 'ex' into proper place */ |
| 787 | return; |
| 788 | } |
| 789 | case VUPVAL: { |
| 790 | int e = luaK_exp2anyreg(fs, ex); |
| 791 | luaK_codeABC(fs, OP_SETUPVAL, e, var->u.info, 0); |
| 792 | break; |
| 793 | } |
| 794 | case VINDEXED: { |
| 795 | OpCode op = (var->u.ind.vt == VLOCAL) ? OP_SETTABLE : OP_SETTABUP; |
| 796 | int e = luaK_exp2RK(fs, ex); |
| 797 | luaK_codeABC(fs, op, var->u.ind.t, var->u.ind.idx, e); |
| 798 | break; |
| 799 | } |
| 800 | default: lua_assert(0); /* invalid var kind to store */ |
| 801 | } |
| 802 | freeexp(fs, ex); |
| 803 | } |
| 804 | |
| 805 | |
| 806 | /* |
no test coverage detected