// | |
// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// | |
#include "Diagnostics.h" | |
#include <cassert> | |
namespace pp | |
{ | |
Diagnostics::~Diagnostics() | |
{ | |
} | |
void Diagnostics::report(ID id, | |
const SourceLocation& loc, | |
const std::string& text) | |
{ | |
// TODO(alokp): Keep a count of errors and warnings. | |
print(id, loc, text); | |
} | |
Diagnostics::Severity Diagnostics::severity(ID id) | |
{ | |
if ((id > ERROR_BEGIN) && (id < ERROR_END)) | |
return PP_ERROR; | |
if ((id > WARNING_BEGIN) && (id < WARNING_END)) | |
return PP_WARNING; | |
assert(false); | |
return PP_ERROR; | |
} | |
std::string Diagnostics::message(ID id) | |
{ | |
switch (id) | |
{ | |
// Errors begin. | |
case INTERNAL_ERROR: | |
return "internal error"; | |
case OUT_OF_MEMORY: | |
return "out of memory"; | |
case INVALID_CHARACTER: | |
return "invalid character"; | |
case INVALID_NUMBER: | |
return "invalid number"; | |
case INTEGER_OVERFLOW: | |
return "integer overflow"; | |
case FLOAT_OVERFLOW: | |
return "float overflow"; | |
case TOKEN_TOO_LONG: | |
return "token too long"; | |
case INVALID_EXPRESSION: | |
return "invalid expression"; | |
case DIVISION_BY_ZERO: | |
return "division by zero"; | |
case EOF_IN_COMMENT: | |
return "unexpected end of file found in comment"; | |
case UNEXPECTED_TOKEN: | |
return "unexpected token"; | |
case DIRECTIVE_INVALID_NAME: | |
return "invalid directive name"; | |
case MACRO_NAME_RESERVED: | |
return "macro name is reserved"; | |
case MACRO_REDEFINED: | |
return "macro redefined"; | |
case MACRO_PREDEFINED_REDEFINED: | |
return "predefined macro redefined"; | |
case MACRO_PREDEFINED_UNDEFINED: | |
return "predefined macro undefined"; | |
case MACRO_UNTERMINATED_INVOCATION: | |
return "unterminated macro invocation"; | |
case MACRO_TOO_FEW_ARGS: | |
return "Not enough arguments for macro"; | |
case MACRO_TOO_MANY_ARGS: | |
return "Too many arguments for macro"; | |
case CONDITIONAL_ENDIF_WITHOUT_IF: | |
return "unexpected #endif found without a matching #if"; | |
case CONDITIONAL_ELSE_WITHOUT_IF: | |
return "unexpected #else found without a matching #if"; | |
case CONDITIONAL_ELSE_AFTER_ELSE: | |
return "unexpected #else found after another #else"; | |
case CONDITIONAL_ELIF_WITHOUT_IF: | |
return "unexpected #elif found without a matching #if"; | |
case CONDITIONAL_ELIF_AFTER_ELSE: | |
return "unexpected #elif found after #else"; | |
case CONDITIONAL_UNTERMINATED: | |
return "unexpected end of file found in conditional block"; | |
case INVALID_EXTENSION_NAME: | |
return "invalid extension name"; | |
case INVALID_EXTENSION_BEHAVIOR: | |
return "invalid extension behavior"; | |
case INVALID_EXTENSION_DIRECTIVE: | |
return "invalid extension directive"; | |
case INVALID_VERSION_NUMBER: | |
return "invalid version number"; | |
case INVALID_VERSION_DIRECTIVE: | |
return "invalid version directive"; | |
case VERSION_NOT_FIRST_STATEMENT: | |
return "#version directive must occur before anything else, " | |
"except for comments and white space"; | |
case INVALID_LINE_NUMBER: | |
return "invalid line number"; | |
case INVALID_FILE_NUMBER: | |
return "invalid file number"; | |
case INVALID_LINE_DIRECTIVE: | |
return "invalid line directive"; | |
// Errors end. | |
// Warnings begin. | |
case EOF_IN_DIRECTIVE: | |
return "unexpected end of file found in directive"; | |
case CONDITIONAL_UNEXPECTED_TOKEN: | |
return "unexpected token after conditional expression"; | |
case UNRECOGNIZED_PRAGMA: | |
return "unrecognized pragma"; | |
// Warnings end. | |
default: | |
assert(false); | |
return ""; | |
} | |
} | |
} // namespace pp |