Cause error explicitly from `MRB_TRY()` with `cxx_exception`; ref #5088

`MRB_TRY()` does not work when compiled by C compiler with `cxx_exception`
configuration. We should explicitly warn.
parent 7ca59ece
...@@ -13,7 +13,9 @@ ...@@ -13,7 +13,9 @@
# endif # endif
#endif #endif
#if defined(MRB_ENABLE_CXX_EXCEPTION) && defined(__cplusplus) #if defined(MRB_ENABLE_CXX_EXCEPTION)
# if defined(__cplusplus)
#define MRB_TRY(buf) try { #define MRB_TRY(buf) try {
#define MRB_CATCH(buf) } catch(mrb_jmpbuf_impl e) { if (e != (buf)->impl) { throw e; } #define MRB_CATCH(buf) } catch(mrb_jmpbuf_impl e) { if (e != (buf)->impl) { throw e; }
...@@ -22,6 +24,10 @@ ...@@ -22,6 +24,10 @@
#define MRB_THROW(buf) throw((buf)->impl) #define MRB_THROW(buf) throw((buf)->impl)
typedef mrb_int mrb_jmpbuf_impl; typedef mrb_int mrb_jmpbuf_impl;
# else
# error "need to be compiled with C++ compiler"
# endif /* __cplusplus */
#else #else
#include <setjmp.h> #include <setjmp.h>
...@@ -46,9 +52,11 @@ typedef mrb_int mrb_jmpbuf_impl; ...@@ -46,9 +52,11 @@ typedef mrb_int mrb_jmpbuf_impl;
struct mrb_jmpbuf { struct mrb_jmpbuf {
mrb_jmpbuf_impl impl; mrb_jmpbuf_impl impl;
#if defined(MRB_ENABLE_CXX_EXCEPTION) && defined(__cplusplus) #if defined(MRB_ENABLE_CXX_EXCEPTION)
static mrb_int jmpbuf_id; static mrb_int jmpbuf_id;
# if defined(__cplusplus)
mrb_jmpbuf() : impl(jmpbuf_id++) {} mrb_jmpbuf() : impl(jmpbuf_id++) {}
# endif
#endif #endif
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment