Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/lua-5.1.3/etc/strict.lua @ 66

Last change on this file since 66 was 28, checked in by landauf, 16 years ago
File size: 969 bytes
Line 
1--
2-- strict.lua
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.
7--
8
9local getinfo, error, rawset, rawget = debug.getinfo, error, rawset, rawget
10
11local mt = getmetatable(_G)
12if mt == nil then
13  mt = {}
14  setmetatable(_G, mt)
15end
16
17mt.__declared = {}
18
19local function what ()
20  local d = getinfo(3, "S")
21  return d and d.what or "C"
22end
23
24mt.__newindex = function (t, n, v)
25  if not mt.__declared[n] then
26    local w = what()
27    if w ~= "main" and w ~= "C" then
28      error("assign to undeclared variable '"..n.."'", 2)
29    end
30    mt.__declared[n] = true
31  end
32  rawset(t, n, v)
33end
34 
35mt.__index = function (t, n)
36  if not mt.__declared[n] and what() ~= "C" then
37    error("variable '"..n.."' is not declared", 2)
38  end
39  return rawget(t, n)
40end
41
Note: See TracBrowser for help on using the repository browser.