From c15e0174c9721b8da8b8d8ede71dabad49d53f5d Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Sat, 21 Mar 2015 22:29:16 +0100 Subject: [PATCH 1/3] added "method_missing" feature --- include/chaiscript/dispatchkit/dispatchkit.hpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/include/chaiscript/dispatchkit/dispatchkit.hpp b/include/chaiscript/dispatchkit/dispatchkit.hpp index f882b0d..dff8a22 100644 --- a/include/chaiscript/dispatchkit/dispatchkit.hpp +++ b/include/chaiscript/dispatchkit/dispatchkit.hpp @@ -782,7 +782,19 @@ namespace chaiscript Boxed_Value call_function(const std::string &t_name, const std::vector ¶ms) const { - return dispatch::dispatch(get_function(t_name), params, m_conversions); + try { + return dispatch::dispatch(get_function(t_name), params, m_conversions); + } + catch(chaiscript::exception::dispatch_error&) { + auto functions = get_function("method_missing"); + if (!functions.empty()) { + std::vector tmp_params; + tmp_params.push_back(var(t_name)); + tmp_params.insert(tmp_params.end(), params.begin(), params.end()); + return dispatch::dispatch(functions, tmp_params, m_conversions); + } + throw; + } } Boxed_Value call_function(const std::string &t_name) const From d0e763d77ee4c735e2ade23f80b7e1fe33819811 Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Sun, 22 Mar 2015 00:17:53 +0100 Subject: [PATCH 2/3] fixed method_missing parameter order --- include/chaiscript/dispatchkit/dispatchkit.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/chaiscript/dispatchkit/dispatchkit.hpp b/include/chaiscript/dispatchkit/dispatchkit.hpp index dff8a22..9c5687b 100644 --- a/include/chaiscript/dispatchkit/dispatchkit.hpp +++ b/include/chaiscript/dispatchkit/dispatchkit.hpp @@ -789,8 +789,8 @@ namespace chaiscript auto functions = get_function("method_missing"); if (!functions.empty()) { std::vector tmp_params; - tmp_params.push_back(var(t_name)); tmp_params.insert(tmp_params.end(), params.begin(), params.end()); + tmp_params.push_back(var(t_name)); return dispatch::dispatch(functions, tmp_params, m_conversions); } throw; From 4e614729dc08c07a1333a9e1d83dc63eb04e32a9 Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Sun, 22 Mar 2015 00:23:49 +0100 Subject: [PATCH 3/3] using copy construction --- include/chaiscript/dispatchkit/dispatchkit.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/include/chaiscript/dispatchkit/dispatchkit.hpp b/include/chaiscript/dispatchkit/dispatchkit.hpp index 9c5687b..e109e06 100644 --- a/include/chaiscript/dispatchkit/dispatchkit.hpp +++ b/include/chaiscript/dispatchkit/dispatchkit.hpp @@ -788,8 +788,7 @@ namespace chaiscript catch(chaiscript::exception::dispatch_error&) { auto functions = get_function("method_missing"); if (!functions.empty()) { - std::vector tmp_params; - tmp_params.insert(tmp_params.end(), params.begin(), params.end()); + std::vector tmp_params(params); tmp_params.push_back(var(t_name)); return dispatch::dispatch(functions, tmp_params, m_conversions); }