diff --git a/include/chaiscript/dispatchkit/bad_boxed_cast.hpp b/include/chaiscript/dispatchkit/bad_boxed_cast.hpp index 46c70ec..3bf39f5 100644 --- a/include/chaiscript/dispatchkit/bad_boxed_cast.hpp +++ b/include/chaiscript/dispatchkit/bad_boxed_cast.hpp @@ -21,7 +21,7 @@ namespace chaiscript { public: bad_boxed_cast(const Type_Info &t_from, const std::type_info &t_to, - const std::string &what) + const std::string &what) throw() : from(t_from), to(&t_to), m_what(what) { } diff --git a/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp b/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp index af3edca..129b963 100644 --- a/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp +++ b/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp @@ -21,7 +21,7 @@ namespace chaiscript { public: bad_boxed_dynamic_cast(const Type_Info &t_from, const std::type_info &t_to, - const std::string &t_what) + const std::string &t_what) throw() : bad_boxed_cast(t_from, t_to, t_what) { } @@ -35,6 +35,8 @@ namespace chaiscript : bad_boxed_cast(w) { } + + virtual ~bad_boxed_dynamic_cast() throw() {} }; } diff --git a/include/chaiscript/utility/utility.hpp b/include/chaiscript/utility/utility.hpp index ced34c0..9371687 100644 --- a/include/chaiscript/utility/utility.hpp +++ b/include/chaiscript/utility/utility.hpp @@ -53,10 +53,10 @@ namespace chaiscript { inline std::string class_name_translator(const std::string &t_name) { - size_t colon = t_name.find_last_of("::"); + size_t colon = t_name.rfind("::"); if (colon != std::string::npos) { - return t_name.substr(colon+1, std::string::npos); + return t_name.substr(colon+2, std::string::npos); } else { return t_name; } @@ -64,13 +64,16 @@ namespace chaiscript inline std::string method_name_translator(const std::string &t_name) { - size_t colon = t_name.find_last_of("::"); - if (colon != std::string::npos) + size_t namestart = t_name.rfind("operator"); + namestart = (namestart == std::string::npos)?0:namestart+strlen("operator"); + + if (namestart == 0) { - return t_name.substr(colon+1, std::string::npos); - } else { - return t_name; - } + namestart = t_name.rfind("::"); + namestart = (namestart == std::string::npos)?0:namestart+strlen("::"); + } + + return t_name.substr(namestart, std::string::npos); } } } diff --git a/src/test_module.cpp b/src/test_module.cpp index 96573da..77455f6 100644 --- a/src/test_module.cpp +++ b/src/test_module.cpp @@ -5,6 +5,8 @@ class TestBaseType { public: + TestBaseType() {} + TestBaseType(int) {} virtual ~TestBaseType() {} virtual int func() { return 0; } @@ -40,6 +42,7 @@ CHAISCRIPT_MODULE_EXPORT chaiscript::ModulePtr create_chaiscript_module_test_mo m->add(chaiscript::user_type(), "TestDerivedType"); m->add(chaiscript::constructor(), "TestBaseType"); +// m->add(chaiscript::constructor(), "TestBaseType"); m->add(chaiscript::constructor(), "TestBaseType"); m->add(chaiscript::constructor(), "TestDerivedType"); diff --git a/unittests/inheritance.chai b/unittests/inheritance.chai index d93ca88..1fcd346 100644 --- a/unittests/inheritance.chai +++ b/unittests/inheritance.chai @@ -1,6 +1,6 @@ load_module("test_module") -var t0 = TestBaseType(); +var t0 = TestBaseType() var t = TestDerivedType(); assert_equal(t0.func(), 0); diff --git a/unittests/utility_test.cpp b/unittests/utility_test.cpp index 21294a1..bcd3240 100644 --- a/unittests/utility_test.cpp +++ b/unittests/utility_test.cpp @@ -24,6 +24,7 @@ int main() ((function3)) ((functionOverload)(std::string (Test::*)(double))) ((functionOverload)(std::string (Test::*)(int))) + ((operator=)) ); chaiscript::ChaiScript chai; @@ -32,6 +33,7 @@ int main() && chai.eval("var t = Test(); t.functionOverload(1); ") == "int" && chai.eval("var t = Test(); t.functionOverload(1.1); ") == "double") { + chai.eval("t = Test();"); return EXIT_SUCCESS; } else { return EXIT_FAILURE;