summaryrefslogtreecommitdiff
path: root/src/lj_crecord.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_crecord.c')
-rw-r--r--src/lj_crecord.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c
index 1223eb8e..80f00e18 100644
--- a/src/lj_crecord.c
+++ b/src/lj_crecord.c
@@ -844,6 +844,23 @@ void LJ_FASTCALL recff_ffi_new(jit_State *J, RecordFFData *rd)
844 crec_alloc(J, rd, argv2ctype(J, J->base[0], &rd->argv[0])); 844 crec_alloc(J, rd, argv2ctype(J, J->base[0], &rd->argv[0]));
845} 845}
846 846
847void LJ_FASTCALL recff_ffi_string(jit_State *J, RecordFFData *rd)
848{
849 CTState *cts = ctype_ctsG(J2G(J));
850 TRef tr = J->base[0];
851 if (tr) {
852 TRef trlen = J->base[1];
853 if (trlen) {
854 trlen = lj_ir_toint(J, trlen);
855 tr = crec_ct_tv(J, ctype_get(cts, CTID_P_CVOID), 0, tr, &rd->argv[0]);
856 } else {
857 tr = crec_ct_tv(J, ctype_get(cts, CTID_P_CCHAR), 0, tr, &rd->argv[0]);
858 trlen = lj_ir_call(J, IRCALL_strlen, tr);
859 }
860 J->base[0] = emitir(IRT(IR_SNEW, IRT_STR), tr, trlen);
861 } /* else: interpreter will throw. */
862}
863
847/* -- Miscellaneous library functions ------------------------------------- */ 864/* -- Miscellaneous library functions ------------------------------------- */
848 865
849void LJ_FASTCALL lj_crecord_tonumber(jit_State *J, RecordFFData *rd) 866void LJ_FASTCALL lj_crecord_tonumber(jit_State *J, RecordFFData *rd)