diff --git a/include/chaiscript/dispatchkit/dispatchkit.hpp b/include/chaiscript/dispatchkit/dispatchkit.hpp index 35613be..6fcab0b 100644 --- a/include/chaiscript/dispatchkit/dispatchkit.hpp +++ b/include/chaiscript/dispatchkit/dispatchkit.hpp @@ -324,7 +324,7 @@ namespace chaiscript std::vector::mapped_type> > get_function(const std::string &t_name) const { - return get_function_impl(t_name, true); + return get_function_impl(t_name, false); } /** diff --git a/include/chaiscript/language/chaiscript_eval.hpp b/include/chaiscript/language/chaiscript_eval.hpp index 4d3f981..1e82d70 100644 --- a/include/chaiscript/language/chaiscript_eval.hpp +++ b/include/chaiscript/language/chaiscript_eval.hpp @@ -471,23 +471,32 @@ namespace chaiscript } } - std::string fun_name; - if (node->children[i]->identifier == Token_Type::Fun_Call) { - fun_name = node->children[i]->children[0]->text; - } - else { - fun_name = node->children[i]->text; - } - + //std::string fun_name; + Boxed_Value fn; try { - fn = ss.get_function(fun_name); + if (node->children[i]->identifier == Token_Type::Fun_Call) { + //fun_name = node->children[i]->children[0]->text; + fn = eval_token(ss, node->children[i]->children[0]); + } + else { + //fun_name = node->children[i]->text; + fn = eval_token(ss, node->children[i]); + } + } + catch(Eval_Error &ee) { + ss.set_stack(prev_stack); + throw Eval_Error(ee.reason, node->children[i]); + } + try { + //fn = ss.get_function(fun_name); ss.set_stack(new_stack); - retval = dispatch(fn, plb); + //retval = dispatch(fn, plb); + retval = (*boxed_cast(fn))(plb); ss.set_stack(prev_stack); } catch(const dispatch_error &e){ ss.set_stack(prev_stack); - throw Eval_Error(std::string(e.what()) + " with function '" + fun_name + "'", node->children[i]); + throw Eval_Error(std::string(e.what()), node->children[i]); } catch(Return_Value &rv) { ss.set_stack(prev_stack); diff --git a/unittests/method_lambda.chai b/unittests/method_lambda.chai new file mode 100644 index 0000000..bf7805e --- /dev/null +++ b/unittests/method_lambda.chai @@ -0,0 +1,3 @@ +var addit = fun(x, y) { return x+y } + +print(3.addit(4)) diff --git a/unittests/method_lambda.txt b/unittests/method_lambda.txt new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/unittests/method_lambda.txt @@ -0,0 +1 @@ +7