aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c100
1 files changed, 50 insertions, 50 deletions
diff --git a/lvm.c b/lvm.c
index 73a19ba9..2e84dc63 100644
--- a/lvm.c
+++ b/lvm.c
@@ -608,8 +608,8 @@ int luaV_equalobj (lua_State *L, const TValue *t1, const TValue *t2) {
608 if (tm == NULL) /* no TM? */ 608 if (tm == NULL) /* no TM? */
609 return 0; /* objects are different */ 609 return 0; /* objects are different */
610 else { 610 else {
611 luaT_callTMres(L, tm, t1, t2, L->top); /* call TM */ 611 luaT_callTMres(L, tm, t1, t2, L->top.p); /* call TM */
612 return !l_isfalse(s2v(L->top)); 612 return !l_isfalse(s2v(L->top.p));
613 } 613 }
614} 614}
615 615
@@ -633,13 +633,13 @@ static void copy2buff (StkId top, int n, char *buff) {
633 633
634/* 634/*
635** Main operation for concatenation: concat 'total' values in the stack, 635** Main operation for concatenation: concat 'total' values in the stack,
636** from 'L->top - total' up to 'L->top - 1'. 636** from 'L->top.p - total' up to 'L->top.p - 1'.
637*/ 637*/
638void luaV_concat (lua_State *L, int total) { 638void luaV_concat (lua_State *L, int total) {
639 if (total == 1) 639 if (total == 1)
640 return; /* "all" values already concatenated */ 640 return; /* "all" values already concatenated */
641 do { 641 do {
642 StkId top = L->top; 642 StkId top = L->top.p;
643 int n = 2; /* number of elements handled in this pass (at least 2) */ 643 int n = 2; /* number of elements handled in this pass (at least 2) */
644 if (!(ttisstring(s2v(top - 2)) || cvt2str(s2v(top - 2))) || 644 if (!(ttisstring(s2v(top - 2)) || cvt2str(s2v(top - 2))) ||
645 !tostring(L, s2v(top - 1))) 645 !tostring(L, s2v(top - 1)))
@@ -657,7 +657,7 @@ void luaV_concat (lua_State *L, int total) {
657 for (n = 1; n < total && tostring(L, s2v(top - n - 1)); n++) { 657 for (n = 1; n < total && tostring(L, s2v(top - n - 1)); n++) {
658 size_t l = vslen(s2v(top - n - 1)); 658 size_t l = vslen(s2v(top - n - 1));
659 if (l_unlikely(l >= (MAX_SIZE/sizeof(char)) - tl)) { 659 if (l_unlikely(l >= (MAX_SIZE/sizeof(char)) - tl)) {
660 L->top = top - total; /* pop strings to avoid wasting stack */ 660 L->top.p = top - total; /* pop strings to avoid wasting stack */
661 luaG_runerror(L, "string length overflow"); 661 luaG_runerror(L, "string length overflow");
662 } 662 }
663 tl += l; 663 tl += l;
@@ -674,7 +674,7 @@ void luaV_concat (lua_State *L, int total) {
674 setsvalue2s(L, top - n, ts); /* create result */ 674 setsvalue2s(L, top - n, ts); /* create result */
675 } 675 }
676 total -= n - 1; /* got 'n' strings to create one new */ 676 total -= n - 1; /* got 'n' strings to create one new */
677 L->top -= n - 1; /* popped 'n' strings and pushed one */ 677 L->top.p -= n - 1; /* popped 'n' strings and pushed one */
678 } while (total > 1); /* repeat until only 1 result left */ 678 } while (total > 1); /* repeat until only 1 result left */
679} 679}
680 680
@@ -808,26 +808,26 @@ static void pushclosure (lua_State *L, Proto *p, UpVal **encup, StkId base,
808*/ 808*/
809void luaV_finishOp (lua_State *L) { 809void luaV_finishOp (lua_State *L) {
810 CallInfo *ci = L->ci; 810 CallInfo *ci = L->ci;
811 StkId base = ci->func + 1; 811 StkId base = ci->func.p + 1;
812 Instruction inst = *(ci->u.l.savedpc - 1); /* interrupted instruction */ 812 Instruction inst = *(ci->u.l.savedpc - 1); /* interrupted instruction */
813 OpCode op = GET_OPCODE(inst); 813 OpCode op = GET_OPCODE(inst);
814 switch (op) { /* finish its execution */ 814 switch (op) { /* finish its execution */
815 case OP_MMBIN: case OP_MMBINI: case OP_MMBINK: { 815 case OP_MMBIN: case OP_MMBINI: case OP_MMBINK: {
816 setobjs2s(L, base + GETARG_A(*(ci->u.l.savedpc - 2)), --L->top); 816 setobjs2s(L, base + GETARG_A(*(ci->u.l.savedpc - 2)), --L->top.p);
817 break; 817 break;
818 } 818 }
819 case OP_UNM: case OP_BNOT: case OP_LEN: 819 case OP_UNM: case OP_BNOT: case OP_LEN:
820 case OP_GETTABUP: case OP_GETTABLE: case OP_GETI: 820 case OP_GETTABUP: case OP_GETTABLE: case OP_GETI:
821 case OP_GETFIELD: case OP_SELF: { 821 case OP_GETFIELD: case OP_SELF: {
822 setobjs2s(L, base + GETARG_A(inst), --L->top); 822 setobjs2s(L, base + GETARG_A(inst), --L->top.p);
823 break; 823 break;
824 } 824 }
825 case OP_LT: case OP_LE: 825 case OP_LT: case OP_LE:
826 case OP_LTI: case OP_LEI: 826 case OP_LTI: case OP_LEI:
827 case OP_GTI: case OP_GEI: 827 case OP_GTI: case OP_GEI:
828 case OP_EQ: { /* note that 'OP_EQI'/'OP_EQK' cannot yield */ 828 case OP_EQ: { /* note that 'OP_EQI'/'OP_EQK' cannot yield */
829 int res = !l_isfalse(s2v(L->top - 1)); 829 int res = !l_isfalse(s2v(L->top.p - 1));
830 L->top--; 830 L->top.p--;
831#if defined(LUA_COMPAT_LT_LE) 831#if defined(LUA_COMPAT_LT_LE)
832 if (ci->callstatus & CIST_LEQ) { /* "<=" using "<" instead? */ 832 if (ci->callstatus & CIST_LEQ) { /* "<=" using "<" instead? */
833 ci->callstatus ^= CIST_LEQ; /* clear mark */ 833 ci->callstatus ^= CIST_LEQ; /* clear mark */
@@ -840,11 +840,11 @@ void luaV_finishOp (lua_State *L) {
840 break; 840 break;
841 } 841 }
842 case OP_CONCAT: { 842 case OP_CONCAT: {
843 StkId top = L->top - 1; /* top when 'luaT_tryconcatTM' was called */ 843 StkId top = L->top.p - 1; /* top when 'luaT_tryconcatTM' was called */
844 int a = GETARG_A(inst); /* first element to concatenate */ 844 int a = GETARG_A(inst); /* first element to concatenate */
845 int total = cast_int(top - 1 - (base + a)); /* yet to concatenate */ 845 int total = cast_int(top - 1 - (base + a)); /* yet to concatenate */
846 setobjs2s(L, top - 2, top); /* put TM result in proper position */ 846 setobjs2s(L, top - 2, top); /* put TM result in proper position */
847 L->top = top - 1; /* top is one after last element (at top-2) */ 847 L->top.p = top - 1; /* top is one after last element (at top-2) */
848 luaV_concat(L, total); /* concat them (may yield again) */ 848 luaV_concat(L, total); /* concat them (may yield again) */
849 break; 849 break;
850 } 850 }
@@ -856,7 +856,7 @@ void luaV_finishOp (lua_State *L) {
856 StkId ra = base + GETARG_A(inst); 856 StkId ra = base + GETARG_A(inst);
857 /* adjust top to signal correct number of returns, in case the 857 /* adjust top to signal correct number of returns, in case the
858 return is "up to top" ('isIT') */ 858 return is "up to top" ('isIT') */
859 L->top = ra + ci->u2.nres; 859 L->top.p = ra + ci->u2.nres;
860 /* repeat instruction to close other vars. and complete the return */ 860 /* repeat instruction to close other vars. and complete the return */
861 ci->u.l.savedpc--; 861 ci->u.l.savedpc--;
862 break; 862 break;
@@ -1069,7 +1069,7 @@ void luaV_finishOp (lua_State *L) {
1069 1069
1070#define updatetrap(ci) (trap = ci->u.l.trap) 1070#define updatetrap(ci) (trap = ci->u.l.trap)
1071 1071
1072#define updatebase(ci) (base = ci->func + 1) 1072#define updatebase(ci) (base = ci->func.p + 1)
1073 1073
1074 1074
1075#define updatestack(ci) \ 1075#define updatestack(ci) \
@@ -1104,7 +1104,7 @@ void luaV_finishOp (lua_State *L) {
1104** Whenever code can raise errors, the global 'pc' and the global 1104** Whenever code can raise errors, the global 'pc' and the global
1105** 'top' must be correct to report occasional errors. 1105** 'top' must be correct to report occasional errors.
1106*/ 1106*/
1107#define savestate(L,ci) (savepc(L), L->top = ci->top) 1107#define savestate(L,ci) (savepc(L), L->top.p = ci->top.p)
1108 1108
1109 1109
1110/* 1110/*
@@ -1124,7 +1124,7 @@ void luaV_finishOp (lua_State *L) {
1124 1124
1125/* 'c' is the limit of live values in the stack */ 1125/* 'c' is the limit of live values in the stack */
1126#define checkGC(L,c) \ 1126#define checkGC(L,c) \
1127 { luaC_condGC(L, (savepc(L), L->top = (c)), \ 1127 { luaC_condGC(L, (savepc(L), L->top.p = (c)), \
1128 updatetrap(ci)); \ 1128 updatetrap(ci)); \
1129 luai_threadyield(L); } 1129 luai_threadyield(L); }
1130 1130
@@ -1155,7 +1155,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1155 startfunc: 1155 startfunc:
1156 trap = L->hookmask; 1156 trap = L->hookmask;
1157 returning: /* trap already set */ 1157 returning: /* trap already set */
1158 cl = clLvalue(s2v(ci->func)); 1158 cl = clLvalue(s2v(ci->func.p));
1159 k = cl->p->k; 1159 k = cl->p->k;
1160 pc = ci->u.l.savedpc; 1160 pc = ci->u.l.savedpc;
1161 if (l_unlikely(trap)) { 1161 if (l_unlikely(trap)) {
@@ -1167,7 +1167,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1167 } 1167 }
1168 ci->u.l.trap = 1; /* assume trap is on, for now */ 1168 ci->u.l.trap = 1; /* assume trap is on, for now */
1169 } 1169 }
1170 base = ci->func + 1; 1170 base = ci->func.p + 1;
1171 /* main loop of interpreter */ 1171 /* main loop of interpreter */
1172 for (;;) { 1172 for (;;) {
1173 Instruction i; /* instruction being executed */ 1173 Instruction i; /* instruction being executed */
@@ -1176,10 +1176,10 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1176 /* low-level line tracing for debugging Lua */ 1176 /* low-level line tracing for debugging Lua */
1177 printf("line: %d\n", luaG_getfuncline(cl->p, pcRel(pc, cl->p))); 1177 printf("line: %d\n", luaG_getfuncline(cl->p, pcRel(pc, cl->p)));
1178 #endif 1178 #endif
1179 lua_assert(base == ci->func + 1); 1179 lua_assert(base == ci->func.p + 1);
1180 lua_assert(base <= L->top && L->top <= L->stack_last); 1180 lua_assert(base <= L->top.p && L->top.p <= L->stack_last.p);
1181 /* invalidate top for instructions not expecting it */ 1181 /* invalidate top for instructions not expecting it */
1182 lua_assert(isIT(i) || (cast_void(L->top = base), 1)); 1182 lua_assert(isIT(i) || (cast_void(L->top.p = base), 1));
1183 vmdispatch (GET_OPCODE(i)) { 1183 vmdispatch (GET_OPCODE(i)) {
1184 vmcase(OP_MOVE) { 1184 vmcase(OP_MOVE) {
1185 StkId ra = RA(i); 1185 StkId ra = RA(i);
@@ -1238,20 +1238,20 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1238 vmcase(OP_GETUPVAL) { 1238 vmcase(OP_GETUPVAL) {
1239 StkId ra = RA(i); 1239 StkId ra = RA(i);
1240 int b = GETARG_B(i); 1240 int b = GETARG_B(i);
1241 setobj2s(L, ra, cl->upvals[b]->v); 1241 setobj2s(L, ra, cl->upvals[b]->v.p);
1242 vmbreak; 1242 vmbreak;
1243 } 1243 }
1244 vmcase(OP_SETUPVAL) { 1244 vmcase(OP_SETUPVAL) {
1245 StkId ra = RA(i); 1245 StkId ra = RA(i);
1246 UpVal *uv = cl->upvals[GETARG_B(i)]; 1246 UpVal *uv = cl->upvals[GETARG_B(i)];
1247 setobj(L, uv->v, s2v(ra)); 1247 setobj(L, uv->v.p, s2v(ra));
1248 luaC_barrier(L, uv, s2v(ra)); 1248 luaC_barrier(L, uv, s2v(ra));
1249 vmbreak; 1249 vmbreak;
1250 } 1250 }
1251 vmcase(OP_GETTABUP) { 1251 vmcase(OP_GETTABUP) {
1252 StkId ra = RA(i); 1252 StkId ra = RA(i);
1253 const TValue *slot; 1253 const TValue *slot;
1254 TValue *upval = cl->upvals[GETARG_B(i)]->v; 1254 TValue *upval = cl->upvals[GETARG_B(i)]->v.p;
1255 TValue *rc = KC(i); 1255 TValue *rc = KC(i);
1256 TString *key = tsvalue(rc); /* key must be a string */ 1256 TString *key = tsvalue(rc); /* key must be a string */
1257 if (luaV_fastget(L, upval, key, slot, luaH_getshortstr)) { 1257 if (luaV_fastget(L, upval, key, slot, luaH_getshortstr)) {
@@ -1306,7 +1306,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1306 } 1306 }
1307 vmcase(OP_SETTABUP) { 1307 vmcase(OP_SETTABUP) {
1308 const TValue *slot; 1308 const TValue *slot;
1309 TValue *upval = cl->upvals[GETARG_A(i)]->v; 1309 TValue *upval = cl->upvals[GETARG_A(i)]->v.p;
1310 TValue *rb = KB(i); 1310 TValue *rb = KB(i);
1311 TValue *rc = RKC(i); 1311 TValue *rc = RKC(i);
1312 TString *key = tsvalue(rb); /* key must be a string */ 1312 TString *key = tsvalue(rb); /* key must be a string */
@@ -1371,7 +1371,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1371 if (TESTARG_k(i)) /* non-zero extra argument? */ 1371 if (TESTARG_k(i)) /* non-zero extra argument? */
1372 c += GETARG_Ax(*pc) * (MAXARG_C + 1); /* add it to size */ 1372 c += GETARG_Ax(*pc) * (MAXARG_C + 1); /* add it to size */
1373 pc++; /* skip extra argument */ 1373 pc++; /* skip extra argument */
1374 L->top = ra + 1; /* correct top in case of emergency GC */ 1374 L->top.p = ra + 1; /* correct top in case of emergency GC */
1375 t = luaH_new(L); /* memory allocation */ 1375 t = luaH_new(L); /* memory allocation */
1376 sethvalue2s(L, ra, t); 1376 sethvalue2s(L, ra, t);
1377 if (b != 0 || c != 0) 1377 if (b != 0 || c != 0)
@@ -1578,9 +1578,9 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1578 vmcase(OP_CONCAT) { 1578 vmcase(OP_CONCAT) {
1579 StkId ra = RA(i); 1579 StkId ra = RA(i);
1580 int n = GETARG_B(i); /* number of elements to concatenate */ 1580 int n = GETARG_B(i); /* number of elements to concatenate */
1581 L->top = ra + n; /* mark the end of concat operands */ 1581 L->top.p = ra + n; /* mark the end of concat operands */
1582 ProtectNT(luaV_concat(L, n)); 1582 ProtectNT(luaV_concat(L, n));
1583 checkGC(L, L->top); /* 'luaV_concat' ensures correct top */ 1583 checkGC(L, L->top.p); /* 'luaV_concat' ensures correct top */
1584 vmbreak; 1584 vmbreak;
1585 } 1585 }
1586 vmcase(OP_CLOSE) { 1586 vmcase(OP_CLOSE) {
@@ -1674,7 +1674,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1674 int b = GETARG_B(i); 1674 int b = GETARG_B(i);
1675 int nresults = GETARG_C(i) - 1; 1675 int nresults = GETARG_C(i) - 1;
1676 if (b != 0) /* fixed number of arguments? */ 1676 if (b != 0) /* fixed number of arguments? */
1677 L->top = ra + b; /* top signals number of arguments */ 1677 L->top.p = ra + b; /* top signals number of arguments */
1678 /* else previous instruction set top */ 1678 /* else previous instruction set top */
1679 savepc(L); /* in case of errors */ 1679 savepc(L); /* in case of errors */
1680 if ((newci = luaD_precall(L, ra, nresults)) == NULL) 1680 if ((newci = luaD_precall(L, ra, nresults)) == NULL)
@@ -1693,19 +1693,19 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1693 /* delta is virtual 'func' - real 'func' (vararg functions) */ 1693 /* delta is virtual 'func' - real 'func' (vararg functions) */
1694 int delta = (nparams1) ? ci->u.l.nextraargs + nparams1 : 0; 1694 int delta = (nparams1) ? ci->u.l.nextraargs + nparams1 : 0;
1695 if (b != 0) 1695 if (b != 0)
1696 L->top = ra + b; 1696 L->top.p = ra + b;
1697 else /* previous instruction set top */ 1697 else /* previous instruction set top */
1698 b = cast_int(L->top - ra); 1698 b = cast_int(L->top.p - ra);
1699 savepc(ci); /* several calls here can raise errors */ 1699 savepc(ci); /* several calls here can raise errors */
1700 if (TESTARG_k(i)) { 1700 if (TESTARG_k(i)) {
1701 luaF_closeupval(L, base); /* close upvalues from current call */ 1701 luaF_closeupval(L, base); /* close upvalues from current call */
1702 lua_assert(L->tbclist < base); /* no pending tbc variables */ 1702 lua_assert(L->tbclist.p < base); /* no pending tbc variables */
1703 lua_assert(base == ci->func + 1); 1703 lua_assert(base == ci->func.p + 1);
1704 } 1704 }
1705 if ((n = luaD_pretailcall(L, ci, ra, b, delta)) < 0) /* Lua function? */ 1705 if ((n = luaD_pretailcall(L, ci, ra, b, delta)) < 0) /* Lua function? */
1706 goto startfunc; /* execute the callee */ 1706 goto startfunc; /* execute the callee */
1707 else { /* C function? */ 1707 else { /* C function? */
1708 ci->func -= delta; /* restore 'func' (if vararg) */ 1708 ci->func.p -= delta; /* restore 'func' (if vararg) */
1709 luaD_poscall(L, ci, n); /* finish caller */ 1709 luaD_poscall(L, ci, n); /* finish caller */
1710 updatetrap(ci); /* 'luaD_poscall' can change hooks */ 1710 updatetrap(ci); /* 'luaD_poscall' can change hooks */
1711 goto ret; /* caller returns after the tail call */ 1711 goto ret; /* caller returns after the tail call */
@@ -1716,19 +1716,19 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1716 int n = GETARG_B(i) - 1; /* number of results */ 1716 int n = GETARG_B(i) - 1; /* number of results */
1717 int nparams1 = GETARG_C(i); 1717 int nparams1 = GETARG_C(i);
1718 if (n < 0) /* not fixed? */ 1718 if (n < 0) /* not fixed? */
1719 n = cast_int(L->top - ra); /* get what is available */ 1719 n = cast_int(L->top.p - ra); /* get what is available */
1720 savepc(ci); 1720 savepc(ci);
1721 if (TESTARG_k(i)) { /* may there be open upvalues? */ 1721 if (TESTARG_k(i)) { /* may there be open upvalues? */
1722 ci->u2.nres = n; /* save number of returns */ 1722 ci->u2.nres = n; /* save number of returns */
1723 if (L->top < ci->top) 1723 if (L->top.p < ci->top.p)
1724 L->top = ci->top; 1724 L->top.p = ci->top.p;
1725 luaF_close(L, base, CLOSEKTOP, 1); 1725 luaF_close(L, base, CLOSEKTOP, 1);
1726 updatetrap(ci); 1726 updatetrap(ci);
1727 updatestack(ci); 1727 updatestack(ci);
1728 } 1728 }
1729 if (nparams1) /* vararg function? */ 1729 if (nparams1) /* vararg function? */
1730 ci->func -= ci->u.l.nextraargs + nparams1; 1730 ci->func.p -= ci->u.l.nextraargs + nparams1;
1731 L->top = ra + n; /* set call for 'luaD_poscall' */ 1731 L->top.p = ra + n; /* set call for 'luaD_poscall' */
1732 luaD_poscall(L, ci, n); 1732 luaD_poscall(L, ci, n);
1733 updatetrap(ci); /* 'luaD_poscall' can change hooks */ 1733 updatetrap(ci); /* 'luaD_poscall' can change hooks */
1734 goto ret; 1734 goto ret;
@@ -1736,7 +1736,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1736 vmcase(OP_RETURN0) { 1736 vmcase(OP_RETURN0) {
1737 if (l_unlikely(L->hookmask)) { 1737 if (l_unlikely(L->hookmask)) {
1738 StkId ra = RA(i); 1738 StkId ra = RA(i);
1739 L->top = ra; 1739 L->top.p = ra;
1740 savepc(ci); 1740 savepc(ci);
1741 luaD_poscall(L, ci, 0); /* no hurry... */ 1741 luaD_poscall(L, ci, 0); /* no hurry... */
1742 trap = 1; 1742 trap = 1;
@@ -1744,16 +1744,16 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1744 else { /* do the 'poscall' here */ 1744 else { /* do the 'poscall' here */
1745 int nres; 1745 int nres;
1746 L->ci = ci->previous; /* back to caller */ 1746 L->ci = ci->previous; /* back to caller */
1747 L->top = base - 1; 1747 L->top.p = base - 1;
1748 for (nres = ci->nresults; l_unlikely(nres > 0); nres--) 1748 for (nres = ci->nresults; l_unlikely(nres > 0); nres--)
1749 setnilvalue(s2v(L->top++)); /* all results are nil */ 1749 setnilvalue(s2v(L->top.p++)); /* all results are nil */
1750 } 1750 }
1751 goto ret; 1751 goto ret;
1752 } 1752 }
1753 vmcase(OP_RETURN1) { 1753 vmcase(OP_RETURN1) {
1754 if (l_unlikely(L->hookmask)) { 1754 if (l_unlikely(L->hookmask)) {
1755 StkId ra = RA(i); 1755 StkId ra = RA(i);
1756 L->top = ra + 1; 1756 L->top.p = ra + 1;
1757 savepc(ci); 1757 savepc(ci);
1758 luaD_poscall(L, ci, 1); /* no hurry... */ 1758 luaD_poscall(L, ci, 1); /* no hurry... */
1759 trap = 1; 1759 trap = 1;
@@ -1762,13 +1762,13 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1762 int nres = ci->nresults; 1762 int nres = ci->nresults;
1763 L->ci = ci->previous; /* back to caller */ 1763 L->ci = ci->previous; /* back to caller */
1764 if (nres == 0) 1764 if (nres == 0)
1765 L->top = base - 1; /* asked for no results */ 1765 L->top.p = base - 1; /* asked for no results */
1766 else { 1766 else {
1767 StkId ra = RA(i); 1767 StkId ra = RA(i);
1768 setobjs2s(L, base - 1, ra); /* at least this result */ 1768 setobjs2s(L, base - 1, ra); /* at least this result */
1769 L->top = base; 1769 L->top.p = base;
1770 for (; l_unlikely(nres > 1); nres--) 1770 for (; l_unlikely(nres > 1); nres--)
1771 setnilvalue(s2v(L->top++)); /* complete missing results */ 1771 setnilvalue(s2v(L->top.p++)); /* complete missing results */
1772 } 1772 }
1773 } 1773 }
1774 ret: /* return from a Lua function */ 1774 ret: /* return from a Lua function */
@@ -1824,7 +1824,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1824 */ 1824 */
1825 /* push function, state, and control variable */ 1825 /* push function, state, and control variable */
1826 memcpy(ra + 4, ra, 3 * sizeof(*ra)); 1826 memcpy(ra + 4, ra, 3 * sizeof(*ra));
1827 L->top = ra + 4 + 3; 1827 L->top.p = ra + 4 + 3;
1828 ProtectNT(luaD_call(L, ra + 4, GETARG_C(i))); /* do the call */ 1828 ProtectNT(luaD_call(L, ra + 4, GETARG_C(i))); /* do the call */
1829 updatestack(ci); /* stack may have changed */ 1829 updatestack(ci); /* stack may have changed */
1830 i = *(pc++); /* go to next instruction */ 1830 i = *(pc++); /* go to next instruction */
@@ -1846,9 +1846,9 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1846 unsigned int last = GETARG_C(i); 1846 unsigned int last = GETARG_C(i);
1847 Table *h = hvalue(s2v(ra)); 1847 Table *h = hvalue(s2v(ra));
1848 if (n == 0) 1848 if (n == 0)
1849 n = cast_int(L->top - ra) - 1; /* get up to the top */ 1849 n = cast_int(L->top.p - ra) - 1; /* get up to the top */
1850 else 1850 else
1851 L->top = ci->top; /* correct top in case of emergency GC */ 1851 L->top.p = ci->top.p; /* correct top in case of emergency GC */
1852 last += n; 1852 last += n;
1853 if (TESTARG_k(i)) { 1853 if (TESTARG_k(i)) {
1854 last += GETARG_Ax(*pc) * (MAXARG_C + 1); 1854 last += GETARG_Ax(*pc) * (MAXARG_C + 1);