diff options
author | Mike Pall <mike> | 2020-05-08 13:50:41 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2020-05-08 13:50:41 +0200 |
commit | cc4bbec483d3f3250b519ccb7cc22f1a8e6fe6f0 (patch) | |
tree | d0194b811af58504b68e91f673e6e27852e82b5d /src/lj_crecord.c | |
parent | 179cf2eb84fef2b9a524469c3c8cc49363b8fb10 (diff) | |
download | luajit-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.c | 6 |
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; |