| // | |
| // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| #ifndef COMPILER_PREPROCESSOR_DIAGNOSTICS_H_ | |
| #define COMPILER_PREPROCESSOR_DIAGNOSTICS_H_ | |
| #include <string> | |
| namespace pp | |
| { | |
| struct SourceLocation; | |
| // Base class for reporting diagnostic messages. | |
| // Derived classes are responsible for formatting and printing the messages. | |
| class Diagnostics | |
| { | |
| public: | |
| enum Severity | |
| { | |
| PP_ERROR, | |
| PP_WARNING | |
| }; | |
| enum ID | |
| { | |
| ERROR_BEGIN, | |
| INTERNAL_ERROR, | |
| OUT_OF_MEMORY, | |
| INVALID_CHARACTER, | |
| INVALID_NUMBER, | |
| INTEGER_OVERFLOW, | |
| FLOAT_OVERFLOW, | |
| TOKEN_TOO_LONG, | |
| INVALID_EXPRESSION, | |
| DIVISION_BY_ZERO, | |
| EOF_IN_COMMENT, | |
| UNEXPECTED_TOKEN, | |
| DIRECTIVE_INVALID_NAME, | |
| MACRO_NAME_RESERVED, | |
| MACRO_REDEFINED, | |
| MACRO_PREDEFINED_REDEFINED, | |
| MACRO_PREDEFINED_UNDEFINED, | |
| MACRO_UNTERMINATED_INVOCATION, | |
| MACRO_TOO_FEW_ARGS, | |
| MACRO_TOO_MANY_ARGS, | |
| CONDITIONAL_ENDIF_WITHOUT_IF, | |
| CONDITIONAL_ELSE_WITHOUT_IF, | |
| CONDITIONAL_ELSE_AFTER_ELSE, | |
| CONDITIONAL_ELIF_WITHOUT_IF, | |
| CONDITIONAL_ELIF_AFTER_ELSE, | |
| CONDITIONAL_UNTERMINATED, | |
| INVALID_EXTENSION_NAME, | |
| INVALID_EXTENSION_BEHAVIOR, | |
| INVALID_EXTENSION_DIRECTIVE, | |
| INVALID_VERSION_NUMBER, | |
| INVALID_VERSION_DIRECTIVE, | |
| VERSION_NOT_FIRST_STATEMENT, | |
| INVALID_LINE_NUMBER, | |
| INVALID_FILE_NUMBER, | |
| INVALID_LINE_DIRECTIVE, | |
| ERROR_END, | |
| WARNING_BEGIN, | |
| EOF_IN_DIRECTIVE, | |
| CONDITIONAL_UNEXPECTED_TOKEN, | |
| UNRECOGNIZED_PRAGMA, | |
| WARNING_END | |
| }; | |
| virtual ~Diagnostics(); | |
| void report(ID id, const SourceLocation& loc, const std::string& text); | |
| protected: | |
| Severity severity(ID id); | |
| std::string message(ID id); | |
| virtual void print(ID id, | |
| const SourceLocation& loc, | |
| const std::string& text) = 0; | |
| }; | |
| } // namespace pp | |
| #endif // COMPILER_PREPROCESSOR_DIAGNOSTICS_H_ |