diff --git a/include/chaiscript/dispatchkit/dynamic_object.hpp b/include/chaiscript/dispatchkit/dynamic_object.hpp index fe4108be..e06afe4b 100644 --- a/include/chaiscript/dispatchkit/dynamic_object.hpp +++ b/include/chaiscript/dispatchkit/dynamic_object.hpp @@ -55,7 +55,7 @@ namespace chaiscript const std::string &t_type_name, const Proxy_Function &t_func) : Proxy_Function_Base(t_func->get_param_types()), - m_type_name(t_type_name), m_func(t_func) + m_type_name(t_type_name), m_func(t_func), m_doti(user_type()) { assert( (t_func->get_arity() > 0 || t_func->get_arity() < 0) && "Programming error, Dynamic_Object_Function must have at least one parameter (this)"); @@ -66,7 +66,7 @@ namespace chaiscript const Proxy_Function &t_func, const Type_Info &t_ti) : Proxy_Function_Base(build_param_types(t_func->get_param_types(), t_ti)), - m_type_name(t_type_name), m_func(t_func), m_ti(new Type_Info(t_ti)) + m_type_name(t_type_name), m_func(t_func), m_ti(new Type_Info(t_ti)), m_doti(user_type()) { assert( (t_func->get_arity() > 0 || t_func->get_arity() < 0) && "Programming error, Dynamic_Object_Function must have at least one parameter (this)"); @@ -74,6 +74,8 @@ namespace chaiscript virtual ~Dynamic_Object_Function() {} + Dynamic_Object_Function &operator=(const Dynamic_Object_Function) = delete; + virtual bool operator==(const Proxy_Function_Base &f) const { const Dynamic_Object_Function *df = dynamic_cast(&f); @@ -140,11 +142,10 @@ namespace chaiscript return types; } - static bool dynamic_object_typename_match(const Boxed_Value &bv, const std::string &name, - const std::shared_ptr &ti, const Dynamic_Cast_Conversions &t_conversions) + bool dynamic_object_typename_match(const Boxed_Value &bv, const std::string &name, + const std::shared_ptr &ti, const Dynamic_Cast_Conversions &t_conversions) const { - static Type_Info doti = user_type(); - if (bv.get_type_info().bare_equal(doti)) + if (bv.get_type_info().bare_equal(m_doti)) { try { const Dynamic_Object &d = boxed_cast(bv, &t_conversions); @@ -163,8 +164,8 @@ namespace chaiscript } - static bool dynamic_object_typename_match(const std::vector &bvs, const std::string &name, - const std::shared_ptr &ti, const Dynamic_Cast_Conversions &t_conversions) + bool dynamic_object_typename_match(const std::vector &bvs, const std::string &name, + const std::shared_ptr &ti, const Dynamic_Cast_Conversions &t_conversions) const { if (bvs.size() > 0) { @@ -177,6 +178,8 @@ namespace chaiscript std::string m_type_name; Proxy_Function m_func; std::shared_ptr m_ti; + const Type_Info m_doti; + }; diff --git a/include/chaiscript/dispatchkit/proxy_functions_detail.hpp b/include/chaiscript/dispatchkit/proxy_functions_detail.hpp index 8f1901c6..2383861f 100644 --- a/include/chaiscript/dispatchkit/proxy_functions_detail.hpp +++ b/include/chaiscript/dispatchkit/proxy_functions_detail.hpp @@ -15,6 +15,7 @@ #include #include +#include namespace chaiscript {