Make EvalError a subclass of runtime_error and provide the std::exception with a robust description for easier debugging of callback/scripted function calls
This commit is contained in:
@@ -29,12 +29,12 @@ namespace chaiscript
|
|||||||
try {
|
try {
|
||||||
val = dispatchkit::Cast_Helper<std::string &>()(vals[0]);
|
val = dispatchkit::Cast_Helper<std::string &>()(vals[0]);
|
||||||
}
|
}
|
||||||
catch (std::exception &e) {
|
|
||||||
throw EvalError("Can not evaluate string: " + val, langkit::TokenPtr());
|
|
||||||
}
|
|
||||||
catch (EvalError &ee) {
|
catch (EvalError &ee) {
|
||||||
throw EvalError("Can not evaluate string: " + val + " reason: " + ee.reason, langkit::TokenPtr());
|
throw EvalError("Can not evaluate string: " + val + " reason: " + ee.reason, langkit::TokenPtr());
|
||||||
}
|
}
|
||||||
|
catch (std::exception &e) {
|
||||||
|
throw EvalError("Can not evaluate string: " + val, langkit::TokenPtr());
|
||||||
|
}
|
||||||
return evaluate_string(val);
|
return evaluate_string(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,16 @@ namespace chaiscript
|
|||||||
ParserError(const std::string &why, const langkit::TokenPtr where) : reason(why), location(where){ }
|
ParserError(const std::string &why, const langkit::TokenPtr where) : reason(why), location(where){ }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct EvalError {
|
struct EvalError : public std::runtime_error {
|
||||||
std::string reason;
|
std::string reason;
|
||||||
langkit::TokenPtr location;
|
langkit::TokenPtr location;
|
||||||
|
|
||||||
EvalError(const std::string &why, const langkit::TokenPtr where) : reason(why), location(where) { }
|
EvalError(const std::string &why, const langkit::TokenPtr where)
|
||||||
|
: std::runtime_error("Eval error: \"" + why + "\" in '"
|
||||||
|
+ where->filename + "' line: " + boost::lexical_cast<std::string>(where->start.line+1)),
|
||||||
|
reason(why), location(where) { }
|
||||||
|
|
||||||
|
virtual ~EvalError() throw() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ReturnValue {
|
struct ReturnValue {
|
||||||
|
|||||||
@@ -4,4 +4,5 @@ cb_handler.add_callbacks( function() { "DivOnePtTwo"; }, function (x) { x / 1.2;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cb_handler.add_callbacks( function() { "DivOnePtTwo"; }, function (x) { blargh; } );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user