- -- trace assigments to global variables 
-   
- do 
-  -- a tostring that quotes strings. note the use of the original tostring. 
-  local _tostring=tostring 
-  local tostring=function(a) 
-   if type(a)=="string" then 
-    return string.format("%q",a) 
-   else 
-    return _tostring(a) 
-   end 
-  end 
-   
-  local log=function (name,old,new) 
-   local t=debug.getinfo(3,"Sl") 
-   local line=t.currentline 
-   io.write(t.short_src) 
-   if line>=0 then io.write(":",line) end 
-   io.write(": ",name," is now ",tostring(new)," (was ",tostring(old),")","\n") 
-  end 
-   
-  local g={} 
-  local set=function (t,name,value) 
-   log(name,g[name],value) 
-   g[name]=value 
-  end 
-  setmetatable(getfenv(),{__index=g,__newindex=set}) 
- end 
-   
- -- an example 
-   
- a=1 
- b=2 
- a=10 
- b=20 
- b=nil 
- b=200 
- print(a,b,c) 
-