]>
Commit | Line | Data |
---|---|---|
1 | -- trace assigments to global variables | |
2 | ||
3 | do | |
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}) | |
28 | end | |
29 | ||
30 | -- an example | |
31 | ||
32 | a=1 | |
33 | b=2 | |
34 | a=10 | |
35 | b=20 | |
36 | b=nil | |
37 | b=200 | |
38 | print(a,b,c) |