From 141a4d0992dc1a074467a0589f2207583d49767e Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Mon, 4 Jan 2016 15:57:03 +0800 Subject: [PATCH] lua 5.3.2 bugfix,see http://lua-users.org/lists/lua-l/2016-01/msg00000.html --- 3rd/lua/lvm.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/3rd/lua/lvm.c b/3rd/lua/lvm.c index 58ba7f29..3fa87cb1 100644 --- a/3rd/lua/lvm.c +++ b/3rd/lua/lvm.c @@ -200,18 +200,19 @@ void luaV_finishset (lua_State *L, const TValue *t, TValue *key, for (loop = 0; loop < MAXTAGLOOP; loop++) { const TValue *tm; if (oldval != NULL) { - lua_assert(ttistable(t) && ttisnil(oldval)); + Table *h = hvalue(t); + lua_assert(ttisnil(oldval)); /* must check the metamethod */ - if ((tm = fasttm(L, hvalue(t)->metatable, TM_NEWINDEX)) == NULL && + if ((tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL && /* no metamethod; is there a previous entry in the table? */ (oldval != luaO_nilobject || /* no previous entry; must create one. (The next test is always true; we only need the assignment.) */ - (oldval = luaH_newkey(L, hvalue(t), key), 1))) { + (oldval = luaH_newkey(L, h, key), 1))) { /* no metamethod and (now) there is an entry with given key */ setobj2t(L, cast(TValue *, oldval), val); - invalidateTMcache(hvalue(t)); - luaC_barrierback(L, hvalue(t), val); + invalidateTMcache(h); + luaC_barrierback(L, h, val); return; } /* else will try the metamethod */