41#include "InternalErr.h"
48extern void Error_switch_to_buffer(
void *new_buffer);
49extern void Error_delete_buffer(
void *buffer);
50extern void *Error_buffer(FILE *fp);
59static const char *err_messages[] = {
60 "Undefined error",
"Unknown error",
"Internal error",
"No such file",
"No such variable",
61 "Malformed expression",
"No authorization",
"Cannot read file",
"Not Implemented",
""};
69 _error_code = rhs._error_code;
70 _error_message = rhs._error_message;
89 bool empty = ((_error_code == undefined_error) && (_error_message.empty()));
92 bool message = ((_error_code != undefined_error) && (!_error_message.empty()));
94 DBG(cerr <<
"empty: " << empty <<
", message: " << message << endl);
95 return empty || message;
108 throw InternalErr(__FILE__, __LINE__,
"Null input stream");
110 void *buffer = Error_buffer(fp);
111 Error_switch_to_buffer(buffer);
117 status = Errorparse(&arg) == 0;
118 Error_delete_buffer(buffer);
120 Error_delete_buffer(buffer);
128 if (!status || !arg.status())
129 throw InternalErr(__FILE__, __LINE__,
"Error parsing error object!");
147 fprintf(out,
"Error {\n");
149 fprintf(out,
" code = %d;\n",
static_cast<int>(_error_code));
153 if (*_error_message.begin() ==
'"' && *(_error_message.end() - 1) ==
'"')
154 fprintf(out,
" message = %s;\n", _error_message.c_str());
156 fprintf(out,
" message = \"%s\";\n", _error_message.c_str());
158 fprintf(out,
"};\n");
176 strm <<
" code = " <<
static_cast<int>(_error_code) <<
";\n";
180 if (*_error_message.begin() ==
'"' && *(_error_message.end() - 1) ==
'"')
181 strm <<
" message = " << _error_message.c_str() <<
";\n";
183 strm <<
" message = \"" << _error_message.c_str() <<
"\";\n";
204 if (_error_message.empty() && ec > undefined_error && ec <= cannot_read_file) {
205 _error_message = err_messages[ec - undefined_error];
207 _error_message = err_messages[0];
215 return {_error_message};
A class for error processing.
void set_error_message(std::string msg="")
void set_error_code(ErrorCode ec=undefined_error)
void print(FILE *out) const
ErrorCode get_error_code() const
std::string get_error_message() const
bool parse(FILE *fp)
Parse an Error object.
bool OK() const
Is the Error object valid?
A class for software fault reporting.
top level DAP object to house generic methods
int ErrorCode
An enumerated type for common errors.
Pass parameters by reference to a parser.