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.
|