|
@@ -418,28 +418,28 @@ end
|
|
|
|
|
|
|
|
-- testing line error
|
|
-- testing line error
|
|
|
|
|
|
|
|
-local function lineerror (s, l)
|
|
|
|
|
|
|
+local function lineerror (s, l, w)
|
|
|
local err,msg = pcall(load(s))
|
|
local err,msg = pcall(load(s))
|
|
|
local line = tonumber(string.match(msg, ":(%d+):"))
|
|
local line = tonumber(string.match(msg, ":(%d+):"))
|
|
|
- assert(line == l or (not line and not l))
|
|
|
|
|
|
|
+ assert((line == l or (not line and not l)) and string.find(msg, w))
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
-lineerror("local a\n for i=1,'a' do \n print(i) \n end", 2)
|
|
|
|
|
-lineerror("\n local a \n for k,v in 3 \n do \n print(k) \n end", 3)
|
|
|
|
|
-lineerror("\n\n for k,v in \n 3 \n do \n print(k) \n end", 4)
|
|
|
|
|
-lineerror("function a.x.y ()\na=a+1\nend", 1)
|
|
|
|
|
|
|
+lineerror("local a\n for i=1,'a' do \n print(i) \n end", 2, "limit")
|
|
|
|
|
+lineerror("\n local a \n for k,v in 3 \n do \n print(k) \n end", 3, "to call")
|
|
|
|
|
+lineerror("\n\n for k,v in \n 3 \n do \n print(k) \n end", 4, "to call")
|
|
|
|
|
+lineerror("function a.x.y ()\na=a+1\nend", 1, "index")
|
|
|
|
|
|
|
|
-lineerror("a = \na\n+\n{}", 3)
|
|
|
|
|
-lineerror("a = \n3\n+\n(\n4\n/\nprint)", 6)
|
|
|
|
|
-lineerror("a = \nprint\n+\n(\n4\n/\n7)", 3)
|
|
|
|
|
|
|
+lineerror("a = \na\n+\n{}", 3, "arithmetic")
|
|
|
|
|
+lineerror("a = \n3\n+\n(\n4\n/\nprint)", 6, "arithmetic")
|
|
|
|
|
+lineerror("a = \nprint\n+\n(\n4\n/\n7)", 3, "arithmetic")
|
|
|
|
|
|
|
|
-lineerror("a\n=\n-\n\nprint\n;", 3)
|
|
|
|
|
|
|
+lineerror("a\n=\n-\n\nprint\n;", 3, "arithmetic")
|
|
|
|
|
|
|
|
lineerror([[
|
|
lineerror([[
|
|
|
a
|
|
a
|
|
|
( -- <<
|
|
( -- <<
|
|
|
23)
|
|
23)
|
|
|
-]], 2)
|
|
|
|
|
|
|
+]], 2, "call")
|
|
|
|
|
|
|
|
lineerror([[
|
|
lineerror([[
|
|
|
local a = {x = 13}
|
|
local a = {x = 13}
|
|
@@ -449,7 +449,7 @@ x
|
|
|
( -- <<
|
|
( -- <<
|
|
|
23
|
|
23
|
|
|
)
|
|
)
|
|
|
-]], 5)
|
|
|
|
|
|
|
+]], 5, "call")
|
|
|
|
|
|
|
|
lineerror([[
|
|
lineerror([[
|
|
|
local a = {x = 13}
|
|
local a = {x = 13}
|
|
@@ -459,17 +459,17 @@ x
|
|
|
(
|
|
(
|
|
|
23 + a
|
|
23 + a
|
|
|
)
|
|
)
|
|
|
-]], 6)
|
|
|
|
|
|
|
+]], 6, "arithmetic")
|
|
|
|
|
|
|
|
local p = [[
|
|
local p = [[
|
|
|
function g() f() end
|
|
function g() f() end
|
|
|
function f(x) error('a', XX) end
|
|
function f(x) error('a', XX) end
|
|
|
g()
|
|
g()
|
|
|
]]
|
|
]]
|
|
|
-XX=3;lineerror((p), 3)
|
|
|
|
|
-XX=0;lineerror((p), false)
|
|
|
|
|
-XX=1;lineerror((p), 2)
|
|
|
|
|
-XX=2;lineerror((p), 1)
|
|
|
|
|
|
|
+XX=3;lineerror((p), 3, "a")
|
|
|
|
|
+XX=0;lineerror((p), false, "a")
|
|
|
|
|
+XX=1;lineerror((p), 2, "a")
|
|
|
|
|
+XX=2;lineerror((p), 1, "a")
|
|
|
_G.XX, _G.g, _G.f = nil
|
|
_G.XX, _G.g, _G.f = nil
|
|
|
|
|
|
|
|
|
|
|
|
@@ -477,7 +477,7 @@ lineerror([[
|
|
|
local b = false
|
|
local b = false
|
|
|
if not b then
|
|
if not b then
|
|
|
error 'test'
|
|
error 'test'
|
|
|
-end]], 3)
|
|
|
|
|
|
|
+end]], 3, "test")
|
|
|
|
|
|
|
|
lineerror([[
|
|
lineerror([[
|
|
|
local b = false
|
|
local b = false
|
|
@@ -487,7 +487,7 @@ if not b then
|
|
|
error 'test'
|
|
error 'test'
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
-end]], 5)
|
|
|
|
|
|
|
+end]], 5, "test")
|
|
|
|
|
|
|
|
lineerror([[
|
|
lineerror([[
|
|
|
_ENV = 1
|
|
_ENV = 1
|
|
@@ -495,7 +495,7 @@ global function foo ()
|
|
|
local a = 10
|
|
local a = 10
|
|
|
return a
|
|
return a
|
|
|
end
|
|
end
|
|
|
-]], 2)
|
|
|
|
|
|
|
+]], 2, "index")
|
|
|
|
|
|
|
|
|
|
|
|
|
-- bug in 5.4.0
|
|
-- bug in 5.4.0
|
|
@@ -503,17 +503,37 @@ lineerror([[
|
|
|
local a = 0
|
|
local a = 0
|
|
|
local b = 1
|
|
local b = 1
|
|
|
local c = b % a
|
|
local c = b % a
|
|
|
-]], 3)
|
|
|
|
|
|
|
+]], 3, "perform")
|
|
|
|
|
|
|
|
do
|
|
do
|
|
|
-- Force a negative estimate for base line. Error in instruction 2
|
|
-- Force a negative estimate for base line. Error in instruction 2
|
|
|
-- (after VARARGPREP, GETGLOBAL), with first absolute line information
|
|
-- (after VARARGPREP, GETGLOBAL), with first absolute line information
|
|
|
-- (forced by too many lines) in instruction 0.
|
|
-- (forced by too many lines) in instruction 0.
|
|
|
local s = string.format("%s return __A.x", string.rep("\n", 300))
|
|
local s = string.format("%s return __A.x", string.rep("\n", 300))
|
|
|
- lineerror(s, 301)
|
|
|
|
|
|
|
+ lineerror(s, 301, "index")
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+local function stxlineerror (s, l, w)
|
|
|
|
|
+ local err,msg = load(s)
|
|
|
|
|
+ local line = tonumber(string.match(msg, ":(%d+):"))
|
|
|
|
|
+ assert((line == l or (not line and not l)) and string.find(msg, w, 1, true))
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+stxlineerror([[
|
|
|
|
|
+::L1::
|
|
|
|
|
+::L1::
|
|
|
|
|
+]], 2, "already defined")
|
|
|
|
|
+
|
|
|
|
|
+stxlineerror([[
|
|
|
|
|
+global none
|
|
|
|
|
+local x = b
|
|
|
|
|
+]], 2, "not declared")
|
|
|
|
|
+
|
|
|
|
|
+stxlineerror([[
|
|
|
|
|
+local <close> a, b
|
|
|
|
|
+]], 1, "multiple")
|
|
|
|
|
+
|
|
|
if not _soft then
|
|
if not _soft then
|
|
|
-- several tests that exhaust the Lua stack
|
|
-- several tests that exhaust the Lua stack
|
|
|
collectgarbage()
|
|
collectgarbage()
|