--- parser3/src/include/pa_pool.h 2001/03/11 08:16:32 1.28 +++ parser3/src/include/pa_pool.h 2001/03/14 08:50:01 1.33 @@ -3,7 +3,7 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - $Id: pa_pool.h,v 1.28 2001/03/11 08:16:32 paf Exp $ + $Id: pa_pool.h,v 1.33 2001/03/14 08:50:01 paf Exp $ */ #ifndef PA_POOL_H @@ -95,34 +95,45 @@ public: #define NEW new(pool()) class Temp_exception { - Pool pool; + Pool& fpool; Exception *saved_exception; public: Temp_exception(Pool& apool, Exception& exception) : - pool(apool), + fpool(apool), saved_exception(apool.set_exception(&exception)) { } ~Temp_exception() { - pool.restore_exception(saved_exception); + fpool.restore_exception(saved_exception); } }; -#define TRY \ +#define XTRY(pool) \ { \ Exception temp_exception; \ - Temp_exception le(pool(), temp_exception); \ + Temp_exception le(pool, temp_exception); \ if(setjmp(temp_exception.mark)==0) -#define THROW exception()._throw -#define POOL_THROW pool.exception()._throw -#define CATCH(e) \ +#define XTHROW(exception) exception._throw +#define XCATCH(e) \ else{ \ Exception& e=temp_exception; -#define END_CATCH \ +#define XEND_CATCH \ } \ } // usage: // TRY { ...; if(?) RAISE(?); ...; } CATCH(e) { catch-code e.comment() } END_CATCH +#define TRY XTRY(pool()) +#define THROW XTHROW(exception()) +#define CATCH(e) XCATCH(e) +#define END_CATCH XEND_CATCH + +#define PTRY XTRY(pool) +#define PTHROW XTHROW(pool.exception()) +#define PCATCH(e) XCATCH(e) +#define PEND_CATCH XEND_CATCH + +#define RTHROW XTHROW(r.pool().exception()) + #endif