aboutsummaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorLars Müller <34514239+appgurueu@users.noreply.github.com>2022-07-02 20:58:15 +0200
committerGitHub <noreply@github.com>2022-07-02 19:58:15 +0100
commit3e308584a3608406bb5c20ce4503a4bfa1b1d608 (patch)
tree74519e8cb2eddb56abe4cc984e68d01199c68903 /builtin
parent9ac3b52fdcca91ff9cbca6ddabbca0d7f61e7a64 (diff)
downloadminetest-3e308584a3608406bb5c20ce4503a4bfa1b1d608.tar.gz
minetest-3e308584a3608406bb5c20ce4503a4bfa1b1d608.tar.bz2
minetest-3e308584a3608406bb5c20ce4503a4bfa1b1d608.zip
Optimize strict.lua (#12495)
Co-authored-by: sfan5 <sfan5@live.de>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/common/strict.lua26
1 files changed, 13 insertions, 13 deletions
diff --git a/builtin/common/strict.lua b/builtin/common/strict.lua
index f46234dc6..936ebb37b 100644
--- a/builtin/common/strict.lua
+++ b/builtin/common/strict.lua
@@ -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)