MCPcopy Create free account
hub / github.com/ObEngine/ObEngine / luaK_dischargevars

Function luaK_dischargevars

extlibs/lua/src/lcode.c:759–804  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

757** (Expression still may have jump lists.)
758*/
759void luaK_dischargevars (FuncState *fs, expdesc *e) {
760 switch (e->k) {
761 case VCONST: {
762 const2exp(const2val(fs, e), e);
763 break;
764 }
765 case VLOCAL: { /* already in a register */
766 e->u.info = e->u.var.sidx;
767 e->k = VNONRELOC; /* becomes a non-relocatable value */
768 break;
769 }
770 case VUPVAL: { /* move value to some (pending) register */
771 e->u.info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->u.info, 0);
772 e->k = VRELOC;
773 break;
774 }
775 case VINDEXUP: {
776 e->u.info = luaK_codeABC(fs, OP_GETTABUP, 0, e->u.ind.t, e->u.ind.idx);
777 e->k = VRELOC;
778 break;
779 }
780 case VINDEXI: {
781 freereg(fs, e->u.ind.t);
782 e->u.info = luaK_codeABC(fs, OP_GETI, 0, e->u.ind.t, e->u.ind.idx);
783 e->k = VRELOC;
784 break;
785 }
786 case VINDEXSTR: {
787 freereg(fs, e->u.ind.t);
788 e->u.info = luaK_codeABC(fs, OP_GETFIELD, 0, e->u.ind.t, e->u.ind.idx);
789 e->k = VRELOC;
790 break;
791 }
792 case VINDEXED: {
793 freeregs(fs, e->u.ind.t, e->u.ind.idx);
794 e->u.info = luaK_codeABC(fs, OP_GETTABLE, 0, e->u.ind.t, e->u.ind.idx);
795 e->k = VRELOC;
796 break;
797 }
798 case VVARARG: case VCALL: {
799 luaK_setoneret(fs, e);
800 break;
801 }
802 default: break; /* there is one value available (somewhere) */
803 }
804}
805
806
807/*

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