-- demo of lua swig capacilities (operator overloading) require("import") -- the import fn import("exception_order") -- import lib into global eo=exception_order --alias -- catching undefined variables local env = _ENV -- Lua 5.2 if not env then env = getfenv () end -- Lua 5.1 setmetatable(env, {__index=function (t,i) error("undefined global variable `"..i.."'",2) end}) a = eo.A() function try1() a:foo() end function try2() a:bar() end function try3() a:foobar() end -- the following code used to work -- but now no longer works, as the lua bindings don't throw objects any more -- all objects are converted to string & thrown -- it could be made to work, if E1 & E2 were thrown by value (see lua.swg) --[[ ok,ex=pcall(try1) print(ok,ex) assert(ok==false and swig_type(ex)==swig_type(eo.E1())) ok,ex=pcall(try2) assert(ok==false and swig_type(ex)==swig_type(eo.E2())) ]] -- this new code does work, but has to look at the string ok,ex=pcall(try1) assert(ok==false and ex=="object exception:E1") ok,ex=pcall(try2) assert(ok==false and ex=="object exception:E2") -- the SWIG_exception is just an error string ok,ex=pcall(try3) assert(ok==false and type(ex)=="string")