1
0
mirror of https://github.com/fluencelabs/redis synced 2025-06-11 16:21:21 +00:00
Files
deps
hiredis
jemalloc
linenoise
lua
doc
etc
Makefile
README
all.c
lua.hpp
lua.ico
lua.pc
luavs.bat
min.c
noparser.c
strict.lua
src
test
COPYRIGHT
HISTORY
INSTALL
Makefile
README
Makefile
src
tests
utils
.gitignore
00-RELEASENOTES
BUGS
CONTRIBUTING
COPYING
Changelog
INSTALL
MANIFESTO
Makefile
README
redis.conf
runtest
sentinel.conf
redis/deps/lua/etc/strict.lua

42 lines
928 B
Lua
Raw Normal View History

--
-- 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.
--
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 = {}
local function what ()
local d = getinfo(3, "S")
return d and d.what or "C"
end
mt.__newindex = function (t, n, v)
if not mt.__declared[n] then
local w = what()
if w ~= "main" and w ~= "C" then
error("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] and what() ~= "C" then
error("variable '"..n.."' is not declared", 2)
end
return rawget(t, n)
end