aboutsummaryrefslogtreecommitdiff
path: root/src/lj_crecord.c
diff options
context:
space:
mode:
authorMike Pall <mike>2021-06-01 05:16:32 +0200
committerMike Pall <mike>2021-06-01 05:16:32 +0200
commita119497becdf2894fb7fa737f106464309dd7947 (patch)
tree95c7f88198ba3f12eff52fd5646207ffb31da2d5 /src/lj_crecord.c
parentedd5cbadc5cdc7b5b66d5340ee97c5abe5a3892a (diff)
downloadluajit-a119497becdf2894fb7fa737f106464309dd7947.tar.gz
luajit-a119497becdf2894fb7fa737f106464309dd7947.tar.bz2
luajit-a119497becdf2894fb7fa737f106464309dd7947.zip
String buffers, part 2d: basic string buffer methods.
Sponsored by fmad.io.
Diffstat (limited to 'src/lj_crecord.c')
-rw-r--r--src/lj_crecord.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c
index be23cd62..b0de5423 100644
--- a/src/lj_crecord.c
+++ b/src/lj_crecord.c
@@ -616,10 +616,12 @@ static TRef crec_ct_tv(jit_State *J, CType *d, TRef dp, TRef sp, cTValue *sval)
616 sp = lj_ir_kptr(J, NULL); 616 sp = lj_ir_kptr(J, NULL);
617 } else if (tref_isudata(sp)) { 617 } else if (tref_isudata(sp)) {
618 GCudata *ud = udataV(sval); 618 GCudata *ud = udataV(sval);
619 if (ud->udtype == UDTYPE_IO_FILE) { 619 if (ud->udtype == UDTYPE_IO_FILE || ud->udtype == UDTYPE_BUFFER) {
620 TRef tr = emitir(IRT(IR_FLOAD, IRT_U8), sp, IRFL_UDATA_UDTYPE); 620 TRef tr = emitir(IRT(IR_FLOAD, IRT_U8), sp, IRFL_UDATA_UDTYPE);
621 emitir(IRTGI(IR_EQ), tr, lj_ir_kint(J, UDTYPE_IO_FILE)); 621 emitir(IRTGI(IR_EQ), tr, lj_ir_kint(J, ud->udtype));
622 sp = emitir(IRT(IR_FLOAD, IRT_PTR), sp, IRFL_UDATA_FILE); 622 sp = emitir(IRT(IR_FLOAD, IRT_PTR), sp,
623 ud->udtype == UDTYPE_IO_FILE ? IRFL_UDATA_FILE :
624 IRFL_UDATA_BUF_R);
623 } else { 625 } else {
624 sp = emitir(IRT(IR_ADD, IRT_PTR), sp, lj_ir_kintp(J, sizeof(GCudata))); 626 sp = emitir(IRT(IR_ADD, IRT_PTR), sp, lj_ir_kintp(J, sizeof(GCudata)));
625 } 627 }