]> git.lizzy.rs Git - minetest.git/blobdiff - builtin/common/strict.lua
Deserialization: Restore backwards compat (#12519)
[minetest.git] / builtin / common / strict.lua
index f46234dc6b9006a302f2ed7d516b7ceaf15bebd4..936ebb37b2c28f76461eea5c3e512a1d8d8d79f3 100644 (file)
@@ -1,4 +1,4 @@
-local getinfo = debug.getinfo
+local getinfo, rawget, rawset = debug.getinfo, rawget, rawset
 
 function core.global_exists(name)
        if type(name) ~= "string" then
@@ -14,33 +14,33 @@ local declared = {}
 local warned = {}
 
 function meta:__newindex(name, value)
+       if declared[name] then
+               return
+       end
        local info = getinfo(2, "Sl")
        local desc = ("%s:%d"):format(info.short_src, info.currentline)
-       if not declared[name] then
-               local warn_key = ("%s\0%d\0%s"):format(info.source,
-                               info.currentline, name)
-               if not warned[warn_key] and info.what ~= "main" and
-                               info.what ~= "C" then
-                       core.log("warning", ("Assignment to undeclared "..
-                                       "global %q inside a function at %s.")
+       local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name)
+       if not warned[warn_key] and info.what ~= "main" and info.what ~= "C" then
+               core.log("warning", ("Assignment to undeclared global %q inside a function at %s.")
                                :format(name, desc))
-                       warned[warn_key] = true
-               end
-               declared[name] = true
+               warned[warn_key] = true
        end
        rawset(self, name, value)
+       declared[name] = true
 end
 
 
 function meta:__index(name)
+       if declared[name] then
+               return
+       end
        local info = getinfo(2, "Sl")
        local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name)
-       if not declared[name] and not warned[warn_key] and info.what ~= "C" then
+       if not warned[warn_key] and info.what ~= "C" then
                core.log("warning", ("Undeclared global variable %q accessed at %s:%s")
                                :format(name, info.short_src, info.currentline))
                warned[warn_key] = true
        end
-       return rawget(self, name)
 end
 
 setmetatable(_G, meta)