| -- file: example.lua | |
| ---- importing ---- | |
| require('example') | |
| -- throw a lot of exceptions: | |
| -- you must catch exceptions using pcall and then checking the result | |
| t = example.Test() | |
| print "calling t:unknown()" | |
| ok,res=pcall(function() t:unknown() end) | |
| if ok then | |
| print " that worked! Funny" | |
| else | |
| print(" call failed with error:",res) | |
| end | |
| print "calling t:simple()" | |
| ok,res=pcall(function() t:simple() end) | |
| if ok then | |
| print " that worked! Funny" | |
| else | |
| print(" call failed with error:",res) | |
| end | |
| print "calling t:message()" | |
| ok,res=pcall(function() t:message() end) | |
| if ok then | |
| print " that worked! Funny" | |
| else | |
| print(" call failed with error:",res) | |
| end | |
| print "calling t:hosed()" | |
| ok,res=pcall(function() t:hosed() end) | |
| if ok then | |
| print " that worked! Funny" | |
| else | |
| print(" call failed with error:",res.code,res.msg) | |
| end | |
| -- this is a rather strange way to perform the multiple catch of exceptions | |
| print "calling t:multi()" | |
| for i=1,3 do | |
| ok,res=pcall(function() t:multi(i) end) | |
| if ok then | |
| print " that worked! Funny" | |
| else | |
| if swig_type(res)=="Exc *" then | |
| print(" call failed with Exc exception:",res.code,res.msg) | |
| else | |
| print(" call failed with error:",res) | |
| end | |
| end | |
| end | |
| -- this is a bit crazy, but it shows obtaining of the stacktrace | |
| function a() | |
| b() | |
| end | |
| function b() | |
| t:message() | |
| end | |
| print [[ | |
| Now let's call function a() | |
| which calls b() | |
| which calls into C++ | |
| which will throw an exception!]] | |
| ok,res=pcall(a) | |
| if ok then | |
| print " that worked! Funny" | |
| else | |
| print(" call failed with error:",res) | |
| end | |
| print "Now let's do the same using xpcall(a,debug.traceback)" | |
| ok,res=xpcall(a,debug.traceback) | |
| if ok then | |
| print " that worked! Funny" | |
| else | |
| print(" call failed with error:",res) | |
| end | |
| print "As you can see, the xpcall gives a nice stacktrace to work with" | |
| ok,res=pcall(a) | |
| print(ok,res) | |
| ok,res=xpcall(a,debug.traceback) | |
| print(ok,res) |