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