diff options
author | Mike Pall <mike> | 2010-12-05 00:40:23 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-12-05 00:40:23 +0100 |
commit | 513b0ba18f003a3e6c666f0b2d422d3553fdbfcb (patch) | |
tree | a5bc37d6920dc85eaa56449e2c54c7aefca6cd2b /src/lib_base.c | |
parent | 233076d3f922c390fa9c258284cf99058cec69cb (diff) | |
download | luajit2-513b0ba18f003a3e6c666f0b2d422d3553fdbfcb.tar.gz |
FFI: Add support for converting cdata to tonumber().
Diffstat (limited to 'src/lib_base.c')
-rw-r--r-- | src/lib_base.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/lib_base.c b/src/lib_base.c index af738008..c52f9191 100644 --- a/src/lib_base.c +++ b/src/lib_base.c @@ -22,6 +22,10 @@ #include "lj_tab.h" #include "lj_meta.h" #include "lj_state.h" +#if LJ_HASFFI +#include "lj_ctype.h" +#include "lj_cconv.h" +#endif #include "lj_bc.h" #include "lj_ff.h" #include "lj_dispatch.h" @@ -190,6 +194,14 @@ LJLIB_ASM(tonumber) LJLIB_REC(.) setnumV(L->base-1, numV(o)); return FFH_RES(1); } +#if LJ_HASFFI + if (tviscdata(o)) { + CTState *cts = ctype_cts(L); + lj_cconv_ct_tv(cts, ctype_get(cts, CTID_DOUBLE), + (uint8_t *)&(L->base-1)->n, o, CCF_CAST); + return FFH_RES(1); + } +#endif } else { const char *p = strdata(lj_lib_checkstr(L, 1)); char *ep; |