12c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org//
22c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
32c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org// Use of this source code is governed by a BSD-style license that can be
42c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org// found in the LICENSE file.
52c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org//
62c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
72c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org#ifndef COMPILER_PREPROCESSOR_DIAGNOSTICS_H_
82c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org#define COMPILER_PREPROCESSOR_DIAGNOSTICS_H_
92c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
102c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org#include <string>
112c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
122c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.orgnamespace pp
132c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org{
142c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
152c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.orgstruct SourceLocation;
162c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
172c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org// Base class for reporting diagnostic messages.
182c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org// Derived classes are responsible for formatting and printing the messages.
192c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.orgclass Diagnostics
202c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org{
212c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org  public:
2246aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org    enum Severity
2346aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org    {
2446aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org        ERROR,
2546aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org        WARNING
2646aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org    };
272c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org    enum ID
282c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org    {
292c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        ERROR_BEGIN,
302c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        INTERNAL_ERROR,
312c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        OUT_OF_MEMORY,
322c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        INVALID_CHARACTER,
332c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        INVALID_NUMBER,
342e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org        INTEGER_OVERFLOW,
352e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org        FLOAT_OVERFLOW,
36c022c3affcb88e1dd5b746c5db1d171feac0f081alokp@chromium.org        TOKEN_TOO_LONG,
372c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        INVALID_EXPRESSION,
382c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        DIVISION_BY_ZERO,
392c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        EOF_IN_COMMENT,
40e5dfefad46f2391500ee9168ee83bf98b258f240alokp@chromium.org        UNEXPECTED_TOKEN,
41d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org        DIRECTIVE_INVALID_NAME,
4298d04ec8e2db023e04818c4af97b5e613af3f55calokp@chromium.org        MACRO_NAME_RESERVED,
4398d04ec8e2db023e04818c4af97b5e613af3f55calokp@chromium.org        MACRO_REDEFINED,
44f3cdb460d1dde723815eecd006274a3da5d81099alokp@chromium.org        MACRO_PREDEFINED_REDEFINED,
45f3cdb460d1dde723815eecd006274a3da5d81099alokp@chromium.org        MACRO_PREDEFINED_UNDEFINED,
467fc38dddd2f5b6349348230475ca359666af583aalokp@chromium.org        MACRO_UNTERMINATED_INVOCATION,
477fc38dddd2f5b6349348230475ca359666af583aalokp@chromium.org        MACRO_TOO_FEW_ARGS,
487fc38dddd2f5b6349348230475ca359666af583aalokp@chromium.org        MACRO_TOO_MANY_ARGS,
49d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org        CONDITIONAL_ENDIF_WITHOUT_IF,
50d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org        CONDITIONAL_ELSE_WITHOUT_IF,
51d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org        CONDITIONAL_ELSE_AFTER_ELSE,
52d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org        CONDITIONAL_ELIF_WITHOUT_IF,
53d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org        CONDITIONAL_ELIF_AFTER_ELSE,
54d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org        CONDITIONAL_UNTERMINATED,
557c884540ad7607a772b13b2ca7bc8f6b21574946alokp@chromium.org        INVALID_EXTENSION_NAME,
567c884540ad7607a772b13b2ca7bc8f6b21574946alokp@chromium.org        INVALID_EXTENSION_BEHAVIOR,
577c884540ad7607a772b13b2ca7bc8f6b21574946alokp@chromium.org        INVALID_EXTENSION_DIRECTIVE,
587c884540ad7607a772b13b2ca7bc8f6b21574946alokp@chromium.org        INVALID_VERSION_NUMBER,
597c884540ad7607a772b13b2ca7bc8f6b21574946alokp@chromium.org        INVALID_VERSION_DIRECTIVE,
60d0d9f87ac02955ae496b5cc51d5dffb693b31a87alokp@chromium.org        VERSION_NOT_FIRST_STATEMENT,
6146aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org        INVALID_LINE_NUMBER,
6246aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org        INVALID_FILE_NUMBER,
6346aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org        INVALID_LINE_DIRECTIVE,
642c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        ERROR_END,
652c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
662c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        WARNING_BEGIN,
67390209aee7a0f027e772ec13950b7e6b8ef59dadalokp@chromium.org        EOF_IN_DIRECTIVE,
68d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org        CONDITIONAL_UNEXPECTED_TOKEN,
6936124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org        UNRECOGNIZED_PRAGMA,
702c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org        WARNING_END
712c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org    };
722c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
73964b7194a38a2b04e2b483dc5a8c12426b1a202falokp@chromium.org    virtual ~Diagnostics();
74964b7194a38a2b04e2b483dc5a8c12426b1a202falokp@chromium.org
752c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org    void report(ID id, const SourceLocation& loc, const std::string& text);
762c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
772c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org  protected:
782c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org    Severity severity(ID id);
796b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org    std::string message(ID id);
802c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
812c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org    virtual void print(ID id,
822c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org                       const SourceLocation& loc,
832c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org                       const std::string& text) = 0;
842c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org};
852c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
862c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org}  // namespace pp
872c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org#endif  // COMPILER_PREPROCESSOR_DIAGNOSTICS_H_
88