You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.2 KiB
C++
94 lines
2.2 KiB
C++
|
|
#ifndef COMPILER_ERRORHANDLER_H_INCLUDED
|
|
#define COMPILER_ERRORHANDLER_H_INCLUDED
|
|
|
|
#include <string>
|
|
|
|
namespace Compiler
|
|
{
|
|
struct TokenLoc;
|
|
|
|
/// \brief Error handling
|
|
///
|
|
/// This class collects errors and provides an interface for reporting them to the user.
|
|
|
|
class ErrorHandler
|
|
{
|
|
int mWarnings;
|
|
int mErrors;
|
|
int mWarningsMode;
|
|
bool mDowngradeErrors;
|
|
|
|
protected:
|
|
|
|
enum Type
|
|
{
|
|
WarningMessage, ErrorMessage
|
|
};
|
|
|
|
private:
|
|
|
|
// mutators
|
|
|
|
virtual void report (const std::string& message, const TokenLoc& loc, Type type) = 0;
|
|
///< Report error to the user.
|
|
|
|
virtual void report (const std::string& message, Type type) = 0;
|
|
///< Report a file related error
|
|
|
|
public:
|
|
|
|
ErrorHandler();
|
|
///< constructor
|
|
|
|
virtual ~ErrorHandler();
|
|
///< destructor
|
|
|
|
bool isGood() const;
|
|
///< Was compiling successful?
|
|
|
|
int countErrors() const;
|
|
///< Return number of errors
|
|
|
|
int countWarnings() const;
|
|
///< Return number of warnings
|
|
|
|
void warning (const std::string& message, const TokenLoc& loc);
|
|
///< Generate a warning message.
|
|
|
|
void error (const std::string& message, const TokenLoc& loc);
|
|
///< Generate an error message.
|
|
|
|
void endOfFile();
|
|
///< Generate an error message for an unexpected EOF.
|
|
|
|
virtual void reset();
|
|
///< Remove all previous error/warning events
|
|
|
|
void setWarningsMode (int mode);
|
|
///< // 0 ignore, 1 rate as warning, 2 rate as error
|
|
|
|
/// Treat errors as warnings.
|
|
void downgradeErrors (bool downgrade);
|
|
};
|
|
|
|
class ErrorDowngrade
|
|
{
|
|
ErrorHandler& mHandler;
|
|
|
|
/// not implemented
|
|
ErrorDowngrade (const ErrorDowngrade&);
|
|
|
|
/// not implemented
|
|
ErrorDowngrade& operator= (const ErrorDowngrade&);
|
|
|
|
public:
|
|
|
|
ErrorDowngrade (ErrorHandler& handler);
|
|
|
|
~ErrorDowngrade();
|
|
};
|
|
}
|
|
|
|
#endif
|