From 171dcd7d745566e69c61845599705707500a104e Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 7 Oct 2020 10:42:00 -0300 Subject: 'recover' finish of 'luaD_pcall' should follow the original --- testes/coroutine.lua | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'testes') diff --git a/testes/coroutine.lua b/testes/coroutine.lua index 955f6776..5b927151 100644 --- a/testes/coroutine.lua +++ b/testes/coroutine.lua @@ -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 = func2close(function (self, err) assert(err == nil); X = false @@ -192,6 +193,23 @@ do end +do + -- versus pcall in coroutines + local X = false + local Y = false + function foo () + local x = 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 -- cgit v1.2.3-55-g6feb