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 mt
= getmetatable(_G
)
17 local function what ()
18 local d
= debug
.getinfo(3, "S")
19 return d
and d
.what
or "C"
22 mt
.__newindex
= function (t
, n
, v
)
23 if not mt
.__declared
[n
] then
25 if w
~= "main" and w
~= "C" then
26 error("assign to undeclared variable '"..n
.."'", 2)
28 mt
.__declared
[n
] = true
33 mt
.__index
= function (t
, n
)
34 if not mt
.__declared
[n
] and what() ~= "C" then
35 error("variable '"..n
.."' is not declared", 2)