aboutsummaryrefslogtreecommitdiff
path: root/src/lj_ffrecord.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_ffrecord.c')
-rw-r--r--src/lj_ffrecord.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c
index 844fc497..d050d12d 100644
--- a/src/lj_ffrecord.c
+++ b/src/lj_ffrecord.c
@@ -961,8 +961,17 @@ static void LJ_FASTCALL recff_string_format(jit_State *J, RecordFFData *rd)
961 case STRFMT_INT: 961 case STRFMT_INT:
962 id = IRCALL_lj_strfmt_putfnum_int; 962 id = IRCALL_lj_strfmt_putfnum_int;
963 handle_int: 963 handle_int:
964 if (!tref_isinteger(tra)) 964 if (!tref_isinteger(tra)) {
965#if LJ_HASFFI
966 if (tref_iscdata(tra)) {
967 tra = lj_crecord_loadiu64(J, tra, &rd->argv[arg-1]);
968 tr = lj_ir_call(J, IRCALL_lj_strfmt_putfxint, tr, trsf, tra);
969 lj_needsplit(J);
970 break;
971 }
972#endif
965 goto handle_num; 973 goto handle_num;
974 }
966 if (sf == STRFMT_INT) { /* Shortcut for plain %d. */ 975 if (sf == STRFMT_INT) { /* Shortcut for plain %d. */
967 tr = emitir(IRTG(IR_BUFPUT, IRT_PGC), tr, 976 tr = emitir(IRTG(IR_BUFPUT, IRT_PGC), tr,
968 emitir(IRT(IR_TOSTR, IRT_STR), tra, IRTOSTR_INT)); 977 emitir(IRT(IR_TOSTR, IRT_STR), tra, IRTOSTR_INT));