diff options
| author | Mike Pall <mike> | 2010-12-05 00:40:23 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2010-12-05 00:40:23 +0100 |
| commit | 513b0ba18f003a3e6c666f0b2d422d3553fdbfcb (patch) | |
| tree | a5bc37d6920dc85eaa56449e2c54c7aefca6cd2b /src | |
| parent | 233076d3f922c390fa9c258284cf99058cec69cb (diff) | |
| download | luajit-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.dep | 4 | ||||
| -rw-r--r-- | src/lib_base.c | 12 |
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 |
| 15 | lib_base.o: lib_base.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ | 15 | lib_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 |
| 19 | lib_bit.o: lib_bit.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ | 19 | lib_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 |
| 21 | lib_debug.o: lib_debug.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ | 21 | 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 @@ | |||
| 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; |
