I have defined an asynchronous function in C that yields the current thread and then resumes it when the operation completes. If the function succeeds, then I push the result onto the stack and call lua_resume().
What can I do in case of an exception? I’d love to somehow cause an exception to be thrown into the resumed thread, but I don’t see an easy way to do this.
So far I’ve considered injecting some Lua shim code, but that seems pretty complicated:
-- Get the async function from the stack
f = ...
-- Call the async function. It will return true on success and false on failure
success, result = f()
if success then
return result -- the 2nd argument is the result. TODO: Handle tuple results.
error(result) -- the 2nd argument is the error message. Throw it.
I’d much rather not go down this complicated (and inefficient) route if I can avoid it. Any ideas?