diff --git a/CMakeLists.txt b/CMakeLists.txt index fd09ac5..e105e74 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -170,6 +170,10 @@ IF(BUILD_TESTING) target_link_libraries(type_info_test ${LIBS}) add_test(NAME Type_Info_Test COMMAND type_info_test) + add_executable(eval_catch_exception_test unittests/eval_catch_exception_test.cpp) + target_link_libraries(eval_catch_exception_test ${LIBS}) + add_test(NAME Eval_Catch_Exception_Test COMMAND eval_catch_exception_test) + add_executable(multifile_test unittests/multifile_test_main.cpp unittests/multifile_test_chai.cpp unittests/multifile_test_module.cpp) target_link_libraries(multifile_test ${LIBS}) diff --git a/include/chaiscript/dispatchkit/bootstrap.hpp b/include/chaiscript/dispatchkit/bootstrap.hpp index 06e5fdc..9db7942 100644 --- a/include/chaiscript/dispatchkit/bootstrap.hpp +++ b/include/chaiscript/dispatchkit/bootstrap.hpp @@ -581,6 +581,9 @@ namespace chaiscript m->add(user_type(), "runtime_error"); + m->add(chaiscript::base_class()); + + m->add(constructor(), "runtime_error"); m->add(fun(boost::function(&what)), "what"); diff --git a/unittests/eval_catch_exception_test.cpp b/unittests/eval_catch_exception_test.cpp new file mode 100644 index 0000000..8b08733 --- /dev/null +++ b/unittests/eval_catch_exception_test.cpp @@ -0,0 +1,21 @@ +// Tests to make sure that the order in which function dispatches occur is correct + +#include + + +int main() +{ + chaiscript::ChaiScript chai; + + try { + chai.eval("throw(runtime_error(\"error\"));"); + } catch (const chaiscript::Boxed_Value &bv) { + const std::exception &e = chaiscript::boxed_cast(bv); + if (e.what() == std::string("error")) + { + return EXIT_SUCCESS; + } + } + + return EXIT_FAILURE; +}