|
@@ -316,14 +316,27 @@ do -- errors in __close
|
|
|
assert(log[1] == 5 and log[2] == 4 and log[3] == 4 and log[4] == 4
|
|
|
and #log == 4)
|
|
|
|
|
|
+ -- error leaving a block
|
|
|
+ local function foo (...)
|
|
|
+ do
|
|
|
+ local x1 <close> = func2close(function () error("Y") end)
|
|
|
+ local x123 <close> = func2close(function () error("X") end)
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ local st, msg = xpcall(foo, debug.traceback)
|
|
|
+ assert(string.match(msg, "^[^ ]* X"))
|
|
|
+ assert(string.find(msg, "in metamethod 'close'"))
|
|
|
+
|
|
|
-- error in toclose in vararg function
|
|
|
- function foo (...)
|
|
|
- local x123 <close> = 10
|
|
|
+ local function foo (...)
|
|
|
+ local x123 <close> = func2close(function () error("X") end)
|
|
|
end
|
|
|
|
|
|
- local st, msg = pcall(foo)
|
|
|
- assert(string.find(msg, "'x123'"))
|
|
|
+ local st, msg = xpcall(foo, debug.traceback)
|
|
|
+ assert(string.match(msg, "^[^ ]* X"))
|
|
|
|
|
|
+ assert(string.find(msg, "in metamethod 'close'"))
|
|
|
end
|
|
|
|
|
|
|