Fixed a loss of error location on function calls

This commit is contained in:
Jonathan Turner 2009-07-06 16:27:27 +00:00
parent 0708f32694
commit 2c5b1323dd
2 changed files with 9 additions and 11 deletions

View File

@ -127,7 +127,6 @@ namespace chaiscript
}; };
struct BreakLoop { struct BreakLoop {
dispatchkit::Boxed_Value retval;
TokenPtr location; TokenPtr location;
BreakLoop(const TokenPtr where) : location(where) { } BreakLoop(const TokenPtr where) : location(where) { }

View File

@ -90,7 +90,7 @@ namespace chaiscript
retval = dispatch(ss.get_function(node->children[i+1]->text), plb); retval = dispatch(ss.get_function(node->children[i+1]->text), plb);
} }
catch(const dispatchkit::dispatch_error &e){ 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){ catch(const dispatchkit::dispatch_error &e){
@ -297,8 +297,15 @@ namespace chaiscript
plb << eval_token(ss, node->children[1]->children[i]); 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 { try {
dispatchkit::Boxed_Value fn = eval_token(ss, node->children[0]);
//fn = ss.get_function(node->children[0]->text); //fn = ss.get_function(node->children[0]->text);
ss.set_stack(new_stack); ss.set_stack(new_stack);
//retval = dispatch(fn, plb); //retval = dispatch(fn, plb);
@ -306,10 +313,6 @@ namespace chaiscript
retval = (*dispatchkit::boxed_cast<boost::shared_ptr<dispatchkit::Proxy_Function> >(fn))(plb); retval = (*dispatchkit::boxed_cast<boost::shared_ptr<dispatchkit::Proxy_Function> >(fn))(plb);
ss.set_stack(prev_stack); 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){ catch(const dispatchkit::dispatch_error &e){
ss.set_stack(prev_stack); ss.set_stack(prev_stack);
throw EvalError("Engine error: " + std::string(e.what()) + " with function '" + node->children[0]->text + "'", node->children[0]); 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); retval = dispatch(fn, plb);
ss.set_stack(prev_stack); ss.set_stack(prev_stack);
} }
catch(EvalError &ee) {
ss.set_stack(prev_stack);
throw EvalError(ee.reason, node);
}
catch(const dispatchkit::dispatch_error &e){ catch(const dispatchkit::dispatch_error &e){
ss.set_stack(prev_stack); ss.set_stack(prev_stack);
throw EvalError("Can not find appropriate '" + fun_name + "'", node); throw EvalError("Can not find appropriate '" + fun_name + "'", node);