commit 412e9a4d952d47631feddfa4ec25a520ec75b103
parent 25a491fe349fc52b69ece2ecbcb0b0189decb36f
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Wed, 11 Dec 2024 15:32:16 -0300
'luaH_fastseti' uses 'checknoTM'
The extra check in checknoTM (versus only checking whether there is a
metatable) is cheap, and it is not that uncommon for a table to have a
metatable without a __newindex metafield.
Diffstat:
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ltable.h b/ltable.h
@@ -58,7 +58,7 @@
{ Table *h = t; lua_Unsigned u = l_castS2U(k) - 1u; \
if ((u < h->asize)) { \
lu_byte *tag = getArrTag(h, u); \
- if (h->metatable == NULL || !tagisempty(*tag)) \
+ if (checknoTM(h->metatable, TM_NEWINDEX) || !tagisempty(*tag)) \
{ fval2arr(h, u, tag, val); hres = HOK; } \
else hres = ~cast_int(u); } \
else { hres = luaH_psetint(h, k, val); }}