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 7b3077d086b365b1d54c3d755df19c6f8f349a562daniel@transgaming.com#include "DiagnosticsBase.h" 82c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 92c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org#include <cassert> 102c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 112c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.orgnamespace pp 122c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org{ 132c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 14964b7194a38a2b04e2b483dc5a8c12426b1a202falokp@chromium.orgDiagnostics::~Diagnostics() 15964b7194a38a2b04e2b483dc5a8c12426b1a202falokp@chromium.org{ 16964b7194a38a2b04e2b483dc5a8c12426b1a202falokp@chromium.org} 17964b7194a38a2b04e2b483dc5a8c12426b1a202falokp@chromium.org 182c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.orgvoid Diagnostics::report(ID id, 19d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo const SourceLocation &loc, 20d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo const std::string &text) 212c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org{ 222c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org // TODO(alokp): Keep a count of errors and warnings. 232c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org print(id, loc, text); 242c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org} 252c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 262c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.orgDiagnostics::Severity Diagnostics::severity(ID id) 272c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org{ 287f2d7945ee702241829727751bd4c7424662b225Shannon Woods if ((id > PP_ERROR_BEGIN) && (id < PP_ERROR_END)) 297f2d7945ee702241829727751bd4c7424662b225Shannon Woods return PP_ERROR; 302c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 317f2d7945ee702241829727751bd4c7424662b225Shannon Woods if ((id > PP_WARNING_BEGIN) && (id < PP_WARNING_END)) 327f2d7945ee702241829727751bd4c7424662b225Shannon Woods return PP_WARNING; 332c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 342c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org assert(false); 357f2d7945ee702241829727751bd4c7424662b225Shannon Woods return PP_ERROR; 362c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org} 372c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 386b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.orgstd::string Diagnostics::message(ID id) 396b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org{ 406b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org switch (id) 416b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org { 426b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org // Errors begin. 437f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INTERNAL_ERROR: 44d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "internal error"; 457f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_OUT_OF_MEMORY: 46d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "out of memory"; 477f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_CHARACTER: 48d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid character"; 497f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_NUMBER: 50d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid number"; 517f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INTEGER_OVERFLOW: 52d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "integer overflow"; 537f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_FLOAT_OVERFLOW: 54d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "float overflow"; 557f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_TOKEN_TOO_LONG: 56d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "token too long"; 577f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_EXPRESSION: 58d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid expression"; 597f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_DIVISION_BY_ZERO: 60d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "division by zero"; 617f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_EOF_IN_COMMENT: 62d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unexpected end of file found in comment"; 637f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_UNEXPECTED_TOKEN: 64d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unexpected token"; 657f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_DIRECTIVE_INVALID_NAME: 66d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid directive name"; 677f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_MACRO_NAME_RESERVED: 68d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "macro name is reserved"; 697f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_MACRO_REDEFINED: 70d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "macro redefined"; 717f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_MACRO_PREDEFINED_REDEFINED: 72d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "predefined macro redefined"; 737f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_MACRO_PREDEFINED_UNDEFINED: 74d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "predefined macro undefined"; 757f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_MACRO_UNTERMINATED_INVOCATION: 76d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unterminated macro invocation"; 777f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_MACRO_TOO_FEW_ARGS: 78d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "Not enough arguments for macro"; 797f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_MACRO_TOO_MANY_ARGS: 80d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "Too many arguments for macro"; 817f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_CONDITIONAL_ENDIF_WITHOUT_IF: 82d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unexpected #endif found without a matching #if"; 837f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_CONDITIONAL_ELSE_WITHOUT_IF: 84d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unexpected #else found without a matching #if"; 857f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_CONDITIONAL_ELSE_AFTER_ELSE: 86d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unexpected #else found after another #else"; 877f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_CONDITIONAL_ELIF_WITHOUT_IF: 88d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unexpected #elif found without a matching #if"; 897f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_CONDITIONAL_ELIF_AFTER_ELSE: 90d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unexpected #elif found after #else"; 917f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_CONDITIONAL_UNTERMINATED: 92d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unexpected end of file found in conditional block"; 937f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_EXTENSION_NAME: 94d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid extension name"; 957f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_EXTENSION_BEHAVIOR: 96d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid extension behavior"; 977f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_EXTENSION_DIRECTIVE: 98d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid extension directive"; 997f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_VERSION_NUMBER: 100d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid version number"; 1017f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_VERSION_DIRECTIVE: 102d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid version directive"; 1037f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_VERSION_NOT_FIRST_STATEMENT: 104d0d9f87ac02955ae496b5cc51d5dffb693b31a87alokp@chromium.org return "#version directive must occur before anything else, " 105d0d9f87ac02955ae496b5cc51d5dffb693b31a87alokp@chromium.org "except for comments and white space"; 1067f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_LINE_NUMBER: 107d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid line number"; 1087f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_FILE_NUMBER: 109d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid file number"; 1107f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_INVALID_LINE_DIRECTIVE: 111d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "invalid line directive"; 1126b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org // Errors end. 1136b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org // Warnings begin. 1147f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_EOF_IN_DIRECTIVE: 115d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unexpected end of file found in directive"; 1167f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_CONDITIONAL_UNEXPECTED_TOKEN: 117d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unexpected token after conditional expression"; 1187f2d7945ee702241829727751bd4c7424662b225Shannon Woods case PP_UNRECOGNIZED_PRAGMA: 119d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return "unrecognized pragma"; 1206b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org // Warnings end. 1216b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org default: 122d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo assert(false); 123d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo return ""; 1246b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org } 1256b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org} 1266b495719afd7d340dadc7440ed55e21732dd92d3alokp@chromium.org 1272c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org} // namespace pp 128