]> git.lizzy.rs Git - metalua.git/blobdiff - src/lib/strict.lua
fixes suggested by D. M.
[metalua.git] / src / lib / strict.lua
index 8ca18fab3f11536010344977037c58d365963cae..772fc109b9f01060cd965af56773b703a9f7a3c2 100644 (file)
@@ -6,18 +6,25 @@
 -- 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
 
-__STRICT = true
+__strict = true
 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 __STRICT and not mt.__declared[n] then
-    local w = debug.getinfo(2, "S").what
+  if __strict and not mt.__declared[n] then
+    local w = what()
     if w ~= "main" and w ~= "C" then
       error("assign to undeclared variable '"..n.."'", 2)
     end
@@ -27,7 +34,7 @@ mt.__newindex = function (t, n, v)
 end
   
 mt.__index = function (t, n)
-  if not mt.__declared[n] and debug.getinfo(2, "S").what ~= "C" then
+  if __strict and not mt.__declared[n] and what() ~= "C" then
     error("variable '"..n.."' is not declared", 2)
   end
   return rawget(t, n)