1-- trace assigments to global variables 2 3do 4 -- a tostring that quotes strings. note the use of the original tostring. 5 local _tostring=tostring 6 local tostring=function(a) 7 if type(a)=="string" then 8 return string.format("%q",a) 9 else 10 return _tostring(a) 11 end 12 end 13 14 local log=function (name,old,new) 15 local t=debug.getinfo(3,"Sl") 16 local line=t.currentline 17 io.write(t.short_src) 18 if line>=0 then io.write(":",line) end 19 io.write(": ",name," is now ",tostring(new)," (was ",tostring(old),")","\n") 20 end 21 22 local g={} 23 local set=function (t,name,value) 24 log(name,g[name],value) 25 g[name]=value 26 end 27 setmetatable(getfenv(),{__index=g,__newindex=set}) 28end 29 30-- an example 31 32a=1 33b=2 34a=10 35b=20 36b=nil 37b=200 38print(a,b,c) 39