From 3a43ea50843e4f6db73b8edf637dfd209ffbe2ab Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 23 May 2012 22:19:05 +0200 Subject: FFI: Equality comparisons never raise an error. --- src/lj_crecord.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/lj_crecord.c') diff --git a/src/lj_crecord.c b/src/lj_crecord.c index 81ab3540..74d62d6c 100644 --- a/src/lj_crecord.c +++ b/src/lj_crecord.c @@ -1073,13 +1073,17 @@ static void crec_arith_meta(jit_State *J, CTState *cts, RecordFFData *rd) tv = lj_ctype_meta(cts, argv2cdata(J, J->base[1], &rd->argv[1])->typeid, (MMS)rd->data); } - if (tv && tvisfunc(tv)) { - J->base[-1] = lj_ir_kfunc(J, funcV(tv)) | TREF_FRAME; - rd->nres = -1; /* Pending tailcall. */ - } else { - /* NYI: non-function metamethods. */ - lj_trace_err(J, LJ_TRERR_BADTYPE); + if (tv) { + if (tvisfunc(tv)) { + J->base[-1] = lj_ir_kfunc(J, funcV(tv)) | TREF_FRAME; + rd->nres = -1; /* Pending tailcall. */ + return; + } /* NYI: non-function metamethods. */ + } else if ((MMS)rd->data == MM_eq) { + J->base[0] = TREF_FALSE; + return; } + lj_trace_err(J, LJ_TRERR_BADTYPE); } void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd) -- cgit v1.2.3-55-g6feb