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

Function luaK_dischargevars

third-party/lua-5.4.6/src/lcode.c:773–819  ·  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

771** (Expression still may have jump lists.)
772*/
773void luaK_dischargevars (FuncState *fs, expdesc *e) {
774 switch (e->k) {
775 case VCONST: {
776 const2exp(const2val(fs, e), e);
777 break;
778 }
779 case VLOCAL: { /* already in a register */
780 int temp = e->u.var.ridx;
781 e->u.info = temp; /* (can't do a direct assignment; values overlap) */
782 e->k = VNONRELOC; /* becomes a non-relocatable value */
783 break;
784 }
785 case VUPVAL: { /* move value to some (pending) register */
786 e->u.info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->u.info, 0);
787 e->k = VRELOC;
788 break;
789 }
790 case VINDEXUP: {
791 e->u.info = luaK_codeABC(fs, OP_GETTABUP, 0, e->u.ind.t, e->u.ind.idx);
792 e->k = VRELOC;
793 break;
794 }
795 case VINDEXI: {
796 freereg(fs, e->u.ind.t);
797 e->u.info = luaK_codeABC(fs, OP_GETI, 0, e->u.ind.t, e->u.ind.idx);
798 e->k = VRELOC;
799 break;
800 }
801 case VINDEXSTR: {
802 freereg(fs, e->u.ind.t);
803 e->u.info = luaK_codeABC(fs, OP_GETFIELD, 0, e->u.ind.t, e->u.ind.idx);
804 e->k = VRELOC;
805 break;
806 }
807 case VINDEXED: {
808 freeregs(fs, e->u.ind.t, e->u.ind.idx);
809 e->u.info = luaK_codeABC(fs, OP_GETTABLE, 0, e->u.ind.t, e->u.ind.idx);
810 e->k = VRELOC;
811 break;
812 }
813 case VVARARG: case VCALL: {
814 luaK_setoneret(fs, e);
815 break;
816 }
817 default: break; /* there is one value available (somewhere) */
818 }
819}
820
821
822/*

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 6

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