MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / luaK_dischargevars

Function luaK_dischargevars

lib/lua/src/lcode.c:772–818  ·  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

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

Callers 10

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

Calls 5

const2expFunction · 0.85
const2valFunction · 0.85
freeregFunction · 0.85
freeregsFunction · 0.85
luaK_setoneretFunction · 0.85

Tested by

no test coverage detected