diff options
Diffstat (limited to 'src/lib_base.c')
-rw-r--r-- | src/lib_base.c | 12 |
1 files changed, 12 insertions, 0 deletions
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; |