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 |