aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lj_record.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/lj_record.c b/src/lj_record.c
index 3dcb0a85..faf496f5 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -1351,6 +1351,22 @@ TRef lj_record_idx(jit_State *J, RecordIndex *ix)
1351 } 1351 }
1352} 1352}
1353 1353
1354static void rec_tsetm(jit_State *J, BCReg ra, BCReg rn, int32_t i)
1355{
1356 RecordIndex ix;
1357 cTValue *basev = J->L->base;
1358 copyTV(J->L, &ix.tabv, &basev[ra-1]);
1359 ix.tab = getslot(J, ra-1);
1360 ix.idxchain = 0;
1361 for (; ra < rn; i++, ra++) {
1362 setintV(&ix.keyv, i);
1363 ix.key = lj_ir_kint(J, i);
1364 copyTV(J->L, &ix.valv, &basev[ra]);
1365 ix.val = getslot(J, ra);
1366 lj_record_idx(J, &ix);
1367 }
1368}
1369
1354/* -- Upvalue access ------------------------------------------------------ */ 1370/* -- Upvalue access ------------------------------------------------------ */
1355 1371
1356/* Check whether upvalue is immutable and ok to constify. */ 1372/* Check whether upvalue is immutable and ok to constify. */
@@ -2078,6 +2094,10 @@ void lj_record_ins(jit_State *J)
2078 rc = lj_record_idx(J, &ix); 2094 rc = lj_record_idx(J, &ix);
2079 break; 2095 break;
2080 2096
2097 case BC_TSETM:
2098 rec_tsetm(J, ra, (BCReg)(J->L->top - J->L->base), (int32_t)rcv->u32.lo);
2099 break;
2100
2081 case BC_TNEW: 2101 case BC_TNEW:
2082 rc = rec_tnew(J, rc); 2102 rc = rec_tnew(J, rc);
2083 break; 2103 break;
@@ -2211,7 +2231,6 @@ void lj_record_ins(jit_State *J)
2211 case BC_ISNEXT: 2231 case BC_ISNEXT:
2212 case BC_UCLO: 2232 case BC_UCLO:
2213 case BC_FNEW: 2233 case BC_FNEW:
2214 case BC_TSETM:
2215 setintV(&J->errinfo, (int32_t)op); 2234 setintV(&J->errinfo, (int32_t)op);
2216 lj_trace_err_info(J, LJ_TRERR_NYIBC); 2235 lj_trace_err_info(J, LJ_TRERR_NYIBC);
2217 break; 2236 break;