'recover' finish of 'luaD_pcall' should follow the original

This commit is contained in:
Roberto Ierusalimschy
2020-10-07 10:42:00 -03:00
parent 5aa36e894f
commit 171dcd7d74
2 changed files with 25 additions and 7 deletions

View File

@@ -124,6 +124,11 @@ x, a = nil
-- coroutine closing
local function func2close (f)
return setmetatable({}, {__close = f})
end
do
-- ok to close a dead coroutine
local co = coroutine.create(print)
@@ -146,10 +151,6 @@ do
-- to-be-closed variables in coroutines
local X
local function func2close (f)
return setmetatable({}, {__close = f})
end
co = coroutine.create(function ()
local x <close> = func2close(function (self, err)
assert(err == nil); X = false
@@ -192,6 +193,23 @@ do
end
do
-- <close> versus pcall in coroutines
local X = false
local Y = false
function foo ()
local x <close> = func2close(function (self, err)
Y = debug.getinfo(2)
X = err
end)
error(43)
end
co = coroutine.create(function () return pcall(foo) end)
local st1, st2, err = coroutine.resume(co)
assert(st1 and not st2 and err == 43)
assert(X == 43 and Y.name == "pcall")
end
-- yielding across C boundaries