21d3294c |
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) |