aboutsummaryrefslogtreecommitdiff
path: root/src/lj_strfmt.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_strfmt.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/lj_strfmt.c b/src/lj_strfmt.c
index 5826b539..7b073470 100644
--- a/src/lj_strfmt.c
+++ b/src/lj_strfmt.c
@@ -16,6 +16,9 @@
16#include "lj_state.h" 16#include "lj_state.h"
17#include "lj_char.h" 17#include "lj_char.h"
18#include "lj_strfmt.h" 18#include "lj_strfmt.h"
19#if LJ_HASFFI
20#include "lj_ctype.h"
21#endif
19#include "lj_lib.h" 22#include "lj_lib.h"
20 23
21/* -- Format parser ------------------------------------------------------- */ 24/* -- Format parser ------------------------------------------------------- */
@@ -392,15 +395,34 @@ int lj_strfmt_putarg(lua_State *L, SBuf *sb, int arg, int retry)
392 lj_strfmt_putint(sb, k); /* Shortcut for plain %d. */ 395 lj_strfmt_putint(sb, k); /* Shortcut for plain %d. */
393 else 396 else
394 lj_strfmt_putfxint(sb, sf, k); 397 lj_strfmt_putfxint(sb, sf, k);
395 } else { 398 break;
396 lj_strfmt_putfnum_int(sb, sf, lj_lib_checknum(L, arg)); 399 }
400#if LJ_HASFFI
401 if (tviscdata(o)) {
402 GCcdata *cd = cdataV(o);
403 if (cd->ctypeid == CTID_INT64 || cd->ctypeid == CTID_UINT64) {
404 lj_strfmt_putfxint(sb, sf, *(uint64_t *)cdataptr(cd));
405 break;
406 }
397 } 407 }
408#endif
409 lj_strfmt_putfnum_int(sb, sf, lj_lib_checknum(L, arg));
398 break; 410 break;
399 case STRFMT_UINT: 411 case STRFMT_UINT:
400 if (tvisint(o)) 412 if (tvisint(o)) {
401 lj_strfmt_putfxint(sb, sf, intV(o)); 413 lj_strfmt_putfxint(sb, sf, intV(o));
402 else 414 break;
403 lj_strfmt_putfnum_uint(sb, sf, lj_lib_checknum(L, arg)); 415 }
416#if LJ_HASFFI
417 if (tviscdata(o)) {
418 GCcdata *cd = cdataV(o);
419 if (cd->ctypeid == CTID_INT64 || cd->ctypeid == CTID_UINT64) {
420 lj_strfmt_putfxint(sb, sf, *(uint64_t *)cdataptr(cd));
421 break;
422 }
423 }
424#endif
425 lj_strfmt_putfnum_uint(sb, sf, lj_lib_checknum(L, arg));
404 break; 426 break;
405 case STRFMT_NUM: 427 case STRFMT_NUM:
406 lj_strfmt_putfnum(sb, sf, lj_lib_checknum(L, arg)); 428 lj_strfmt_putfnum(sb, sf, lj_lib_checknum(L, arg));