diff --git a/bugs b/bugs index 0f17c4be..ac31e8c3 100644 --- a/bugs +++ b/bugs @@ -1880,8 +1880,8 @@ patch = [[ +++ lundump.c 2008/04/04 19:51:41 2.7.1.4 @@ -1,5 +1,5 @@ /* --** $Id: bugs,v 1.108 2010/05/14 15:34:57 roberto Exp roberto $ -+** $Id: bugs,v 1.108 2010/05/14 15:34:57 roberto Exp roberto $ +-** $Id: bugs,v 1.109 2011/01/31 14:52:32 roberto Exp roberto $ ++** $Id: bugs,v 1.109 2011/01/31 14:52:32 roberto Exp roberto $ ** load precompiled Lua chunks ** See Copyright Notice in lua.h */ @@ -2359,3 +2359,30 @@ patch = [[ break; ]] } + +Bug{ +what = [[__newindex metamethod may not work if metatable is its own +metatable]], +report = [[Cuero Bugot, 2011/08/09]], +since = [[5.1]], +example = [[ +meta={} +setmetatable(meta, meta) +meta.__newindex = function(t, key, value) print("set") end +o = setmetatable({}, meta) +o.x = 10 -- should print 'set' +]], +patch = [[ +--- lvm.c 2009/07/01 21:10:33 2.63.1.4 ++++ lvm.c 2011/08/17 20:36:28 +@@ -142,6 +142,7 @@ + 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; + } +]] +} +