mirror of
https://github.com/littensy/charm.git
synced 2026-10-23 05:46:27 +00:00
fix: try() uses pcall if passed finally()
This commit is contained in:
parent
9965613507
commit
16df7801a5
1 changed files with 19 additions and 6 deletions
|
|
@ -28,21 +28,34 @@ local function try<T, U...>(callback: (U...) -> T | any, finally: (() -> ())?, .
|
|||
end
|
||||
|
||||
if coroutine.status(thread) == "suspended" then
|
||||
local source, line, name = debug.info(callback, "sln")
|
||||
coroutine.close(thread)
|
||||
error("Yielding is not allowed in atom functions")
|
||||
error(
|
||||
"Yielding is not allowed in atom functions. Consider wrapping this code in a Promise or task.defer instead."
|
||||
.. `\nFunction defined at: {source}:{line}`
|
||||
.. if name == "" then "" else ` function {name}`
|
||||
)
|
||||
elseif not success then
|
||||
error("An error occurred while running an atom function")
|
||||
local source, line, name = debug.info(callback, "sln")
|
||||
error(
|
||||
"An error occurred while running an atom function"
|
||||
.. `\nFunction defined at: {source}:{line}`
|
||||
.. (if name == "" then "" else ` function {name}`)
|
||||
.. `\nError: {result}`
|
||||
)
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
local result = callback(...)
|
||||
|
||||
if finally then
|
||||
finally()
|
||||
if not finally then
|
||||
return callback(...)
|
||||
end
|
||||
|
||||
local success, result = pcall(callback, ...)
|
||||
finally()
|
||||
assert(success, result)
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue