Optimize strict.lua (#12495)

Co-authored-by: sfan5 <sfan5@live.de>
This commit is contained in:
Lars Müller 2022-07-02 20:58:15 +02:00 committed by GitHub
parent 9ac3b52fdc
commit 3e308584a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,4 +1,4 @@
local getinfo = debug.getinfo local getinfo, rawget, rawset = debug.getinfo, rawget, rawset
function core.global_exists(name) function core.global_exists(name)
if type(name) ~= "string" then if type(name) ~= "string" then
@ -14,33 +14,33 @@ local declared = {}
local warned = {} local warned = {}
function meta:__newindex(name, value) function meta:__newindex(name, value)
if declared[name] then
return
end
local info = getinfo(2, "Sl") local info = getinfo(2, "Sl")
local desc = ("%s:%d"):format(info.short_src, info.currentline) 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)
local warn_key = ("%s\0%d\0%s"):format(info.source, if not warned[warn_key] and info.what ~= "main" and info.what ~= "C" then
info.currentline, name) core.log("warning", ("Assignment to undeclared global %q inside a function at %s.")
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)) :format(name, desc))
warned[warn_key] = true warned[warn_key] = true
end
declared[name] = true
end end
rawset(self, name, value) rawset(self, name, value)
declared[name] = true
end end
function meta:__index(name) function meta:__index(name)
if declared[name] then
return
end
local info = getinfo(2, "Sl") local info = getinfo(2, "Sl")
local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name) 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") core.log("warning", ("Undeclared global variable %q accessed at %s:%s")
:format(name, info.short_src, info.currentline)) :format(name, info.short_src, info.currentline))
warned[warn_key] = true warned[warn_key] = true
end end
return rawget(self, name)
end end
setmetatable(_G, meta) setmetatable(_G, meta)