MCPcopy Create free account
hub / github.com/EmmyLua/EmmyLuaDebugger / luaK_dischargevars

Function luaK_dischargevars

third-party/lua-5.5.0/src/lcode.c:819–874  ·  view source on GitHub ↗

** Ensure that expression 'e' is not a variable (nor a ). ** (Expression still may have jump lists.) */

Source from the content-addressed store, hash-verified

817** (Expression still may have jump lists.)
818*/
819void luaK_dischargevars (FuncState *fs, expdesc *e) {
820 switch (e->k) {
821 case VCONST: {
822 const2exp(const2val(fs, e), e);
823 break;
824 }
825 case VVARGVAR: {
826 luaK_vapar2local(fs, e); /* turn it into a local variable */
827 } /* FALLTHROUGH */
828 case VLOCAL: { /* already in a register */
829 int temp = e->u.var.ridx;
830 e->u.info = temp; /* (can't do a direct assignment; values overlap) */
831 e->k = VNONRELOC; /* becomes a non-relocatable value */
832 break;
833 }
834 case VUPVAL: { /* move value to some (pending) register */
835 e->u.info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->u.info, 0);
836 e->k = VRELOC;
837 break;
838 }
839 case VINDEXUP: {
840 e->u.info = luaK_codeABC(fs, OP_GETTABUP, 0, e->u.ind.t, e->u.ind.idx);
841 e->k = VRELOC;
842 break;
843 }
844 case VINDEXI: {
845 freereg(fs, e->u.ind.t);
846 e->u.info = luaK_codeABC(fs, OP_GETI, 0, e->u.ind.t, e->u.ind.idx);
847 e->k = VRELOC;
848 break;
849 }
850 case VINDEXSTR: {
851 freereg(fs, e->u.ind.t);
852 e->u.info = luaK_codeABC(fs, OP_GETFIELD, 0, e->u.ind.t, e->u.ind.idx);
853 e->k = VRELOC;
854 break;
855 }
856 case VINDEXED: {
857 freeregs(fs, e->u.ind.t, e->u.ind.idx);
858 e->u.info = luaK_codeABC(fs, OP_GETTABLE, 0, e->u.ind.t, e->u.ind.idx);
859 e->k = VRELOC;
860 break;
861 }
862 case VVARGIND: {
863 freeregs(fs, e->u.ind.t, e->u.ind.idx);
864 e->u.info = luaK_codeABC(fs, OP_GETVARG, 0, e->u.ind.t, e->u.ind.idx);
865 e->k = VRELOC;
866 break;
867 }
868 case VVARARG: case VCALL: {
869 luaK_setoneret(fs, e);
870 break;
871 }
872 default: break; /* there is one value available (somewhere) */
873 }
874}
875
876

Callers 10

primaryexpFunction · 0.70
discharge2regFunction · 0.70
luaK_exp2nextregFunction · 0.70
luaK_exp2anyregFunction · 0.70
luaK_exp2valFunction · 0.70
luaK_goiftrueFunction · 0.70
luaK_goiffalseFunction · 0.70
luaK_prefixFunction · 0.70
luaK_infixFunction · 0.70
luaK_posfixFunction · 0.70

Calls 7

luaK_vapar2localFunction · 0.85
const2expFunction · 0.70
const2valFunction · 0.70
freeregFunction · 0.70
freeregsFunction · 0.70
luaK_setoneretFunction · 0.70
luaK_codeABCFunction · 0.50

Tested by

no test coverage detected