42#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[] = {
65 "Malformed expression",
74Error::Error() : exception(), _error_code(undefined_error), _error_message(
"")
87 : exception(), _error_code(ec), _error_message(msg)
96 : exception(), _error_code(unknown_error), _error_message(msg)
100 : exception(), _error_code(copy_from._error_code), _error_message(copy_from._error_message)
104Error::~Error() throw()
109Error::operator=(
const Error &rhs)
116 _error_code = rhs._error_code;
117 _error_message = rhs._error_message;
135 bool empty = ((_error_code == undefined_error)
136 && (_error_message.empty()));
139 bool message = ((_error_code != undefined_error)
140 && (!_error_message.empty()));
142 DBG(cerr <<
"empty: " << empty <<
", message: " << message << endl);
143 return empty || message;
158 throw InternalErr(__FILE__, __LINE__,
"Null input stream");
160 void *buffer = Error_buffer(fp);
161 Error_switch_to_buffer(buffer);
167 status = Errorparse(&arg) == 0;
168 Error_delete_buffer(buffer);
171 Error_delete_buffer(buffer);
179 if (!status || !arg.status())
180 throw InternalErr(__FILE__, __LINE__,
"Error parsing error object!");
201 fprintf(out,
"Error {\n") ;
203 fprintf(out,
" code = %d;\n",
static_cast<int>(_error_code)) ;
207 if (*_error_message.begin() ==
'"' && *(_error_message.end() - 1) ==
'"')
208 fprintf(out,
" message = %s;\n", _error_message.c_str()) ;
210 fprintf(out,
" message = \"%s\";\n", _error_message.c_str()) ;
212 fprintf(out,
"};\n") ;
230 strm <<
"Error {\n" ;
232 strm <<
" code = " <<
static_cast<int>(_error_code) <<
";\n" ;
236 if (*_error_message.begin() ==
'"' && *(_error_message.end() - 1) ==
'"')
237 strm <<
" message = " << _error_message.c_str() <<
";\n" ;
239 strm <<
" message = \"" << _error_message.c_str() <<
"\";\n" ;
264 if (_error_message.empty()
265 && ec > undefined_error && ec <= cannot_read_file) {
266 _error_message = err_messages[ec - undefined_error];
269 _error_message = err_messages[0];
279 return string(_error_message);
286 _error_message = msg;
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.