Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.tmp_errors_sequence.lua
More file actions
Latest commit
82 lines (80 loc) · 3.17 KB
/
Copy path.tmp_errors_sequence.lua
File metadata and controls
82 lines (80 loc) · 3.17 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
localmt=getmetatable(_G) or {}
localoldmm=mt.__index
mt.__index=nil
localfunctiondoit(s)
localf, msg=load(s)
ifnotfthenreturnmsgend
localcond, msg=pcall(f)
return (notcond) andmsg
end
localfunctioncheck(s, expected)
localm=doit(s)
print(expected, m, mandstring.find(m, expected, 1, true) orfalse)
end
assert(doit("error('hi', 0)") =="hi")
assert(doit("error()") ==nil)
assert(doit("table.unpack({}, 1, n=2^30)"))
assert(doit("a=math.sin()"))
assert(notdoit("tostring(1)") anddoit("tostring()"))
assert(doit("tonumber()"))
assert(doit("repeat until 1; a"))
assert(doit("return;;"))
assert(doit("assert(false)"))
assert(doit("assert(nil)"))
assert(doit("function a (... , ...) end"))
assert(doit("function a (, ...) end"))
assert(doit("local t={}; t = t[#t] + 1"))
assert(doit([[local a = {4
]]))
assert(doit([[::A:: a = 1
::A::]]))
assert(doit([[a = 1
goto A
do ::A:: end]]))
check("a = {} + 1", "arithmetic")
check("a = {} | 1", "bitwise operation")
check("a = {} < 1", "attempt to compare")
check("a = {} <= 1", "attempt to compare")
check("aaa=1; bbbb=2; aaa=math.sin(3)+bbbb(3)", "global 'bbbb'")
check("aaa=1; local aaa,bbbb=2,3; aaa = bbbb(1) or aaa(3)", "local 'bbbb'")
assert(notstring.find(doit("aaa={13}; local bbbb=1; aaa[bbbb](3)"), "'bbbb'"))
_G.aaa, _G.bbbb=nil
check("local a; a(13)", "local 'a'")
check("local a = setmetatable({}, {__add = 34}); a = a + 1", "metamethod 'add'")
check("local a = setmetatable({}, {__lt = {}}); a = a > a", "metamethod 'lt'")
check("local a={}; return a.bbbb(3)", "field 'bbbb'")
check("aaa={}; do local aaa=1 end; return aaa:bbbb(3)", "method 'bbbb'")
check("aaa = #print", "length of a function value")
check("aaa = #3", "length of a number value")
_G.aaa=nil
check("aaa.bbb:ddd(9)", "global 'aaa'")
check("local aaa={bbb=1}; aaa.bbb:ddd(9)", "field 'bbb'")
check("local aaa={bbb={}}; aaa.bbb:ddd(9)", "method 'ddd'")
check("local a,b,c; (function () a = b+1.1 end)()", "upvalue 'b'")
assert(notdoit("local aaa={bbb={ddd=next}}; aaa.bbb:ddd(nil)"))
check("local a,b,cc; (function () a = cc[1] end)()", "upvalue 'cc'")
check("local a,b,cc; (function () a.x = 1 end)()", "upvalue 'a'")
check("local _ENV = {x={}}; a = a + 1", "global 'a'")
check("BB=1; local aaa={}; x=aaa+BB", "local 'aaa'")
check("aaa={}; x=3.3/aaa", "global 'aaa'")
check("aaa=2; BB=nil;x=aaa*BB", "global 'BB'")
check("aaa={}; x=-aaa", "global 'aaa'")
check("aaa=1; local aaa,bbbb=2,3; aaa = math.sin(1) and bbbb(3)", "local 'bbbb'")
check("local a,b,c,f = 1,1,1; f((a and b) or c)", "local 'f'")
check("local a,b,c = 1,1,1; ((a and b) or c)()", "call a number value")
assert(notstring.find(doit("aaa={}; x=(aaa or aaa)+(aaa and aaa)"), "'aaa'"))
assert(notstring.find(doit("aaa={}; (aaa or aaa)()"), "'aaa'"))
check("print(print < 10)", "function with number")
check("print(print < print)", "two function values")
check("print('10' < 10)", "string with number")
check("print(10 < '23')", "number with string")
for_, sourceinipairs({
"local a = 2e100 ~ 1",
"string.sub('a', 2.0^100)",
"return 34 >> {}",
"aaa = 24 // 0",
"aaa = 1 % 0",
}) do
check(source, "error")
end
check("local a = setmetatable({}, {__index = 10}).x", "attempt to index a number value")