-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathlocals.lua
More file actions
127 lines (102 loc) · 2.66 KB
/
Copy pathlocals.lua
File metadata and controls
127 lines (102 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
print('testing local variables plus some extra stuff')
do
local i = 10
do local i = 100; assert(i==100) end
do local i = 1000; assert(i==1000) end
assert(i == 10)
if i ~= 10 then
local i = 20
else
local i = 30
assert(i == 30)
end
end
f = nil
local f
x = 1
a = nil
loadstring('local a = {}')()
assert(type(a) ~= 'table')
function f (a)
local _1, _2, _3, _4, _5
local _6, _7, _8, _9, _10
local x = 3
local b = a
local c,d = a,b
if (d == b) then
local x = 'q'
x = b
assert(x == 2)
else
assert(nil)
end
assert(x == 3)
local f = 10
end
local b=10
local a; repeat local b; a,b=1,2; assert(a+1==b); until a+b==3
assert(x == 1)
f(2)
assert(type(f) == 'function')
-- testing globals ;-)
do
local f = {}
local _G = _G
for i=1,10 do f[i] = function (x) A=A+1; return A, _G.getfenv(x) end end
A=10; assert(f[1]() == 11)
for i=1,10 do assert(setfenv(f[i], {A=i}) == f[i]) end
assert(f[3]() == 4 and A == 11)
local a,b = f[8](1)
assert(b.A == 9)
a,b = f[8](0)
assert(b.A == 11) -- `real' global
local g
local function f () assert(setfenv(2, {a='10'}) == g) end
g = function () f(); _G.assert(_G.getfenv(1).a == '10') end
g(); assert(getfenv(g).a == '10')
end
-- test for global table of loaded chunks
local function foo (s)
return loadstring(s)
end
assert(getfenv(foo("")) == _G)
local a = {loadstring = loadstring}
setfenv(foo, a)
assert(getfenv(foo("")) == _G)
setfenv(0, a) -- change global environment
assert(getfenv(foo("")) == a)
setfenv(0, _G)
-- testing limits for special instructions
local a
local p = 4
for i=2,31 do
for j=-3,3 do
assert(loadstring(string.format([[local a=%s;a=a+
%s;
assert(a
==2^%s)]], j, p-j, i))) ()
assert(loadstring(string.format([[local a=%s;
a=a-%s;
assert(a==-2^%s)]], -j, p-j, i))) ()
assert(loadstring(string.format([[local a,b=0,%s;
a=b-%s;
assert(a==-2^%s)]], -j, p-j, i))) ()
end
p =2*p
end
print'+'
if rawget(_G, "querytab") then
-- testing clearing of dead elements from tables
collectgarbage("stop") -- stop GC
local a = {[{}] = 4, [3] = 0, alo = 1,
a1234567890123456789012345678901234567890 = 10}
local t = querytab(a)
for k,_ in pairs(a) do a[k] = nil end
collectgarbage() -- restore GC and collect dead fiels in `a'
for i=0,t-1 do
local k = querytab(a, i)
assert(k == nil or type(k) == 'number' or k == 'alo')
end
end
print('OK')
return 5,f