blob: 0c2da1b9f035d17a306682d074307e2e13d64c56 [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
Geoff Lang0a73dd82014-11-19 16:18:08 -05007#ifndef COMPILER_PREPROCESSOR_DIAGNOSTICSBASE_H_
8#define COMPILER_PREPROCESSOR_DIAGNOSTICSBASE_H_
alokp@chromium.org2c958ee2012-05-17 20:35:42 +00009
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:
22 enum ID
23 {
Shannon Woods7f2d7942013-11-19 15:07:58 -050024 PP_ERROR_BEGIN,
25 PP_INTERNAL_ERROR,
26 PP_OUT_OF_MEMORY,
27 PP_INVALID_CHARACTER,
28 PP_INVALID_NUMBER,
29 PP_INTEGER_OVERFLOW,
30 PP_FLOAT_OVERFLOW,
31 PP_TOKEN_TOO_LONG,
32 PP_INVALID_EXPRESSION,
33 PP_DIVISION_BY_ZERO,
34 PP_EOF_IN_COMMENT,
35 PP_UNEXPECTED_TOKEN,
36 PP_DIRECTIVE_INVALID_NAME,
37 PP_MACRO_NAME_RESERVED,
38 PP_MACRO_REDEFINED,
39 PP_MACRO_PREDEFINED_REDEFINED,
40 PP_MACRO_PREDEFINED_UNDEFINED,
41 PP_MACRO_UNTERMINATED_INVOCATION,
Corentin Wallezd2f195b2016-09-19 15:53:33 -040042 PP_MACRO_UNDEFINED_WHILE_INVOKED,
Shannon Woods7f2d7942013-11-19 15:07:58 -050043 PP_MACRO_TOO_FEW_ARGS,
44 PP_MACRO_TOO_MANY_ARGS,
Geoff Lang26be18d2015-04-27 14:05:57 -040045 PP_MACRO_DUPLICATE_PARAMETER_NAMES,
Olli Etuahof1cf5e62016-11-22 17:36:49 +000046 PP_MACRO_INVOCATION_CHAIN_TOO_DEEP,
Shannon Woods7f2d7942013-11-19 15:07:58 -050047 PP_CONDITIONAL_ENDIF_WITHOUT_IF,
48 PP_CONDITIONAL_ELSE_WITHOUT_IF,
49 PP_CONDITIONAL_ELSE_AFTER_ELSE,
50 PP_CONDITIONAL_ELIF_WITHOUT_IF,
51 PP_CONDITIONAL_ELIF_AFTER_ELSE,
52 PP_CONDITIONAL_UNTERMINATED,
Geoff Lang95a423d2015-04-28 11:09:45 -040053 PP_CONDITIONAL_UNEXPECTED_TOKEN,
Shannon Woods7f2d7942013-11-19 15:07:58 -050054 PP_INVALID_EXTENSION_NAME,
55 PP_INVALID_EXTENSION_BEHAVIOR,
56 PP_INVALID_EXTENSION_DIRECTIVE,
57 PP_INVALID_VERSION_NUMBER,
58 PP_INVALID_VERSION_DIRECTIVE,
59 PP_VERSION_NOT_FIRST_STATEMENT,
Olli Etuahoc378cd82015-05-25 15:21:44 +030060 PP_VERSION_NOT_FIRST_LINE_ESSL3,
Shannon Woods7f2d7942013-11-19 15:07:58 -050061 PP_INVALID_LINE_NUMBER,
62 PP_INVALID_FILE_NUMBER,
63 PP_INVALID_LINE_DIRECTIVE,
Geoff Langb3a6a8f2015-06-23 16:10:14 -040064 PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL3,
Jamie Madill461e3af2016-07-21 18:15:34 -040065 PP_UNDEFINED_SHIFT,
Shannon Woods7f2d7942013-11-19 15:07:58 -050066 PP_ERROR_END,
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000067
Shannon Woods7f2d7942013-11-19 15:07:58 -050068 PP_WARNING_BEGIN,
69 PP_EOF_IN_DIRECTIVE,
Shannon Woods7f2d7942013-11-19 15:07:58 -050070 PP_UNRECOGNIZED_PRAGMA,
Geoff Langb3a6a8f2015-06-23 16:10:14 -040071 PP_NON_PP_TOKEN_BEFORE_EXTENSION_ESSL1,
Olli Etuaho2f6ddf32015-09-22 16:10:07 +030072 PP_WARNING_MACRO_NAME_RESERVED,
Shannon Woods7f2d7942013-11-19 15:07:58 -050073 PP_WARNING_END
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000074 };
75
alokp@chromium.org964b7192012-05-17 21:12:27 +000076 virtual ~Diagnostics();
77
Zhenyao Mod526f982014-05-13 14:51:19 -070078 void report(ID id, const SourceLocation &loc, const std::string &text);
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000079
80 protected:
Olli Etuaho77ba4082016-12-16 12:01:18 +000081 bool isError(ID id);
82 const char *message(ID id);
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000083
Jamie Madillf832c9d2016-12-12 17:38:48 -050084 virtual void print(ID id, const SourceLocation &loc, const std::string &text) = 0;
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000085};
86
87} // namespace pp
Geoff Lang0a73dd82014-11-19 16:18:08 -050088
89#endif // COMPILER_PREPROCESSOR_DIAGNOSTICSBASE_H_