Too many variables in an assignment may cause a C stack overflow. (7)
[lua.git] / test / trace-globals.lua
blob295e670caa2bc0aa95ea822b2a68c4305f6d31f0
1 -- trace assigments to global variables
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
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
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
30 -- an example
32 a=1
33 b=2
34 a=10
35 b=20
36 b=nil
37 b=200
38 print(a,b,c)