diff options
author | Mike Pall <mike> | 2012-08-08 21:01:36 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2012-08-08 21:01:36 +0200 |
commit | 2717623e3acbcd4270303a0445ddd66326bc6d97 (patch) | |
tree | c0ed101db49dd6f3d02825af0760a858243b22ec /src/lj_crecord.c | |
parent | e2373c153888ea082c31aa8f7d938c09fbe3f4d6 (diff) | |
download | luajit-2717623e3acbcd4270303a0445ddd66326bc6d97.tar.gz luajit-2717623e3acbcd4270303a0445ddd66326bc6d97.tar.bz2 luajit-2717623e3acbcd4270303a0445ddd66326bc6d97.zip |
FFI: Compile ffi.typeof(cdata).
Thanks to Robert G. Jakabosky.
Diffstat (limited to 'src/lj_crecord.c')
-rw-r--r-- | src/lj_crecord.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c index dbd0b83b..30d315d5 100644 --- a/src/lj_crecord.c +++ b/src/lj_crecord.c | |||
@@ -1316,6 +1316,18 @@ void LJ_FASTCALL recff_ffi_fill(jit_State *J, RecordFFData *rd) | |||
1316 | } /* else: interpreter will throw. */ | 1316 | } /* else: interpreter will throw. */ |
1317 | } | 1317 | } |
1318 | 1318 | ||
1319 | void LJ_FASTCALL recff_ffi_typeof(jit_State *J, RecordFFData *rd) | ||
1320 | { | ||
1321 | if (tref_iscdata(J->base[0])) { | ||
1322 | TRef trid = lj_ir_kint(J, argv2ctype(J, J->base[0], &rd->argv[0])); | ||
1323 | J->base[0] = emitir(IRTG(IR_CNEWI, IRT_CDATA), | ||
1324 | lj_ir_kint(J, CTID_CTYPEID), trid); | ||
1325 | } else { | ||
1326 | setfuncV(J->L, &J->errinfo, J->fn); | ||
1327 | lj_trace_err_info(J, LJ_TRERR_NYIFFU); | ||
1328 | } | ||
1329 | } | ||
1330 | |||
1319 | void LJ_FASTCALL recff_ffi_istype(jit_State *J, RecordFFData *rd) | 1331 | void LJ_FASTCALL recff_ffi_istype(jit_State *J, RecordFFData *rd) |
1320 | { | 1332 | { |
1321 | argv2ctype(J, J->base[0], &rd->argv[0]); | 1333 | argv2ctype(J, J->base[0], &rd->argv[0]); |