summaryrefslogtreecommitdiff
path: root/src/lj_crecord.c
diff options
context:
space:
mode:
authorMike Pall <mike>2012-05-23 22:19:05 +0200
committerMike Pall <mike>2012-05-23 22:20:27 +0200
commit3a43ea50843e4f6db73b8edf637dfd209ffbe2ab (patch)
treed939ba39e95c0463fd12bad5963a0b50564a47a5 /src/lj_crecord.c
parentf3197046b801b20e28a2b9acc6fb0ee4f51f9f2f (diff)
downloadluajit-3a43ea50843e4f6db73b8edf637dfd209ffbe2ab.tar.gz
luajit-3a43ea50843e4f6db73b8edf637dfd209ffbe2ab.tar.bz2
luajit-3a43ea50843e4f6db73b8edf637dfd209ffbe2ab.zip
FFI: Equality comparisons never raise an error.
Diffstat (limited to 'src/lj_crecord.c')
-rw-r--r--src/lj_crecord.c16
1 files changed, 10 insertions, 6 deletions
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)
1073 tv = lj_ctype_meta(cts, argv2cdata(J, J->base[1], &rd->argv[1])->typeid, 1073 tv = lj_ctype_meta(cts, argv2cdata(J, J->base[1], &rd->argv[1])->typeid,
1074 (MMS)rd->data); 1074 (MMS)rd->data);
1075 } 1075 }
1076 if (tv && tvisfunc(tv)) { 1076 if (tv) {
1077 J->base[-1] = lj_ir_kfunc(J, funcV(tv)) | TREF_FRAME; 1077 if (tvisfunc(tv)) {
1078 rd->nres = -1; /* Pending tailcall. */ 1078 J->base[-1] = lj_ir_kfunc(J, funcV(tv)) | TREF_FRAME;
1079 } else { 1079 rd->nres = -1; /* Pending tailcall. */
1080 /* NYI: non-function metamethods. */ 1080 return;
1081 lj_trace_err(J, LJ_TRERR_BADTYPE); 1081 } /* NYI: non-function metamethods. */
1082 } else if ((MMS)rd->data == MM_eq) {
1083 J->base[0] = TREF_FALSE;
1084 return;
1082 } 1085 }
1086 lj_trace_err(J, LJ_TRERR_BADTYPE);
1083} 1087}
1084 1088
1085void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd) 1089void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd)