14c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar//===- Error.cxx - system_error extensions for llvm-cxxdump -----*- C++ -*-===//
237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//
337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//                     The LLVM Compiler Infrastructure
437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//
537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// This file is distributed under the University of Illinois Open Source
637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// License. See LICENSE.TXT for details.
737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//
837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===----------------------------------------------------------------------===//
937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//
104c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar// This defines a new error_category for the llvm-cxxdump tool.
1137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//
1237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===----------------------------------------------------------------------===//
1337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
1437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "Error.h"
1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "llvm/Support/ErrorHandling.h"
1637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
1737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesusing namespace llvm;
1837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
1937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesnamespace {
204c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarclass cxxdump_error_category : public std::error_category {
2137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinespublic:
224c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar  const char *name() const LLVM_NOEXCEPT override { return "llvm.cxxdump"; }
2337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  std::string message(int ev) const override {
244c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar    switch (static_cast<cxxdump_error>(ev)) {
254c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar    case cxxdump_error::success:
2637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines      return "Success";
274c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar    case cxxdump_error::file_not_found:
2837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines      return "No such file.";
294c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar    case cxxdump_error::unrecognized_file_format:
3037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines      return "Unrecognized file type.";
3137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    }
3237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines    llvm_unreachable(
334c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar        "An enumerator of cxxdump_error does not have a message defined.");
3437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  }
3537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines};
3637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} // namespace
3737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
3837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesnamespace llvm {
394c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarconst std::error_category &cxxdump_category() {
404c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar  static cxxdump_error_category o;
4137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  return o;
4237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines}
4337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} // namespace llvm
44