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    {
247f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_ERROR,
257f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_WARNING
2646aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org    };
272c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org    enum ID
282c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org    {
297f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_ERROR_BEGIN,
307f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INTERNAL_ERROR,
317f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_OUT_OF_MEMORY,
327f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_CHARACTER,
337f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_NUMBER,
347f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INTEGER_OVERFLOW,
357f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_FLOAT_OVERFLOW,
367f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_TOKEN_TOO_LONG,
377f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_EXPRESSION,
387f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_DIVISION_BY_ZERO,
397f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_EOF_IN_COMMENT,
407f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_UNEXPECTED_TOKEN,
417f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_DIRECTIVE_INVALID_NAME,
427f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_MACRO_NAME_RESERVED,
437f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_MACRO_REDEFINED,
447f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_MACRO_PREDEFINED_REDEFINED,
457f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_MACRO_PREDEFINED_UNDEFINED,
467f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_MACRO_UNTERMINATED_INVOCATION,
477f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_MACRO_TOO_FEW_ARGS,
487f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_MACRO_TOO_MANY_ARGS,
497f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_CONDITIONAL_ENDIF_WITHOUT_IF,
507f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_CONDITIONAL_ELSE_WITHOUT_IF,
517f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_CONDITIONAL_ELSE_AFTER_ELSE,
527f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_CONDITIONAL_ELIF_WITHOUT_IF,
537f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_CONDITIONAL_ELIF_AFTER_ELSE,
547f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_CONDITIONAL_UNTERMINATED,
557f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_EXTENSION_NAME,
567f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_EXTENSION_BEHAVIOR,
577f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_EXTENSION_DIRECTIVE,
587f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_VERSION_NUMBER,
597f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_VERSION_DIRECTIVE,
607f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_VERSION_NOT_FIRST_STATEMENT,
617f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_LINE_NUMBER,
627f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_FILE_NUMBER,
637f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_INVALID_LINE_DIRECTIVE,
647f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_ERROR_END,
652c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
667f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_WARNING_BEGIN,
677f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_EOF_IN_DIRECTIVE,
687f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_CONDITIONAL_UNEXPECTED_TOKEN,
697f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_UNRECOGNIZED_PRAGMA,
707f2d7945ee702241829727751bd4c7424662b225Shannon Woods        PP_WARNING_END
712c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org    };
722c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org
73964b7194a38a2b04e2b483dc5a8c12426b1a202falokp@chromium.org    virtual ~Diagnostics();
74964b7194a38a2b04e2b483dc5a8c12426b1a202falokp@chromium.org
75d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    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,
82d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo                       const SourceLocation &loc,
83d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo                       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