aboutsummaryrefslogtreecommitdiff
path: root/src/lj_record.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_record.c')
-rw-r--r--src/lj_record.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/lj_record.c b/src/lj_record.c
index 33767405..3542e451 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -1942,8 +1942,12 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
1942 if (J->framedepth > 0) { /* Simple case: varargs defined on-trace. */ 1942 if (J->framedepth > 0) { /* Simple case: varargs defined on-trace. */
1943 ptrdiff_t i; 1943 ptrdiff_t i;
1944 if (nvararg < 0) nvararg = 0; 1944 if (nvararg < 0) nvararg = 0;
1945 if (nresults == -1) nresults = nvararg; 1945 if (nresults != 1) {
1946 J->maxslot = dst + (BCReg)nresults; 1946 if (nresults == -1) nresults = nvararg;
1947 J->maxslot = dst + (BCReg)nresults;
1948 } else if (dst >= J->maxslot) {
1949 J->maxslot = dst + 1;
1950 }
1947 if (J->baseslot + J->maxslot >= LJ_MAX_JSLOTS) 1951 if (J->baseslot + J->maxslot >= LJ_MAX_JSLOTS)
1948 lj_trace_err(J, LJ_TRERR_STACKOV); 1952 lj_trace_err(J, LJ_TRERR_STACKOV);
1949 for (i = 0; i < nresults; i++) 1953 for (i = 0; i < nresults; i++)
@@ -1973,7 +1977,9 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
1973 } 1977 }
1974 for (i = nvararg; i < nresults; i++) 1978 for (i = nvararg; i < nresults; i++)
1975 J->base[dst+i] = TREF_NIL; 1979 J->base[dst+i] = TREF_NIL;
1976 J->maxslot = dst + (BCReg)nresults; 1980 if (nresults != 1 || dst >= J->maxslot) {
1981 J->maxslot = dst + (BCReg)nresults;
1982 }
1977 } else if (select_detect(J)) { /* y = select(x, ...) */ 1983 } else if (select_detect(J)) { /* y = select(x, ...) */
1978 TRef tridx = J->base[dst-1]; 1984 TRef tridx = J->base[dst-1];
1979 TRef tr = TREF_NIL; 1985 TRef tr = TREF_NIL;