Internally, Lua uses the C longjmp facility to handle errors.
(You can also choose to use exceptions if you use C++;
see file luaconf.h .)
When Lua faces any error
(such as memory allocation errors, type errors, syntax errors,
and runtime errors)
it raises an error;
that is, it does a long jump.
A protected environment uses setjmp
to set a recover point;
any error jumps to the most recent active recover point.
Most functions in the API can throw an error,
for instance due to a memory allocation error.
The documentation for each function indicates whether
it can throw errors.
Inside a C function you can throw an error by calling lua_error . |