blob: 2c8c539137b96a7696151b3cf07c50a940742ba1 [file] [log] [blame]
alokp@chromium.org2c958ee2012-05-17 20:35:42 +00001//
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
12namespace pp
13{
14
15struct SourceLocation;
16
17// Base class for reporting diagnostic messages.
18// Derived classes are responsible for formatting and printing the messages.
19class Diagnostics
20{
21 public:
alokp@chromium.org46aa13d2012-06-15 15:40:27 +000022 enum Severity
23 {
Shannon Woods7f2d7942013-11-19 15:07:58 -050024 PP_ERROR,
25 PP_WARNING
alokp@chromium.org46aa13d2012-06-15 15:40:27 +000026 };
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000027 enum ID
28 {
Shannon Woods7f2d7942013-11-19 15:07:58 -050029 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_TOO_FEW_ARGS,
48 PP_MACRO_TOO_MANY_ARGS,
49 PP_CONDITIONAL_ENDIF_WITHOUT_IF,
50 PP_CONDITIONAL_ELSE_WITHOUT_IF,
51 PP_CONDITIONAL_ELSE_AFTER_ELSE,
52 PP_CONDITIONAL_ELIF_WITHOUT_IF,
53 PP_CONDITIONAL_ELIF_AFTER_ELSE,
54 PP_CONDITIONAL_UNTERMINATED,
55 PP_INVALID_EXTENSION_NAME,
56 PP_INVALID_EXTENSION_BEHAVIOR,
57 PP_INVALID_EXTENSION_DIRECTIVE,
58 PP_INVALID_VERSION_NUMBER,
59 PP_INVALID_VERSION_DIRECTIVE,
60 PP_VERSION_NOT_FIRST_STATEMENT,
61 PP_INVALID_LINE_NUMBER,
62 PP_INVALID_FILE_NUMBER,
63 PP_INVALID_LINE_DIRECTIVE,
64 PP_ERROR_END,
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000065
Shannon Woods7f2d7942013-11-19 15:07:58 -050066 PP_WARNING_BEGIN,
67 PP_EOF_IN_DIRECTIVE,
68 PP_CONDITIONAL_UNEXPECTED_TOKEN,
69 PP_UNRECOGNIZED_PRAGMA,
70 PP_WARNING_END
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000071 };
72
alokp@chromium.org964b7192012-05-17 21:12:27 +000073 virtual ~Diagnostics();
74
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000075 void report(ID id, const SourceLocation& loc, const std::string& text);
76
77 protected:
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000078 Severity severity(ID id);
alokp@chromium.org6b495712012-06-29 00:06:58 +000079 std::string message(ID id);
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000080
81 virtual void print(ID id,
82 const SourceLocation& loc,
83 const std::string& text) = 0;
84};
85
86} // namespace pp
87#endif // COMPILER_PREPROCESSOR_DIAGNOSTICS_H_