diff --git a/chaiscript/callbacktest.cpp b/chaiscript/callbacktest.cpp index 01bb9f9..6a4eec9 100644 --- a/chaiscript/callbacktest.cpp +++ b/chaiscript/callbacktest.cpp @@ -56,7 +56,7 @@ int main(int argc, char *argv[]) { boost::function f = dispatchkit::build_functor - (chai, "function(x, y) { x + y }"); + (chai, "function(x, y) { return x + y }"); std::cout << "Functor call: " << f("Hello", " World") << std::endl; } diff --git a/chaiscript/chaiscript_eval.hpp b/chaiscript/chaiscript_eval.hpp index 99d39ad..4021b82 100644 --- a/chaiscript/chaiscript_eval.hpp +++ b/chaiscript/chaiscript_eval.hpp @@ -43,7 +43,14 @@ namespace chaiscript ss.add_object(param_names[i], vals[i]); } - dispatchkit::Boxed_Value retval = eval_token(ss, node); + dispatchkit::Boxed_Value retval; + + try { + retval = eval_token(ss, node); + } catch (const ReturnValue &rv) { + retval = rv.retval; + } + ss.pop_scope(); return retval; } diff --git a/samples/callbacks.chai b/samples/callbacks.chai index 98c5263..de16629 100644 --- a/samples/callbacks.chai +++ b/samples/callbacks.chai @@ -1,5 +1,5 @@ cb_handler.add_callbacks( function() { "First"; }, function (x) { x * 1.1; } ); -cb_handler.add_callbacks( function() { "TimesThree"; }, function(x) { x * 3.0} ); +cb_handler.add_callbacks( function() { "TimesThree"; }, function(x) { return x * 3.0} ); cb_handler.add_callbacks( function() { "DivOnePtTwo"; }, function (x) { x / 1.2; } );