Because Lua is an embedded extension language,
all Lua actions start from C code in the host program
calling a function from the Lua library (see lua_pcall).
Whenever an error occurs during Lua compilation or execution,
control returns to C,
which can take appropriate measures
(such as printing an error message).
Lua code can explicitly generate an error by calling the
If you need to catch errors in Lua,
you can use the pcall function.
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.