From 712b4bed9973c60b5c139f98e51ed804ce8a628d Mon Sep 17 00:00:00 2001 From: Nicolas Noble Date: Wed, 24 Jul 2013 14:23:25 -0700 Subject: Better exception handling support for Lua. --- src/BLua.cc | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src/BLua.cc') diff --git a/src/BLua.cc b/src/BLua.cc index 21a7452..29b68c2 100644 --- a/src/BLua.cc +++ b/src/BLua.cc @@ -474,12 +474,19 @@ Balau::String Balau::Lua::tostring(int i) { struct LoadF { Balau::IO f; char buff[BUFFERSIZE]; + Balau::GeneralException * exception = NULL; }; const char * Balau::LuaStatics::getF(lua_State * L, void * ud, size_t * size) { LoadF * lf = (LoadF *)ud; - *size = lf->f->read(lf->buff, BUFFERSIZE); + try { + *size = lf->f->read(lf->buff, BUFFERSIZE); + } + catch (GeneralException e) { + lf->exception = new GeneralException(e); + AssertHelper("LuaJIT is lame."); + } return (*size > 0) ? lf->buff : NULL; } @@ -522,9 +529,15 @@ void Balau::Lua::load(IO h, bool docall) throw (GeneralException) { status = lua_load(L, LuaStatics::getF, &lf, name.to_charp()); if (status) { - pushLuaContext(); - showerror(); - throw LuaException(String("Error loading lua chunk from Handle `") + h->getName() + "'"); + if (lf.exception) { + GeneralException copy(*lf.exception); + delete lf.exception; + throw copy; + } else { + pushLuaContext(); + showerror(); + throw LuaException(String("Error loading lua chunk from Handle `") + h->getName() + "'"); + } } if (docall) -- cgit v1.2.3