From 2c5b1323dd4057a2f61deaba4db7ba6506cb6646 Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Mon, 6 Jul 2009 16:27:27 +0000 Subject: [PATCH] Fixed a loss of error location on function calls --- chaiscript/chaiscript.hpp | 1 - chaiscript/chaiscript_eval.hpp | 19 +++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/chaiscript/chaiscript.hpp b/chaiscript/chaiscript.hpp index 09fbecb..87a1942 100644 --- a/chaiscript/chaiscript.hpp +++ b/chaiscript/chaiscript.hpp @@ -127,7 +127,6 @@ namespace chaiscript }; struct BreakLoop { - dispatchkit::Boxed_Value retval; TokenPtr location; BreakLoop(const TokenPtr where) : location(where) { } diff --git a/chaiscript/chaiscript_eval.hpp b/chaiscript/chaiscript_eval.hpp index 12b1f3f..623b7c8 100644 --- a/chaiscript/chaiscript_eval.hpp +++ b/chaiscript/chaiscript_eval.hpp @@ -90,7 +90,7 @@ namespace chaiscript retval = dispatch(ss.get_function(node->children[i+1]->text), plb); } catch(const dispatchkit::dispatch_error &e){ - throw EvalError("Can not find appropriate '" + node->children[i+1]->text + "'", node->children[i+1]); + throw EvalError("Mismatched types in equation", node->children[i+1]); } } catch(const dispatchkit::dispatch_error &e){ @@ -297,8 +297,15 @@ namespace chaiscript plb << eval_token(ss, node->children[1]->children[i]); } } + dispatchkit::Boxed_Value fn; + try { + fn = eval_token(ss, node->children[0]); + } + catch(EvalError &ee) { + ss.set_stack(prev_stack); + throw EvalError(ee.reason, node->children[0]); + } try { - dispatchkit::Boxed_Value fn = eval_token(ss, node->children[0]); //fn = ss.get_function(node->children[0]->text); ss.set_stack(new_stack); //retval = dispatch(fn, plb); @@ -306,10 +313,6 @@ namespace chaiscript retval = (*dispatchkit::boxed_cast >(fn))(plb); ss.set_stack(prev_stack); } - catch(EvalError &ee) { - ss.set_stack(prev_stack); - throw EvalError(ee.reason, node->children[0]); - } catch(const dispatchkit::dispatch_error &e){ ss.set_stack(prev_stack); throw EvalError("Engine error: " + std::string(e.what()) + " with function '" + node->children[0]->text + "'", node->children[0]); @@ -359,10 +362,6 @@ namespace chaiscript retval = dispatch(fn, plb); ss.set_stack(prev_stack); } - catch(EvalError &ee) { - ss.set_stack(prev_stack); - throw EvalError(ee.reason, node); - } catch(const dispatchkit::dispatch_error &e){ ss.set_stack(prev_stack); throw EvalError("Can not find appropriate '" + fun_name + "'", node);