Line data Source code
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_DIAGNOSTICSBASE_H_
8 : #define COMPILER_PREPROCESSOR_DIAGNOSTICSBASE_H_
9 :
10 : #include <string>
11 :
12 : namespace pp
13 : {
14 :
15 : struct SourceLocation;
16 :
17 : // Base class for reporting diagnostic messages.
18 : // Derived classes are responsible for formatting and printing the messages.
19 0 : class Diagnostics
20 : {
21 : public:
22 : enum Severity
23 : {
24 : PP_ERROR,
25 : PP_WARNING
26 : };
27 : enum ID
28 : {
29 : PP_ERROR_BEGIN,
30 : PP_INTERNAL_ERROR,
31 : PP_OUT_OF_MEMORY,
32 : PP_INVALID_CHARACTER,
33 : PP_INVALID_NUMBER,
34 : PP_INTEGER_OVERFLOW,
35 : PP_FLOAT_OVERFLOW,
36 : PP_TOKEN_TOO_LONG,
37 : PP_INVALID_EXPRESSION,
38 : PP_DIVISION_BY_ZERO,
39 : PP_EOF_IN_COMMENT,
40 : PP_UNEXPECTED_TOKEN,
41 : PP_DIRECTIVE_INVALID_NAME,
42 : PP_MACRO_NAME_RESERVED,
43 : PP_MACRO_REDEFINED,
44 : PP_MACRO_PREDEFINED_REDEFINED,
45 : PP_MACRO_PREDEFINED_UNDEFINED,
46 : PP_MACRO_UNTERMINATED_INVOCATION,
47 : PP_MACRO_UNDEFINED_WHILE_INVOKED,
48 : PP_MACRO_TOO_FEW_ARGS,
49 : PP_MACRO_TOO_MANY_ARGS,
50 : PP_MACRO_DUPLICATE_PARAMETER_NAMES,
51 : PP_MACRO_INVOCATION_CHAIN_TOO_DEEP,
52 : PP_CONDITIONAL_ENDIF_WITHOUT_IF,
53 : PP_CONDITIONAL_ELSE_WITHOUT_IF,
54 : PP_CONDITIONAL_ELSE_AFTER_ELSE,
55 : PP_CONDITIONAL_ELIF_WITHOUT_IF,
56 : PP_CONDITIONAL_ELIF_AFTER_ELSE,
57 : PP_CONDITIONAL_UNTERMINATED,
58 : PP_CONDITIONAL_UNEXPECTED_TOKEN,
59 : PP_INVALID_EXTENSION_NAME,
60 : PP_INVALID_EXTENSION_BEHAVIOR,
61 : PP_INVALID_EXTENSION_DIRECTIVE,
62 : PP_INVALID_VERSION_NUMBER,
63 : PP_INVALID_VERSION_DIRECTIVE,
64 : PP_VERSION_NOT_FIRST_STATEMENT,
65 : PP_VERSION_NOT_FIRST_LINE_ESSL3,
66 : PP_INVALID_LINE_NUMBER,
67 : PP_INVALID_FILE_NUMBER,
68 : PP_INVALID_LINE_DIRECTIVE,
69 : PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL3,
70 : PP_UNDEFINED_SHIFT,
71 : PP_ERROR_END,
72 :
73 : PP_WARNING_BEGIN,
74 : PP_EOF_IN_DIRECTIVE,
75 : PP_UNRECOGNIZED_PRAGMA,
76 : PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL1,
77 : PP_WARNING_MACRO_NAME_RESERVED,
78 : PP_WARNING_END
79 : };
80 :
81 : virtual ~Diagnostics();
82 :
83 : void report(ID id, const SourceLocation &loc, const std::string &text);
84 :
85 : protected:
86 : Severity severity(ID id);
87 : std::string message(ID id);
88 :
89 : virtual void print(ID id,
90 : const SourceLocation &loc,
91 : const std::string &text) = 0;
92 : };
93 :
94 : } // namespace pp
95 :
96 : #endif // COMPILER_PREPROCESSOR_DIAGNOSTICSBASE_H_
|