xref: /llvm-project/llvm/tools/llvm-cxxdump/Error.cpp (revision 856a07e47ab2fef96c2e32fd28927044dbf90a19)
1e5bf4892SAaron Ballman //===- Error.cpp - system_error extensions for llvm-cxxdump -----*- C++ -*-===//
2f45bbd0dSDavid Majnemer //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6f45bbd0dSDavid Majnemer //
7f45bbd0dSDavid Majnemer //===----------------------------------------------------------------------===//
8f45bbd0dSDavid Majnemer //
9f45bbd0dSDavid Majnemer // This defines a new error_category for the llvm-cxxdump tool.
10f45bbd0dSDavid Majnemer //
11f45bbd0dSDavid Majnemer //===----------------------------------------------------------------------===//
12f45bbd0dSDavid Majnemer 
13f45bbd0dSDavid Majnemer #include "Error.h"
14f45bbd0dSDavid Majnemer #include "llvm/Support/ErrorHandling.h"
15*856a07e4SQiongsi Wu #include <string>
16f45bbd0dSDavid Majnemer 
17f45bbd0dSDavid Majnemer using namespace llvm;
18f45bbd0dSDavid Majnemer 
19f45bbd0dSDavid Majnemer namespace {
204718f8b5SPeter Collingbourne // FIXME: This class is only here to support the transition to llvm::Error. It
214718f8b5SPeter Collingbourne // will be removed once this transition is complete. Clients should prefer to
224718f8b5SPeter Collingbourne // deal with the Error value directly, rather than converting to error_code.
23f45bbd0dSDavid Majnemer class cxxdump_error_category : public std::error_category {
24f45bbd0dSDavid Majnemer public:
name() const25990504e6SReid Kleckner   const char *name() const noexcept override { return "llvm.cxxdump"; }
message(int ev) const26f45bbd0dSDavid Majnemer   std::string message(int ev) const override {
27f45bbd0dSDavid Majnemer     switch (static_cast<cxxdump_error>(ev)) {
28f45bbd0dSDavid Majnemer     case cxxdump_error::success:
29f45bbd0dSDavid Majnemer       return "Success";
30f45bbd0dSDavid Majnemer     case cxxdump_error::file_not_found:
31f45bbd0dSDavid Majnemer       return "No such file.";
32f45bbd0dSDavid Majnemer     case cxxdump_error::unrecognized_file_format:
33f45bbd0dSDavid Majnemer       return "Unrecognized file type.";
34f45bbd0dSDavid Majnemer     }
35f45bbd0dSDavid Majnemer     llvm_unreachable(
36f45bbd0dSDavid Majnemer         "An enumerator of cxxdump_error does not have a message defined.");
37f45bbd0dSDavid Majnemer   }
38f45bbd0dSDavid Majnemer };
39f45bbd0dSDavid Majnemer } // namespace
40f45bbd0dSDavid Majnemer 
41f45bbd0dSDavid Majnemer namespace llvm {
cxxdump_category()42f45bbd0dSDavid Majnemer const std::error_category &cxxdump_category() {
43f45bbd0dSDavid Majnemer   static cxxdump_error_category o;
44f45bbd0dSDavid Majnemer   return o;
45f45bbd0dSDavid Majnemer }
46f45bbd0dSDavid Majnemer } // namespace llvm
47