]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
FFI: Add support for converting cdata to tonumber().
authorMike Pall <mike>
Sat, 4 Dec 2010 23:40:23 +0000 (00:40 +0100)
committerMike Pall <mike>
Sat, 4 Dec 2010 23:40:23 +0000 (00:40 +0100)
src/Makefile.dep
src/lib_base.c

index 28fad93ffb3238232b459cd2f6675f654286c321..75d71afbaac14c78c46e07cf57a6eddf49810fff 100644 (file)
@@ -14,8 +14,8 @@ lib_aux.o: lib_aux.c lua.h luaconf.h lauxlib.h lj_obj.h lj_def.h \
  lj_arch.h lj_err.h lj_errmsg.h lj_state.h lj_lib.h lj_alloc.h
 lib_base.o: lib_base.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
  lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \
- lj_meta.h lj_state.h lj_bc.h lj_ff.h lj_ffdef.h lj_dispatch.h lj_jit.h \
- lj_ir.h lj_char.h lj_lib.h lj_libdef.h
+ lj_meta.h lj_state.h lj_ctype.h lj_cconv.h lj_bc.h lj_ff.h lj_ffdef.h \
+ lj_dispatch.h lj_jit.h lj_ir.h lj_char.h lj_lib.h lj_libdef.h
 lib_bit.o: lib_bit.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \
  lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_lib.h lj_libdef.h
 lib_debug.o: lib_debug.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
index af7380080ffb066746a3d53ee0c7c7d7f9465bd4..c52f91912b06eab245c2ee25ef50d7538f724c41 100644 (file)
 #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;