{
isc_throw(EvalParseError, what);
}
+
+void
+EvalContext::fatal (const std::string& what)
+{
+ isc_throw(Unexpected, what);
+}
/// cases when the EvalParser is not able to handle the packet.
void error(const std::string& what);
+ /// @brief Fatal error handler
+ ///
+ /// This is for should not happen but fatal errors
+ static void fatal(const std::string& what);
+
private:
/// @brief Flag determining scanner debugging.
bool trace_scanning_;
// The location of the current token. The lexer will keep updating it. This
// variable will be useful for logging errors.
static isc::eval::location loc;
+
+// To avoid the call to exit... oops!
+#define YY_FATAL_ERROR(msg) isc::eval::EvalContext::fatal(msg)
%}
/* noyywrap disables automatic rewinding for the next file to parse. Since we
YY_BUFFER_STATE buffer;
buffer = yy_scan_bytes(string_.c_str(), string_.size());
if (!buffer) {
- error("cannot scan string");
- // error throws an exception so this can't be reached
+ fatal("cannot scan string");
+ // fatal() throws an exception so this can't be reached
}
}
{
yy_delete_buffer(YY_CURRENT_BUFFER);
}
+
+namespace {
+/// To avoid unused function error
+class Dummy {
+ void dummy() { yy_fatal_error("Fix me: how to disable its definition?"); }
+};
+}