|
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 // Windows.h #defines ERROR. |
|
13 #ifdef ERROR |
|
14 #undef ERROR |
|
15 #endif |
|
16 |
|
17 namespace pp |
|
18 { |
|
19 |
|
20 struct SourceLocation; |
|
21 |
|
22 // Base class for reporting diagnostic messages. |
|
23 // Derived classes are responsible for formatting and printing the messages. |
|
24 class Diagnostics |
|
25 { |
|
26 public: |
|
27 enum Severity |
|
28 { |
|
29 ERROR, |
|
30 WARNING |
|
31 }; |
|
32 enum ID |
|
33 { |
|
34 ERROR_BEGIN, |
|
35 INTERNAL_ERROR, |
|
36 OUT_OF_MEMORY, |
|
37 INVALID_CHARACTER, |
|
38 INVALID_NUMBER, |
|
39 INTEGER_OVERFLOW, |
|
40 FLOAT_OVERFLOW, |
|
41 TOKEN_TOO_LONG, |
|
42 INVALID_EXPRESSION, |
|
43 DIVISION_BY_ZERO, |
|
44 EOF_IN_COMMENT, |
|
45 UNEXPECTED_TOKEN, |
|
46 DIRECTIVE_INVALID_NAME, |
|
47 MACRO_NAME_RESERVED, |
|
48 MACRO_REDEFINED, |
|
49 MACRO_PREDEFINED_REDEFINED, |
|
50 MACRO_PREDEFINED_UNDEFINED, |
|
51 MACRO_UNTERMINATED_INVOCATION, |
|
52 MACRO_TOO_FEW_ARGS, |
|
53 MACRO_TOO_MANY_ARGS, |
|
54 CONDITIONAL_ENDIF_WITHOUT_IF, |
|
55 CONDITIONAL_ELSE_WITHOUT_IF, |
|
56 CONDITIONAL_ELSE_AFTER_ELSE, |
|
57 CONDITIONAL_ELIF_WITHOUT_IF, |
|
58 CONDITIONAL_ELIF_AFTER_ELSE, |
|
59 CONDITIONAL_UNTERMINATED, |
|
60 INVALID_EXTENSION_NAME, |
|
61 INVALID_EXTENSION_BEHAVIOR, |
|
62 INVALID_EXTENSION_DIRECTIVE, |
|
63 INVALID_VERSION_NUMBER, |
|
64 INVALID_VERSION_DIRECTIVE, |
|
65 VERSION_NOT_FIRST_STATEMENT, |
|
66 INVALID_LINE_NUMBER, |
|
67 INVALID_FILE_NUMBER, |
|
68 INVALID_LINE_DIRECTIVE, |
|
69 ERROR_END, |
|
70 |
|
71 WARNING_BEGIN, |
|
72 EOF_IN_DIRECTIVE, |
|
73 CONDITIONAL_UNEXPECTED_TOKEN, |
|
74 UNRECOGNIZED_PRAGMA, |
|
75 WARNING_END |
|
76 }; |
|
77 |
|
78 virtual ~Diagnostics(); |
|
79 |
|
80 void report(ID id, const SourceLocation& loc, const std::string& text); |
|
81 |
|
82 protected: |
|
83 Severity severity(ID id); |
|
84 std::string message(ID id); |
|
85 |
|
86 virtual void print(ID id, |
|
87 const SourceLocation& loc, |
|
88 const std::string& text) = 0; |
|
89 }; |
|
90 |
|
91 } // namespace pp |
|
92 #endif // COMPILER_PREPROCESSOR_DIAGNOSTICS_H_ |