-- -- -- -- strict.lua -- -- checks uses of undeclared global variables -- -- All global variables must be 'declared' through a regular assignment -- -- (even assigning nil will do) in a main chunk before being used -- -- anywhere or assigned to inside a function. -- -- -- -- modified for better compatibility with LuaJIT, see: -- -- http://www.freelists.org/post/luajit/strictlua-with-stripped-bytecode -- local getinfo, error, rawset, rawget = debug.getinfo, error, rawset, rawget -- local mt = getmetatable(_G) -- if mt == nil then -- mt = {} -- setmetatable(_G, mt) -- end -- mt.__declared = {} -- mt.__newindex = function (t, n, v) -- if not mt.__declared[n] then -- local info = getinfo(2, "S") -- if info and info.linedefined > 0 then -- LogError("assign to undeclared variable '"..n.."'", 2) -- end -- mt.__declared[n] = true -- end -- rawset(t, n, v) -- end -- mt.__index = function (t, n) -- if not mt.__declared[n] then -- local info = getinfo(2, "S") -- if info and info.linedefined > 0 then -- LogError("variable '"..n.."' is not declared", 2) -- end -- end -- return rawget(t, n) -- end