فهرست منبع

FFI: Add support for converting cdata to tonumber().

Mike Pall 15 سال پیش
والد
کامیت
513b0ba18f
2فایلهای تغییر یافته به همراه14 افزوده شده و 2 حذف شده
  1. 2 2
      src/Makefile.dep
  2. 12 0
      src/lib_base.c

+ 2 - 2
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 \
  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 \

+ 12 - 0
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;