diff --git a/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp b/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp index 91e0a88..93d435c 100644 --- a/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp +++ b/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp @@ -242,8 +242,6 @@ namespace chaiscript /// chai.add(chaiscript::base_class()); /// \endcode /// - /// \todo Move share static type registration code into a mechanism that allows it to be properly - /// shared by all modules template Dynamic_Cast_Conversion base_class() { diff --git a/src/test_module.cpp b/src/test_module.cpp index 796f5ff..83cbc12 100644 --- a/src/test_module.cpp +++ b/src/test_module.cpp @@ -35,11 +35,17 @@ class TestDerivedType : public TestBaseType public: virtual ~TestDerivedType() {} virtual int func() { return 1; } + int derived_only_func() { return 19; } private: TestDerivedType &operator=(const TestDerivedType &); }; +boost::shared_ptr derived_type_factory() +{ + return boost::shared_ptr(new TestDerivedType()); +} + std::string hello_world() { return "Hello World"; @@ -81,6 +87,10 @@ CHAISCRIPT_MODULE_EXPORT chaiscript::ModulePtr create_chaiscript_module_test_mo m->add(chaiscript::base_class()); + m->add(chaiscript::fun(&TestDerivedType::derived_only_func), "derived_only_func"); + + m->add(chaiscript::fun(&derived_type_factory), "derived_type_factory"); + m->add(chaiscript::fun(&TestBaseType::func), "func"); m->add(chaiscript::fun(&TestBaseType::val), "val"); m->add(chaiscript::fun(&TestBaseType::const_val), "const_val"); diff --git a/unittests/inheritance.chai b/unittests/inheritance.chai index 0231a50..0105c68 100644 --- a/unittests/inheritance.chai +++ b/unittests/inheritance.chai @@ -15,3 +15,12 @@ assert_equal(15, t.const_val); t.val = 23; assert_equal(23, t.val) +// test_derived_factory returns a TestDerivedType contained +// in a shared_ptr. This is testing our ability +// to detect that and do the down casting for the user automatically +// at runtime +var d := derived_type_factory(); + +assert_equal(t.derived_only_func(), 19); +assert_equal(d.derived_only_func(), 19); +