diff options
author | David Walter Seikel | 2012-01-23 21:58:02 +1000 |
---|---|---|
committer | David Walter Seikel | 2012-01-23 21:58:02 +1000 |
commit | 2d1df4714e2736dbde7855ddcd76b4c1de822fa5 (patch) | |
tree | c80e4622631c92dbe8dd6375d187702d084c2f2b /LuaSL/testLua/yueliang-0.4.1/test_lua/5.0 | |
parent | Remove the conflict, and the comment. lol (diff) | |
download | SledjHamr-2d1df4714e2736dbde7855ddcd76b4c1de822fa5.zip SledjHamr-2d1df4714e2736dbde7855ddcd76b4c1de822fa5.tar.gz SledjHamr-2d1df4714e2736dbde7855ddcd76b4c1de822fa5.tar.bz2 SledjHamr-2d1df4714e2736dbde7855ddcd76b4c1de822fa5.tar.xz |
Added a big bunch of example lua scripts for testing the speed of lua compiling.
Diffstat (limited to 'LuaSL/testLua/yueliang-0.4.1/test_lua/5.0')
20 files changed, 493 insertions, 0 deletions
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/bisect.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/bisect.lua new file mode 100644 index 0000000..f91e69b --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/bisect.lua | |||
@@ -0,0 +1,27 @@ | |||
1 | -- bisection method for solving non-linear equations | ||
2 | |||
3 | delta=1e-6 -- tolerance | ||
4 | |||
5 | function bisect(f,a,b,fa,fb) | ||
6 | local c=(a+b)/2 | ||
7 | io.write(n," c=",c," a=",a," b=",b,"\n") | ||
8 | if c==a or c==b or math.abs(a-b)<delta then return c,b-a end | ||
9 | n=n+1 | ||
10 | local fc=f(c) | ||
11 | if fa*fc<0 then return bisect(f,a,c,fa,fc) else return bisect(f,c,b,fc,fb) end | ||
12 | end | ||
13 | |||
14 | -- find root of f in the inverval [a,b]. needs f(a)*f(b)<0 | ||
15 | function solve(f,a,b) | ||
16 | n=0 | ||
17 | local z,e=bisect(f,a,b,f(a),f(b)) | ||
18 | io.write(string.format("after %d steps, root is %.17g with error %.1e, f=%.1e\n",n,z,e,f(z))) | ||
19 | end | ||
20 | |||
21 | -- our function | ||
22 | function f(x) | ||
23 | return x*x*x-x-1 | ||
24 | end | ||
25 | |||
26 | -- find zero in [1,2] | ||
27 | solve(f,1,2) | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/cf.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/cf.lua new file mode 100644 index 0000000..8cda54b --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/cf.lua | |||
@@ -0,0 +1,16 @@ | |||
1 | -- temperature conversion table (celsius to farenheit) | ||
2 | |||
3 | for c0=-20,50-1,10 do | ||
4 | io.write("C ") | ||
5 | for c=c0,c0+10-1 do | ||
6 | io.write(string.format("%3.0f ",c)) | ||
7 | end | ||
8 | io.write("\n") | ||
9 | |||
10 | io.write("F ") | ||
11 | for c=c0,c0+10-1 do | ||
12 | f=(9/5)*c+32 | ||
13 | io.write(string.format("%3.0f ",f)) | ||
14 | end | ||
15 | io.write("\n\n") | ||
16 | end | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/echo.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/echo.lua new file mode 100644 index 0000000..4313439 --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/echo.lua | |||
@@ -0,0 +1,5 @@ | |||
1 | -- echo command line arguments | ||
2 | |||
3 | for i=0,table.getn(arg) do | ||
4 | print(i,arg[i]) | ||
5 | end | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/env.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/env.lua new file mode 100644 index 0000000..9e62a57 --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/env.lua | |||
@@ -0,0 +1,7 @@ | |||
1 | -- read environment variables as if they were global variables | ||
2 | |||
3 | local f=function (t,i) return os.getenv(i) end | ||
4 | setmetatable(getfenv(),{__index=f}) | ||
5 | |||
6 | -- an example | ||
7 | print(a,USER,PATH) | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/factorial.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/factorial.lua new file mode 100644 index 0000000..7c4cf0f --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/factorial.lua | |||
@@ -0,0 +1,32 @@ | |||
1 | -- function closures are powerful | ||
2 | |||
3 | -- traditional fixed-point operator from functional programming | ||
4 | Y = function (g) | ||
5 | local a = function (f) return f(f) end | ||
6 | return a(function (f) | ||
7 | return g(function (x) | ||
8 | local c=f(f) | ||
9 | return c(x) | ||
10 | end) | ||
11 | end) | ||
12 | end | ||
13 | |||
14 | |||
15 | -- factorial without recursion | ||
16 | F = function (f) | ||
17 | return function (n) | ||
18 | if n == 0 then return 1 | ||
19 | else return n*f(n-1) end | ||
20 | end | ||
21 | end | ||
22 | |||
23 | factorial = Y(F) -- factorial is the fixed point of F | ||
24 | |||
25 | -- now test it | ||
26 | function test(x) | ||
27 | io.write(x,"! = ",factorial(x),"\n") | ||
28 | end | ||
29 | |||
30 | for n=0,16 do | ||
31 | test(n) | ||
32 | end | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/fib.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/fib.lua new file mode 100644 index 0000000..97a921b --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/fib.lua | |||
@@ -0,0 +1,40 @@ | |||
1 | -- fibonacci function with cache | ||
2 | |||
3 | -- very inefficient fibonacci function | ||
4 | function fib(n) | ||
5 | N=N+1 | ||
6 | if n<2 then | ||
7 | return n | ||
8 | else | ||
9 | return fib(n-1)+fib(n-2) | ||
10 | end | ||
11 | end | ||
12 | |||
13 | -- a general-purpose value cache | ||
14 | function cache(f) | ||
15 | local c={} | ||
16 | return function (x) | ||
17 | local y=c[x] | ||
18 | if not y then | ||
19 | y=f(x) | ||
20 | c[x]=y | ||
21 | end | ||
22 | return y | ||
23 | end | ||
24 | end | ||
25 | |||
26 | -- run and time it | ||
27 | function test(s,f) | ||
28 | N=0 | ||
29 | local c=os.clock() | ||
30 | local v=f(n) | ||
31 | local t=os.clock()-c | ||
32 | print(s,n,v,t,N) | ||
33 | end | ||
34 | |||
35 | n=arg[1] or 24 -- for other values, do lua fib.lua XX | ||
36 | n=tonumber(n) | ||
37 | print("","n","value","time","evals") | ||
38 | test("plain",fib) | ||
39 | fib=cache(fib) | ||
40 | test("cached",fib) | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/fibfor.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/fibfor.lua new file mode 100644 index 0000000..19bb34b --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/fibfor.lua | |||
@@ -0,0 +1,13 @@ | |||
1 | -- example of for with generator functions | ||
2 | |||
3 | function generatefib (n) | ||
4 | return coroutine.wrap(function () | ||
5 | local a,b = 1, 1 | ||
6 | while a <= n do | ||
7 | coroutine.yield(a) | ||
8 | a, b = b, a+b | ||
9 | end | ||
10 | end, n) | ||
11 | end | ||
12 | |||
13 | for i in generatefib(1000) do print(i) end | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/globals.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/globals.lua new file mode 100644 index 0000000..d4c20e1 --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/globals.lua | |||
@@ -0,0 +1,13 @@ | |||
1 | -- reads luac listings and reports global variable usage | ||
2 | -- lines where a global is written to are marked with "*" | ||
3 | -- typical usage: luac -p -l file.lua | lua globals.lua | sort | lua table.lua | ||
4 | |||
5 | while 1 do | ||
6 | local s=io.read() | ||
7 | if s==nil then break end | ||
8 | local ok,_,l,op,g=string.find(s,"%[%-?(%d*)%]%s*([GS])ETGLOBAL.-;%s+(.*)$") | ||
9 | if ok then | ||
10 | if op=="S" then op="*" else op="" end | ||
11 | io.write(g,"\t",l,op,"\n") | ||
12 | end | ||
13 | end | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/hello.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/hello.lua new file mode 100644 index 0000000..0925498 --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/hello.lua | |||
@@ -0,0 +1,3 @@ | |||
1 | -- the first program in every language | ||
2 | |||
3 | io.write("Hello world, from ",_VERSION,"!\n") | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/life.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/life.lua new file mode 100644 index 0000000..911d9fe --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/life.lua | |||
@@ -0,0 +1,111 @@ | |||
1 | -- life.lua | ||
2 | -- original by Dave Bollinger <DBollinger@compuserve.com> posted to lua-l | ||
3 | -- modified to use ANSI terminal escape sequences | ||
4 | -- modified to use for instead of while | ||
5 | |||
6 | local write=io.write | ||
7 | |||
8 | ALIVE="¥" DEAD="þ" | ||
9 | ALIVE="O" DEAD="-" | ||
10 | |||
11 | function delay() -- NOTE: SYSTEM-DEPENDENT, adjust as necessary | ||
12 | for i=1,10000 do end | ||
13 | -- local i=os.clock()+1 while(os.clock()<i) do end | ||
14 | end | ||
15 | |||
16 | function ARRAY2D(w,h) | ||
17 | local t = {w=w,h=h} | ||
18 | for y=1,h do | ||
19 | t[y] = {} | ||
20 | for x=1,w do | ||
21 | t[y][x]=0 | ||
22 | end | ||
23 | end | ||
24 | return t | ||
25 | end | ||
26 | |||
27 | _CELLS = {} | ||
28 | |||
29 | -- give birth to a "shape" within the cell array | ||
30 | function _CELLS:spawn(shape,left,top) | ||
31 | for y=0,shape.h-1 do | ||
32 | for x=0,shape.w-1 do | ||
33 | self[top+y][left+x] = shape[y*shape.w+x+1] | ||
34 | end | ||
35 | end | ||
36 | end | ||
37 | |||
38 | -- run the CA and produce the next generation | ||
39 | function _CELLS:evolve(next) | ||
40 | local ym1,y,yp1,yi=self.h-1,self.h,1,self.h | ||
41 | while yi > 0 do | ||
42 | local xm1,x,xp1,xi=self.w-1,self.w,1,self.w | ||
43 | while xi > 0 do | ||
44 | local sum = self[ym1][xm1] + self[ym1][x] + self[ym1][xp1] + | ||
45 | self[y][xm1] + self[y][xp1] + | ||
46 | self[yp1][xm1] + self[yp1][x] + self[yp1][xp1] | ||
47 | next[y][x] = ((sum==2) and self[y][x]) or ((sum==3) and 1) or 0 | ||
48 | xm1,x,xp1,xi = x,xp1,xp1+1,xi-1 | ||
49 | end | ||
50 | ym1,y,yp1,yi = y,yp1,yp1+1,yi-1 | ||
51 | end | ||
52 | end | ||
53 | |||
54 | -- output the array to screen | ||
55 | function _CELLS:draw() | ||
56 | local out="" -- accumulate to reduce flicker | ||
57 | for y=1,self.h do | ||
58 | for x=1,self.w do | ||
59 | out=out..(((self[y][x]>0) and ALIVE) or DEAD) | ||
60 | end | ||
61 | out=out.."\n" | ||
62 | end | ||
63 | write(out) | ||
64 | end | ||
65 | |||
66 | -- constructor | ||
67 | function CELLS(w,h) | ||
68 | local c = ARRAY2D(w,h) | ||
69 | c.spawn = _CELLS.spawn | ||
70 | c.evolve = _CELLS.evolve | ||
71 | c.draw = _CELLS.draw | ||
72 | return c | ||
73 | end | ||
74 | |||
75 | -- | ||
76 | -- shapes suitable for use with spawn() above | ||
77 | -- | ||
78 | HEART = { 1,0,1,1,0,1,1,1,1; w=3,h=3 } | ||
79 | GLIDER = { 0,0,1,1,0,1,0,1,1; w=3,h=3 } | ||
80 | EXPLODE = { 0,1,0,1,1,1,1,0,1,0,1,0; w=3,h=4 } | ||
81 | FISH = { 0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0; w=5,h=4 } | ||
82 | BUTTERFLY = { 1,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1; w=5,h=5 } | ||
83 | |||
84 | -- the main routine | ||
85 | function LIFE(w,h) | ||
86 | -- create two arrays | ||
87 | local thisgen = CELLS(w,h) | ||
88 | local nextgen = CELLS(w,h) | ||
89 | |||
90 | -- create some life | ||
91 | -- about 1000 generations of fun, then a glider steady-state | ||
92 | thisgen:spawn(GLIDER,5,4) | ||
93 | thisgen:spawn(EXPLODE,25,10) | ||
94 | thisgen:spawn(FISH,4,12) | ||
95 | |||
96 | -- run until break | ||
97 | local gen=1 | ||
98 | write("\027[2J") -- ANSI clear screen | ||
99 | while 1 do | ||
100 | thisgen:evolve(nextgen) | ||
101 | thisgen,nextgen = nextgen,thisgen | ||
102 | write("\027[H") -- ANSI home cursor | ||
103 | thisgen:draw() | ||
104 | write("Life - generation ",gen,"\n") | ||
105 | gen=gen+1 | ||
106 | if gen>2000 then break end | ||
107 | --delay() -- no delay | ||
108 | end | ||
109 | end | ||
110 | |||
111 | LIFE(40,20) | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/luac.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/luac.lua new file mode 100644 index 0000000..b009ae9 --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/luac.lua | |||
@@ -0,0 +1,7 @@ | |||
1 | -- bare-bones luac in Lua | ||
2 | -- usage: lua luac.lua file.lua | ||
3 | |||
4 | assert(arg[1]~=nil and arg[2]==nil,"usage: lua luac.lua file.lua") | ||
5 | f=assert(io.open("luac.out","wb")) | ||
6 | f:write(string.dump(assert(loadfile(arg[1])))) | ||
7 | io.close(f) | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/printf.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/printf.lua new file mode 100644 index 0000000..66dfda6 --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/printf.lua | |||
@@ -0,0 +1,7 @@ | |||
1 | -- an implementation of printf | ||
2 | |||
3 | function printf(...) | ||
4 | io.write(string.format(unpack(arg))) | ||
5 | end | ||
6 | |||
7 | printf("Hello %s from %s on %s\n",os.getenv"USER" or "there",_VERSION,os.date()) | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/readonly.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/readonly.lua new file mode 100644 index 0000000..85c0b4e --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/readonly.lua | |||
@@ -0,0 +1,12 @@ | |||
1 | -- make global variables readonly | ||
2 | |||
3 | local f=function (t,i) error("cannot redefine global variable `"..i.."'",2) end | ||
4 | local g={} | ||
5 | local G=getfenv() | ||
6 | setmetatable(g,{__index=G,__newindex=f}) | ||
7 | setfenv(1,g) | ||
8 | |||
9 | -- an example | ||
10 | rawset(g,"x",3) | ||
11 | x=2 | ||
12 | y=1 -- cannot redefine `y' | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/sieve.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/sieve.lua new file mode 100644 index 0000000..0871bb2 --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/sieve.lua | |||
@@ -0,0 +1,29 @@ | |||
1 | -- the sieve of of Eratosthenes programmed with coroutines | ||
2 | -- typical usage: lua -e N=1000 sieve.lua | column | ||
3 | |||
4 | -- generate all the numbers from 2 to n | ||
5 | function gen (n) | ||
6 | return coroutine.wrap(function () | ||
7 | for i=2,n do coroutine.yield(i) end | ||
8 | end) | ||
9 | end | ||
10 | |||
11 | -- filter the numbers generated by `g', removing multiples of `p' | ||
12 | function filter (p, g) | ||
13 | return coroutine.wrap(function () | ||
14 | while 1 do | ||
15 | local n = g() | ||
16 | if n == nil then return end | ||
17 | if math.mod(n, p) ~= 0 then coroutine.yield(n) end | ||
18 | end | ||
19 | end) | ||
20 | end | ||
21 | |||
22 | N=N or 1000 -- from command line | ||
23 | x = gen(N) -- generate primes up to N | ||
24 | while 1 do | ||
25 | local n = x() -- pick a number until done | ||
26 | if n == nil then break end | ||
27 | print(n) -- must be a prime number | ||
28 | x = filter(n, x) -- now remove its multiples | ||
29 | end | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/sort.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/sort.lua new file mode 100644 index 0000000..0bcb15f --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/sort.lua | |||
@@ -0,0 +1,66 @@ | |||
1 | -- two implementations of a sort function | ||
2 | -- this is an example only. Lua has now a built-in function "sort" | ||
3 | |||
4 | -- extracted from Programming Pearls, page 110 | ||
5 | function qsort(x,l,u,f) | ||
6 | if l<u then | ||
7 | local m=math.random(u-(l-1))+l-1 -- choose a random pivot in range l..u | ||
8 | x[l],x[m]=x[m],x[l] -- swap pivot to first position | ||
9 | local t=x[l] -- pivot value | ||
10 | m=l | ||
11 | local i=l+1 | ||
12 | while i<=u do | ||
13 | -- invariant: x[l+1..m] < t <= x[m+1..i-1] | ||
14 | if f(x[i],t) then | ||
15 | m=m+1 | ||
16 | x[m],x[i]=x[i],x[m] -- swap x[i] and x[m] | ||
17 | end | ||
18 | i=i+1 | ||
19 | end | ||
20 | x[l],x[m]=x[m],x[l] -- swap pivot to a valid place | ||
21 | -- x[l+1..m-1] < x[m] <= x[m+1..u] | ||
22 | qsort(x,l,m-1,f) | ||
23 | qsort(x,m+1,u,f) | ||
24 | end | ||
25 | end | ||
26 | |||
27 | function selectionsort(x,n,f) | ||
28 | local i=1 | ||
29 | while i<=n do | ||
30 | local m,j=i,i+1 | ||
31 | while j<=n do | ||
32 | if f(x[j],x[m]) then m=j end | ||
33 | j=j+1 | ||
34 | end | ||
35 | x[i],x[m]=x[m],x[i] -- swap x[i] and x[m] | ||
36 | i=i+1 | ||
37 | end | ||
38 | end | ||
39 | |||
40 | function show(m,x) | ||
41 | io.write(m,"\n\t") | ||
42 | local i=1 | ||
43 | while x[i] do | ||
44 | io.write(x[i]) | ||
45 | i=i+1 | ||
46 | if x[i] then io.write(",") end | ||
47 | end | ||
48 | io.write("\n") | ||
49 | end | ||
50 | |||
51 | function testsorts(x) | ||
52 | local n=1 | ||
53 | while x[n] do n=n+1 end; n=n-1 -- count elements | ||
54 | show("original",x) | ||
55 | qsort(x,1,n,function (x,y) return x<y end) | ||
56 | show("after quicksort",x) | ||
57 | selectionsort(x,n,function (x,y) return x>y end) | ||
58 | show("after reverse selection sort",x) | ||
59 | qsort(x,1,n,function (x,y) return x<y end) | ||
60 | show("after quicksort again",x) | ||
61 | end | ||
62 | |||
63 | -- array to be sorted | ||
64 | x={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"} | ||
65 | |||
66 | testsorts(x) | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/table.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/table.lua new file mode 100644 index 0000000..235089c --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/table.lua | |||
@@ -0,0 +1,12 @@ | |||
1 | -- make table, grouping all data for the same item | ||
2 | -- input is 2 columns (item, data) | ||
3 | |||
4 | local A | ||
5 | while 1 do | ||
6 | local l=io.read() | ||
7 | if l==nil then break end | ||
8 | local _,_,a,b=string.find(l,'"?([_%w]+)"?%s*(.*)$') | ||
9 | if a~=A then A=a io.write("\n",a,":") end | ||
10 | io.write(" ",b) | ||
11 | end | ||
12 | io.write("\n") | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/trace-calls.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/trace-calls.lua new file mode 100644 index 0000000..63c8b8f --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/trace-calls.lua | |||
@@ -0,0 +1,32 @@ | |||
1 | -- trace calls | ||
2 | -- example: lua -ltrace-calls.lua bisect.lua | ||
3 | |||
4 | local level=0 | ||
5 | |||
6 | function hook(event) | ||
7 | local t=debug.getinfo(3) | ||
8 | io.write(level," >>> ",string.rep(" ",level)) | ||
9 | if t~=nil and t.currentline>=0 then io.write(t.short_src,":",t.currentline," ") end | ||
10 | t=debug.getinfo(2) | ||
11 | if event=="call" then | ||
12 | level=level+1 | ||
13 | else | ||
14 | level=level-1 if level<0 then level=0 end | ||
15 | end | ||
16 | if t.what=="main" then | ||
17 | if event=="call" then | ||
18 | io.write("begin ",t.short_src) | ||
19 | else | ||
20 | io.write("end ",t.short_src) | ||
21 | end | ||
22 | elseif t.what=="Lua" then | ||
23 | -- table.foreach(t,print) | ||
24 | io.write(event," ",t.name or "(Lua)"," <",t.linedefined,":",t.short_src,">") | ||
25 | else | ||
26 | io.write(event," ",t.name or "(C)"," [",t.what,"] ") | ||
27 | end | ||
28 | io.write("\n") | ||
29 | end | ||
30 | |||
31 | debug.sethook(hook,"cr") | ||
32 | level=0 | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/trace-globals.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/trace-globals.lua new file mode 100644 index 0000000..295e670 --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/trace-globals.lua | |||
@@ -0,0 +1,38 @@ | |||
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) | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/undefined.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/undefined.lua new file mode 100644 index 0000000..efe5f24 --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/undefined.lua | |||
@@ -0,0 +1,9 @@ | |||
1 | -- catch "undefined" global variables | ||
2 | |||
3 | local f=function (t,i) error("undefined global variable `"..i.."'",2) end | ||
4 | setmetatable(getfenv(),{__index=f}) | ||
5 | |||
6 | -- an example | ||
7 | a=1 | ||
8 | c=3 | ||
9 | print(a,b,c) -- `b' is undefined | ||
diff --git a/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/xd.lua b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/xd.lua new file mode 100644 index 0000000..32331dc --- /dev/null +++ b/LuaSL/testLua/yueliang-0.4.1/test_lua/5.0/xd.lua | |||
@@ -0,0 +1,14 @@ | |||
1 | -- hex dump | ||
2 | -- usage: lua xd.lua < file | ||
3 | |||
4 | local offset=0 | ||
5 | |||
6 | while 1 do | ||
7 | local s=io.read(16) | ||
8 | if s==nil then return end | ||
9 | io.write(string.format("%08X ",offset)) | ||
10 | string.gsub(s,"(.)",function (c) io.write(string.format("%02X ",string.byte(c))) end) | ||
11 | io.write(string.rep(" ",3*(16-string.len(s)))) | ||
12 | io.write(" ",string.gsub(s,"%c","."),"\n") | ||
13 | offset=offset+16 | ||
14 | end | ||