| // Copyright 2016 The SwiftShader Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #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 MACRO_DUPLICATE_PARAMETER_NAMES: |
| return "duplicate macro parameter name"; |
| 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"; |
| case UNDEFINED_IDENTIFIER: |
| return "undefined identifier"; |
| // 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 |