summaryrefslogtreecommitdiff
path: root/src/lib_base.c
diff options
context:
space:
mode:
authorMike Pall <mike>2010-12-05 00:40:23 +0100
committerMike Pall <mike>2010-12-05 00:40:23 +0100
commit513b0ba18f003a3e6c666f0b2d422d3553fdbfcb (patch)
treea5bc37d6920dc85eaa56449e2c54c7aefca6cd2b /src/lib_base.c
parent233076d3f922c390fa9c258284cf99058cec69cb (diff)
downloadluajit2-513b0ba18f003a3e6c666f0b2d422d3553fdbfcb.tar.gz
FFI: Add support for converting cdata to tonumber().
Diffstat (limited to 'src/lib_base.c')
-rw-r--r--src/lib_base.c12
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;