From 88c7785b8726e7dc9538d0cde680e315b4990b62 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 9 Oct 2013 17:23:08 +0200 Subject: [PATCH] FFI: Compile lightuserdata to void * conversion. --- src/lj_crecord.c | 7 ++++++- src/lj_ir.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lj_crecord.c b/src/lj_crecord.c index 41d41904..78e999f2 100644 --- a/src/lj_crecord.c +++ b/src/lj_crecord.c @@ -641,7 +641,12 @@ static TRef crec_ct_tv(jit_State *J, CType *d, TRef dp, TRef sp, cTValue *sval) sp = emitir(IRT(IR_ADD, IRT_PTR), sp, lj_ir_kintp(J, sizeof(GCstr))); sid = CTID_A_CCHAR; } - } else { /* NYI: tref_istab(sp), tref_islightud(sp). */ + } else if (tref_islightud(sp)) { +#if LJ_64 + sp = emitir(IRT(IR_BAND, IRT_P64), sp, + lj_ir_kint64(J, U64x(00007fff,ffffffff))); +#endif + } else { /* NYI: tref_istab(sp). */ IRType t; sid = argv2cdata(J, sp, sval)->ctypeid; s = ctype_raw(cts, sid); diff --git a/src/lj_ir.h b/src/lj_ir.h index 30878b91..f50132ea 100644 --- a/src/lj_ir.h +++ b/src/lj_ir.h @@ -479,6 +479,7 @@ typedef uint32_t TRef; #define tref_isnil(tr) (tref_istype((tr), IRT_NIL)) #define tref_isfalse(tr) (tref_istype((tr), IRT_FALSE)) #define tref_istrue(tr) (tref_istype((tr), IRT_TRUE)) +#define tref_islightud(tr) (tref_istype((tr), IRT_LIGHTUD)) #define tref_isstr(tr) (tref_istype((tr), IRT_STR)) #define tref_isfunc(tr) (tref_istype((tr), IRT_FUNC)) #define tref_iscdata(tr) (tref_istype((tr), IRT_CDATA))