Справочное руководство по языку Lua 5.1 :: 3.6 - Псевдо-индексы
3.6 – Обработка ошибок в C
Внутренняя реализация Lua для обработки ошибок использует механизм сохранения и возврата контекста языка C(longjmp). (Также вы можете использовать исключения, если пишете на C++; смотрите файл luaconf.h.) Когда Luaобрабатывает ошибку (выделения памяти, несоответствия типов, синтаксическую или времени выполнения), выполняется вызов long jump. Защищенное окружение использует вызов setjmp для установки точек сохранения; любая ошибка ведет к передаче управления на ближайшую точку восстановления.
Почти в любая функция API может генерировать ошибочную ситуацию, например при ошибке выделения памяти. Следующие функции работают в защищенном режиме (они создают защищенное окружение для работы), поэтому ошибочных ситуаций не генерируют: lua_newstate, lua_close, lua_load, lua_pcall, and lua_cpcall.
В своей C -функции вы можете генерировать ошибку с помощью lua_error.