diff options
Diffstat (limited to 'src/lj_ffrecord.c')
-rw-r--r-- | src/lj_ffrecord.c | 11 |
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)); |