From: =?UTF-8?q?Beno=C3=AEt=20Burnichon?= Date: Tue, 6 Dec 2011 14:27:04 +0100 Subject: [PATCH] __newindex metamethod may not work if metatable is its own metatable. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Comes from http://www.lua.org/bugs.html#5.1.4-10 reported by Cuero Bugot on 09 Aug 2011. Example: -- meta={} setmetatable(meta, meta) meta.__newindex = function(t, key, value) print("set") end o = setmetatable({}, meta) o.x = 10 -- should print 'set' -- Signed-off-by: BenoƮt Burnichon --- src/lvm.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/src/lvm.c b/src/lvm.c index 4ac2e71..ca7bea0 100644 --- a/src/lvm.c +++ b/src/lvm.c @@ -142,6 +142,7 @@ void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) { if (!ttisnil(oldval) || /* result is no nil? */ (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */ setobj2t(L, oldval, val); + h->flags = 0; luaC_barriert(L, h, val); return; }