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