mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-02 02:32:27 +00:00
Upgrade to 2022-era LLVM LIBCXX
This commit is contained in:
parent
2f4ca71f26
commit
8e68384e15
2078 changed files with 165657 additions and 65010 deletions
217
third_party/libcxx/__system_error/errc.h
vendored
Normal file
217
third_party/libcxx/__system_error/errc.h
vendored
Normal file
|
@ -0,0 +1,217 @@
|
|||
// -*- C++ -*-
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef _LIBCPP___ERRC
|
||||
#define _LIBCPP___ERRC
|
||||
|
||||
/*
|
||||
system_error synopsis
|
||||
|
||||
namespace std
|
||||
{
|
||||
|
||||
enum class errc
|
||||
{
|
||||
address_family_not_supported, // EAFNOSUPPORT
|
||||
address_in_use, // EADDRINUSE
|
||||
address_not_available, // EADDRNOTAVAIL
|
||||
already_connected, // EISCONN
|
||||
argument_list_too_long, // E2BIG
|
||||
argument_out_of_domain, // EDOM
|
||||
bad_address, // EFAULT
|
||||
bad_file_descriptor, // EBADF
|
||||
bad_message, // EBADMSG
|
||||
broken_pipe, // EPIPE
|
||||
connection_aborted, // ECONNABORTED
|
||||
connection_already_in_progress, // EALREADY
|
||||
connection_refused, // ECONNREFUSED
|
||||
connection_reset, // ECONNRESET
|
||||
cross_device_link, // EXDEV
|
||||
destination_address_required, // EDESTADDRREQ
|
||||
device_or_resource_busy, // EBUSY
|
||||
directory_not_empty, // ENOTEMPTY
|
||||
executable_format_error, // ENOEXEC
|
||||
file_exists, // EEXIST
|
||||
file_too_large, // EFBIG
|
||||
filename_too_long, // ENAMETOOLONG
|
||||
function_not_supported, // ENOSYS
|
||||
host_unreachable, // EHOSTUNREACH
|
||||
identifier_removed, // EIDRM
|
||||
illegal_byte_sequence, // EILSEQ
|
||||
inappropriate_io_control_operation, // ENOTTY
|
||||
interrupted, // EINTR
|
||||
invalid_argument, // EINVAL
|
||||
invalid_seek, // ESPIPE
|
||||
io_error, // EIO
|
||||
is_a_directory, // EISDIR
|
||||
message_size, // EMSGSIZE
|
||||
network_down, // ENETDOWN
|
||||
network_reset, // ENETRESET
|
||||
network_unreachable, // ENETUNREACH
|
||||
no_buffer_space, // ENOBUFS
|
||||
no_child_process, // ECHILD
|
||||
no_link, // ENOLINK
|
||||
no_lock_available, // ENOLCK
|
||||
no_message_available, // ENODATA
|
||||
no_message, // ENOMSG
|
||||
no_protocol_option, // ENOPROTOOPT
|
||||
no_space_on_device, // ENOSPC
|
||||
no_stream_resources, // ENOSR
|
||||
no_such_device_or_address, // ENXIO
|
||||
no_such_device, // ENODEV
|
||||
no_such_file_or_directory, // ENOENT
|
||||
no_such_process, // ESRCH
|
||||
not_a_directory, // ENOTDIR
|
||||
not_a_socket, // ENOTSOCK
|
||||
not_a_stream, // ENOSTR
|
||||
not_connected, // ENOTCONN
|
||||
not_enough_memory, // ENOMEM
|
||||
not_supported, // ENOTSUP
|
||||
operation_canceled, // ECANCELED
|
||||
operation_in_progress, // EINPROGRESS
|
||||
operation_not_permitted, // EPERM
|
||||
operation_not_supported, // EOPNOTSUPP
|
||||
operation_would_block, // EWOULDBLOCK
|
||||
owner_dead, // EOWNERDEAD
|
||||
permission_denied, // EACCES
|
||||
protocol_error, // EPROTO
|
||||
protocol_not_supported, // EPROTONOSUPPORT
|
||||
read_only_file_system, // EROFS
|
||||
resource_deadlock_would_occur, // EDEADLK
|
||||
resource_unavailable_try_again, // EAGAIN
|
||||
result_out_of_range, // ERANGE
|
||||
state_not_recoverable, // ENOTRECOVERABLE
|
||||
stream_timeout, // ETIME
|
||||
text_file_busy, // ETXTBSY
|
||||
timed_out, // ETIMEDOUT
|
||||
too_many_files_open_in_system, // ENFILE
|
||||
too_many_files_open, // EMFILE
|
||||
too_many_links, // EMLINK
|
||||
too_many_symbolic_link_levels, // ELOOP
|
||||
value_too_large, // EOVERFLOW
|
||||
wrong_protocol_type // EPROTOTYPE
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
#include <__config>
|
||||
#include <cerrno>
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
|
||||
// Some error codes are not present on all platforms, so we provide equivalents
|
||||
// for them:
|
||||
|
||||
//enum class errc
|
||||
_LIBCPP_DECLARE_STRONG_ENUM(errc) // [jart]
|
||||
{
|
||||
address_family_not_supported ,//= EAFNOSUPPORT,
|
||||
address_in_use ,//= EADDRINUSE,
|
||||
address_not_available ,//= EADDRNOTAVAIL,
|
||||
already_connected ,//= EISCONN,
|
||||
argument_list_too_long ,//= E2BIG,
|
||||
argument_out_of_domain ,//= EDOM,
|
||||
bad_address ,//= EFAULT,
|
||||
bad_file_descriptor ,//= EBADF,
|
||||
bad_message ,//= EBADMSG,
|
||||
broken_pipe ,//= EPIPE,
|
||||
connection_aborted ,//= ECONNABORTED,
|
||||
connection_already_in_progress ,//= EALREADY,
|
||||
connection_refused ,//= ECONNREFUSED,
|
||||
connection_reset ,//= ECONNRESET,
|
||||
cross_device_link ,//= EXDEV,
|
||||
destination_address_required ,//= EDESTADDRREQ,
|
||||
device_or_resource_busy ,//= EBUSY,
|
||||
directory_not_empty ,//= ENOTEMPTY,
|
||||
executable_format_error ,//= ENOEXEC,
|
||||
file_exists ,//= EEXIST,
|
||||
file_too_large ,//= EFBIG,
|
||||
filename_too_long ,//= ENAMETOOLONG,
|
||||
function_not_supported ,//= ENOSYS,
|
||||
host_unreachable ,//= EHOSTUNREACH,
|
||||
identifier_removed ,//= EIDRM,
|
||||
illegal_byte_sequence ,//= EILSEQ,
|
||||
inappropriate_io_control_operation ,//= ENOTTY,
|
||||
interrupted ,//= EINTR,
|
||||
invalid_argument ,//= EINVAL,
|
||||
invalid_seek ,//= ESPIPE,
|
||||
io_error ,//= EIO,
|
||||
is_a_directory ,//= EISDIR,
|
||||
message_size ,//= EMSGSIZE,
|
||||
network_down ,//= ENETDOWN,
|
||||
network_reset ,//= ENETRESET,
|
||||
network_unreachable ,//= ENETUNREACH,
|
||||
no_buffer_space ,//= ENOBUFS,
|
||||
no_child_process ,//= ECHILD,
|
||||
no_link ,//= ENOLINK,
|
||||
no_lock_available ,//= ENOLCK,
|
||||
#ifdef ENODATA
|
||||
no_message_available ,//= ENODATA,
|
||||
#else
|
||||
no_message_available ,//= ENOMSG,
|
||||
#endif
|
||||
no_message ,//= ENOMSG,
|
||||
no_protocol_option ,//= ENOPROTOOPT,
|
||||
no_space_on_device ,//= ENOSPC,
|
||||
#ifdef ENOSR
|
||||
no_stream_resources ,//= ENOSR,
|
||||
#else
|
||||
no_stream_resources ,//= ENOMEM,
|
||||
#endif
|
||||
no_such_device_or_address ,//= ENXIO,
|
||||
no_such_device ,//= ENODEV,
|
||||
no_such_file_or_directory ,//= ENOENT,
|
||||
no_such_process ,//= ESRCH,
|
||||
not_a_directory ,//= ENOTDIR,
|
||||
not_a_socket ,//= ENOTSOCK,
|
||||
#ifdef ENOSTR
|
||||
not_a_stream ,//= ENOSTR,
|
||||
#else
|
||||
not_a_stream ,//= EINVAL,
|
||||
#endif
|
||||
not_connected ,//= ENOTCONN,
|
||||
not_enough_memory ,//= ENOMEM,
|
||||
not_supported ,//= ENOTSUP,
|
||||
operation_canceled ,//= ECANCELED,
|
||||
operation_in_progress ,//= EINPROGRESS,
|
||||
operation_not_permitted ,//= EPERM,
|
||||
operation_not_supported ,//= EOPNOTSUPP,
|
||||
operation_would_block ,//= EWOULDBLOCK,
|
||||
owner_dead ,//= EOWNERDEAD,
|
||||
permission_denied ,//= EACCES,
|
||||
protocol_error ,//= EPROTO,
|
||||
protocol_not_supported ,//= EPROTONOSUPPORT,
|
||||
read_only_file_system ,//= EROFS,
|
||||
resource_deadlock_would_occur ,//= EDEADLK,
|
||||
resource_unavailable_try_again ,//= EAGAIN,
|
||||
result_out_of_range ,//= ERANGE,
|
||||
state_not_recoverable ,//= ENOTRECOVERABLE,
|
||||
#ifdef ETIME
|
||||
stream_timeout ,//= ETIME,
|
||||
#else
|
||||
stream_timeout ,//= ETIMEDOUT,
|
||||
#endif
|
||||
text_file_busy ,//= ETXTBSY,
|
||||
timed_out ,//= ETIMEDOUT,
|
||||
too_many_files_open_in_system ,//= ENFILE,
|
||||
too_many_files_open ,//= EMFILE,
|
||||
too_many_links ,//= EMLINK,
|
||||
too_many_symbolic_link_levels ,//= ELOOP,
|
||||
value_too_large ,//= EOVERFLOW,
|
||||
wrong_protocol_type ,//= EPROTOTYPE
|
||||
};
|
||||
_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(errc)
|
||||
|
||||
_LIBCPP_END_NAMESPACE_STD
|
||||
|
||||
#endif // _LIBCPP___ERRC
|
75
third_party/libcxx/__system_error/error_category.h
vendored
Normal file
75
third_party/libcxx/__system_error/error_category.h
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
// -*- C++ -*-
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef _LIBCPP___SYSTEM_ERROR_ERROR_CATEGORY_H
|
||||
#define _LIBCPP___SYSTEM_ERROR_ERROR_CATEGORY_H
|
||||
|
||||
#include <__compare/ordering.h>
|
||||
#include <__config>
|
||||
#include <string>
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
|
||||
class _LIBCPP_TYPE_VIS error_condition;
|
||||
class _LIBCPP_TYPE_VIS error_code;
|
||||
|
||||
class _LIBCPP_HIDDEN __do_message;
|
||||
|
||||
class _LIBCPP_TYPE_VIS error_category {
|
||||
public:
|
||||
virtual ~error_category() _NOEXCEPT;
|
||||
|
||||
#if defined(_LIBCPP_ERROR_CATEGORY_DEFINE_LEGACY_INLINE_FUNCTIONS)
|
||||
error_category() noexcept;
|
||||
#else
|
||||
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 error_category() _NOEXCEPT = default;
|
||||
#endif
|
||||
error_category(const error_category&) = delete;
|
||||
error_category& operator=(const error_category&) = delete;
|
||||
|
||||
virtual const char* name() const _NOEXCEPT = 0;
|
||||
virtual error_condition default_error_condition(int __ev) const _NOEXCEPT;
|
||||
virtual bool equivalent(int __code, const error_condition& __condition) const _NOEXCEPT;
|
||||
virtual bool equivalent(const error_code& __code, int __condition) const _NOEXCEPT;
|
||||
virtual string message(int __ev) const = 0;
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI bool operator==(const error_category& __rhs) const _NOEXCEPT { return this == &__rhs; }
|
||||
|
||||
#if _LIBCPP_STD_VER >= 20
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI strong_ordering operator<=>(const error_category& __rhs) const noexcept {
|
||||
return compare_three_way()(this, std::addressof(__rhs));
|
||||
}
|
||||
|
||||
#else // _LIBCPP_STD_VER >= 20
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI bool operator!=(const error_category& __rhs) const _NOEXCEPT { return !(*this == __rhs); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI bool operator<(const error_category& __rhs) const _NOEXCEPT { return this < &__rhs; }
|
||||
|
||||
#endif // _LIBCPP_STD_VER >= 20
|
||||
|
||||
friend class _LIBCPP_HIDDEN __do_message;
|
||||
};
|
||||
|
||||
class _LIBCPP_HIDDEN __do_message : public error_category {
|
||||
public:
|
||||
string message(int __ev) const override;
|
||||
};
|
||||
|
||||
_LIBCPP_FUNC_VIS const error_category& generic_category() _NOEXCEPT;
|
||||
_LIBCPP_FUNC_VIS const error_category& system_category() _NOEXCEPT;
|
||||
|
||||
_LIBCPP_END_NAMESPACE_STD
|
||||
|
||||
#endif // _LIBCPP___SYSTEM_ERROR_ERROR_CATEGORY_H
|
145
third_party/libcxx/__system_error/error_code.h
vendored
Normal file
145
third_party/libcxx/__system_error/error_code.h
vendored
Normal file
|
@ -0,0 +1,145 @@
|
|||
// -*- C++ -*-
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef _LIBCPP___SYSTEM_ERROR_ERROR_CODE_H
|
||||
#define _LIBCPP___SYSTEM_ERROR_ERROR_CODE_H
|
||||
|
||||
#include <__compare/ordering.h>
|
||||
#include <__config>
|
||||
#include <__functional/hash.h>
|
||||
#include <__functional/unary_function.h>
|
||||
#include <__system_error/errc.h>
|
||||
#include <__system_error/error_category.h>
|
||||
#include <__system_error/error_condition.h>
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
|
||||
template <class _Tp>
|
||||
struct _LIBCPP_TEMPLATE_VIS is_error_code_enum : public false_type {};
|
||||
|
||||
#if _LIBCPP_STD_VER >= 17
|
||||
template <class _Tp>
|
||||
inline constexpr bool is_error_code_enum_v = is_error_code_enum<_Tp>::value;
|
||||
#endif
|
||||
|
||||
namespace __adl_only {
|
||||
// Those cause ADL to trigger but they are not viable candidates,
|
||||
// so they are never actually selected.
|
||||
void make_error_code() = delete;
|
||||
} // namespace __adl_only
|
||||
|
||||
class _LIBCPP_TYPE_VIS error_code {
|
||||
int __val_;
|
||||
const error_category* __cat_;
|
||||
|
||||
public:
|
||||
_LIBCPP_HIDE_FROM_ABI error_code() _NOEXCEPT : __val_(0), __cat_(&system_category()) {}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI error_code(int __val, const error_category& __cat) _NOEXCEPT : __val_(__val), __cat_(&__cat) {}
|
||||
|
||||
template <class _Ep>
|
||||
_LIBCPP_HIDE_FROM_ABI
|
||||
error_code(_Ep __e, typename enable_if<is_error_code_enum<_Ep>::value>::type* = nullptr) _NOEXCEPT {
|
||||
using __adl_only::make_error_code;
|
||||
*this = make_error_code(__e);
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void assign(int __val, const error_category& __cat) _NOEXCEPT {
|
||||
__val_ = __val;
|
||||
__cat_ = &__cat;
|
||||
}
|
||||
|
||||
template <class _Ep>
|
||||
_LIBCPP_HIDE_FROM_ABI typename enable_if< is_error_code_enum<_Ep>::value, error_code& >::type
|
||||
operator=(_Ep __e) _NOEXCEPT {
|
||||
using __adl_only::make_error_code;
|
||||
*this = make_error_code(__e);
|
||||
return *this;
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT {
|
||||
__val_ = 0;
|
||||
__cat_ = &system_category();
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI int value() const _NOEXCEPT { return __val_; }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI const error_category& category() const _NOEXCEPT { return *__cat_; }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI error_condition default_error_condition() const _NOEXCEPT {
|
||||
return __cat_->default_error_condition(__val_);
|
||||
}
|
||||
|
||||
string message() const;
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI explicit operator bool() const _NOEXCEPT { return __val_ != 0; }
|
||||
};
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI error_code make_error_code(errc __e) _NOEXCEPT {
|
||||
return error_code(static_cast<int>(__e), generic_category());
|
||||
}
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator==(const error_code& __x, const error_code& __y) _NOEXCEPT {
|
||||
return __x.category() == __y.category() && __x.value() == __y.value();
|
||||
}
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator==(const error_code& __x, const error_condition& __y) _NOEXCEPT {
|
||||
return __x.category().equivalent(__x.value(), __y) || __y.category().equivalent(__x, __y.value());
|
||||
}
|
||||
|
||||
#if _LIBCPP_STD_VER <= 17
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator==(const error_condition& __x, const error_code& __y) _NOEXCEPT {
|
||||
return __y == __x;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if _LIBCPP_STD_VER <= 17
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const error_code& __x, const error_code& __y) _NOEXCEPT {
|
||||
return !(__x == __y);
|
||||
}
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const error_code& __x, const error_condition& __y) _NOEXCEPT {
|
||||
return !(__x == __y);
|
||||
}
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const error_condition& __x, const error_code& __y) _NOEXCEPT {
|
||||
return !(__x == __y);
|
||||
}
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator<(const error_code& __x, const error_code& __y) _NOEXCEPT {
|
||||
return __x.category() < __y.category() || (__x.category() == __y.category() && __x.value() < __y.value());
|
||||
}
|
||||
|
||||
#else // _LIBCPP_STD_VER <= 17
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI strong_ordering operator<=>(const error_code& __x, const error_code& __y) noexcept {
|
||||
if (auto __c = __x.category() <=> __y.category(); __c != 0)
|
||||
return __c;
|
||||
return __x.value() <=> __y.value();
|
||||
}
|
||||
|
||||
#endif // _LIBCPP_STD_VER <= 17
|
||||
|
||||
template <>
|
||||
struct _LIBCPP_TEMPLATE_VIS hash<error_code> : public __unary_function<error_code, size_t> {
|
||||
_LIBCPP_HIDE_FROM_ABI size_t operator()(const error_code& __ec) const _NOEXCEPT {
|
||||
return static_cast<size_t>(__ec.value());
|
||||
}
|
||||
};
|
||||
|
||||
_LIBCPP_END_NAMESPACE_STD
|
||||
|
||||
#endif // _LIBCPP___SYSTEM_ERROR_ERROR_CODE_H
|
131
third_party/libcxx/__system_error/error_condition.h
vendored
Normal file
131
third_party/libcxx/__system_error/error_condition.h
vendored
Normal file
|
@ -0,0 +1,131 @@
|
|||
// -*- C++ -*-
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef _LIBCPP___SYSTEM_ERROR_ERROR_CONDITION_H
|
||||
#define _LIBCPP___SYSTEM_ERROR_ERROR_CONDITION_H
|
||||
|
||||
#include <__compare/ordering.h>
|
||||
#include <__config>
|
||||
#include <__functional/unary_function.h>
|
||||
#include <__system_error/errc.h>
|
||||
#include <__system_error/error_category.h>
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
|
||||
template <class _Tp>
|
||||
struct _LIBCPP_TEMPLATE_VIS is_error_condition_enum : public false_type {};
|
||||
|
||||
#if _LIBCPP_STD_VER >= 17
|
||||
template <class _Tp>
|
||||
inline constexpr bool is_error_condition_enum_v = is_error_condition_enum<_Tp>::value;
|
||||
#endif
|
||||
|
||||
template <>
|
||||
struct _LIBCPP_TEMPLATE_VIS is_error_condition_enum<errc> : true_type {};
|
||||
|
||||
#ifdef _LIBCPP_CXX03_LANG
|
||||
template <>
|
||||
struct _LIBCPP_TEMPLATE_VIS is_error_condition_enum<errc::__lx> : true_type {};
|
||||
#endif
|
||||
|
||||
namespace __adl_only {
|
||||
// Those cause ADL to trigger but they are not viable candidates,
|
||||
// so they are never actually selected.
|
||||
void make_error_condition() = delete;
|
||||
} // namespace __adl_only
|
||||
|
||||
class _LIBCPP_TYPE_VIS error_condition {
|
||||
int __val_;
|
||||
const error_category* __cat_;
|
||||
|
||||
public:
|
||||
_LIBCPP_HIDE_FROM_ABI error_condition() _NOEXCEPT : __val_(0), __cat_(&generic_category()) {}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI error_condition(int __val, const error_category& __cat) _NOEXCEPT
|
||||
: __val_(__val),
|
||||
__cat_(&__cat) {}
|
||||
|
||||
template <class _Ep>
|
||||
_LIBCPP_HIDE_FROM_ABI
|
||||
error_condition(_Ep __e, typename enable_if<is_error_condition_enum<_Ep>::value>::type* = nullptr) _NOEXCEPT {
|
||||
using __adl_only::make_error_condition;
|
||||
*this = make_error_condition(__e);
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void assign(int __val, const error_category& __cat) _NOEXCEPT {
|
||||
__val_ = __val;
|
||||
__cat_ = &__cat;
|
||||
}
|
||||
|
||||
template <class _Ep>
|
||||
_LIBCPP_HIDE_FROM_ABI typename enable_if< is_error_condition_enum<_Ep>::value, error_condition& >::type
|
||||
operator=(_Ep __e) _NOEXCEPT {
|
||||
using __adl_only::make_error_condition;
|
||||
*this = make_error_condition(__e);
|
||||
return *this;
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT {
|
||||
__val_ = 0;
|
||||
__cat_ = &generic_category();
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI int value() const _NOEXCEPT { return __val_; }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI const error_category& category() const _NOEXCEPT { return *__cat_; }
|
||||
string message() const;
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI explicit operator bool() const _NOEXCEPT { return __val_ != 0; }
|
||||
};
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI error_condition make_error_condition(errc __e) _NOEXCEPT {
|
||||
return error_condition(static_cast<int>(__e), generic_category());
|
||||
}
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator==(const error_condition& __x, const error_condition& __y) _NOEXCEPT {
|
||||
return __x.category() == __y.category() && __x.value() == __y.value();
|
||||
}
|
||||
|
||||
#if _LIBCPP_STD_VER <= 17
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const error_condition& __x, const error_condition& __y) _NOEXCEPT {
|
||||
return !(__x == __y);
|
||||
}
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI bool operator<(const error_condition& __x, const error_condition& __y) _NOEXCEPT {
|
||||
return __x.category() < __y.category() || (__x.category() == __y.category() && __x.value() < __y.value());
|
||||
}
|
||||
|
||||
#else // _LIBCPP_STD_VER <= 17
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI strong_ordering
|
||||
operator<=>(const error_condition& __x, const error_condition& __y) noexcept {
|
||||
if (auto __c = __x.category() <=> __y.category(); __c != 0)
|
||||
return __c;
|
||||
return __x.value() <=> __y.value();
|
||||
}
|
||||
|
||||
#endif // _LIBCPP_STD_VER <= 17
|
||||
|
||||
template <>
|
||||
struct _LIBCPP_TEMPLATE_VIS hash<error_condition> : public __unary_function<error_condition, size_t> {
|
||||
_LIBCPP_HIDE_FROM_ABI size_t operator()(const error_condition& __ec) const _NOEXCEPT {
|
||||
return static_cast<size_t>(__ec.value());
|
||||
}
|
||||
};
|
||||
|
||||
_LIBCPP_END_NAMESPACE_STD
|
||||
|
||||
#endif // _LIBCPP___SYSTEM_ERROR_ERROR_CONDITION_H
|
48
third_party/libcxx/__system_error/system_error.h
vendored
Normal file
48
third_party/libcxx/__system_error/system_error.h
vendored
Normal file
|
@ -0,0 +1,48 @@
|
|||
// -*- C++ -*-
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef _LIBCPP___SYSTEM_ERROR_SYSTEM_ERROR_H
|
||||
#define _LIBCPP___SYSTEM_ERROR_SYSTEM_ERROR_H
|
||||
|
||||
#include <__config>
|
||||
#include <__system_error/error_category.h>
|
||||
#include <__system_error/error_code.h>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# pragma GCC system_header
|
||||
#endif
|
||||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
|
||||
class _LIBCPP_TYPE_VIS system_error : public runtime_error {
|
||||
error_code __ec_;
|
||||
|
||||
public:
|
||||
system_error(error_code __ec, const string& __what_arg);
|
||||
system_error(error_code __ec, const char* __what_arg);
|
||||
system_error(error_code __ec);
|
||||
system_error(int __ev, const error_category& __ecat, const string& __what_arg);
|
||||
system_error(int __ev, const error_category& __ecat, const char* __what_arg);
|
||||
system_error(int __ev, const error_category& __ecat);
|
||||
_LIBCPP_HIDE_FROM_ABI system_error(const system_error&) _NOEXCEPT = default;
|
||||
~system_error() _NOEXCEPT override;
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI const error_code& code() const _NOEXCEPT { return __ec_; }
|
||||
|
||||
private:
|
||||
static string __init(const error_code&, string);
|
||||
};
|
||||
|
||||
_LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_system_error(int __ev, const char* __what_arg);
|
||||
|
||||
_LIBCPP_END_NAMESPACE_STD
|
||||
|
||||
#endif // _LIBCPP___SYSTEM_ERROR_SYSTEM_ERROR_H
|
Loading…
Add table
Add a link
Reference in a new issue