summaryrefslogtreecommitdiff
path: root/src/lj_crecord.c
diff options
context:
space:
mode:
authorMike Pall <mike>2012-08-08 21:01:36 +0200
committerMike Pall <mike>2012-08-08 21:01:36 +0200
commit2717623e3acbcd4270303a0445ddd66326bc6d97 (patch)
treec0ed101db49dd6f3d02825af0760a858243b22ec /src/lj_crecord.c
parente2373c153888ea082c31aa8f7d938c09fbe3f4d6 (diff)
downloadluajit-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.c12
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
1319void 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
1319void LJ_FASTCALL recff_ffi_istype(jit_State *J, RecordFFData *rd) 1331void 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]);