mbed I/F binding for mruby
Dependents: mruby_mbed_web mirb_mbed
mbed-mruby
How to use
Class
src/mrb_throw.h@0:158c61bb030f, 2015-03-25 (annotated)
- Committer:
- mzta
- Date:
- Wed Mar 25 17:36:16 2015 +0000
- Revision:
- 0:158c61bb030f
mirb_mbed initial commit;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mzta | 0:158c61bb030f | 1 | /* |
mzta | 0:158c61bb030f | 2 | ** mrb_throw.h - mruby exception throwing handler |
mzta | 0:158c61bb030f | 3 | ** |
mzta | 0:158c61bb030f | 4 | ** See Copyright Notice in mruby.h |
mzta | 0:158c61bb030f | 5 | */ |
mzta | 0:158c61bb030f | 6 | |
mzta | 0:158c61bb030f | 7 | #ifndef MRB_THROW_H |
mzta | 0:158c61bb030f | 8 | #define MRB_THROW_H |
mzta | 0:158c61bb030f | 9 | |
mzta | 0:158c61bb030f | 10 | #ifdef MRB_ENABLE_CXX_EXCEPTION |
mzta | 0:158c61bb030f | 11 | |
mzta | 0:158c61bb030f | 12 | #define MRB_TRY(buf) do { try { |
mzta | 0:158c61bb030f | 13 | #define MRB_CATCH(buf) } catch(mrb_jmpbuf_impl e) { if (e != (buf)->impl) { throw e; } |
mzta | 0:158c61bb030f | 14 | #define MRB_END_EXC(buf) } } while(0) |
mzta | 0:158c61bb030f | 15 | |
mzta | 0:158c61bb030f | 16 | #define MRB_THROW(buf) throw((buf)->impl) |
mzta | 0:158c61bb030f | 17 | typedef mrb_int mrb_jmpbuf_impl; |
mzta | 0:158c61bb030f | 18 | |
mzta | 0:158c61bb030f | 19 | #else |
mzta | 0:158c61bb030f | 20 | |
mzta | 0:158c61bb030f | 21 | #include <setjmp.h> |
mzta | 0:158c61bb030f | 22 | |
mzta | 0:158c61bb030f | 23 | #define MRB_TRY(buf) do { if (setjmp((buf)->impl) == 0) { |
mzta | 0:158c61bb030f | 24 | #define MRB_CATCH(buf) } else { |
mzta | 0:158c61bb030f | 25 | #define MRB_END_EXC(buf) } } while(0) |
mzta | 0:158c61bb030f | 26 | |
mzta | 0:158c61bb030f | 27 | #define MRB_THROW(buf) longjmp((buf)->impl, 1); |
mzta | 0:158c61bb030f | 28 | #define mrb_jmpbuf_impl jmp_buf |
mzta | 0:158c61bb030f | 29 | |
mzta | 0:158c61bb030f | 30 | #endif |
mzta | 0:158c61bb030f | 31 | |
mzta | 0:158c61bb030f | 32 | struct mrb_jmpbuf { |
mzta | 0:158c61bb030f | 33 | mrb_jmpbuf_impl impl; |
mzta | 0:158c61bb030f | 34 | |
mzta | 0:158c61bb030f | 35 | #ifdef MRB_ENABLE_CXX_EXCEPTION |
mzta | 0:158c61bb030f | 36 | static mrb_int jmpbuf_id; |
mzta | 0:158c61bb030f | 37 | mrb_jmpbuf() : impl(jmpbuf_id++) {} |
mzta | 0:158c61bb030f | 38 | #endif |
mzta | 0:158c61bb030f | 39 | }; |
mzta | 0:158c61bb030f | 40 | |
mzta | 0:158c61bb030f | 41 | #endif /* MRB_THROW_H */ |
mzta | 0:158c61bb030f | 42 |