| Line | |
|---|
| 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) |
|---|