aboutsummaryrefslogtreecommitdiff
path: root/src
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
parent233076d3f922c390fa9c258284cf99058cec69cb (diff)
downloadluajit-513b0ba18f003a3e6c666f0b2d422d3553fdbfcb.tar.gz
luajit-513b0ba18f003a3e6c666f0b2d422d3553fdbfcb.tar.bz2
luajit-513b0ba18f003a3e6c666f0b2d422d3553fdbfcb.zip
FFI: Add support for converting cdata to tonumber().
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.dep4
-rw-r--r--src/lib_base.c12
2 files changed, 14 insertions, 2 deletions
diff --git a/src/Makefile.dep b/src/Makefile.dep
index 28fad93f..75d71afb 100644
--- a/src/Makefile.dep
+++ b/src/Makefile.dep
@@ -14,8 +14,8 @@ lib_aux.o: lib_aux.c lua.h luaconf.h lauxlib.h lj_obj.h lj_def.h \
14 lj_arch.h lj_err.h lj_errmsg.h lj_state.h lj_lib.h lj_alloc.h 14 lj_arch.h lj_err.h lj_errmsg.h lj_state.h lj_lib.h lj_alloc.h
15lib_base.o: lib_base.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ 15lib_base.o: lib_base.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
16 lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \ 16 lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \
17 lj_meta.h lj_state.h lj_bc.h lj_ff.h lj_ffdef.h lj_dispatch.h lj_jit.h \ 17 lj_meta.h lj_state.h lj_ctype.h lj_cconv.h lj_bc.h lj_ff.h lj_ffdef.h \
18 lj_ir.h lj_char.h lj_lib.h lj_libdef.h 18 lj_dispatch.h lj_jit.h lj_ir.h lj_char.h lj_lib.h lj_libdef.h
19lib_bit.o: lib_bit.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ 19lib_bit.o: lib_bit.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \
20 lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_lib.h lj_libdef.h 20 lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_lib.h lj_libdef.h
21lib_debug.o: lib_debug.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ 21lib_debug.o: lib_debug.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
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 @@
22#include "lj_tab.h" 22#include "lj_tab.h"
23#include "lj_meta.h" 23#include "lj_meta.h"
24#include "lj_state.h" 24#include "lj_state.h"
25#if LJ_HASFFI
26#include "lj_ctype.h"
27#include "lj_cconv.h"
28#endif
25#include "lj_bc.h" 29#include "lj_bc.h"
26#include "lj_ff.h" 30#include "lj_ff.h"
27#include "lj_dispatch.h" 31#include "lj_dispatch.h"
@@ -190,6 +194,14 @@ LJLIB_ASM(tonumber) LJLIB_REC(.)
190 setnumV(L->base-1, numV(o)); 194 setnumV(L->base-1, numV(o));
191 return FFH_RES(1); 195 return FFH_RES(1);
192 } 196 }
197#if LJ_HASFFI
198 if (tviscdata(o)) {
199 CTState *cts = ctype_cts(L);
200 lj_cconv_ct_tv(cts, ctype_get(cts, CTID_DOUBLE),
201 (uint8_t *)&(L->base-1)->n, o, CCF_CAST);
202 return FFH_RES(1);
203 }
204#endif
193 } else { 205 } else {
194 const char *p = strdata(lj_lib_checkstr(L, 1)); 206 const char *p = strdata(lj_lib_checkstr(L, 1));
195 char *ep; 207 char *ep;