diff --git a/CMakeLists.txt b/CMakeLists.txt index 54619c6..835c5bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,6 +108,10 @@ IF(BUILD_TESTING) target_link_libraries(dynamic_object_test ${DYNAMIC_LOADER} ${Boost_LIBRARIES} ${READLINE_LIB}) add_test(NAME Dynamic_Object_Test COMMAND dynamic_object_test) + add_executable(functor_creation_test unittests/functor_creation_test.cpp) + target_link_libraries(functor_creation_test ${DYNAMIC_LOADER} ${Boost_LIBRARIES} ${READLINE_LIB}) + add_test(NAME Functor_Creation_Test COMMAND functor_creation_test) + add_library(test_module MODULE src/test_module.cpp) target_link_libraries(test_module ${Boost_LIBRARIES}) diff --git a/include/chaiscript/dispatchkit/function_call.hpp b/include/chaiscript/dispatchkit/function_call.hpp index 1b34cb5..aa0ac3b 100644 --- a/include/chaiscript/dispatchkit/function_call.hpp +++ b/include/chaiscript/dispatchkit/function_call.hpp @@ -27,7 +27,7 @@ namespace chaiscript */ template boost::function - functor(const std::vector > &funcs) + functor(const std::vector > &funcs) { FunctionType *p=0; return detail::build_function_caller_helper(p, funcs); @@ -48,9 +48,9 @@ namespace chaiscript */ template boost::function - functor(Proxy_Function func) + functor(Const_Proxy_Function func) { - std::vector > funcs; + std::vector > funcs; funcs.push_back(std::make_pair(std::string(), func)); return functor(funcs); } @@ -63,7 +63,7 @@ namespace chaiscript boost::function functor(const Boxed_Value &bv) { - return functor(boxed_cast(bv)); + return functor(boxed_cast(bv)); } } diff --git a/include/chaiscript/dispatchkit/function_call_detail.hpp b/include/chaiscript/dispatchkit/function_call_detail.hpp index 151f6e6..f52185e 100644 --- a/include/chaiscript/dispatchkit/function_call_detail.hpp +++ b/include/chaiscript/dispatchkit/function_call_detail.hpp @@ -32,7 +32,7 @@ namespace chaiscript template struct Function_Caller_Ret { - static Ret call(const std::vector > &t_funcs, + static Ret call(const std::vector > &t_funcs, const std::vector ¶ms) { return boxed_cast(dispatch(t_funcs, params)); @@ -45,7 +45,7 @@ namespace chaiscript template<> struct Function_Caller_Ret { - static void call(const std::vector > &t_funcs, + static void call(const std::vector > &t_funcs, const std::vector ¶ms) { dispatch(t_funcs, params); @@ -70,7 +70,7 @@ namespace chaiscript * used internally for unwrapping a function call's types */ template - Ret function_caller(const std::vector > &funcs + Ret function_caller(const std::vector > &funcs BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_BINARY_PARAMS(n, Param, p) ) { std::vector params; @@ -85,7 +85,7 @@ namespace chaiscript */ template boost::function - build_function_caller_helper(Ret (BOOST_PP_ENUM_PARAMS(n, Param)), const std::vector > &funcs) + build_function_caller_helper(Ret (BOOST_PP_ENUM_PARAMS(n, Param)), const std::vector > &funcs) { return boost::bind(&function_caller, funcs BOOST_PP_ENUM_TRAILING(n, curry, ~)); diff --git a/unittests/functor_creation_test.cpp b/unittests/functor_creation_test.cpp new file mode 100644 index 0000000..ada7369 --- /dev/null +++ b/unittests/functor_creation_test.cpp @@ -0,0 +1,16 @@ +#include + +int main() +{ + + chaiscript::ChaiScript chai; + + chai.eval("def func() { print(\"Hello World\"); } "); + + boost::function f = chai.functor("func"); + + f(); + + return EXIT_SUCCESS; + +}