blob: 07bc41184642a3dc742ef4df46df2e44ee6e2649 [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 {
24 ERROR,
25 WARNING
26 };
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000027 enum ID
28 {
29 ERROR_BEGIN,
30 INTERNAL_ERROR,
31 OUT_OF_MEMORY,
32 INVALID_CHARACTER,
33 INVALID_NUMBER,
alokp@chromium.org2e818912012-06-29 21:26:03 +000034 INTEGER_OVERFLOW,
35 FLOAT_OVERFLOW,
alokp@chromium.orgc022c3a2012-07-09 15:56:42 +000036 TOKEN_TOO_LONG,
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000037 INVALID_EXPRESSION,
38 DIVISION_BY_ZERO,
39 EOF_IN_COMMENT,
alokp@chromium.orge5dfefa2012-05-24 19:29:37 +000040 UNEXPECTED_TOKEN,
alokp@chromium.orgd39ec4c2012-06-26 04:37:55 +000041 DIRECTIVE_INVALID_NAME,
alokp@chromium.org98d04ec2012-05-21 22:47:20 +000042 MACRO_NAME_RESERVED,
43 MACRO_REDEFINED,
alokp@chromium.orgf3cdb462012-06-19 18:39:48 +000044 MACRO_PREDEFINED_REDEFINED,
45 MACRO_PREDEFINED_UNDEFINED,
alokp@chromium.org7fc38dd2012-06-14 18:23:23 +000046 MACRO_UNTERMINATED_INVOCATION,
47 MACRO_TOO_FEW_ARGS,
48 MACRO_TOO_MANY_ARGS,
alokp@chromium.orgd39ec4c2012-06-26 04:37:55 +000049 CONDITIONAL_ENDIF_WITHOUT_IF,
50 CONDITIONAL_ELSE_WITHOUT_IF,
51 CONDITIONAL_ELSE_AFTER_ELSE,
52 CONDITIONAL_ELIF_WITHOUT_IF,
53 CONDITIONAL_ELIF_AFTER_ELSE,
54 CONDITIONAL_UNTERMINATED,
alokp@chromium.org7c884542012-05-24 19:13:03 +000055 INVALID_EXTENSION_NAME,
56 INVALID_EXTENSION_BEHAVIOR,
57 INVALID_EXTENSION_DIRECTIVE,
58 INVALID_VERSION_NUMBER,
59 INVALID_VERSION_DIRECTIVE,
alokp@chromium.orgd0d9f872012-07-03 16:06:40 +000060 VERSION_NOT_FIRST_STATEMENT,
alokp@chromium.org46aa13d2012-06-15 15:40:27 +000061 INVALID_LINE_NUMBER,
62 INVALID_FILE_NUMBER,
63 INVALID_LINE_DIRECTIVE,
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000064 ERROR_END,
65
66 WARNING_BEGIN,
alokp@chromium.org390209a2012-07-03 16:12:48 +000067 EOF_IN_DIRECTIVE,
alokp@chromium.orgd39ec4c2012-06-26 04:37:55 +000068 CONDITIONAL_UNEXPECTED_TOKEN,
alokp@chromium.org36124de82012-05-24 02:17:43 +000069 UNRECOGNIZED_PRAGMA,
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000070 WARNING_END
71 };
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_