mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
FFI: Compile ffi.typeof(cdata).
Thanks to Robert G. Jakabosky.
This commit is contained in:
parent
e2373c1538
commit
2717623e3a
@ -522,7 +522,7 @@ LJLIB_CF(ffi_cast) LJLIB_REC(ffi_new)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LJLIB_CF(ffi_typeof)
|
LJLIB_CF(ffi_typeof) LJLIB_REC(.)
|
||||||
{
|
{
|
||||||
CTState *cts = ctype_cts(L);
|
CTState *cts = ctype_cts(L);
|
||||||
CTypeID id = ffi_checkctype(L, cts, L->base+1);
|
CTypeID id = ffi_checkctype(L, cts, L->base+1);
|
||||||
@ -533,7 +533,7 @@ LJLIB_CF(ffi_typeof)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LJLIB_CF(ffi_istype) LJLIB_REC(ffi_istype)
|
LJLIB_CF(ffi_istype) LJLIB_REC(.)
|
||||||
{
|
{
|
||||||
CTState *cts = ctype_cts(L);
|
CTState *cts = ctype_cts(L);
|
||||||
CTypeID id1 = ffi_checkctype(L, cts, NULL);
|
CTypeID id1 = ffi_checkctype(L, cts, NULL);
|
||||||
|
@ -1316,6 +1316,18 @@ void LJ_FASTCALL recff_ffi_fill(jit_State *J, RecordFFData *rd)
|
|||||||
} /* else: interpreter will throw. */
|
} /* else: interpreter will throw. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LJ_FASTCALL recff_ffi_typeof(jit_State *J, RecordFFData *rd)
|
||||||
|
{
|
||||||
|
if (tref_iscdata(J->base[0])) {
|
||||||
|
TRef trid = lj_ir_kint(J, argv2ctype(J, J->base[0], &rd->argv[0]));
|
||||||
|
J->base[0] = emitir(IRTG(IR_CNEWI, IRT_CDATA),
|
||||||
|
lj_ir_kint(J, CTID_CTYPEID), trid);
|
||||||
|
} else {
|
||||||
|
setfuncV(J->L, &J->errinfo, J->fn);
|
||||||
|
lj_trace_err_info(J, LJ_TRERR_NYIFFU);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void LJ_FASTCALL recff_ffi_istype(jit_State *J, RecordFFData *rd)
|
void LJ_FASTCALL recff_ffi_istype(jit_State *J, RecordFFData *rd)
|
||||||
{
|
{
|
||||||
argv2ctype(J, J->base[0], &rd->argv[0]);
|
argv2ctype(J, J->base[0], &rd->argv[0]);
|
||||||
|
@ -20,6 +20,7 @@ LJ_FUNC void LJ_FASTCALL recff_ffi_errno(jit_State *J, RecordFFData *rd);
|
|||||||
LJ_FUNC void LJ_FASTCALL recff_ffi_string(jit_State *J, RecordFFData *rd);
|
LJ_FUNC void LJ_FASTCALL recff_ffi_string(jit_State *J, RecordFFData *rd);
|
||||||
LJ_FUNC void LJ_FASTCALL recff_ffi_copy(jit_State *J, RecordFFData *rd);
|
LJ_FUNC void LJ_FASTCALL recff_ffi_copy(jit_State *J, RecordFFData *rd);
|
||||||
LJ_FUNC void LJ_FASTCALL recff_ffi_fill(jit_State *J, RecordFFData *rd);
|
LJ_FUNC void LJ_FASTCALL recff_ffi_fill(jit_State *J, RecordFFData *rd);
|
||||||
|
LJ_FUNC void LJ_FASTCALL recff_ffi_typeof(jit_State *J, RecordFFData *rd);
|
||||||
LJ_FUNC void LJ_FASTCALL recff_ffi_istype(jit_State *J, RecordFFData *rd);
|
LJ_FUNC void LJ_FASTCALL recff_ffi_istype(jit_State *J, RecordFFData *rd);
|
||||||
LJ_FUNC void LJ_FASTCALL recff_ffi_abi(jit_State *J, RecordFFData *rd);
|
LJ_FUNC void LJ_FASTCALL recff_ffi_abi(jit_State *J, RecordFFData *rd);
|
||||||
LJ_FUNC void LJ_FASTCALL lj_crecord_tonumber(jit_State *J, RecordFFData *rd);
|
LJ_FUNC void LJ_FASTCALL lj_crecord_tonumber(jit_State *J, RecordFFData *rd);
|
||||||
@ -33,6 +34,7 @@ LJ_FUNC void LJ_FASTCALL lj_crecord_tonumber(jit_State *J, RecordFFData *rd);
|
|||||||
#define recff_ffi_string recff_nyi
|
#define recff_ffi_string recff_nyi
|
||||||
#define recff_ffi_copy recff_nyi
|
#define recff_ffi_copy recff_nyi
|
||||||
#define recff_ffi_fill recff_nyi
|
#define recff_ffi_fill recff_nyi
|
||||||
|
#define recff_ffi_typeof recff_nyi
|
||||||
#define recff_ffi_istype recff_nyi
|
#define recff_ffi_istype recff_nyi
|
||||||
#define recff_ffi_abi recff_nyi
|
#define recff_ffi_abi recff_nyi
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user