Move type registration into module code, and fix problems with unloading of modules and type conversions registered inside of a module.

We have to allow the same type registration more than once now, just in case several different modules register the same conversion.
This commit is contained in:
Jason Turner
2010-08-03 01:17:38 +00:00
parent 4358564065
commit f4e4f92dae
4 changed files with 98 additions and 19 deletions

View File

@@ -2,6 +2,21 @@
#include <chaiscript/chaiscript.hpp>
#include <string>
class TestBaseType
{
public:
virtual ~TestBaseType() {}
virtual int func() { return 0; }
};
class TestDerivedType : public TestBaseType
{
public:
virtual ~TestDerivedType() {}
virtual int func() { return 1; }
};
std::string hello_world()
{
return "Hello World";
@@ -12,5 +27,19 @@ CHAISCRIPT_MODULE_EXPORT chaiscript::ModulePtr create_chaiscript_module_test_mo
chaiscript::ModulePtr m(new chaiscript::Module());
m->add(chaiscript::fun(hello_world), "hello_world");
m->add(chaiscript::user_type<TestBaseType>(), "TestBaseType");
m->add(chaiscript::user_type<TestDerivedType>(), "TestDerivedType");
m->add(chaiscript::constructor<TestBaseType ()>(), "TestBaseType");
m->add(chaiscript::constructor<TestBaseType (const TestBaseType &)>(), "TestBaseType");
m->add(chaiscript::constructor<TestDerivedType ()>(), "TestDerivedType");
m->add(chaiscript::constructor<TestDerivedType (const TestDerivedType &)>(), "TestDerivedType");
m->add(chaiscript::base_class<TestBaseType, TestDerivedType>());
m->add(chaiscript::fun(&TestBaseType::func), "func");
return m;
}