1 // 2 // Copyright 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 #include "compiler/preprocessor/DiagnosticsBase.h" 8 9 #include "common/debug.h" 10 11 namespace angle 12 { 13 14 namespace pp 15 { 16 ~Diagnostics()17Diagnostics::~Diagnostics() {} 18 report(ID id,const SourceLocation & loc,const std::string & text)19void Diagnostics::report(ID id, const SourceLocation &loc, const std::string &text) 20 { 21 print(id, loc, text); 22 } 23 isError(ID id)24bool Diagnostics::isError(ID id) 25 { 26 if ((id > PP_ERROR_BEGIN) && (id < PP_ERROR_END)) 27 return true; 28 29 if ((id > PP_WARNING_BEGIN) && (id < PP_WARNING_END)) 30 return false; 31 32 UNREACHABLE(); 33 return true; 34 } 35 message(ID id)36const char *Diagnostics::message(ID id) 37 { 38 switch (id) 39 { 40 // Errors begin. 41 case PP_INTERNAL_ERROR: 42 return "internal error"; 43 case PP_OUT_OF_MEMORY: 44 return "out of memory"; 45 case PP_INVALID_CHARACTER: 46 return "invalid character"; 47 case PP_INVALID_NUMBER: 48 return "invalid number"; 49 case PP_INTEGER_OVERFLOW: 50 return "integer overflow"; 51 case PP_FLOAT_OVERFLOW: 52 return "float overflow"; 53 case PP_TOKEN_TOO_LONG: 54 return "token too long"; 55 case PP_INVALID_EXPRESSION: 56 return "invalid expression"; 57 case PP_DIVISION_BY_ZERO: 58 return "division by zero"; 59 case PP_EOF_IN_COMMENT: 60 return "unexpected end of file found in comment"; 61 case PP_UNEXPECTED_TOKEN: 62 return "unexpected token"; 63 case PP_DIRECTIVE_INVALID_NAME: 64 return "invalid directive name"; 65 case PP_MACRO_NAME_RESERVED: 66 return "macro name is reserved"; 67 case PP_MACRO_REDEFINED: 68 return "macro redefined"; 69 case PP_MACRO_PREDEFINED_REDEFINED: 70 return "predefined macro redefined"; 71 case PP_MACRO_PREDEFINED_UNDEFINED: 72 return "predefined macro undefined"; 73 case PP_MACRO_UNTERMINATED_INVOCATION: 74 return "unterminated macro invocation"; 75 case PP_MACRO_UNDEFINED_WHILE_INVOKED: 76 return "macro undefined while being invoked"; 77 case PP_MACRO_TOO_FEW_ARGS: 78 return "Not enough arguments for macro"; 79 case PP_MACRO_TOO_MANY_ARGS: 80 return "Too many arguments for macro"; 81 case PP_MACRO_DUPLICATE_PARAMETER_NAMES: 82 return "duplicate macro parameter name"; 83 case PP_MACRO_INVOCATION_CHAIN_TOO_DEEP: 84 return "macro invocation chain too deep"; 85 case PP_CONDITIONAL_ENDIF_WITHOUT_IF: 86 return "unexpected #endif found without a matching #if"; 87 case PP_CONDITIONAL_ELSE_WITHOUT_IF: 88 return "unexpected #else found without a matching #if"; 89 case PP_CONDITIONAL_ELSE_AFTER_ELSE: 90 return "unexpected #else found after another #else"; 91 case PP_CONDITIONAL_ELIF_WITHOUT_IF: 92 return "unexpected #elif found without a matching #if"; 93 case PP_CONDITIONAL_ELIF_AFTER_ELSE: 94 return "unexpected #elif found after #else"; 95 case PP_CONDITIONAL_UNTERMINATED: 96 return "unexpected end of file found in conditional block"; 97 case PP_INVALID_EXTENSION_NAME: 98 return "invalid extension name"; 99 case PP_INVALID_EXTENSION_BEHAVIOR: 100 return "invalid extension behavior"; 101 case PP_INVALID_EXTENSION_DIRECTIVE: 102 return "invalid extension directive"; 103 case PP_INVALID_VERSION_NUMBER: 104 return "invalid version number"; 105 case PP_INVALID_VERSION_DIRECTIVE: 106 return "invalid version directive"; 107 case PP_VERSION_NOT_FIRST_STATEMENT: 108 return "#version directive must occur before anything else, " 109 "except for comments and white space"; 110 case PP_VERSION_NOT_FIRST_LINE_ESSL3: 111 return "#version directive must occur on the first line of the shader"; 112 case PP_INVALID_LINE_NUMBER: 113 return "invalid line number"; 114 case PP_INVALID_FILE_NUMBER: 115 return "invalid file number"; 116 case PP_INVALID_LINE_DIRECTIVE: 117 return "invalid line directive"; 118 case PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL1: 119 return "extension directive must occur before any non-preprocessor tokens in ESSL1"; 120 case PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL3: 121 return "extension directive must occur before any non-preprocessor tokens in ESSL3"; 122 case PP_UNDEFINED_SHIFT: 123 return "shift exponent is negative or undefined"; 124 case PP_TOKENIZER_ERROR: 125 return "internal tokenizer error"; 126 // Errors end. 127 // Warnings begin. 128 case PP_EOF_IN_DIRECTIVE: 129 return "unexpected end of file found in directive"; 130 case PP_CONDITIONAL_UNEXPECTED_TOKEN: 131 return "unexpected token after conditional expression"; 132 case PP_UNRECOGNIZED_PRAGMA: 133 return "unrecognized pragma"; 134 case PP_NON_PP_TOKEN_BEFORE_EXTENSION_WEBGL: 135 return "extension directive should occur before any non-preprocessor tokens"; 136 case PP_WARNING_MACRO_NAME_RESERVED: 137 return "macro name with a double underscore is reserved - unintented behavior is " 138 "possible"; 139 // Warnings end. 140 default: 141 UNREACHABLE(); 142 return ""; 143 } 144 } 145 146 } // namespace pp 147 148 } // namespace angle 149