Browse Source

'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.
Roberto Ierusalimschy 7 months ago
parent
commit
412e9a4d95
1 changed files with 1 additions and 1 deletions
  1. 1 1
      ltable.h

+ 1 - 1
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); }}