3 -- checks uses of undeclared global variables
4 -- All global variables must be 'declared' through a regular assignment
5 -- (even assigning nil will do) in a main chunk before being used
6 -- anywhere or assigned to inside a function.
9 local getinfo
, error, rawset, rawget = debug
.getinfo
, error, rawset, rawget
11 local mt
= getmetatable(_G
)
19 local function what ()
20 local d
= getinfo(3, "S")
21 return d
and d
.what
or "C"
24 mt
.__newindex
= function (t
, n
, v
)
25 if not mt
.__declared
[n
] then
27 if w
~= "main" and w
~= "C" then
28 error("assign to undeclared variable '"..n
.."'", 2)
30 mt
.__declared
[n
] = true
35 mt
.__index
= function (t
, n
)
36 if not mt
.__declared
[n
] and what() ~= "C" then
37 error("variable '"..n
.."' is not declared", 2)