1 #ifndef EXCEPT_H 2 #define EXCEPT_H 3 /*=========================================================================*\ 4 * Exception control 5 * LuaSocket toolkit (but completely independent from other modules) 6 * 7 * This provides support for simple exceptions in Lua. During the 8 * development of the HTTP/FTP/SMTP support, it became aparent that 9 * error checking was taking a substantial amount of the coding. These 10 * function greatly simplify the task of checking errors. 11 * 12 * The main idea is that functions should return nil as their first return 13 * values when they find an error, and return an error message (or value) 14 * following nil. In case of success, as long as the first value is not nil, 15 * the other values don't matter. 16 * 17 * The idea is to nest function calls with the "try" function. This function 18 * checks the first value, and, if it's falsy, wraps the second value in a 19 * table with metatable and calls "error" on it. Otherwise, it returns all 20 * values it received. Basically, it works like the Lua "assert" function, 21 * but it creates errors targeted specifically at "protect". 22 * 23 * The "newtry" function is a factory for "try" functions that call a 24 * finalizer in protected mode before calling "error". 25 * 26 * The "protect" function returns a new function that behaves exactly like 27 * the function it receives, but the new function catches exceptions thrown 28 * by "try" functions and returns nil followed by the error message instead. 29 * 30 * With these three functions, it's easy to write functions that throw 31 * exceptions on error, but that don't interrupt the user script. 32 \*=========================================================================*/ 33 34 #include "lua.h" 35 36 int except_open(lua_State *L); 37 38 #endif 39