Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line | 
|---|---|---|---|
| 14 | pmbaty | 1 | //===- llvm/Support/Errc.h - Defines the llvm::errc enum --------*- C++ -*-===// | 
| 2 | // | ||
| 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
| 4 | // See https://llvm.org/LICENSE.txt for license information. | ||
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
| 6 | // | ||
| 7 | //===----------------------------------------------------------------------===// | ||
| 8 | // | ||
| 9 | // While std::error_code works OK on all platforms we use, there are some | ||
| 10 | // some problems with std::errc that can be avoided by using our own | ||
| 11 | // enumeration: | ||
| 12 | // | ||
| 13 | // * std::errc is a namespace in some implementations. That means that ADL | ||
| 14 | //   doesn't work and it is sometimes necessary to write std::make_error_code | ||
| 15 | //   or in templates: | ||
| 16 | //   using std::make_error_code; | ||
| 17 | //   make_error_code(...); | ||
| 18 | // | ||
| 19 | //   with this enum it is safe to always just use make_error_code. | ||
| 20 | // | ||
| 21 | // * Some implementations define fewer names than others. This header has | ||
| 22 | //   the intersection of all the ones we support. | ||
| 23 | // | ||
| 24 | // * std::errc is just marked with is_error_condition_enum. This means that | ||
| 25 | //   common patterns like AnErrorCode == errc::no_such_file_or_directory take | ||
| 26 | //   4 virtual calls instead of two comparisons. | ||
| 27 | //===----------------------------------------------------------------------===// | ||
| 28 | |||
| 29 | #ifndef LLVM_SUPPORT_ERRC_H | ||
| 30 | #define LLVM_SUPPORT_ERRC_H | ||
| 31 | |||
| 32 | #include <system_error> | ||
| 33 | |||
| 34 | namespace llvm { | ||
| 35 | enum class errc { | ||
| 36 | argument_list_too_long = int(std::errc::argument_list_too_long), | ||
| 37 | argument_out_of_domain = int(std::errc::argument_out_of_domain), | ||
| 38 | bad_address = int(std::errc::bad_address), | ||
| 39 | bad_file_descriptor = int(std::errc::bad_file_descriptor), | ||
| 40 | broken_pipe = int(std::errc::broken_pipe), | ||
| 41 | device_or_resource_busy = int(std::errc::device_or_resource_busy), | ||
| 42 | directory_not_empty = int(std::errc::directory_not_empty), | ||
| 43 | executable_format_error = int(std::errc::executable_format_error), | ||
| 44 | file_exists = int(std::errc::file_exists), | ||
| 45 | file_too_large = int(std::errc::file_too_large), | ||
| 46 | filename_too_long = int(std::errc::filename_too_long), | ||
| 47 | function_not_supported = int(std::errc::function_not_supported), | ||
| 48 | illegal_byte_sequence = int(std::errc::illegal_byte_sequence), | ||
| 49 |   inappropriate_io_control_operation = | ||
| 50 | int(std::errc::inappropriate_io_control_operation), | ||
| 51 | interrupted = int(std::errc::interrupted), | ||
| 52 | invalid_argument = int(std::errc::invalid_argument), | ||
| 53 | invalid_seek = int(std::errc::invalid_seek), | ||
| 54 | io_error = int(std::errc::io_error), | ||
| 55 | is_a_directory = int(std::errc::is_a_directory), | ||
| 56 | no_child_process = int(std::errc::no_child_process), | ||
| 57 | no_lock_available = int(std::errc::no_lock_available), | ||
| 58 | no_space_on_device = int(std::errc::no_space_on_device), | ||
| 59 | no_such_device_or_address = int(std::errc::no_such_device_or_address), | ||
| 60 | no_such_device = int(std::errc::no_such_device), | ||
| 61 | no_such_file_or_directory = int(std::errc::no_such_file_or_directory), | ||
| 62 | no_such_process = int(std::errc::no_such_process), | ||
| 63 | not_a_directory = int(std::errc::not_a_directory), | ||
| 64 | not_enough_memory = int(std::errc::not_enough_memory), | ||
| 65 | not_supported = int(std::errc::not_supported), | ||
| 66 | operation_not_permitted = int(std::errc::operation_not_permitted), | ||
| 67 | permission_denied = int(std::errc::permission_denied), | ||
| 68 | read_only_file_system = int(std::errc::read_only_file_system), | ||
| 69 | resource_deadlock_would_occur = int(std::errc::resource_deadlock_would_occur), | ||
| 70 |   resource_unavailable_try_again = | ||
| 71 | int(std::errc::resource_unavailable_try_again), | ||
| 72 | result_out_of_range = int(std::errc::result_out_of_range), | ||
| 73 | too_many_files_open_in_system = int(std::errc::too_many_files_open_in_system), | ||
| 74 | too_many_files_open = int(std::errc::too_many_files_open), | ||
| 75 | too_many_links = int(std::errc::too_many_links) | ||
| 76 | }; | ||
| 77 | |||
| 78 | inline std::error_code make_error_code(errc E) { | ||
| 79 | return std::error_code(static_cast<int>(E), std::generic_category()); | ||
| 80 | } | ||
| 81 | } | ||
| 82 | |||
| 83 | namespace std { | ||
| 84 | template <> struct is_error_code_enum<llvm::errc> : std::true_type {}; | ||
| 85 | } | ||
| 86 | #endif |