aboutsummaryrefslogtreecommitdiff
path: root/src/lj_crecord.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_crecord.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c
index 04c962d5..83c57063 100644
--- a/src/lj_crecord.c
+++ b/src/lj_crecord.c
@@ -710,20 +710,20 @@ static void crec_alloc(jit_State *J, RecordFFData *rd, CTypeID id)
710 /* Handle __gc metamethod. */ 710 /* Handle __gc metamethod. */
711 fin = lj_ctype_meta(cts, id, MM_gc); 711 fin = lj_ctype_meta(cts, id, MM_gc);
712 if (fin) { 712 if (fin) {
713 RecordIndex ix; 713 TRef trlo = lj_ir_call(J, IRCALL_lj_cdata_setfin, trcd);
714 ix.idxchain = 0; 714 TRef trhi = emitir(IRT(IR_ADD, IRT_P32), trlo, lj_ir_kint(J, 4));
715 settabV(J->L, &ix.tabv, cts->finalizer); 715 if (LJ_BE) { TRef tmp = trlo; trlo = trhi; trhi = tmp; }
716 ix.tab = lj_ir_ktab(J, cts->finalizer); 716 if (tvisfunc(fin)) {
717 setboolV(&ix.keyv, 0); /* The key is new. Dummy value is ok here. */ 717 emitir(IRT(IR_XSTORE, IRT_P32), trlo, lj_ir_kfunc(J, funcV(fin)));
718 ix.key = trcd; 718 emitir(IRTI(IR_XSTORE), trhi, lj_ir_kint(J, LJ_TFUNC));
719 copyTV(J->L, &ix.valv, fin); 719 } else if (tviscdata(fin)) {
720 if (tvisfunc(fin)) 720 emitir(IRT(IR_XSTORE, IRT_P32), trlo,
721 ix.val = lj_ir_kfunc(J, funcV(fin)); 721 lj_ir_kgc(J, obj2gco(cdataV(fin)), IRT_CDATA));
722 else if (tviscdata(fin)) 722 emitir(IRTI(IR_XSTORE), trhi, lj_ir_kint(J, LJ_TCDATA));
723 ix.val = lj_ir_kgc(J, obj2gco(cdataV(fin)), IRT_CDATA); 723 } else {
724 else
725 lj_trace_err(J, LJ_TRERR_BADTYPE); 724 lj_trace_err(J, LJ_TRERR_BADTYPE);
726 lj_record_idx(J, &ix); 725 }
726 J->needsnap = 1;
727 } 727 }
728 } 728 }
729} 729}