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 #include "Diagnostics.h"
16
17 #include <cassert>
18
19 namespace pp
20 {
21
~Diagnostics()22 Diagnostics::~Diagnostics()
23 {
24 }
25
report(ID id,const SourceLocation & loc,const std::string & text)26 void Diagnostics::report(ID id,
27 const SourceLocation& loc,
28 const std::string& text)
29 {
30 // TODO(alokp): Keep a count of errors and warnings.
31 print(id, loc, text);
32 }
33
severity(ID id)34 Diagnostics::Severity Diagnostics::severity(ID id)
35 {
36 if ((id > ERROR_BEGIN) && (id < ERROR_END))
37 return PP_ERROR;
38
39 if ((id > WARNING_BEGIN) && (id < WARNING_END))
40 return PP_WARNING;
41
42 assert(false);
43 return PP_ERROR;
44 }
45
message(ID id)46 std::string Diagnostics::message(ID id)
47 {
48 switch (id)
49 {
50 // Errors begin.
51 case INTERNAL_ERROR:
52 return "internal error";
53 case OUT_OF_MEMORY:
54 return "out of memory";
55 case INVALID_CHARACTER:
56 return "invalid character";
57 case INVALID_NUMBER:
58 return "invalid number";
59 case INTEGER_OVERFLOW:
60 return "integer overflow";
61 case FLOAT_OVERFLOW:
62 return "float overflow";
63 case TOKEN_TOO_LONG:
64 return "token too long";
65 case INVALID_EXPRESSION:
66 return "invalid expression";
67 case DIVISION_BY_ZERO:
68 return "division by zero";
69 case EOF_IN_COMMENT:
70 return "unexpected end of file found in comment";
71 case UNEXPECTED_TOKEN:
72 return "unexpected token";
73 case DIRECTIVE_INVALID_NAME:
74 return "invalid directive name";
75 case MACRO_NAME_RESERVED:
76 return "macro name is reserved";
77 case MACRO_REDEFINED:
78 return "macro redefined";
79 case MACRO_PREDEFINED_REDEFINED:
80 return "predefined macro redefined";
81 case MACRO_PREDEFINED_UNDEFINED:
82 return "predefined macro undefined";
83 case MACRO_UNTERMINATED_INVOCATION:
84 return "unterminated macro invocation";
85 case MACRO_TOO_FEW_ARGS:
86 return "Not enough arguments for macro";
87 case MACRO_TOO_MANY_ARGS:
88 return "Too many arguments for macro";
89 case MACRO_DUPLICATE_PARAMETER_NAMES:
90 return "duplicate macro parameter name";
91 case CONDITIONAL_ENDIF_WITHOUT_IF:
92 return "unexpected #endif found without a matching #if";
93 case CONDITIONAL_ELSE_WITHOUT_IF:
94 return "unexpected #else found without a matching #if";
95 case CONDITIONAL_ELSE_AFTER_ELSE:
96 return "unexpected #else found after another #else";
97 case CONDITIONAL_ELIF_WITHOUT_IF:
98 return "unexpected #elif found without a matching #if";
99 case CONDITIONAL_ELIF_AFTER_ELSE:
100 return "unexpected #elif found after #else";
101 case CONDITIONAL_UNTERMINATED:
102 return "unexpected end of file found in conditional block";
103 case INVALID_EXTENSION_NAME:
104 return "invalid extension name";
105 case INVALID_EXTENSION_BEHAVIOR:
106 return "invalid extension behavior";
107 case INVALID_EXTENSION_DIRECTIVE:
108 return "invalid extension directive";
109 case INVALID_VERSION_NUMBER:
110 return "invalid version number";
111 case INVALID_VERSION_DIRECTIVE:
112 return "invalid version directive";
113 case VERSION_NOT_FIRST_STATEMENT:
114 return "#version directive must occur before anything else, "
115 "except for comments and white space";
116 case INVALID_LINE_NUMBER:
117 return "invalid line number";
118 case INVALID_FILE_NUMBER:
119 return "invalid file number";
120 case INVALID_LINE_DIRECTIVE:
121 return "invalid line directive";
122 case UNDEFINED_IDENTIFIER:
123 return "undefined identifier";
124 // Errors end.
125 // Warnings begin.
126 case EOF_IN_DIRECTIVE:
127 return "unexpected end of file found in directive";
128 case CONDITIONAL_UNEXPECTED_TOKEN:
129 return "unexpected token after conditional expression";
130 case UNRECOGNIZED_PRAGMA:
131 return "unrecognized pragma";
132 // Warnings end.
133 default:
134 assert(false);
135 return "";
136 }
137 }
138
139 } // namespace pp
140