1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifndef COMPILER_PREPROCESSOR_DIAGNOSTICS_H_ 16 #define COMPILER_PREPROCESSOR_DIAGNOSTICS_H_ 17 18 #include <string> 19 20 namespace pp 21 { 22 23 struct SourceLocation; 24 25 // Base class for reporting diagnostic messages. 26 // Derived classes are responsible for formatting and printing the messages. 27 class Diagnostics 28 { 29 public: 30 enum Severity 31 { 32 PP_ERROR, 33 PP_WARNING 34 }; 35 enum ID 36 { 37 ERROR_BEGIN, 38 INTERNAL_ERROR, 39 OUT_OF_MEMORY, 40 INVALID_CHARACTER, 41 INVALID_NUMBER, 42 INTEGER_OVERFLOW, 43 FLOAT_OVERFLOW, 44 TOKEN_TOO_LONG, 45 INVALID_EXPRESSION, 46 DIVISION_BY_ZERO, 47 EOF_IN_COMMENT, 48 UNEXPECTED_TOKEN, 49 DIRECTIVE_INVALID_NAME, 50 MACRO_NAME_RESERVED, 51 MACRO_REDEFINED, 52 MACRO_PREDEFINED_REDEFINED, 53 MACRO_PREDEFINED_UNDEFINED, 54 MACRO_UNTERMINATED_INVOCATION, 55 MACRO_TOO_FEW_ARGS, 56 MACRO_TOO_MANY_ARGS, 57 MACRO_DUPLICATE_PARAMETER_NAMES, 58 CONDITIONAL_ENDIF_WITHOUT_IF, 59 CONDITIONAL_ELSE_WITHOUT_IF, 60 CONDITIONAL_ELSE_AFTER_ELSE, 61 CONDITIONAL_ELIF_WITHOUT_IF, 62 CONDITIONAL_ELIF_AFTER_ELSE, 63 CONDITIONAL_UNTERMINATED, 64 CONDITIONAL_UNEXPECTED_TOKEN, 65 INVALID_EXTENSION_NAME, 66 INVALID_EXTENSION_BEHAVIOR, 67 INVALID_EXTENSION_DIRECTIVE, 68 INVALID_VERSION_NUMBER, 69 INVALID_VERSION_DIRECTIVE, 70 VERSION_NOT_FIRST_STATEMENT, 71 INVALID_LINE_NUMBER, 72 INVALID_FILE_NUMBER, 73 INVALID_LINE_DIRECTIVE, 74 UNDEFINED_IDENTIFIER, 75 ERROR_END, 76 77 WARNING_BEGIN, 78 EOF_IN_DIRECTIVE, 79 UNRECOGNIZED_PRAGMA, 80 WARNING_END 81 }; 82 83 virtual ~Diagnostics(); 84 85 void report(ID id, const SourceLocation& loc, const std::string& text); 86 87 protected: 88 Severity severity(ID id); 89 std::string message(ID id); 90 91 virtual void print(ID id, 92 const SourceLocation& loc, 93 const std::string& text) = 0; 94 }; 95 96 } // namespace pp 97 #endif // COMPILER_PREPROCESSOR_DIAGNOSTICS_H_ 98