summaryrefslogtreecommitdiff
path: root/src/lj_crecord.c
diff options
context:
space:
mode:
authorMike Pall <mike>2020-05-08 13:50:41 +0200
committerMike Pall <mike>2020-05-08 13:50:41 +0200
commitcc4bbec483d3f3250b519ccb7cc22f1a8e6fe6f0 (patch)
treed0194b811af58504b68e91f673e6e27852e82b5d /src/lj_crecord.c
parent179cf2eb84fef2b9a524469c3c8cc49363b8fb10 (diff)
downloadluajit-cc4bbec483d3f3250b519ccb7cc22f1a8e6fe6f0.tar.gz
luajit-cc4bbec483d3f3250b519ccb7cc22f1a8e6fe6f0.tar.bz2
luajit-cc4bbec483d3f3250b519ccb7cc22f1a8e6fe6f0.zip
FFI: Always fall back to metamethods for cdata length/concat.
Thanks to Egor Skriptunoff.
Diffstat (limited to '')
-rw-r--r--src/lj_crecord.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c
index 99344b79..6e3c36a1 100644
--- a/src/lj_crecord.c
+++ b/src/lj_crecord.c
@@ -1443,8 +1443,10 @@ void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd)
1443 } 1443 }
1444 { 1444 {
1445 TRef tr; 1445 TRef tr;
1446 if (!(tr = crec_arith_int64(J, sp, s, (MMS)rd->data)) && 1446 MMS mm = (MMS)rd->data;
1447 !(tr = crec_arith_ptr(J, sp, s, (MMS)rd->data)) && 1447 if ((mm == MM_len || mm == MM_concat ||
1448 (!(tr = crec_arith_int64(J, sp, s, mm)) &&
1449 !(tr = crec_arith_ptr(J, sp, s, mm)))) &&
1448 !(tr = crec_arith_meta(J, sp, s, cts, rd))) 1450 !(tr = crec_arith_meta(J, sp, s, cts, rd)))
1449 return; 1451 return;
1450 J->base[0] = tr; 1452 J->base[0] = tr;