diff --git a/lualib-src/lua-sharedata.c b/lualib-src/lua-sharedata.c index 1a0f4f74..950d3f50 100644 --- a/lualib-src/lua-sharedata.c +++ b/lualib-src/lua-sharedata.c @@ -747,9 +747,6 @@ lupdate(lua_State *L) { luaL_checktype(L, 3, LUA_TTABLE); struct ctrl * c= lua_touserdata(L, 1); struct table *n = lua_touserdata(L, 2); - if (c->update) { - return luaL_error(L, "can't update more than once"); - } if (c->root == n) { return luaL_error(L, "You should update a new object"); } diff --git a/lualib/sharedata/corelib.lua b/lualib/sharedata/corelib.lua index d9a5488a..06b37fd6 100644 --- a/lualib/sharedata/corelib.lua +++ b/lualib/sharedata/corelib.lua @@ -59,15 +59,15 @@ function meta:__index(key) local newobj, newtbl = needupdate(self.__gcobj) if newobj then local newgcobj = newtbl.__gcobj - -- todo: update local root = findroot(self) update(root, newobj, newgcobj) if obj == self.__obj then error ("The key [" .. genkey(self) .. "] doesn't exist after update") end + obj = self.__obj end end - local v = index(self.__obj, key) + local v = index(obj, key) if type(v) == "userdata" then local r = setmetatable({ __obj = v, @@ -127,7 +127,7 @@ end function conf.update(self, pointer) local cobj = self.__obj - assert(isdirty(cobj), "Obly dirty object can be update") + assert(isdirty(cobj), "Only dirty object can be update") core.update(self.__gcobj, pointer, { __gcobj = core.box(pointer) }) end