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 \ 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 \ 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;