Diagnostics.h revision d5c120b10c8429bf9bd0a7a668f1eb00760ca79f
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
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 Severity
23    {
24        PP_ERROR,
25        PP_WARNING
26    };
27    enum ID
28    {
29        ERROR_BEGIN,
30        INTERNAL_ERROR,
31        OUT_OF_MEMORY,
32        INVALID_CHARACTER,
33        INVALID_NUMBER,
34        INTEGER_OVERFLOW,
35        FLOAT_OVERFLOW,
36        TOKEN_TOO_LONG,
37        INVALID_EXPRESSION,
38        DIVISION_BY_ZERO,
39        EOF_IN_COMMENT,
40        UNEXPECTED_TOKEN,
41        DIRECTIVE_INVALID_NAME,
42        MACRO_NAME_RESERVED,
43        MACRO_REDEFINED,
44        MACRO_PREDEFINED_REDEFINED,
45        MACRO_PREDEFINED_UNDEFINED,
46        MACRO_UNTERMINATED_INVOCATION,
47        MACRO_TOO_FEW_ARGS,
48        MACRO_TOO_MANY_ARGS,
49        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,
55        INVALID_EXTENSION_NAME,
56        INVALID_EXTENSION_BEHAVIOR,
57        INVALID_EXTENSION_DIRECTIVE,
58        INVALID_VERSION_NUMBER,
59        INVALID_VERSION_DIRECTIVE,
60        VERSION_NOT_FIRST_STATEMENT,
61        INVALID_LINE_NUMBER,
62        INVALID_FILE_NUMBER,
63        INVALID_LINE_DIRECTIVE,
64		UNDEFINED_IDENTIFIER,
65        ERROR_END,
66
67        WARNING_BEGIN,
68        EOF_IN_DIRECTIVE,
69        CONDITIONAL_UNEXPECTED_TOKEN,
70        UNRECOGNIZED_PRAGMA,
71        WARNING_END
72    };
73
74    virtual ~Diagnostics();
75
76    void report(ID id, const SourceLocation& loc, const std::string& text);
77
78  protected:
79    Severity severity(ID id);
80    std::string message(ID id);
81
82    virtual void print(ID id,
83                       const SourceLocation& loc,
84                       const std::string& text) = 0;
85};
86
87}  // namespace pp
88#endif  // COMPILER_PREPROCESSOR_DIAGNOSTICS_H_
89