diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_record.c | 21 |
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 | ||
1354 | static 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; |