1 // 2 // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 #ifndef COMPILER_PREPROCESSOR_DIAGNOSTICS_H_ 8 #define COMPILER_PREPROCESSOR_DIAGNOSTICS_H_ 9 10 #include <string> 11 12 namespace pp 13 { 14 15 struct SourceLocation; 16 17 // Base class for reporting diagnostic messages. 18 // Derived classes are responsible for formatting and printing the messages. 19 class Diagnostics 20 { 21 public: 22 enum Severity 23 { 24 PP_ERROR, 25 PP_WARNING 26 }; 27 enum ID 28 { 29 PP_ERROR_BEGIN, 30 PP_INTERNAL_ERROR, 31 PP_OUT_OF_MEMORY, 32 PP_INVALID_CHARACTER, 33 PP_INVALID_NUMBER, 34 PP_INTEGER_OVERFLOW, 35 PP_FLOAT_OVERFLOW, 36 PP_TOKEN_TOO_LONG, 37 PP_INVALID_EXPRESSION, 38 PP_DIVISION_BY_ZERO, 39 PP_EOF_IN_COMMENT, 40 PP_UNEXPECTED_TOKEN, 41 PP_DIRECTIVE_INVALID_NAME, 42 PP_MACRO_NAME_RESERVED, 43 PP_MACRO_REDEFINED, 44 PP_MACRO_PREDEFINED_REDEFINED, 45 PP_MACRO_PREDEFINED_UNDEFINED, 46 PP_MACRO_UNTERMINATED_INVOCATION, 47 PP_MACRO_TOO_FEW_ARGS, 48 PP_MACRO_TOO_MANY_ARGS, 49 PP_CONDITIONAL_ENDIF_WITHOUT_IF, 50 PP_CONDITIONAL_ELSE_WITHOUT_IF, 51 PP_CONDITIONAL_ELSE_AFTER_ELSE, 52 PP_CONDITIONAL_ELIF_WITHOUT_IF, 53 PP_CONDITIONAL_ELIF_AFTER_ELSE, 54 PP_CONDITIONAL_UNTERMINATED, 55 PP_INVALID_EXTENSION_NAME, 56 PP_INVALID_EXTENSION_BEHAVIOR, 57 PP_INVALID_EXTENSION_DIRECTIVE, 58 PP_INVALID_VERSION_NUMBER, 59 PP_INVALID_VERSION_DIRECTIVE, 60 PP_VERSION_NOT_FIRST_STATEMENT, 61 PP_INVALID_LINE_NUMBER, 62 PP_INVALID_FILE_NUMBER, 63 PP_INVALID_LINE_DIRECTIVE, 64 PP_ERROR_END, 65 66 PP_WARNING_BEGIN, 67 PP_EOF_IN_DIRECTIVE, 68 PP_CONDITIONAL_UNEXPECTED_TOKEN, 69 PP_UNRECOGNIZED_PRAGMA, 70 PP_WARNING_END 71 }; 72 73 virtual ~Diagnostics(); 74 75 void report(ID id, const SourceLocation &loc, const std::string &text); 76 77 protected: 78 Severity severity(ID id); 79 std::string message(ID id); 80 81 virtual void print(ID id, 82 const SourceLocation &loc, 83 const std::string &text) = 0; 84 }; 85 86 } // namespace pp 87 #endif // COMPILER_PREPROCESSOR_DIAGNOSTICS_H_ 88